Received: by 10.223.185.111 with SMTP id b44csp643485wrg; Fri, 9 Mar 2018 10:53:41 -0800 (PST) X-Google-Smtp-Source: AG47ELt8n6826k7dpSqwIIhHi1n6Tl4TsL9HPVXqB6qLgOnSyG9ETux4MTvy7AgQDLtcpYWTrN1q X-Received: by 2002:a17:902:57db:: with SMTP id g27-v6mr28144339plj.75.1520621621280; Fri, 09 Mar 2018 10:53:41 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520621621; cv=none; d=google.com; s=arc-20160816; b=M3LrdwR6uGgelPdOCVeKiGPyd2pF1OUlH06DCtYSt4WlM4fk8AgrBhgxc9MBeZ10Cm ZT+ajJk06n4Ps/w1E16Ldh7l9+4pjGXRhWq0jP0KAg2FqdQALaFTCy6cGw2JaLpfr8QO e1EgLtz441i2BEdivYDflGlXezOziZxeas0V4apkHeB4So47Dmen7X0gRIOPXl49DxzH u3EGRmT9FYa6C8xEf8E5CY8g0cNnJ3+bQ5jkcUwG3cIqAAKDveFzm0iUMiCiUaRAcMui WmiOpmZBEpAAvVmY8WGRo7/BtjYdusr5WAL2R7sG/2fP4XcwltH3LncZJx1mx0sDinG4 R9hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:organization:references :in-reply-to:date:cc:to:reply-to:from:subject:message-id :arc-authentication-results; bh=hqHaQpHEERqcHbQxwFNVG0IRyPHT6SwYjqo0W/FQogw=; b=SdTHm92FQhwnHaOj36fV4IywqlDHF1w1MpzCvEdNY9bA8YTcvF+EhmHXgXYCGkwqYW RjzULhVbYIHvZu0V8yyAhjy4u902TrpJxABZS0YEHp3zr9fL+R574Re+2kLpPcZRJ7Av t/7UWusPiVXPaK6RmG6GOGM29458lY4aXyrN5hchWBxoY4Gd7AuY8Q+CvCYVMT7M0fKr kZJQPSNYJnLk60kNZpO9QA4Q5Ay6PwbMH7AzDix+FdZly0aKy7xhvdOzm2XR1PsmoTev trS+Bqp1eXWcraGvu6dBs3PAkZNsLVcWtKvMnmwwyhoWGvq3CNabRtxKATbYEFwy2p0f 0yoA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t66si1111705pgc.160.2018.03.09.10.53.26; Fri, 09 Mar 2018 10:53:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932534AbeCISwI (ORCPT + 99 others); Fri, 9 Mar 2018 13:52:08 -0500 Received: from bhuna.collabora.co.uk ([46.235.227.227]:41210 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932072AbeCISwG (ORCPT ); Fri, 9 Mar 2018 13:52:06 -0500 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: nicolas) with ESMTPSA id E0A1C2789BD Message-ID: <1520621519.28064.12.camel@collabora.com> Subject: Re: [PATCH v8 07/13] [media] vb2: mark codec drivers as unordered From: Nicolas Dufresne Reply-To: Nicolas Dufresne To: Gustavo Padovan , linux-media@vger.kernel.org Cc: kernel@collabora.com, Hans Verkuil , Mauro Carvalho Chehab , Shuah Khan , Pawel Osciak , Alexandre Courbot , Sakari Ailus , Brian Starkey , linux-kernel@vger.kernel.org, Gustavo Padovan Date: Fri, 09 Mar 2018 13:51:59 -0500 In-Reply-To: <20180309174920.22373-8-gustavo@padovan.org> References: <20180309174920.22373-1-gustavo@padovan.org> <20180309174920.22373-8-gustavo@padovan.org> Organization: Collabora Ltd. Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-GMiY+zIWHH7xqXuCD+xe" X-Mailer: Evolution 3.26.5 (3.26.5-1.fc27) Mime-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-GMiY+zIWHH7xqXuCD+xe Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Le vendredi 09 mars 2018 =C3=A0 14:49 -0300, Gustavo Padovan a =C3=A9crit : > From: Gustavo Padovan >=20 > In preparation to have full support to explicit fence we are > marking codec as non-ordered preventively. It is easier and safer from an The usage of "codec" is soso .... > uAPI point of view to move from unordered to ordered than the opposite. >=20 > Signed-off-by: Gustavo Padovan > --- > drivers/media/platform/coda/coda-common.c | 1 + > drivers/media/platform/exynos-gsc/gsc-m2m.c | 1 + > drivers/media/platform/exynos4-is/fimc-m2m.c | 1 + > drivers/media/platform/m2m-deinterlace.c | 1 + ... these tree are not codecs. Did you just set all M2M drivers are unordered ? > drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c | 1 + > drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c | 1 + > drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c | 1 + > drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c | 1 + > drivers/media/platform/mx2_emmaprp.c | 1 + > drivers/media/platform/qcom/venus/vdec.c | 1 + > drivers/media/platform/qcom/venus/venc.c | 1 + > drivers/media/platform/rcar_fdp1.c | 1 + > drivers/media/platform/rcar_jpu.c | 1 + > drivers/media/platform/rockchip/rga/rga-buf.c | 1 + > drivers/media/platform/s5p-g2d/g2d.c | 1 + If this 2D blitter driver picks input buffers in random order, we have a serious problem. > drivers/media/platform/s5p-jpeg/jpeg-core.c | 1 + > drivers/media/platform/s5p-mfc/s5p_mfc_dec.c | 1 + > drivers/media/platform/s5p-mfc/s5p_mfc_enc.c | 1 + > drivers/media/platform/sh_veu.c | 1 + > drivers/media/platform/sti/bdisp/bdisp-v4l2.c | 1 + > drivers/media/platform/ti-vpe/vpe.c | 1 + > drivers/media/platform/vim2m.c | 1 + > 22 files changed, 22 insertions(+) >=20 > diff --git a/drivers/media/platform/coda/coda-common.c b/drivers/media/pl= atform/coda/coda-common.c > index 04e35d70ce2e..6deb29fe6eb7 100644 > --- a/drivers/media/platform/coda/coda-common.c > +++ b/drivers/media/platform/coda/coda-common.c > @@ -1649,6 +1649,7 @@ static const struct vb2_ops coda_qops =3D { > .stop_streaming =3D coda_stop_streaming, > .wait_prepare =3D vb2_ops_wait_prepare, > .wait_finish =3D vb2_ops_wait_finish, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int coda_s_ctrl(struct v4l2_ctrl *ctrl) > diff --git a/drivers/media/platform/exynos-gsc/gsc-m2m.c b/drivers/media/= platform/exynos-gsc/gsc-m2m.c > index e9ff27949a91..10c3e4659d38 100644 > --- a/drivers/media/platform/exynos-gsc/gsc-m2m.c > +++ b/drivers/media/platform/exynos-gsc/gsc-m2m.c > @@ -286,6 +286,7 @@ static const struct vb2_ops gsc_m2m_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .stop_streaming =3D gsc_m2m_stop_streaming, > .start_streaming =3D gsc_m2m_start_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int gsc_m2m_querycap(struct file *file, void *fh, > diff --git a/drivers/media/platform/exynos4-is/fimc-m2m.c b/drivers/media= /platform/exynos4-is/fimc-m2m.c > index a19f8b164a47..dfc487a582c0 100644 > --- a/drivers/media/platform/exynos4-is/fimc-m2m.c > +++ b/drivers/media/platform/exynos4-is/fimc-m2m.c > @@ -227,6 +227,7 @@ static const struct vb2_ops fimc_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .stop_streaming =3D stop_streaming, > .start_streaming =3D start_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > /* > diff --git a/drivers/media/platform/m2m-deinterlace.c b/drivers/media/pla= tform/m2m-deinterlace.c > index 1e4195144f39..35a0f45d2a51 100644 > --- a/drivers/media/platform/m2m-deinterlace.c > +++ b/drivers/media/platform/m2m-deinterlace.c > @@ -856,6 +856,7 @@ static const struct vb2_ops deinterlace_qops =3D { > .queue_setup =3D deinterlace_queue_setup, > .buf_prepare =3D deinterlace_buf_prepare, > .buf_queue =3D deinterlace_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c b/drivers/me= dia/platform/mtk-jpeg/mtk_jpeg_core.c > index 226f90886484..34a4b5b2e1b5 100644 > --- a/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c > +++ b/drivers/media/platform/mtk-jpeg/mtk_jpeg_core.c > @@ -764,6 +764,7 @@ static const struct vb2_ops mtk_jpeg_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .start_streaming =3D mtk_jpeg_start_streaming, > .stop_streaming =3D mtk_jpeg_stop_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static void mtk_jpeg_set_dec_src(struct mtk_jpeg_ctx *ctx, > diff --git a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c b/drivers/media= /platform/mtk-mdp/mtk_mdp_m2m.c > index 583d47724ee8..f3bb9f277f55 100644 > --- a/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c > +++ b/drivers/media/platform/mtk-mdp/mtk_mdp_m2m.c > @@ -629,6 +629,7 @@ static const struct vb2_ops mtk_mdp_m2m_qops =3D { > .wait_finish =3D mtk_mdp_ctx_lock, > .stop_streaming =3D mtk_mdp_m2m_stop_streaming, > .start_streaming =3D mtk_mdp_m2m_start_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int mtk_mdp_m2m_querycap(struct file *file, void *fh, > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c b/drivers= /media/platform/mtk-vcodec/mtk_vcodec_dec.c > index 86f0a7134365..4f33e9741248 100644 > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_dec.c > @@ -1445,6 +1445,7 @@ static const struct vb2_ops mtk_vdec_vb2_ops =3D { > .buf_finish =3D vb2ops_vdec_buf_finish, > .start_streaming =3D vb2ops_vdec_start_streaming, > .stop_streaming =3D vb2ops_vdec_stop_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > const struct v4l2_ioctl_ops mtk_vdec_ioctl_ops =3D { > diff --git a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c b/drivers= /media/platform/mtk-vcodec/mtk_vcodec_enc.c > index 1b1a28abbf1f..fd763249d7bd 100644 > --- a/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > +++ b/drivers/media/platform/mtk-vcodec/mtk_vcodec_enc.c > @@ -931,6 +931,7 @@ static const struct vb2_ops mtk_venc_vb2_ops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .start_streaming =3D vb2ops_venc_start_streaming, > .stop_streaming =3D vb2ops_venc_stop_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int mtk_venc_encode_header(void *priv) > diff --git a/drivers/media/platform/mx2_emmaprp.c b/drivers/media/platfor= m/mx2_emmaprp.c > index 5a8eff60e95f..d03becff66cf 100644 > --- a/drivers/media/platform/mx2_emmaprp.c > +++ b/drivers/media/platform/mx2_emmaprp.c > @@ -747,6 +747,7 @@ static const struct vb2_ops emmaprp_qops =3D { > .queue_setup =3D emmaprp_queue_setup, > .buf_prepare =3D emmaprp_buf_prepare, > .buf_queue =3D emmaprp_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/qcom/venus/vdec.c b/drivers/media/pla= tform/qcom/venus/vdec.c > index c9e9576bb08a..20acbfe2150d 100644 > --- a/drivers/media/platform/qcom/venus/vdec.c > +++ b/drivers/media/platform/qcom/venus/vdec.c > @@ -793,6 +793,7 @@ static const struct vb2_ops vdec_vb2_ops =3D { > .start_streaming =3D vdec_start_streaming, > .stop_streaming =3D venus_helper_vb2_stop_streaming, > .buf_queue =3D venus_helper_vb2_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static void vdec_buf_done(struct venus_inst *inst, unsigned int buf_type= , > diff --git a/drivers/media/platform/qcom/venus/venc.c b/drivers/media/pla= tform/qcom/venus/venc.c > index e3a10a852cad..abefae68ce5a 100644 > --- a/drivers/media/platform/qcom/venus/venc.c > +++ b/drivers/media/platform/qcom/venus/venc.c > @@ -982,6 +982,7 @@ static const struct vb2_ops venc_vb2_ops =3D { > .start_streaming =3D venc_start_streaming, > .stop_streaming =3D venus_helper_vb2_stop_streaming, > .buf_queue =3D venus_helper_vb2_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static void venc_buf_done(struct venus_inst *inst, unsigned int buf_type= , > diff --git a/drivers/media/platform/rcar_fdp1.c b/drivers/media/platform/= rcar_fdp1.c > index b13dec3081e5..6a744a9c1738 100644 > --- a/drivers/media/platform/rcar_fdp1.c > +++ b/drivers/media/platform/rcar_fdp1.c > @@ -2040,6 +2040,7 @@ static const struct vb2_ops fdp1_qops =3D { > .stop_streaming =3D fdp1_stop_streaming, > .wait_prepare =3D vb2_ops_wait_prepare, > .wait_finish =3D vb2_ops_wait_finish, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/rcar_jpu.c b/drivers/media/platform/r= car_jpu.c > index f6092ae45912..b4b2e2cf5d1a 100644 > --- a/drivers/media/platform/rcar_jpu.c > +++ b/drivers/media/platform/rcar_jpu.c > @@ -1192,6 +1192,7 @@ static const struct vb2_ops jpu_qops =3D { > .stop_streaming =3D jpu_stop_streaming, > .wait_prepare =3D vb2_ops_wait_prepare, > .wait_finish =3D vb2_ops_wait_finish, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int jpu_queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/rockchip/rga/rga-buf.c b/drivers/medi= a/platform/rockchip/rga/rga-buf.c > index fa1ba98c96dc..48932f34144d 100644 > --- a/drivers/media/platform/rockchip/rga/rga-buf.c > +++ b/drivers/media/platform/rockchip/rga/rga-buf.c > @@ -112,6 +112,7 @@ const struct vb2_ops rga_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .start_streaming =3D rga_buf_start_streaming, > .stop_streaming =3D rga_buf_stop_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > /* RGA MMU is a 1-Level MMU, so it can't be used through the IOMMU API. > diff --git a/drivers/media/platform/s5p-g2d/g2d.c b/drivers/media/platfor= m/s5p-g2d/g2d.c > index 66aa8cf1d048..cb7d916bfc8b 100644 > --- a/drivers/media/platform/s5p-g2d/g2d.c > +++ b/drivers/media/platform/s5p-g2d/g2d.c > @@ -142,6 +142,7 @@ static const struct vb2_ops g2d_qops =3D { > .queue_setup =3D g2d_queue_setup, > .buf_prepare =3D g2d_buf_prepare, > .buf_queue =3D g2d_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/s5p-jpeg/jpeg-core.c b/drivers/media/= platform/s5p-jpeg/jpeg-core.c > index 79b63da27f53..28485e6b9cc8 100644 > --- a/drivers/media/platform/s5p-jpeg/jpeg-core.c > +++ b/drivers/media/platform/s5p-jpeg/jpeg-core.c > @@ -2648,6 +2648,7 @@ static const struct vb2_ops s5p_jpeg_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .start_streaming =3D s5p_jpeg_start_streaming, > .stop_streaming =3D s5p_jpeg_stop_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c b/drivers/media= /platform/s5p-mfc/s5p_mfc_dec.c > index 8937b0af7cb3..369db08dbcae 100644 > --- a/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c > +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_dec.c > @@ -1099,6 +1099,7 @@ static struct vb2_ops s5p_mfc_dec_qops =3D { > .start_streaming =3D s5p_mfc_start_streaming, > .stop_streaming =3D s5p_mfc_stop_streaming, > .buf_queue =3D s5p_mfc_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > const struct s5p_mfc_codec_ops *get_dec_codec_ops(void) > diff --git a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c b/drivers/media= /platform/s5p-mfc/s5p_mfc_enc.c > index 0d5d465561be..fece496c2a8e 100644 > --- a/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c > +++ b/drivers/media/platform/s5p-mfc/s5p_mfc_enc.c > @@ -2036,6 +2036,7 @@ static struct vb2_ops s5p_mfc_enc_qops =3D { > .start_streaming =3D s5p_mfc_start_streaming, > .stop_streaming =3D s5p_mfc_stop_streaming, > .buf_queue =3D s5p_mfc_buf_queue, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > const struct s5p_mfc_codec_ops *get_enc_codec_ops(void) > diff --git a/drivers/media/platform/sh_veu.c b/drivers/media/platform/sh_= veu.c > index 1a0cde017fdf..0682b50a67fc 100644 > --- a/drivers/media/platform/sh_veu.c > +++ b/drivers/media/platform/sh_veu.c > @@ -927,6 +927,7 @@ static const struct vb2_ops sh_veu_qops =3D { > .buf_queue =3D sh_veu_buf_queue, > .wait_prepare =3D vb2_ops_wait_prepare, > .wait_finish =3D vb2_ops_wait_finish, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int sh_veu_queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c b/drivers/medi= a/platform/sti/bdisp/bdisp-v4l2.c > index bf4ca16db440..0cfdc5a67855 100644 > --- a/drivers/media/platform/sti/bdisp/bdisp-v4l2.c > +++ b/drivers/media/platform/sti/bdisp/bdisp-v4l2.c > @@ -535,6 +535,7 @@ static const struct vb2_ops bdisp_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .stop_streaming =3D bdisp_stop_streaming, > .start_streaming =3D bdisp_start_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, > diff --git a/drivers/media/platform/ti-vpe/vpe.c b/drivers/media/platform= /ti-vpe/vpe.c > index e395aa85c8ad..c2d838884e1c 100644 > --- a/drivers/media/platform/ti-vpe/vpe.c > +++ b/drivers/media/platform/ti-vpe/vpe.c > @@ -2202,6 +2202,7 @@ static const struct vb2_ops vpe_qops =3D { > .wait_finish =3D vb2_ops_wait_finish, > .start_streaming =3D vpe_start_streaming, > .stop_streaming =3D vpe_stop_streaming, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, > diff --git a/drivers/media/platform/vim2m.c b/drivers/media/platform/vim2= m.c > index 065483e62db4..e1a54a28b082 100644 > --- a/drivers/media/platform/vim2m.c > +++ b/drivers/media/platform/vim2m.c > @@ -823,6 +823,7 @@ static const struct vb2_ops vim2m_qops =3D { > .stop_streaming =3D vim2m_stop_streaming, > .wait_prepare =3D vb2_ops_wait_prepare, > .wait_finish =3D vb2_ops_wait_finish, > + .is_unordered =3D vb2_ops_set_unordered, > }; > =20 > static int queue_init(void *priv, struct vb2_queue *src_vq, struct vb2_q= ueue *dst_vq) > --=20 > 2.14.3 >=20 >=20 --=-GMiY+zIWHH7xqXuCD+xe Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- iF0EABECAB0WIQSScpfJiL+hb5vvd45xUwItrAaoHAUCWqLXzwAKCRBxUwItrAao HFUCAKCh+UGi0IQ7nYUDHIf9Ja6S0/OsbgCgkT13WlcveVI2QTTrRjma0/IhoqM= =MDqM -----END PGP SIGNATURE----- --=-GMiY+zIWHH7xqXuCD+xe--