Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 11 Aug 2022 16:30:55 +0800
From:      Ganbold Tsagaankhuu <ganbold@gmail.com>
To:        Ganbold Tsagaankhuu <ganbold@freebsd.org>
Cc:        src-committers@freebsd.org, dev-commits-src-all@freebsd.org,  dev-commits-src-main@freebsd.org
Subject:   Re: git: 0b6d133c08fc - main - Add RockChip RK356X support to existing RockChip thermal driver.
Message-ID:  <CAGtf9xO0c54EaB02t5CkuXtbm6s2ktPiETDcmkH6aCEd%2BQxBxg@mail.gmail.com>
In-Reply-To: <202208110828.27B8Sxd3003739@gitrepo.freebsd.org>
References:  <202208110828.27B8Sxd3003739@gitrepo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
--0000000000009893db05e5f2fc8b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, Aug 11, 2022 at 4:29 PM Ganbold Tsagaankhuu <ganbold@freebsd.org>
wrote:

> The branch main has been updated by ganbold:
>
> URL:
> https://cgit.FreeBSD.org/src/commit/?id=3D0b6d133c08fcc3ae63228f32429581d=
5764e6fe5
>
> commit 0b6d133c08fcc3ae63228f32429581d5764e6fe5
> Author:     S=C3=B8ren Schmidt <sos@FreeBSD.org>
> AuthorDate: 2022-08-11 08:26:39 +0000
> Commit:     Ganbold Tsagaankhuu <ganbold@FreeBSD.org>
> CommitDate: 2022-08-11 08:26:39 +0000
>
>     Add RockChip RK356X support to existing RockChip thermal driver.
> ---
>  sys/arm64/rockchip/rk_tsadc.c | 118
> +++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 104 insertions(+), 14 deletions(-)
>
> diff --git a/sys/arm64/rockchip/rk_tsadc.c b/sys/arm64/rockchip/rk_tsadc.=
c
> index 9d5d887e27fb..2fdf13a87d79 100644
> --- a/sys/arm64/rockchip/rk_tsadc.c
> +++ b/sys/arm64/rockchip/rk_tsadc.c
> @@ -55,6 +55,11 @@ __FBSDID("$FreeBSD$");
>  #include "syscon_if.h"
>  #include "rk_tsadc_if.h"
>
> +/* Version of HW */
> +#define        TSADC_V2                                1
> +#define        TSADC_V3                                2
> +#define        TSADC_V7                                3
> +
>  /* Global registers */
>  #define        TSADC_USER_CON                          0x000
>  #define        TSADC_AUTO_CON                          0x004
> @@ -78,7 +83,7 @@ __FBSDID("$FreeBSD$");
>  #define        TSADC_COMP0_LOW_INT                     0x080   /* V3 onl=
y
> */
>  #define        TSADC_COMP1_LOW_INT                     0x084   /* V3 onl=
y
> */
>
> -/* GFR Bits */
> +/* V3 GFR registers */
>  #define        GRF_SARADC_TESTBIT                      0x0e644
>  #define         GRF_SARADC_TESTBIT_ON                          (0x10001
> << 2)
>  #define GRF_TSADC_TESTBIT_L                    0x0e648
> @@ -87,6 +92,13 @@ __FBSDID("$FreeBSD$");
>  #define         GRF_TSADC_VCM_EN_H                             (0x10001
> << 7)
>  #define         GRF_TSADC_TESTBIT_H_ON                         (0x10001
> << 2)
>
> +/* V7 GRF register */
> +#define        GRF_TSADC_CON                           0x0600
> +#define         GRF_TSADC_ANA_REG0                     (0x10001 << 0)
> +#define         GRF_TSADC_ANA_REG1                     (0x10001 << 1)
> +#define         GRF_TSADC_ANA_REG2                     (0x10001 << 2)
> +#define         GRF_TSADC_TSEN                         (0x10001 << 8)
> +
>  #define        WR4(_sc, _r, _v)        bus_write_4((_sc)->mem_res, (_r),
> (_v))
>  #define        RD4(_sc, _r)            bus_read_4((_sc)->mem_res, (_r))
>
> @@ -109,7 +121,7 @@ struct tsadc_calib_info {
>  };
>
>  struct tsadc_conf {
> -       int                     use_syscon;
> +       int                     version;
>         int                     q_sel_ntc;
>         int                     shutdown_temp;
>         int                     shutdown_mode;
> @@ -183,7 +195,7 @@ struct tsensor rk3288_tsensors[] =3D {
>  };
>
>  struct tsadc_conf rk3288_tsadc_conf =3D {
> -       .use_syscon =3D           0,
> +       .version =3D              TSADC_V2,
>         .q_sel_ntc =3D            0,
>         .shutdown_temp =3D        95000,
>         .shutdown_mode =3D        1, /* GPIO */
> @@ -237,7 +249,7 @@ static struct tsensor rk3328_tsensors[] =3D {
>  };
>
>  static struct tsadc_conf rk3328_tsadc_conf =3D {
> -       .use_syscon =3D           0,
> +       .version =3D              TSADC_V2,
>         .q_sel_ntc =3D            1,
>         .shutdown_temp =3D        95000,
>         .shutdown_mode =3D        0, /* CRU */
> @@ -293,7 +305,7 @@ static struct tsensor rk3399_tsensors[] =3D {
>  };
>
>  static struct tsadc_conf rk3399_tsadc_conf =3D {
> -       .use_syscon =3D           1,
> +       .version =3D              TSADC_V3,
>         .q_sel_ntc =3D            1,
>         .shutdown_temp =3D        95000,
>         .shutdown_mode =3D        1, /* GPIO */
> @@ -306,10 +318,68 @@ static struct tsadc_conf rk3399_tsadc_conf =3D {
>         }
>  };
>
> +static struct rk_calib_entry rk3568_calib_data[] =3D {
> +       {0, -40000},
> +       {1584, -40000},
> +       {1620, -35000},
> +       {1652, -30000},
> +       {1688, -25000},
> +       {1720, -20000},
> +       {1756, -15000},
> +       {1788, -10000},
> +       {1824, -5000},
> +       {1856, 0},
> +       {1892, 5000},
> +       {1924, 10000},
> +       {1956, 15000},
> +       {1992, 20000},
> +       {2024, 25000},
> +       {2060, 30000},
> +       {2092, 35000},
> +       {2128, 40000},
> +       {2160, 45000},
> +       {2196, 50000},
> +       {2228, 55000},
> +       {2264, 60000},
> +       {2300, 65000},
> +       {2332, 70000},
> +       {2368, 75000},
> +       {2400, 80000},
> +       {2436, 85000},
> +       {2468, 90000},
> +       {2500, 95000},
> +       {2536, 100000},
> +       {2572, 105000},
> +       {2604, 110000},
> +       {2636, 115000},
> +       {2672, 120000},
> +       {2704, 125000},
> +};
> +
> +static struct tsensor rk3568_tsensors[] =3D {
> +       { .channel =3D 0, .id =3D 0, .name =3D "CPU"},
> +       { .channel =3D 1, .id =3D 1, .name =3D "GPU"},
> +};
> +
> +static struct tsadc_conf rk3568_tsadc_conf =3D {
> +       .version =3D              TSADC_V7,
> +       .q_sel_ntc =3D            1,
> +       .shutdown_temp =3D        95000,
> +       .shutdown_mode =3D        1, /* GPIO */
> +       .shutdown_pol =3D         0, /* Low  */
> +       .tsensors =3D             rk3568_tsensors,
> +       .ntsensors =3D            nitems(rk3568_tsensors),
> +       .calib_info =3D   {
> +                       .table =3D rk3568_calib_data,
> +                       .nentries =3D nitems(rk3568_calib_data),
> +       }
> +};
> +
>  static struct ofw_compat_data compat_data[] =3D {
>         {"rockchip,rk3288-tsadc",       (uintptr_t)&rk3288_tsadc_conf},
>         {"rockchip,rk3328-tsadc",       (uintptr_t)&rk3328_tsadc_conf},
>         {"rockchip,rk3399-tsadc",       (uintptr_t)&rk3399_tsadc_conf},
> +       {"rockchip,rk3568-tsadc",       (uintptr_t)&rk3568_tsadc_conf},
>         {NULL,          0}
>  };
>
> @@ -445,13 +515,15 @@ tsadc_init(struct tsadc_softc *sc)
>                 val |=3D TSADC_AUTO_Q_SEL;
>         WR4(sc, TSADC_AUTO_CON, val);
>
> -       if (!sc->conf->use_syscon) {
> +       switch (sc->conf->version) {
> +       case TSADC_V2:
>                 /* V2 init */
>                 WR4(sc, TSADC_AUTO_PERIOD, 250);        /* 250 ms */
>                 WR4(sc, TSADC_AUTO_PERIOD_HT, 50);      /*  50 ms */
>                 WR4(sc, TSADC_HIGHT_INT_DEBOUNCE, 4);
>                 WR4(sc, TSADC_HIGHT_TSHUT_DEBOUNCE, 4);
> -       } else {
> +               break;
> +       case TSADC_V3:
>                 /* V3 init */
>                 if (sc->grf =3D=3D NULL) {
>                         /* Errata: adjust interleave to working value */
> @@ -473,6 +545,26 @@ tsadc_init(struct tsadc_softc *sc)
>                 WR4(sc, TSADC_AUTO_PERIOD_HT, 1875);    /* 2.5 ms */
>                 WR4(sc, TSADC_HIGHT_INT_DEBOUNCE, 4);
>                 WR4(sc, TSADC_HIGHT_TSHUT_DEBOUNCE, 4);
> +               break;
> +       case TSADC_V7:
> +               /* V7 init */
> +               WR4(sc, TSADC_USER_CON, 0xfc0);         /* 97us, at least
> 90us */
> +               WR4(sc, TSADC_AUTO_PERIOD, 1622);       /* 2.5ms */
> +               WR4(sc, TSADC_HIGHT_INT_DEBOUNCE, 4);
> +               WR4(sc, TSADC_AUTO_PERIOD_HT, 1622);    /* 2.5ms */
> +               WR4(sc, TSADC_HIGHT_TSHUT_DEBOUNCE, 4);
> +               if (sc->grf) {
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> GRF_TSADC_TSEN);
> +                       DELAY(15);                      /* 10 usec min */
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> +                           GRF_TSADC_ANA_REG0);
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> +                           GRF_TSADC_ANA_REG1);
> +                       SYSCON_WRITE_4(sc->grf, GRF_TSADC_CON,
> +                           GRF_TSADC_ANA_REG2);
> +                       DELAY(100);                     /* 90 usec min */
> +               }
> +               break;
>         }
>  }
>
> @@ -485,13 +577,11 @@ tsadc_read_temp(struct tsadc_softc *sc, struct
> tsensor *sensor, int *temp)
>         *temp =3D tsadc_raw_to_temp(sc, val);
>
>  #ifdef DEBUG
> -       printf("%s: Sensor(id: %d, ch: %d), temp: %d\n", __func__,
> -           sensor->id, sensor->channel, *temp);
> -       printf(" status: 0x%08X, 0x%08X\n",
> -           RD4(sc, TSADC_USER_CON),
> -           RD4(sc, TSADC_AUTO_CON));
> -       printf(" Data: 0x%08X, 0x%08X, 0x%08X\n",
> -           RD4(sc, TSADC_DATA(sensor->channel)),
> +       device_printf(sc->dev, "%s: Sensor(id: %d, ch: %d), val: %d temp:
> %d\n",
> +           __func__, sensor->id, sensor->channel, val, *temp);
> +       device_printf(sc->dev, "%s: user_con=3D0x%08x auto_con=3D0x%08x "
> +           "comp_int=3D0x%08x comp_shut=3D0x%08x\n",
> +           __func__, RD4(sc, TSADC_USER_CON), RD4(sc, TSADC_AUTO_CON),
>             RD4(sc, TSADC_COMP_INT(sensor->channel)),
>             RD4(sc, TSADC_COMP_SHUT(sensor->channel)));
>  #endif
>
>
Sorry, forgot to include https://reviews.freebsd.org/D36137

Ganbold

--0000000000009893db05e5f2fc8b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: base64

PGRpdiBkaXI9Imx0ciI+PGRpdiBkaXI9Imx0ciI+PGJyPjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJn
bWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIFRodSwgQXVn
IDExLCAyMDIyIGF0IDQ6MjkgUE0gR2FuYm9sZCBUc2FnYWFua2h1dSAmbHQ7PGEgaHJlZj0ibWFp
bHRvOmdhbmJvbGRAZnJlZWJzZC5vcmciPmdhbmJvbGRAZnJlZWJzZC5vcmc8L2E+Jmd0OyB3cm90
ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2lu
OjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xpZCByZ2IoMjA0LDIwNCwyMDQp
O3BhZGRpbmctbGVmdDoxZXgiPlRoZSBicmFuY2ggbWFpbiBoYXMgYmVlbiB1cGRhdGVkIGJ5IGdh
bmJvbGQ6PGJyPg0KPGJyPg0KVVJMOiA8YSBocmVmPSJodHRwczovL2NnaXQuRnJlZUJTRC5vcmcv
c3JjL2NvbW1pdC8/aWQ9MGI2ZDEzM2MwOGZjYzNhZTYzMjI4ZjMyNDI5NTgxZDU3NjRlNmZlNSIg
cmVsPSJub3JlZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9jZ2l0LkZyZWVCU0Qub3Jn
L3NyYy9jb21taXQvP2lkPTBiNmQxMzNjMDhmY2MzYWU2MzIyOGYzMjQyOTU4MWQ1NzY0ZTZmZTU8
L2E+PGJyPg0KPGJyPg0KY29tbWl0IDBiNmQxMzNjMDhmY2MzYWU2MzIyOGYzMjQyOTU4MWQ1NzY0
ZTZmZTU8YnI+DQpBdXRob3I6wqAgwqAgwqBTw7hyZW4gU2NobWlkdCAmbHQ7c29zQEZyZWVCU0Qu
b3JnJmd0Ozxicj4NCkF1dGhvckRhdGU6IDIwMjItMDgtMTEgMDg6MjY6MzkgKzAwMDA8YnI+DQpD
b21taXQ6wqAgwqAgwqBHYW5ib2xkIFRzYWdhYW5raHV1ICZsdDtnYW5ib2xkQEZyZWVCU0Qub3Jn
Jmd0Ozxicj4NCkNvbW1pdERhdGU6IDIwMjItMDgtMTEgMDg6MjY6MzkgKzAwMDA8YnI+DQo8YnI+
DQrCoCDCoCBBZGQgUm9ja0NoaXAgUkszNTZYIHN1cHBvcnQgdG8gZXhpc3RpbmcgUm9ja0NoaXAg
dGhlcm1hbCBkcml2ZXIuPGJyPg0KLS0tPGJyPg0KwqBzeXMvYXJtNjQvcm9ja2NoaXAvcmtfdHNh
ZGMuYyB8IDExOCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS08YnI+
DQrCoDEgZmlsZSBjaGFuZ2VkLCAxMDQgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0pPGJy
Pg0KPGJyPg0KZGlmZiAtLWdpdCBhL3N5cy9hcm02NC9yb2NrY2hpcC9ya190c2FkYy5jIGIvc3lz
L2FybTY0L3JvY2tjaGlwL3JrX3RzYWRjLmM8YnI+DQppbmRleCA5ZDVkODg3ZTI3ZmIuLjJmZGYx
M2E4N2Q3OSAxMDA2NDQ8YnI+DQotLS0gYS9zeXMvYXJtNjQvcm9ja2NoaXAvcmtfdHNhZGMuYzxi
cj4NCisrKyBiL3N5cy9hcm02NC9yb2NrY2hpcC9ya190c2FkYy5jPGJyPg0KQEAgLTU1LDYgKzU1
LDExIEBAIF9fRkJTRElEKCZxdW90OyRGcmVlQlNEJCZxdW90Oyk7PGJyPg0KwqAjaW5jbHVkZSAm
cXVvdDtzeXNjb25faWYuaCZxdW90Ozxicj4NCsKgI2luY2x1ZGUgJnF1b3Q7cmtfdHNhZGNfaWYu
aCZxdW90Ozxicj4NCjxicj4NCisvKiBWZXJzaW9uIG9mIEhXICovPGJyPg0KKyNkZWZpbmXCoCDC
oCDCoCDCoCBUU0FEQ19WMsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIDE8YnI+DQorI2RlZmluZcKgIMKgIMKgIMKgIFRTQURDX1YzwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMjxicj4NCisjZGVmaW5lwqAgwqAgwqAg
wqAgVFNBRENfVjfCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCAzPGJyPg0KKzxicj4NCsKgLyogR2xvYmFsIHJlZ2lzdGVycyAqLzxicj4NCsKgI2RlZmluZcKg
IMKgIMKgIMKgIFRTQURDX1VTRVJfQ09OwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgMHgwMDA8YnI+DQrCoCNkZWZpbmXCoCDCoCDCoCDCoCBUU0FEQ19BVVRPX0NPTsKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIDB4MDA0PGJyPg0KQEAgLTc4LDcgKzgz
LDcgQEAgX19GQlNESUQoJnF1b3Q7JEZyZWVCU0QkJnF1b3Q7KTs8YnI+DQrCoCNkZWZpbmXCoCDC
oCDCoCDCoCBUU0FEQ19DT01QMF9MT1dfSU5UwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAweDA4MMKgIMKgLyogVjMgb25seSAqLzxicj4NCsKgI2RlZmluZcKgIMKgIMKgIMKgIFRTQURD
X0NPTVAxX0xPV19JTlTCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoDB4MDg0wqAgwqAv
KiBWMyBvbmx5ICovPGJyPg0KPGJyPg0KLS8qIEdGUiBCaXRzICovPGJyPg0KKy8qIFYzIEdGUiBy
ZWdpc3RlcnMgKi88YnI+DQrCoCNkZWZpbmXCoCDCoCDCoCDCoCBHUkZfU0FSQURDX1RFU1RCSVTC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAweDBlNjQ0PGJyPg0KwqAjZGVmaW5lwqAg
wqAgwqAgwqAgwqBHUkZfU0FSQURDX1RFU1RCSVRfT07CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCAoMHgxMDAwMSAmbHQ7Jmx0OyAyKTxicj4NCsKgI2RlZmluZSBHUkZfVFNB
RENfVEVTVEJJVF9MwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgMHgwZTY0ODxicj4NCkBA
IC04Nyw2ICs5MiwxMyBAQCBfX0ZCU0RJRCgmcXVvdDskRnJlZUJTRCQmcXVvdDspOzxicj4NCsKg
I2RlZmluZcKgIMKgIMKgIMKgIMKgR1JGX1RTQURDX1ZDTV9FTl9IwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoMHgxMDAwMSAmbHQ7Jmx0OyA3KTxicj4NCsKgI2Rl
ZmluZcKgIMKgIMKgIMKgIMKgR1JGX1RTQURDX1RFU1RCSVRfSF9PTsKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgKDB4MTAwMDEgJmx0OyZsdDsgMik8YnI+DQo8YnI+DQorLyog
VjcgR1JGIHJlZ2lzdGVyICovPGJyPg0KKyNkZWZpbmXCoCDCoCDCoCDCoCBHUkZfVFNBRENfQ09O
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAweDA2MDA8YnI+DQorI2Rl
ZmluZcKgIMKgIMKgIMKgIMKgR1JGX1RTQURDX0FOQV9SRUcwwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqAgwqAgwqAoMHgxMDAwMSAmbHQ7Jmx0OyAwKTxicj4NCisjZGVmaW5lwqAgwqAgwqAgwqAg
wqBHUkZfVFNBRENfQU5BX1JFRzHCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgweDEw
MDAxICZsdDsmbHQ7IDEpPGJyPg0KKyNkZWZpbmXCoCDCoCDCoCDCoCDCoEdSRl9UU0FEQ19BTkFf
UkVHMsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKDB4MTAwMDEgJmx0OyZsdDsgMik8
YnI+DQorI2RlZmluZcKgIMKgIMKgIMKgIMKgR1JGX1RTQURDX1RTRU7CoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCgweDEwMDAxICZsdDsmbHQ7IDgpPGJyPg0KKzxicj4NCsKg
I2RlZmluZcKgIMKgIMKgIMKgIFdSNChfc2MsIF9yLCBfdinCoCDCoCDCoCDCoCBidXNfd3JpdGVf
NCgoX3NjKS0mZ3Q7bWVtX3JlcywgKF9yKSwgKF92KSk8YnI+DQrCoCNkZWZpbmXCoCDCoCDCoCDC
oCBSRDQoX3NjLCBfcinCoCDCoCDCoCDCoCDCoCDCoCBidXNfcmVhZF80KChfc2MpLSZndDttZW1f
cmVzLCAoX3IpKTxicj4NCjxicj4NCkBAIC0xMDksNyArMTIxLDcgQEAgc3RydWN0IHRzYWRjX2Nh
bGliX2luZm8gezxicj4NCsKgfTs8YnI+DQo8YnI+DQrCoHN0cnVjdCB0c2FkY19jb25mIHs8YnI+
DQotwqAgwqAgwqAgwqBpbnTCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoHVzZV9zeXNj
b247PGJyPg0KK8KgIMKgIMKgIMKgaW50wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB2
ZXJzaW9uOzxicj4NCsKgIMKgIMKgIMKgIGludMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgcV9zZWxfbnRjOzxicj4NCsKgIMKgIMKgIMKgIGludMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgc2h1dGRvd25fdGVtcDs8YnI+DQrCoCDCoCDCoCDCoCBpbnTCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoHNodXRkb3duX21vZGU7PGJyPg0KQEAgLTE4Myw3ICsxOTUsNyBA
QCBzdHJ1Y3QgdHNlbnNvciByazMyODhfdHNlbnNvcnNbXSA9IHs8YnI+DQrCoH07PGJyPg0KPGJy
Pg0KwqBzdHJ1Y3QgdHNhZGNfY29uZiByazMyODhfdHNhZGNfY29uZiA9IHs8YnI+DQotwqAgwqAg
wqAgwqAudXNlX3N5c2NvbiA9wqAgwqAgwqAgwqAgwqAgwqAwLDxicj4NCivCoCDCoCDCoCDCoC52
ZXJzaW9uID3CoCDCoCDCoCDCoCDCoCDCoCDCoCBUU0FEQ19WMiw8YnI+DQrCoCDCoCDCoCDCoCAu
cV9zZWxfbnRjID3CoCDCoCDCoCDCoCDCoCDCoCAwLDxicj4NCsKgIMKgIMKgIMKgIC5zaHV0ZG93
bl90ZW1wID3CoCDCoCDCoCDCoCA5NTAwMCw8YnI+DQrCoCDCoCDCoCDCoCAuc2h1dGRvd25fbW9k
ZSA9wqAgwqAgwqAgwqAgMSwgLyogR1BJTyAqLzxicj4NCkBAIC0yMzcsNyArMjQ5LDcgQEAgc3Rh
dGljIHN0cnVjdCB0c2Vuc29yIHJrMzMyOF90c2Vuc29yc1tdID0gezxicj4NCsKgfTs8YnI+DQo8
YnI+DQrCoHN0YXRpYyBzdHJ1Y3QgdHNhZGNfY29uZiByazMzMjhfdHNhZGNfY29uZiA9IHs8YnI+
DQotwqAgwqAgwqAgwqAudXNlX3N5c2NvbiA9wqAgwqAgwqAgwqAgwqAgwqAwLDxicj4NCivCoCDC
oCDCoCDCoC52ZXJzaW9uID3CoCDCoCDCoCDCoCDCoCDCoCDCoCBUU0FEQ19WMiw8YnI+DQrCoCDC
oCDCoCDCoCAucV9zZWxfbnRjID3CoCDCoCDCoCDCoCDCoCDCoCAxLDxicj4NCsKgIMKgIMKgIMKg
IC5zaHV0ZG93bl90ZW1wID3CoCDCoCDCoCDCoCA5NTAwMCw8YnI+DQrCoCDCoCDCoCDCoCAuc2h1
dGRvd25fbW9kZSA9wqAgwqAgwqAgwqAgMCwgLyogQ1JVICovPGJyPg0KQEAgLTI5Myw3ICszMDUs
NyBAQCBzdGF0aWMgc3RydWN0IHRzZW5zb3IgcmszMzk5X3RzZW5zb3JzW10gPSB7PGJyPg0KwqB9
Ozxicj4NCjxicj4NCsKgc3RhdGljIHN0cnVjdCB0c2FkY19jb25mIHJrMzM5OV90c2FkY19jb25m
ID0gezxicj4NCi3CoCDCoCDCoCDCoC51c2Vfc3lzY29uID3CoCDCoCDCoCDCoCDCoCDCoDEsPGJy
Pg0KK8KgIMKgIMKgIMKgLnZlcnNpb24gPcKgIMKgIMKgIMKgIMKgIMKgIMKgIFRTQURDX1YzLDxi
cj4NCsKgIMKgIMKgIMKgIC5xX3NlbF9udGMgPcKgIMKgIMKgIMKgIMKgIMKgIDEsPGJyPg0KwqAg
wqAgwqAgwqAgLnNodXRkb3duX3RlbXAgPcKgIMKgIMKgIMKgIDk1MDAwLDxicj4NCsKgIMKgIMKg
IMKgIC5zaHV0ZG93bl9tb2RlID3CoCDCoCDCoCDCoCAxLCAvKiBHUElPICovPGJyPg0KQEAgLTMw
NiwxMCArMzE4LDY4IEBAIHN0YXRpYyBzdHJ1Y3QgdHNhZGNfY29uZiByazMzOTlfdHNhZGNfY29u
ZiA9IHs8YnI+DQrCoCDCoCDCoCDCoCB9PGJyPg0KwqB9Ozxicj4NCjxicj4NCitzdGF0aWMgc3Ry
dWN0IHJrX2NhbGliX2VudHJ5IHJrMzU2OF9jYWxpYl9kYXRhW10gPSB7PGJyPg0KK8KgIMKgIMKg
IMKgezAsIC00MDAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE1ODQsIC00MDAwMH0sPGJyPg0KK8Kg
IMKgIMKgIMKgezE2MjAsIC0zNTAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE2NTIsIC0zMDAwMH0s
PGJyPg0KK8KgIMKgIMKgIMKgezE2ODgsIC0yNTAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE3MjAs
IC0yMDAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE3NTYsIC0xNTAwMH0sPGJyPg0KK8KgIMKgIMKg
IMKgezE3ODgsIC0xMDAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE4MjQsIC01MDAwfSw8YnI+DQor
wqAgwqAgwqAgwqB7MTg1NiwgMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE4OTIsIDUwMDB9LDxicj4N
CivCoCDCoCDCoCDCoHsxOTI0LCAxMDAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezE5NTYsIDE1MDAw
fSw8YnI+DQorwqAgwqAgwqAgwqB7MTk5MiwgMjAwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsyMDI0
LCAyNTAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezIwNjAsIDMwMDAwfSw8YnI+DQorwqAgwqAgwqAg
wqB7MjA5MiwgMzUwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsyMTI4LCA0MDAwMH0sPGJyPg0KK8Kg
IMKgIMKgIMKgezIxNjAsIDQ1MDAwfSw8YnI+DQorwqAgwqAgwqAgwqB7MjE5NiwgNTAwMDB9LDxi
cj4NCivCoCDCoCDCoCDCoHsyMjI4LCA1NTAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezIyNjQsIDYw
MDAwfSw8YnI+DQorwqAgwqAgwqAgwqB7MjMwMCwgNjUwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsy
MzMyLCA3MDAwMH0sPGJyPg0KK8KgIMKgIMKgIMKgezIzNjgsIDc1MDAwfSw8YnI+DQorwqAgwqAg
wqAgwqB7MjQwMCwgODAwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsyNDM2LCA4NTAwMH0sPGJyPg0K
K8KgIMKgIMKgIMKgezI0NjgsIDkwMDAwfSw8YnI+DQorwqAgwqAgwqAgwqB7MjUwMCwgOTUwMDB9
LDxicj4NCivCoCDCoCDCoCDCoHsyNTM2LCAxMDAwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsyNTcy
LCAxMDUwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsyNjA0LCAxMTAwMDB9LDxicj4NCivCoCDCoCDC
oCDCoHsyNjM2LCAxMTUwMDB9LDxicj4NCivCoCDCoCDCoCDCoHsyNjcyLCAxMjAwMDB9LDxicj4N
CivCoCDCoCDCoCDCoHsyNzA0LCAxMjUwMDB9LDxicj4NCit9Ozxicj4NCis8YnI+DQorc3RhdGlj
IHN0cnVjdCB0c2Vuc29yIHJrMzU2OF90c2Vuc29yc1tdID0gezxicj4NCivCoCDCoCDCoCDCoHsg
LmNoYW5uZWwgPSAwLCAuaWQgPSAwLCAubmFtZSA9ICZxdW90O0NQVSZxdW90O30sPGJyPg0KK8Kg
IMKgIMKgIMKgeyAuY2hhbm5lbCA9IDEsIC5pZCA9IDEsIC5uYW1lID0gJnF1b3Q7R1BVJnF1b3Q7
fSw8YnI+DQorfTs8YnI+DQorPGJyPg0KK3N0YXRpYyBzdHJ1Y3QgdHNhZGNfY29uZiByazM1Njhf
dHNhZGNfY29uZiA9IHs8YnI+DQorwqAgwqAgwqAgwqAudmVyc2lvbiA9wqAgwqAgwqAgwqAgwqAg
wqAgwqAgVFNBRENfVjcsPGJyPg0KK8KgIMKgIMKgIMKgLnFfc2VsX250YyA9wqAgwqAgwqAgwqAg
wqAgwqAgMSw8YnI+DQorwqAgwqAgwqAgwqAuc2h1dGRvd25fdGVtcCA9wqAgwqAgwqAgwqAgOTUw
MDAsPGJyPg0KK8KgIMKgIMKgIMKgLnNodXRkb3duX21vZGUgPcKgIMKgIMKgIMKgIDEsIC8qIEdQ
SU8gKi88YnI+DQorwqAgwqAgwqAgwqAuc2h1dGRvd25fcG9sID3CoCDCoCDCoCDCoCDCoDAsIC8q
IExvd8KgICovPGJyPg0KK8KgIMKgIMKgIMKgLnRzZW5zb3JzID3CoCDCoCDCoCDCoCDCoCDCoCDC
oHJrMzU2OF90c2Vuc29ycyw8YnI+DQorwqAgwqAgwqAgwqAubnRzZW5zb3JzID3CoCDCoCDCoCDC
oCDCoCDCoCBuaXRlbXMocmszNTY4X3RzZW5zb3JzKSw8YnI+DQorwqAgwqAgwqAgwqAuY2FsaWJf
aW5mbyA9wqAgwqB7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLnRh
YmxlID0gcmszNTY4X2NhbGliX2RhdGEsPGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgLm5lbnRyaWVzID0gbml0ZW1zKHJrMzU2OF9jYWxpYl9kYXRhKSw8YnI+DQorwqAg
wqAgwqAgwqB9PGJyPg0KK307PGJyPg0KKzxicj4NCsKgc3RhdGljIHN0cnVjdCBvZndfY29tcGF0
X2RhdGEgY29tcGF0X2RhdGFbXSA9IHs8YnI+DQrCoCDCoCDCoCDCoCB7JnF1b3Q7cm9ja2NoaXAs
cmszMjg4LXRzYWRjJnF1b3Q7LMKgIMKgIMKgIMKgKHVpbnRwdHJfdCkmYW1wO3JrMzI4OF90c2Fk
Y19jb25mfSw8YnI+DQrCoCDCoCDCoCDCoCB7JnF1b3Q7cm9ja2NoaXAscmszMzI4LXRzYWRjJnF1
b3Q7LMKgIMKgIMKgIMKgKHVpbnRwdHJfdCkmYW1wO3JrMzMyOF90c2FkY19jb25mfSw8YnI+DQrC
oCDCoCDCoCDCoCB7JnF1b3Q7cm9ja2NoaXAscmszMzk5LXRzYWRjJnF1b3Q7LMKgIMKgIMKgIMKg
KHVpbnRwdHJfdCkmYW1wO3JrMzM5OV90c2FkY19jb25mfSw8YnI+DQorwqAgwqAgwqAgwqB7JnF1
b3Q7cm9ja2NoaXAscmszNTY4LXRzYWRjJnF1b3Q7LMKgIMKgIMKgIMKgKHVpbnRwdHJfdCkmYW1w
O3JrMzU2OF90c2FkY19jb25mfSw8YnI+DQrCoCDCoCDCoCDCoCB7TlVMTCzCoCDCoCDCoCDCoCDC
oCAwfTxicj4NCsKgfTs8YnI+DQo8YnI+DQpAQCAtNDQ1LDEzICs1MTUsMTUgQEAgdHNhZGNfaW5p
dChzdHJ1Y3QgdHNhZGNfc29mdGMgKnNjKTxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHZh
bCB8PSBUU0FEQ19BVVRPX1FfU0VMOzxicj4NCsKgIMKgIMKgIMKgIFdSNChzYywgVFNBRENfQVVU
T19DT04sIHZhbCk7PGJyPg0KPGJyPg0KLcKgIMKgIMKgIMKgaWYgKCFzYy0mZ3Q7Y29uZi0mZ3Q7
dXNlX3N5c2Nvbikgezxicj4NCivCoCDCoCDCoCDCoHN3aXRjaCAoc2MtJmd0O2NvbmYtJmd0O3Zl
cnNpb24pIHs8YnI+DQorwqAgwqAgwqAgwqBjYXNlIFRTQURDX1YyOjxicj4NCsKgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgIC8qIFYyIGluaXQgKi88YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBX
UjQoc2MsIFRTQURDX0FVVE9fUEVSSU9ELCAyNTApO8KgIMKgIMKgIMKgIC8qIDI1MCBtcyAqLzxi
cj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIFdSNChzYywgVFNBRENfQVVUT19QRVJJT0RfSFQs
IDUwKTvCoCDCoCDCoCAvKsKgIDUwIG1zICovPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
V1I0KHNjLCBUU0FEQ19ISUdIVF9JTlRfREVCT1VOQ0UsIDQpOzxicj4NCsKgIMKgIMKgIMKgIMKg
IMKgIMKgIMKgIFdSNChzYywgVFNBRENfSElHSFRfVFNIVVRfREVCT1VOQ0UsIDQpOzxicj4NCi3C
oCDCoCDCoCDCoH0gZWxzZSB7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJy
Pg0KK8KgIMKgIMKgIMKgY2FzZSBUU0FEQ19WMzo8YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCAvKiBWMyBpbml0ICovPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWYgKHNjLSZndDtn
cmYgPT0gTlVMTCkgezxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIC8q
IEVycmF0YTogYWRqdXN0IGludGVybGVhdmUgdG8gd29ya2luZyB2YWx1ZSAqLzxicj4NCkBAIC00
NzMsNiArNTQ1LDI2IEBAIHRzYWRjX2luaXQoc3RydWN0IHRzYWRjX3NvZnRjICpzYyk8YnI+DQrC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBXUjQoc2MsIFRTQURDX0FVVE9fUEVSSU9EX0hULCAxODc1
KTvCoCDCoCAvKiAyLjUgbXMgKi88YnI+DQrCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBXUjQoc2Ms
IFRTQURDX0hJR0hUX0lOVF9ERUJPVU5DRSwgNCk7PGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgV1I0KHNjLCBUU0FEQ19ISUdIVF9UU0hVVF9ERUJPVU5DRSwgNCk7PGJyPg0KK8KgIMKgIMKg
IMKgIMKgIMKgIMKgIMKgYnJlYWs7PGJyPg0KK8KgIMKgIMKgIMKgY2FzZSBUU0FEQ19WNzo8YnI+
DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAvKiBWNyBpbml0ICovPGJyPg0KK8KgIMKgIMKgIMKg
IMKgIMKgIMKgIMKgV1I0KHNjLCBUU0FEQ19VU0VSX0NPTiwgMHhmYzApO8KgIMKgIMKgIMKgIMKg
LyogOTd1cywgYXQgbGVhc3QgOTB1cyAqLzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoFdS
NChzYywgVFNBRENfQVVUT19QRVJJT0QsIDE2MjIpO8KgIMKgIMKgIMKgLyogMi41bXMgKi88YnI+
DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBXUjQoc2MsIFRTQURDX0hJR0hUX0lOVF9ERUJPVU5D
RSwgNCk7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgV1I0KHNjLCBUU0FEQ19BVVRPX1BF
UklPRF9IVCwgMTYyMik7wqAgwqAgLyogMi41bXMgKi88YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqBXUjQoc2MsIFRTQURDX0hJR0hUX1RTSFVUX0RFQk9VTkNFLCA0KTs8YnI+DQorwqAgwqAg
wqAgwqAgwqAgwqAgwqAgwqBpZiAoc2MtJmd0O2dyZikgezxicj4NCivCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoFNZU0NPTl9XUklURV80KHNjLSZndDtncmYsIEdSRl9UU0FEQ19D
T04sIEdSRl9UU0FEQ19UU0VOKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqBERUxBWSgxNSk7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLyogMTAgdXNl
YyBtaW4gKi88YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBTWVNDT05f
V1JJVEVfNChzYy0mZ3Q7Z3JmLCBHUkZfVFNBRENfQ09OLDxicj4NCivCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoEdSRl9UU0FEQ19BTkFfUkVHMCk7PGJyPg0KK8KgIMKg
IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgU1lTQ09OX1dSSVRFXzQoc2MtJmd0O2dyZiwg
R1JGX1RTQURDX0NPTiw8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg
wqAgwqBHUkZfVFNBRENfQU5BX1JFRzEpOzxicj4NCivCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC
oCDCoCDCoCDCoFNZU0NPTl9XUklURV80KHNjLSZndDtncmYsIEdSRl9UU0FEQ19DT04sPGJyPg0K
K8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgR1JGX1RTQURDX0FOQV9S
RUcyKTs8YnI+DQorwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqBERUxBWSgxMDAp
O8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgLyogOTAgdXNlYyBtaW4gKi88YnI+DQor
wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqB9PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgIMKgIMKgYnJl
YWs7PGJyPg0KwqAgwqAgwqAgwqAgfTxicj4NCsKgfTxicj4NCjxicj4NCkBAIC00ODUsMTMgKzU3
NywxMSBAQCB0c2FkY19yZWFkX3RlbXAoc3RydWN0IHRzYWRjX3NvZnRjICpzYywgc3RydWN0IHRz
ZW5zb3IgKnNlbnNvciwgaW50ICp0ZW1wKTxicj4NCsKgIMKgIMKgIMKgICp0ZW1wID0gdHNhZGNf
cmF3X3RvX3RlbXAoc2MsIHZhbCk7PGJyPg0KPGJyPg0KwqAjaWZkZWYgREVCVUc8YnI+DQotwqAg
wqAgwqAgwqBwcmludGYoJnF1b3Q7JXM6IFNlbnNvcihpZDogJWQsIGNoOiAlZCksIHRlbXA6ICVk
XG4mcXVvdDssIF9fZnVuY19fLDxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoHNlbnNvci0mZ3Q7aWQs
IHNlbnNvci0mZ3Q7Y2hhbm5lbCwgKnRlbXApOzxicj4NCi3CoCDCoCDCoCDCoHByaW50ZigmcXVv
dDsgc3RhdHVzOiAweCUwOFgsIDB4JTA4WFxuJnF1b3Q7LDxicj4NCi3CoCDCoCDCoCDCoCDCoCDC
oFJENChzYywgVFNBRENfVVNFUl9DT04pLDxicj4NCi3CoCDCoCDCoCDCoCDCoCDCoFJENChzYywg
VFNBRENfQVVUT19DT04pKTs8YnI+DQotwqAgwqAgwqAgwqBwcmludGYoJnF1b3Q7IERhdGE6IDB4
JTA4WCwgMHglMDhYLCAweCUwOFhcbiZxdW90Oyw8YnI+DQotwqAgwqAgwqAgwqAgwqAgwqBSRDQo
c2MsIFRTQURDX0RBVEEoc2Vuc29yLSZndDtjaGFubmVsKSksPGJyPg0KK8KgIMKgIMKgIMKgZGV2
aWNlX3ByaW50ZihzYy0mZ3Q7ZGV2LCAmcXVvdDslczogU2Vuc29yKGlkOiAlZCwgY2g6ICVkKSwg
dmFsOiAlZCB0ZW1wOiAlZFxuJnF1b3Q7LDxicj4NCivCoCDCoCDCoCDCoCDCoCDCoF9fZnVuY19f
LCBzZW5zb3ItJmd0O2lkLCBzZW5zb3ItJmd0O2NoYW5uZWwsIHZhbCwgKnRlbXApOzxicj4NCivC
oCDCoCDCoCDCoGRldmljZV9wcmludGYoc2MtJmd0O2RldiwgJnF1b3Q7JXM6IHVzZXJfY29uPTB4
JTA4eCBhdXRvX2Nvbj0weCUwOHggJnF1b3Q7PGJyPg0KK8KgIMKgIMKgIMKgIMKgIMKgJnF1b3Q7
Y29tcF9pbnQ9MHglMDh4IGNvbXBfc2h1dD0weCUwOHhcbiZxdW90Oyw8YnI+DQorwqAgwqAgwqAg
wqAgwqAgwqBfX2Z1bmNfXywgUkQ0KHNjLCBUU0FEQ19VU0VSX0NPTiksIFJENChzYywgVFNBRENf
QVVUT19DT04pLDxicj4NCsKgIMKgIMKgIMKgIMKgIMKgIFJENChzYywgVFNBRENfQ09NUF9JTlQo
c2Vuc29yLSZndDtjaGFubmVsKSksPGJyPg0KwqAgwqAgwqAgwqAgwqAgwqAgUkQ0KHNjLCBUU0FE
Q19DT01QX1NIVVQoc2Vuc29yLSZndDtjaGFubmVsKSkpOzxicj4NCsKgI2VuZGlmPGJyPg0KPGJy
PjwvYmxvY2txdW90ZT48ZGl2Pjxicj48L2Rpdj48ZGl2PlNvcnJ5LCBmb3Jnb3QgdG8gaW5jbHVk
ZSA8YSBocmVmPSJodHRwczovL3Jldmlld3MuZnJlZWJzZC5vcmcvRDM2MTM3Ij5odHRwczovL3Jl
dmlld3MuZnJlZWJzZC5vcmcvRDM2MTM3PC9hPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+R2Fu
Ym9sZDwvZGl2PjxkaXY+PGJyPjwvZGl2PjwvZGl2PjwvZGl2Pg0K
--0000000000009893db05e5f2fc8b--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?CAGtf9xO0c54EaB02t5CkuXtbm6s2ktPiETDcmkH6aCEd%2BQxBxg>