From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752894AbdC0WwR (ORCPT ); Mon, 27 Mar 2017 18:52:17 -0400 Received: from mga09.intel.com ([134.134.136.24]:3520 "EHLO mga09.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752766AbdC0WwG (ORCPT ); Mon, 27 Mar 2017 18:52:06 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.36,234,1486454400"; d="scan'208";a="65719347" Subject: Re: [PATCH v6 1/3] drm_fourcc: Add new P010, P016 video format To: Ayaka , Ander Conselvan De Oliveira References: <1488708033-5691-1-git-send-email-ayaka@soulik.info> <1488708033-5691-2-git-send-email-ayaka@soulik.info> <20170306130609.GT31595@intel.com> <20170306183434.GV31595@intel.com> <1489499621.2338.6.camel@gmail.com> Cc: =?UTF-8?B?VmlsbGUgU3lyasOkbMOk?= , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, mchehab@kernel.org, linux-media@vger.kernel.org From: Clint Taylor Message-ID: <08d62dbf-7520-1e9e-fc48-fe983e6c7737@intel.com> Date: Mon, 27 Mar 2017 15:49:38 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.5.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/26/2017 09:05 PM, Ayaka wrote: > > > 從我的 iPad 傳送 > >> Ander Conselvan De Oliveira 於 2017年3月14日 下午9:53 寫道: >> >>> On Tue, 2017-03-07 at 04:27 +0800, Ayaka wrote: >>> >>> 從我的 iPad 傳送 >>> >>>>> Ville Syrjälä 於 2017年3月7日 上午2:34 寫道: >>>>> >>>>> On Tue, Mar 07, 2017 at 01:58:23AM +0800, Ayaka wrote: >>>>> >>>>> >>>>> 從我的 iPad 傳送 >>>>> >>>>>>> Ville Syrjälä 於 2017年3月6日 下午9:06 寫道: >>>>>>> >>>>>>> On Sun, Mar 05, 2017 at 06:00:31PM +0800, Randy Li wrote: >>>>>>> P010 is a planar 4:2:0 YUV with interleaved UV plane, 10 bits >>>>>>> per channel video format. >>>>>>> >>>>>>> P016 is a planar 4:2:0 YUV with interleaved UV plane, 16 bits >>>>>>> per channel video format. >>>>>>> >>>>>>> V3: Added P012 and fixed cpp for P010 >>>>>>> V4: format definition refined per review >>>>>>> V5: Format comment block for each new pixel format >>>>>>> V6: reversed Cb/Cr order in comments >>>>>>> v7: reversed Cb/Cr order in comments of header files, remove >>>>>>> the wrong part of commit message. >>>>>> >>>>>> What? Why? You just undid what Clint did in v6. >>>>> >>>>> He missed a file also keeping the wrong description of rockchip. >>>> >>>> I don't follow. Who missed what exactly? >>> >>> What he sent is v5, I increase the order number twice in the message, it confuse me as well. >>> I think Clint forgot the include/uapi/drm/drm_fourcc.h . >> >> Clint did send a v6, and that updates "include/uapi/drm/drm_fourcc.h": >> >> https://patchwork.freedesktop.org/patch/141342/ > Oh, yes but he still used Cr:Cb, but I think it should be Cb:Cr > since I think the V is after the U. From the MSDN fourcc website: "If the combined U-V array is addressed as an array of DWORDs, the least significant word (LSW) contains the U value and the most significant word (MSW) contains the V value. The stride of the combined U-V plane is equal to the stride of the Y plane. The U-V plane has half as many lines as the Y plane." The LSW contains U and the MSW contains V, hence the Cr:Cb in the comments of the V6 patch. -Clint >> >> >> Ander >> >>>> >>>> >>>>>> >>>>>>> >>>>>>> Cc: Daniel Stone >>>>>>> Cc: Ville Syrjälä >>>>>>> >>>>>>> Signed-off-by: Randy Li >>>>>>> Signed-off-by: Clint Taylor >>>>>>> --- >>>>>>> drivers/gpu/drm/drm_fourcc.c | 3 +++ >>>>>>> include/uapi/drm/drm_fourcc.h | 21 +++++++++++++++++++++ >>>>>>> 2 files changed, 24 insertions(+) >>>>>>> >>>>>>> diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c >>>>>>> index 90d2cc8..3e0fd58 100644 >>>>>>> --- a/drivers/gpu/drm/drm_fourcc.c >>>>>>> +++ b/drivers/gpu/drm/drm_fourcc.c >>>>>>> @@ -165,6 +165,9 @@ const struct drm_format_info *__drm_format_info(u32 format) >>>>>>> { .format = DRM_FORMAT_UYVY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, >>>>>>> { .format = DRM_FORMAT_VYUY, .depth = 0, .num_planes = 1, .cpp = { 2, 0, 0 }, .hsub = 2, .vsub = 1 }, >>>>>>> { .format = DRM_FORMAT_AYUV, .depth = 0, .num_planes = 1, .cpp = { 4, 0, 0 }, .hsub = 1, .vsub = 1 }, >>>>>>> + { .format = DRM_FORMAT_P010, .depth = 0, .num_planes = 2, .cpp = { 2, 4, 0 }, .hsub = 2, .vsub = 2 }, >>>>>>> + { .format = DRM_FORMAT_P012, .depth = 0, .num_planes = 2, .cpp = { 2, 4, 0 }, .hsub = 2, .vsub = 2 }, >>>>>>> + { .format = DRM_FORMAT_P016, .depth = 0, .num_planes = 2, .cpp = { 2, 4, 0 }, .hsub = 2, .vsub = 2 }, >>>>>>> }; >>>>>>> >>>>>>> unsigned int i; >>>>>>> diff --git a/include/uapi/drm/drm_fourcc.h b/include/uapi/drm/drm_fourcc.h >>>>>>> index ef20abb..306f979 100644 >>>>>>> --- a/include/uapi/drm/drm_fourcc.h >>>>>>> +++ b/include/uapi/drm/drm_fourcc.h >>>>>>> @@ -128,6 +128,27 @@ extern "C" { >>>>>>> #define DRM_FORMAT_NV42 fourcc_code('N', 'V', '4', '2') /* non-subsampled Cb:Cr plane */ >>>>>>> >>>>>>> /* >>>>>>> + * 2 plane YCbCr MSB aligned >>>>>>> + * index 0 = Y plane, [15:0] Y:x [10:6] little endian >>>>>>> + * index 1 = Cb:Cr plane, [31:0] Cb:x:Cr:x [10:6:10:6] little endian >>>>>>> + */ >>>>>>> +#define DRM_FORMAT_P010 fourcc_code('P', '0', '1', '0') /* 2x2 subsampled Cb:Cr plane 10 bits per channel */ >>>>>>> + >>>>>>> +/* >>>>>>> + * 2 plane YCbCr MSB aligned >>>>>>> + * index 0 = Y plane, [15:0] Y:x [12:4] little endian >>>>>>> + * index 1 = Cb:Cr plane, [31:0] Cb:x:Cr:x [12:4:12:4] little endian >>>>>>> + */ >>>>>>> +#define DRM_FORMAT_P012 fourcc_code('P', '0', '1', '2') /* 2x2 subsampled Cb:Cr plane 12 bits per channel */ >>>>>>> + >>>>>>> +/* >>>>>>> + * 2 plane YCbCr MSB aligned >>>>>>> + * index 0 = Y plane, [15:0] Y little endian >>>>>>> + * index 1 = Cb:Cr plane, [31:0] Cb:Cr [16:16] little endian >>>>>>> + */ >>>>>>> +#define DRM_FORMAT_P016 fourcc_code('P', '0', '1', '6') /* 2x2 subsampled Cb:Cr plane 16 bits per channel */ >>>>>>> + >>>>>>> +/* >>>>>>> * 3 plane YCbCr >>>>>>> * index 0: Y plane, [7:0] Y >>>>>>> * index 1: Cb plane, [7:0] Cb >>>>>>> -- >>>>>>> 2.7.4 >>>>>> >>>>>> -- >>>>>> Ville Syrjälä >>>>>> Intel OTC >>>> >>>> -- >>>> Ville Syrjälä >>>> Intel OTC >>> >>> _______________________________________________ >>> dri-devel mailing list >>> dri-devel@lists.freedesktop.org >>> https://lists.freedesktop.org/mailman/listinfo/dri-devel > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Clint Taylor Subject: Re: [PATCH v6 1/3] drm_fourcc: Add new P010, P016 video format Date: Mon, 27 Mar 2017 15:49:38 -0700 Message-ID: <08d62dbf-7520-1e9e-fc48-fe983e6c7737@intel.com> References: <1488708033-5691-1-git-send-email-ayaka@soulik.info> <1488708033-5691-2-git-send-email-ayaka@soulik.info> <20170306130609.GT31595@intel.com> <20170306183434.GV31595@intel.com> <1489499621.2338.6.camel@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0F8AF6E384 for ; Mon, 27 Mar 2017 22:52:05 +0000 (UTC) In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Ayaka , Ander Conselvan De Oliveira Cc: dri-devel@lists.freedesktop.org, mchehab@kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gMDMvMjYvMjAxNyAwOTowNSBQTSwgQXlha2Egd3JvdGU6Cj4KPgo+IOW+nuaIkeeahCBpUGFk IOWCs+mAgQo+Cj4+IEFuZGVyIENvbnNlbHZhbiBEZSBPbGl2ZWlyYSA8Y29uc2VsdmFuMkBnbWFp bC5jb20+IOaWvCAyMDE35bm0M+aciDE05pelIOS4i+WNiDk6NTMg5a+r6YGT77yaCj4+Cj4+PiBP biBUdWUsIDIwMTctMDMtMDcgYXQgMDQ6MjcgKzA4MDAsIEF5YWthIHdyb3RlOgo+Pj4KPj4+IOW+ nuaIkeeahCBpUGFkIOWCs+mAgQo+Pj4KPj4+Pj4gVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJq YWxhQGxpbnV4LmludGVsLmNvbT4g5pa8IDIwMTflubQz5pyIN+aXpSDkuIrljYgyOjM0IOWvq+mB k++8mgo+Pj4+Pgo+Pj4+PiBPbiBUdWUsIE1hciAwNywgMjAxNyBhdCAwMTo1ODoyM0FNICswODAw LCBBeWFrYSB3cm90ZToKPj4+Pj4KPj4+Pj4KPj4+Pj4g5b6e5oiR55qEIGlQYWQg5YKz6YCBCj4+ Pj4+Cj4+Pj4+Pj4gVmlsbGUgU3lyasOkbMOkIDx2aWxsZS5zeXJqYWxhQGxpbnV4LmludGVsLmNv bT4g5pa8IDIwMTflubQz5pyINuaXpSDkuIvljYg5OjA2IOWvq+mBk++8mgo+Pj4+Pj4+Cj4+Pj4+ Pj4gT24gU3VuLCBNYXIgMDUsIDIwMTcgYXQgMDY6MDA6MzFQTSArMDgwMCwgUmFuZHkgTGkgd3Jv dGU6Cj4+Pj4+Pj4gUDAxMCBpcyBhIHBsYW5hciA0OjI6MCBZVVYgd2l0aCBpbnRlcmxlYXZlZCBV ViBwbGFuZSwgMTAgYml0cwo+Pj4+Pj4+IHBlciBjaGFubmVsIHZpZGVvIGZvcm1hdC4KPj4+Pj4+ Pgo+Pj4+Pj4+IFAwMTYgaXMgYSBwbGFuYXIgNDoyOjAgWVVWIHdpdGggaW50ZXJsZWF2ZWQgVVYg cGxhbmUsIDE2IGJpdHMKPj4+Pj4+PiBwZXIgY2hhbm5lbCB2aWRlbyBmb3JtYXQuCj4+Pj4+Pj4K Pj4+Pj4+PiBWMzogQWRkZWQgUDAxMiBhbmQgZml4ZWQgY3BwIGZvciBQMDEwCj4+Pj4+Pj4gVjQ6 IGZvcm1hdCBkZWZpbml0aW9uIHJlZmluZWQgcGVyIHJldmlldwo+Pj4+Pj4+IFY1OiBGb3JtYXQg Y29tbWVudCBibG9jayBmb3IgZWFjaCBuZXcgcGl4ZWwgZm9ybWF0Cj4+Pj4+Pj4gVjY6IHJldmVy c2VkIENiL0NyIG9yZGVyIGluIGNvbW1lbnRzCj4+Pj4+Pj4gdjc6IHJldmVyc2VkIENiL0NyIG9y ZGVyIGluIGNvbW1lbnRzIG9mIGhlYWRlciBmaWxlcywgcmVtb3ZlCj4+Pj4+Pj4gdGhlIHdyb25n IHBhcnQgb2YgY29tbWl0IG1lc3NhZ2UuCj4+Pj4+Pgo+Pj4+Pj4gV2hhdD8gV2h5PyBZb3UganVz dCB1bmRpZCB3aGF0IENsaW50IGRpZCBpbiB2Ni4KPj4+Pj4KPj4+Pj4gSGUgbWlzc2VkIGEgZmls ZSBhbHNvIGtlZXBpbmcgdGhlIHdyb25nIGRlc2NyaXB0aW9uIG9mIHJvY2tjaGlwLgo+Pj4+Cj4+ Pj4gSSBkb24ndCBmb2xsb3cuIFdobyBtaXNzZWQgd2hhdCBleGFjdGx5Pwo+Pj4KPj4+IFdoYXQg aGUgc2VudCBpcyB2NSwgSSBpbmNyZWFzZSB0aGUgb3JkZXIgbnVtYmVyIHR3aWNlIGluIHRoZSBt ZXNzYWdlLCBpdCBjb25mdXNlIG1lIGFzIHdlbGwuCj4+PiBJIHRoaW5rIENsaW50IGZvcmdvdCB0 aGUgaW5jbHVkZS91YXBpL2RybS9kcm1fZm91cmNjLmggLgo+Pgo+PiBDbGludCBkaWQgc2VuZCBh IHY2LCBhbmQgdGhhdCB1cGRhdGVzICJpbmNsdWRlL3VhcGkvZHJtL2RybV9mb3VyY2MuaCI6Cj4+ Cj4+IGh0dHBzOi8vcGF0Y2h3b3JrLmZyZWVkZXNrdG9wLm9yZy9wYXRjaC8xNDEzNDIvCj4gT2gs IHllcyBidXQgaGUgc3RpbGwgdXNlZCBDcjpDYiwgYnV0IEkgdGhpbmsgaXQgc2hvdWxkIGJlIENi OkNyCj4gc2luY2UgSSB0aGluayB0aGUgViBpcyBhZnRlciB0aGUgVS4KCiBGcm9tIHRoZSBNU0RO IGZvdXJjYyB3ZWJzaXRlOgoiSWYgdGhlIGNvbWJpbmVkIFUtViBhcnJheSBpcyBhZGRyZXNzZWQg YXMgYW4gYXJyYXkgb2YgRFdPUkRzLCB0aGUgbGVhc3QgCnNpZ25pZmljYW50IHdvcmQgKExTVykg Y29udGFpbnMgdGhlIFUgdmFsdWUgYW5kIHRoZSBtb3N0IHNpZ25pZmljYW50IAp3b3JkIChNU1cp IGNvbnRhaW5zIHRoZSBWIHZhbHVlLiBUaGUgc3RyaWRlIG9mIHRoZSBjb21iaW5lZCBVLVYgcGxh bmUgaXMgCmVxdWFsIHRvIHRoZSBzdHJpZGUgb2YgdGhlIFkgcGxhbmUuIFRoZSBVLVYgcGxhbmUg aGFzIGhhbGYgYXMgbWFueSBsaW5lcyAKYXMgdGhlIFkgcGxhbmUuIgoKVGhlIExTVyBjb250YWlu cyBVIGFuZCB0aGUgTVNXIGNvbnRhaW5zIFYsIGhlbmNlIHRoZSBDcjpDYiBpbiB0aGUgCmNvbW1l bnRzIG9mIHRoZSBWNiBwYXRjaC4KCi1DbGludAoKPj4KPj4KPj4gQW5kZXIKPj4KPj4+Pgo+Pj4+ Cj4+Pj4+Pgo+Pj4+Pj4+Cj4+Pj4+Pj4gQ2M6IERhbmllbCBTdG9uZSA8ZGFuaWVsQGZvb2lzaGJh ci5vcmc+Cj4+Pj4+Pj4gQ2M6IFZpbGxlIFN5cmrDpGzDpCA8dmlsbGUuc3lyamFsYUBsaW51eC5p bnRlbC5jb20+Cj4+Pj4+Pj4KPj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBSYW5keSBMaSA8YXlha2FA c291bGlrLmluZm8+Cj4+Pj4+Pj4gU2lnbmVkLW9mZi1ieTogQ2xpbnQgVGF5bG9yIDxjbGludG9u LmEudGF5bG9yQGludGVsLmNvbT4KPj4+Pj4+PiAtLS0KPj4+Pj4+PiBkcml2ZXJzL2dwdS9kcm0v ZHJtX2ZvdXJjYy5jICB8ICAzICsrKwo+Pj4+Pj4+IGluY2x1ZGUvdWFwaS9kcm0vZHJtX2ZvdXJj Yy5oIHwgMjEgKysrKysrKysrKysrKysrKysrKysrCj4+Pj4+Pj4gMiBmaWxlcyBjaGFuZ2VkLCAy NCBpbnNlcnRpb25zKCspCj4+Pj4+Pj4KPj4+Pj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2RybV9mb3VyY2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm91cmNjLmMKPj4+Pj4+PiBp bmRleCA5MGQyY2M4Li4zZTBmZDU4IDEwMDY0NAo+Pj4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9kcm1fZm91cmNjLmMKPj4+Pj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvdXJjYy5j Cj4+Pj4+Pj4gQEAgLTE2NSw2ICsxNjUsOSBAQCBjb25zdCBzdHJ1Y3QgZHJtX2Zvcm1hdF9pbmZv ICpfX2RybV9mb3JtYXRfaW5mbyh1MzIgZm9ybWF0KQo+Pj4+Pj4+ICAgICAgeyAuZm9ybWF0ID0g RFJNX0ZPUk1BVF9VWVZZLCAgICAgICAgLmRlcHRoID0gMCwgIC5udW1fcGxhbmVzID0gMSwgLmNw cCA9IHsgMiwgMCwgMCB9LCAuaHN1YiA9IDIsIC52c3ViID0gMSB9LAo+Pj4+Pj4+ICAgICAgeyAu Zm9ybWF0ID0gRFJNX0ZPUk1BVF9WWVVZLCAgICAgICAgLmRlcHRoID0gMCwgIC5udW1fcGxhbmVz ID0gMSwgLmNwcCA9IHsgMiwgMCwgMCB9LCAuaHN1YiA9IDIsIC52c3ViID0gMSB9LAo+Pj4+Pj4+ ICAgICAgeyAuZm9ybWF0ID0gRFJNX0ZPUk1BVF9BWVVWLCAgICAgICAgLmRlcHRoID0gMCwgIC5u dW1fcGxhbmVzID0gMSwgLmNwcCA9IHsgNCwgMCwgMCB9LCAuaHN1YiA9IDEsIC52c3ViID0gMSB9 LAo+Pj4+Pj4+ICsgICAgICAgIHsgLmZvcm1hdCA9IERSTV9GT1JNQVRfUDAxMCwgICAgICAgIC5k ZXB0aCA9IDAsICAubnVtX3BsYW5lcyA9IDIsIC5jcHAgPSB7IDIsIDQsIDAgfSwgLmhzdWIgPSAy LCAudnN1YiA9IDIgfSwKPj4+Pj4+PiArICAgICAgICB7IC5mb3JtYXQgPSBEUk1fRk9STUFUX1Aw MTIsICAgICAgICAuZGVwdGggPSAwLCAgLm51bV9wbGFuZXMgPSAyLCAuY3BwID0geyAyLCA0LCAw IH0sIC5oc3ViID0gMiwgLnZzdWIgPSAyIH0sCj4+Pj4+Pj4gKyAgICAgICAgeyAuZm9ybWF0ID0g RFJNX0ZPUk1BVF9QMDE2LCAgICAgICAgLmRlcHRoID0gMCwgIC5udW1fcGxhbmVzID0gMiwgLmNw cCA9IHsgMiwgNCwgMCB9LCAuaHN1YiA9IDIsIC52c3ViID0gMiB9LAo+Pj4+Pj4+ICB9Owo+Pj4+ Pj4+Cj4+Pj4+Pj4gIHVuc2lnbmVkIGludCBpOwo+Pj4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRl L3VhcGkvZHJtL2RybV9mb3VyY2MuaCBiL2luY2x1ZGUvdWFwaS9kcm0vZHJtX2ZvdXJjYy5oCj4+ Pj4+Pj4gaW5kZXggZWYyMGFiYi4uMzA2Zjk3OSAxMDA2NDQKPj4+Pj4+PiAtLS0gYS9pbmNsdWRl L3VhcGkvZHJtL2RybV9mb3VyY2MuaAo+Pj4+Pj4+ICsrKyBiL2luY2x1ZGUvdWFwaS9kcm0vZHJt X2ZvdXJjYy5oCj4+Pj4+Pj4gQEAgLTEyOCw2ICsxMjgsMjcgQEAgZXh0ZXJuICJDIiB7Cj4+Pj4+ Pj4gI2RlZmluZSBEUk1fRk9STUFUX05WNDIgICAgICAgIGZvdXJjY19jb2RlKCdOJywgJ1YnLCAn NCcsICcyJykgLyogbm9uLXN1YnNhbXBsZWQgQ2I6Q3IgcGxhbmUgKi8KPj4+Pj4+Pgo+Pj4+Pj4+ IC8qCj4+Pj4+Pj4gKyAqIDIgcGxhbmUgWUNiQ3IgTVNCIGFsaWduZWQKPj4+Pj4+PiArICogaW5k ZXggMCA9IFkgcGxhbmUsIFsxNTowXSBZOnggWzEwOjZdIGxpdHRsZSBlbmRpYW4KPj4+Pj4+PiAr ICogaW5kZXggMSA9IENiOkNyIHBsYW5lLCBbMzE6MF0gQ2I6eDpDcjp4IFsxMDo2OjEwOjZdIGxp dHRsZSBlbmRpYW4KPj4+Pj4+PiArICovCj4+Pj4+Pj4gKyNkZWZpbmUgRFJNX0ZPUk1BVF9QMDEw ICAgICAgICBmb3VyY2NfY29kZSgnUCcsICcwJywgJzEnLCAnMCcpIC8qIDJ4MiBzdWJzYW1wbGVk IENiOkNyIHBsYW5lIDEwIGJpdHMgcGVyIGNoYW5uZWwgKi8KPj4+Pj4+PiArCj4+Pj4+Pj4gKy8q Cj4+Pj4+Pj4gKyAqIDIgcGxhbmUgWUNiQ3IgTVNCIGFsaWduZWQKPj4+Pj4+PiArICogaW5kZXgg MCA9IFkgcGxhbmUsIFsxNTowXSBZOnggWzEyOjRdIGxpdHRsZSBlbmRpYW4KPj4+Pj4+PiArICog aW5kZXggMSA9IENiOkNyIHBsYW5lLCBbMzE6MF0gQ2I6eDpDcjp4IFsxMjo0OjEyOjRdIGxpdHRs ZSBlbmRpYW4KPj4+Pj4+PiArICovCj4+Pj4+Pj4gKyNkZWZpbmUgRFJNX0ZPUk1BVF9QMDEyICAg ICAgICBmb3VyY2NfY29kZSgnUCcsICcwJywgJzEnLCAnMicpIC8qIDJ4MiBzdWJzYW1wbGVkIENi OkNyIHBsYW5lIDEyIGJpdHMgcGVyIGNoYW5uZWwgKi8KPj4+Pj4+PiArCj4+Pj4+Pj4gKy8qCj4+ Pj4+Pj4gKyAqIDIgcGxhbmUgWUNiQ3IgTVNCIGFsaWduZWQKPj4+Pj4+PiArICogaW5kZXggMCA9 IFkgcGxhbmUsIFsxNTowXSBZIGxpdHRsZSBlbmRpYW4KPj4+Pj4+PiArICogaW5kZXggMSA9IENi OkNyIHBsYW5lLCBbMzE6MF0gQ2I6Q3IgWzE2OjE2XSBsaXR0bGUgZW5kaWFuCj4+Pj4+Pj4gKyAq Lwo+Pj4+Pj4+ICsjZGVmaW5lIERSTV9GT1JNQVRfUDAxNiAgICAgICAgZm91cmNjX2NvZGUoJ1An LCAnMCcsICcxJywgJzYnKSAvKiAyeDIgc3Vic2FtcGxlZCBDYjpDciBwbGFuZSAxNiBiaXRzIHBl ciBjaGFubmVsICovCj4+Pj4+Pj4gKwo+Pj4+Pj4+ICsvKgo+Pj4+Pj4+ICogMyBwbGFuZSBZQ2JD cgo+Pj4+Pj4+ICogaW5kZXggMDogWSBwbGFuZSwgWzc6MF0gWQo+Pj4+Pj4+ICogaW5kZXggMTog Q2IgcGxhbmUsIFs3OjBdIENiCj4+Pj4+Pj4gLS0KPj4+Pj4+PiAyLjcuNAo+Pj4+Pj4KPj4+Pj4+ IC0tCj4+Pj4+PiBWaWxsZSBTeXJqw6Rsw6QKPj4+Pj4+IEludGVsIE9UQwo+Pj4+Cj4+Pj4gLS0K Pj4+PiBWaWxsZSBTeXJqw6Rsw6QKPj4+PiBJbnRlbCBPVEMKPj4+Cj4+PiBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+Pj4gZHJpLWRldmVsIG1haWxpbmcg bGlzdAo+Pj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+Pj4gaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPgoKX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcg bGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCg==