From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.3 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_PASS,USER_AGENT_MUTT autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C8DE7C282DC for ; Wed, 17 Apr 2019 15:41:30 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 8ABB020674 for ; Wed, 17 Apr 2019 15:41:30 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ffwll.ch header.i=@ffwll.ch header.b="ims/dqb0" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1732804AbfDQPl3 (ORCPT ); Wed, 17 Apr 2019 11:41:29 -0400 Received: from mail-ed1-f50.google.com ([209.85.208.50]:42117 "EHLO mail-ed1-f50.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1732792AbfDQPl1 (ORCPT ); Wed, 17 Apr 2019 11:41:27 -0400 Received: by mail-ed1-f50.google.com with SMTP id x61so21367253edc.9 for ; Wed, 17 Apr 2019 08:41:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=sender:date:from:to:cc:subject:message-id:mail-followup-to :references:mime-version:content-disposition:in-reply-to:user-agent; bh=LSXfHh//D5u79ijZBx0LMvnuNbTygUaZjwukO2ZZAS4=; b=ims/dqb0WQ3UQlzuRVqPOhnSvO+G4uZChM4mkx08AZEkJVf3Dp0gsLNs1qNo6RPtS8 HP2YPM1Rxgy9X+PdbpoXTWcm+cADBXMR9860J2sJN0wSjgGAUTs4XO0308LQ9QASvgOu 7nFdw2bk1SW+yI7z/DBGqnP1ug/Cuod1Yr4XY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:date:from:to:cc:subject:message-id :mail-followup-to:references:mime-version:content-disposition :in-reply-to:user-agent; bh=LSXfHh//D5u79ijZBx0LMvnuNbTygUaZjwukO2ZZAS4=; b=oyCC835fiqLnarI6l7rUItfFMfe/FRhhC2gT/F8RXDfB+BxiaqzYpoVIE1zZtS+Shd wDlv6sAX/Q29Z7ELAMu3Pqe8Cc5rohW8SiH7FelUBfYqGw/V+Tb4qNa88gaFZhgZI1+o X+9CmifUzUB2ccH2JJBdIXEc8w1hr1Er83T5X/cLeUBYJU1f4eLsWL/bMEgTbLOn59u2 AN4//OADrjETjAEA9niihT/BhAZCpc2vH4Mqv94+awQWHZU1fi+2o1u0TfSMqJaiWB4C D0OOGH1ahewhm7eepvyfba29lkuXyWHZMy7nihsibDc5ChyMQ4Rpap6bEnXoOiGdie8c SBWA== X-Gm-Message-State: APjAAAWx1QnE6y7xTfqBh3gRCC73I5iCJBdzKbL1TxqEvxATfoGcndQt O8bv65V+crfjbEJ+wima4qlBuw== X-Google-Smtp-Source: APXvYqwShZ7LD/SRo5pFZ3foEnEU4YEEYDS04MpmUK2nQA/ZD+r3LyqK/vcFeAUhXzc38nHm+Sj/1A== X-Received: by 2002:a17:906:c50:: with SMTP id t16mr239756ejf.296.1555515684521; Wed, 17 Apr 2019 08:41:24 -0700 (PDT) Received: from phenom.ffwll.local ([2a02:168:569e:0:3106:d637:d723:e855]) by smtp.gmail.com with ESMTPSA id w3sm9908308edq.33.2019.04.17.08.41.22 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 17 Apr 2019 08:41:23 -0700 (PDT) Date: Wed, 17 Apr 2019 17:41:21 +0200 From: Daniel Vetter To: Maxime Ripard Cc: Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Mauro Carvalho Chehab , Sakari Ailus , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Hans Verkuil , Laurent Pinchart , Thomas Petazzoni , linux-media@vger.kernel.org Subject: Re: [PATCH 00/20] drm: Split out the formats API and move it to a common place Message-ID: <20190417154121.GJ13337@phenom.ffwll.local> Mail-Followup-To: Maxime Ripard , Daniel Vetter , David Airlie , Maarten Lankhorst , Sean Paul , Mauro Carvalho Chehab , Sakari Ailus , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Hans Verkuil , Laurent Pinchart , Thomas Petazzoni , linux-media@vger.kernel.org References: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: X-Operating-System: Linux phenom 4.19.0-1-amd64 User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Apr 17, 2019 at 09:54:26AM +0200, Maxime Ripard wrote: > Hi, > > DRM comes with an extensive format support to retrieve the various > parameters associated with a given format (such as the subsampling, or the > bits per pixel), as well as some helpers and utilities to ease the driver > development. > > v4l2, on the other side, doesn't provide such facilities, leaving each > driver reimplement a subset of the formats parameters for the one supported > by that particular driver. This leads to a lot of duplication and > boilerplate code in the v4l2 drivers. > > This series tries to address this by moving the DRM format API into lib and > turning it into a more generic API. In order to do this, we've needed to do > some preliminary changes on the DRM drivers, then moved the API and finally > converted a v4l2 driver to give an example of how such library could be > used. > > Let me know what you think, > Maxime > > Changes from RFC: > - Rebased on next > - Fixed the various formats mapping > - Added tags > - Did most of the formats functions as inline functions > - Used a consistent prefix for all the utilities functions > - Fixed the compilation breakages, and did a run of allmodconfig for arm, > arm64 and x86_64 > - Fixed out of array bounds warnings in the image_format_info_block_* > functions > - Added License and copyright headers on missing files > > Maxime Ripard (20): > drm: Remove users of drm_format_num_planes > drm: Remove users of drm_format_(horz|vert)_chroma_subsampling > drm/fourcc: Pass the format_info pointer to drm_format_plane_cpp > drm/fourcc: Pass the format_info pointer to drm_format_plane_width/height > drm: Replace instances of drm_format_info by drm_get_format_info > lib: Add video format information library > drm/fb: Move from drm_format_info to image_format_info > drm/malidp: Convert to generic image format library > drm/client: Convert to generic image format library > drm/exynos: Convert to generic image format library > drm/i915: Convert to generic image format library > drm/ipuv3: Convert to generic image format library > drm/msm: Convert to generic image format library > drm/omap: Convert to generic image format library > drm/rockchip: Convert to generic image format library > drm/tegra: Convert to generic image format library > drm/fourcc: Remove old DRM format API > lib: image-formats: Add v4l2 formats support > lib: image-formats: Add more functions > media: sun6i: Convert to the image format API In the interest of making myself unpopular: Why move this out of drm? We do have a bunch of other such shared helpers already (mostly in drivers/video) for dt videomode and hdmi infoframes, and I'm not super sure that's going better than keeping it maintained in drm. Plus the uapi is already that you include drm_fourcc.h to get at these, dropping the drm prefix isn't going to help I think. Of course we'd need to make it a separate drm_formats.ko (so that v4l can use it without dragging in all of drm), and we need to add some fields for converting to v4l fourcc codes (which are different). But that should be all possible. And I don't think the drm_ prefix in v4l code is a problem, it's actually a feature: It makes it really clear that these are the drm fourcc codes, as allocated in drm_fourcc.h, plus their modifiers, and all that. That allocation authority is also already baked into various khr/ext standards, too. Ofc it'll perpetuate the joke that drm has no meaning anymore as an abbrevation, but oh welp :-) -Daniel > > drivers/gpu/drm/Kconfig | 2 +- > drivers/gpu/drm/amd/amdgpu/amdgpu_fb.c | 4 +- > drivers/gpu/drm/arm/malidp_drv.c | 3 +- > drivers/gpu/drm/arm/malidp_hw.c | 3 +- > drivers/gpu/drm/arm/malidp_mw.c | 2 +- > drivers/gpu/drm/arm/malidp_planes.c | 20 +- > drivers/gpu/drm/armada/armada_fb.c | 3 +- > drivers/gpu/drm/armada/armada_overlay.c | 2 +- > drivers/gpu/drm/armada/armada_plane.c | 2 +- > drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_plane.c | 11 +- > drivers/gpu/drm/bochs/bochs.h | 4 +- > drivers/gpu/drm/bochs/bochs_hw.c | 2 +- > drivers/gpu/drm/drm_client.c | 7 +- > drivers/gpu/drm/drm_fb_cma_helper.c | 4 +- > drivers/gpu/drm/drm_fb_helper.c | 14 +- > drivers/gpu/drm/drm_format_helper.c | 4 +- > drivers/gpu/drm/drm_fourcc.c | 345 +----- > drivers/gpu/drm/drm_framebuffer.c | 10 +- > drivers/gpu/drm/drm_gem_framebuffer_helper.c | 4 +- > drivers/gpu/drm/exynos/exynos_drm_fb.c | 2 +- > drivers/gpu/drm/exynos/exynos_drm_ipp.c | 2 +- > drivers/gpu/drm/exynos/exynos_drm_ipp.h | 4 +- > drivers/gpu/drm/exynos/exynos_drm_scaler.c | 3 +- > drivers/gpu/drm/gma500/framebuffer.c | 4 +- > drivers/gpu/drm/i915/i915_drv.h | 6 +- > drivers/gpu/drm/i915/intel_display.c | 14 +- > drivers/gpu/drm/i915/intel_pm.c | 6 +- > drivers/gpu/drm/i915/intel_sprite.c | 3 +- > drivers/gpu/drm/imx/ipuv3-plane.c | 19 +- > drivers/gpu/drm/mediatek/mtk_drm_fb.c | 8 +- > drivers/gpu/drm/meson/meson_overlay.c | 14 +- > drivers/gpu/drm/msm/disp/dpu1/dpu_formats.c | 11 +- > drivers/gpu/drm/msm/disp/dpu1/dpu_plane.c | 10 +- > drivers/gpu/drm/msm/disp/mdp5/mdp5_crtc.c | 4 +- > drivers/gpu/drm/msm/disp/mdp5/mdp5_plane.c | 25 +- > drivers/gpu/drm/msm/disp/mdp5/mdp5_smp.c | 8 +- > drivers/gpu/drm/msm/msm_fb.c | 18 +- > drivers/gpu/drm/omapdrm/dss/dispc.c | 9 +- > drivers/gpu/drm/omapdrm/omap_fb.c | 15 +- > drivers/gpu/drm/radeon/radeon_fb.c | 4 +- > drivers/gpu/drm/rockchip/rockchip_drm_fb.c | 17 +- > drivers/gpu/drm/rockchip/rockchip_drm_vop.c | 14 +- > drivers/gpu/drm/selftests/Makefile | 3 +- > drivers/gpu/drm/selftests/drm_modeset_selftests.h | 3 +- > drivers/gpu/drm/selftests/test-drm_format.c | 280 +---- > drivers/gpu/drm/selftests/test-drm_modeset_common.h | 3 +- > drivers/gpu/drm/stm/ltdc.c | 2 +- > drivers/gpu/drm/sun4i/sun4i_backend.c | 6 +- > drivers/gpu/drm/sun4i/sun4i_frontend.c | 18 +- > drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 4 +- > drivers/gpu/drm/sun4i/sun8i_vi_scaler.c | 6 +- > drivers/gpu/drm/sun4i/sun8i_vi_scaler.h | 5 +- > drivers/gpu/drm/tegra/fb.c | 14 +- > drivers/gpu/drm/tegra/plane.c | 4 +- > drivers/gpu/drm/vc4/vc4_plane.c | 15 +- > drivers/gpu/drm/zte/zx_plane.c | 6 +- > drivers/gpu/ipu-v3/ipu-pre.c | 3 +- > drivers/gpu/ipu-v3/ipu-prg.c | 3 +- > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.c | 89 +- > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi.h | 49 +- > drivers/media/platform/sunxi/sun6i-csi/sun6i_csi_reg.h | 6 +- > drivers/media/platform/sunxi/sun6i-csi/sun6i_video.c | 11 +- > include/drm/drm_fourcc.h | 219 +--- > include/drm/drm_framebuffer.h | 4 +- > include/drm/drm_mode_config.h | 5 +- > include/linux/image-formats.h | 438 ++++++- > lib/Kconfig | 7 +- > lib/Makefile | 3 +- > lib/image-formats-selftests.c | 325 +++++- > lib/image-formats.c | 717 ++++++++++- > 70 files changed, 1740 insertions(+), 1174 deletions(-) > delete mode 100644 drivers/gpu/drm/selftests/test-drm_format.c > create mode 100644 include/linux/image-formats.h > create mode 100644 lib/image-formats-selftests.c > create mode 100644 lib/image-formats.c > > base-commit: de3c659c83ce88d495f2a36397071fdd0a337345 > -- > git-series 0.9.1 > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 00/20] drm: Split out the formats API and move it to a common place Date: Wed, 17 Apr 2019 17:41:21 +0200 Message-ID: <20190417154121.GJ13337@phenom.ffwll.local> References: Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by gabe.freedesktop.org (Postfix) with ESMTPS id E6C168920A for ; Wed, 17 Apr 2019 15:41:25 +0000 (UTC) Received: by mail-ed1-x533.google.com with SMTP id g6so17427649edc.8 for ; Wed, 17 Apr 2019 08:41:25 -0700 (PDT) Content-Disposition: inline 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: Maxime Ripard Cc: Thomas Petazzoni , David Airlie , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Paul Kocialkowski , Hans Verkuil , Sean Paul , Laurent Pinchart , Sakari Ailus , Daniel Vetter , Mauro Carvalho Chehab , linux-media@vger.kernel.org List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBBcHIgMTcsIDIwMTkgYXQgMDk6NTQ6MjZBTSArMDIwMCwgTWF4aW1lIFJpcGFyZCB3 cm90ZToKPiBIaSwKPiAKPiBEUk0gY29tZXMgd2l0aCBhbiBleHRlbnNpdmUgZm9ybWF0IHN1cHBv cnQgdG8gcmV0cmlldmUgdGhlIHZhcmlvdXMKPiBwYXJhbWV0ZXJzIGFzc29jaWF0ZWQgd2l0aCBh IGdpdmVuIGZvcm1hdCAoc3VjaCBhcyB0aGUgc3Vic2FtcGxpbmcsIG9yIHRoZQo+IGJpdHMgcGVy IHBpeGVsKSwgYXMgd2VsbCBhcyBzb21lIGhlbHBlcnMgYW5kIHV0aWxpdGllcyB0byBlYXNlIHRo ZSBkcml2ZXIKPiBkZXZlbG9wbWVudC4KPiAKPiB2NGwyLCBvbiB0aGUgb3RoZXIgc2lkZSwgZG9l c24ndCBwcm92aWRlIHN1Y2ggZmFjaWxpdGllcywgbGVhdmluZyBlYWNoCj4gZHJpdmVyIHJlaW1w bGVtZW50IGEgc3Vic2V0IG9mIHRoZSBmb3JtYXRzIHBhcmFtZXRlcnMgZm9yIHRoZSBvbmUgc3Vw cG9ydGVkCj4gYnkgdGhhdCBwYXJ0aWN1bGFyIGRyaXZlci4gVGhpcyBsZWFkcyB0byBhIGxvdCBv ZiBkdXBsaWNhdGlvbiBhbmQKPiBib2lsZXJwbGF0ZSBjb2RlIGluIHRoZSB2NGwyIGRyaXZlcnMu Cj4gCj4gVGhpcyBzZXJpZXMgdHJpZXMgdG8gYWRkcmVzcyB0aGlzIGJ5IG1vdmluZyB0aGUgRFJN IGZvcm1hdCBBUEkgaW50byBsaWIgYW5kCj4gdHVybmluZyBpdCBpbnRvIGEgbW9yZSBnZW5lcmlj IEFQSS4gSW4gb3JkZXIgdG8gZG8gdGhpcywgd2UndmUgbmVlZGVkIHRvIGRvCj4gc29tZSBwcmVs aW1pbmFyeSBjaGFuZ2VzIG9uIHRoZSBEUk0gZHJpdmVycywgdGhlbiBtb3ZlZCB0aGUgQVBJIGFu ZCBmaW5hbGx5Cj4gY29udmVydGVkIGEgdjRsMiBkcml2ZXIgdG8gZ2l2ZSBhbiBleGFtcGxlIG9m IGhvdyBzdWNoIGxpYnJhcnkgY291bGQgYmUKPiB1c2VkLgo+IAo+IExldCBtZSBrbm93IHdoYXQg eW91IHRoaW5rLAo+IE1heGltZQo+IAo+IENoYW5nZXMgZnJvbSBSRkM6Cj4gICAtIFJlYmFzZWQg b24gbmV4dAo+ICAgLSBGaXhlZCB0aGUgdmFyaW91cyBmb3JtYXRzIG1hcHBpbmcKPiAgIC0gQWRk ZWQgdGFncwo+ICAgLSBEaWQgbW9zdCBvZiB0aGUgZm9ybWF0cyBmdW5jdGlvbnMgYXMgaW5saW5l IGZ1bmN0aW9ucwo+ICAgLSBVc2VkIGEgY29uc2lzdGVudCBwcmVmaXggZm9yIGFsbCB0aGUgdXRp bGl0aWVzIGZ1bmN0aW9ucwo+ICAgLSBGaXhlZCB0aGUgY29tcGlsYXRpb24gYnJlYWthZ2VzLCBh bmQgZGlkIGEgcnVuIG9mIGFsbG1vZGNvbmZpZyBmb3IgYXJtLAo+ICAgICBhcm02NCBhbmQgeDg2 XzY0Cj4gICAtIEZpeGVkIG91dCBvZiBhcnJheSBib3VuZHMgd2FybmluZ3MgaW4gdGhlIGltYWdl X2Zvcm1hdF9pbmZvX2Jsb2NrXyoKPiAgICAgZnVuY3Rpb25zCj4gICAtIEFkZGVkIExpY2Vuc2Ug YW5kIGNvcHlyaWdodCBoZWFkZXJzIG9uIG1pc3NpbmcgZmlsZXMKPiAKPiBNYXhpbWUgUmlwYXJk ICgyMCk6Cj4gICBkcm06IFJlbW92ZSB1c2VycyBvZiBkcm1fZm9ybWF0X251bV9wbGFuZXMKPiAg IGRybTogUmVtb3ZlIHVzZXJzIG9mIGRybV9mb3JtYXRfKGhvcnp8dmVydClfY2hyb21hX3N1YnNh bXBsaW5nCj4gICBkcm0vZm91cmNjOiBQYXNzIHRoZSBmb3JtYXRfaW5mbyBwb2ludGVyIHRvIGRy bV9mb3JtYXRfcGxhbmVfY3BwCj4gICBkcm0vZm91cmNjOiBQYXNzIHRoZSBmb3JtYXRfaW5mbyBw b2ludGVyIHRvIGRybV9mb3JtYXRfcGxhbmVfd2lkdGgvaGVpZ2h0Cj4gICBkcm06IFJlcGxhY2Ug aW5zdGFuY2VzIG9mIGRybV9mb3JtYXRfaW5mbyBieSBkcm1fZ2V0X2Zvcm1hdF9pbmZvCj4gICBs aWI6IEFkZCB2aWRlbyBmb3JtYXQgaW5mb3JtYXRpb24gbGlicmFyeQo+ICAgZHJtL2ZiOiBNb3Zl IGZyb20gZHJtX2Zvcm1hdF9pbmZvIHRvIGltYWdlX2Zvcm1hdF9pbmZvCj4gICBkcm0vbWFsaWRw OiBDb252ZXJ0IHRvIGdlbmVyaWMgaW1hZ2UgZm9ybWF0IGxpYnJhcnkKPiAgIGRybS9jbGllbnQ6 IENvbnZlcnQgdG8gZ2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ICAgZHJtL2V4eW5vczog Q29udmVydCB0byBnZW5lcmljIGltYWdlIGZvcm1hdCBsaWJyYXJ5Cj4gICBkcm0vaTkxNTogQ29u dmVydCB0byBnZW5lcmljIGltYWdlIGZvcm1hdCBsaWJyYXJ5Cj4gICBkcm0vaXB1djM6IENvbnZl cnQgdG8gZ2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ICAgZHJtL21zbTogQ29udmVydCB0 byBnZW5lcmljIGltYWdlIGZvcm1hdCBsaWJyYXJ5Cj4gICBkcm0vb21hcDogQ29udmVydCB0byBn ZW5lcmljIGltYWdlIGZvcm1hdCBsaWJyYXJ5Cj4gICBkcm0vcm9ja2NoaXA6IENvbnZlcnQgdG8g Z2VuZXJpYyBpbWFnZSBmb3JtYXQgbGlicmFyeQo+ICAgZHJtL3RlZ3JhOiBDb252ZXJ0IHRvIGdl bmVyaWMgaW1hZ2UgZm9ybWF0IGxpYnJhcnkKPiAgIGRybS9mb3VyY2M6IFJlbW92ZSBvbGQgRFJN IGZvcm1hdCBBUEkKPiAgIGxpYjogaW1hZ2UtZm9ybWF0czogQWRkIHY0bDIgZm9ybWF0cyBzdXBw b3J0Cj4gICBsaWI6IGltYWdlLWZvcm1hdHM6IEFkZCBtb3JlIGZ1bmN0aW9ucwo+ICAgbWVkaWE6 IHN1bjZpOiBDb252ZXJ0IHRvIHRoZSBpbWFnZSBmb3JtYXQgQVBJCgpJbiB0aGUgaW50ZXJlc3Qg b2YgbWFraW5nIG15c2VsZiB1bnBvcHVsYXI6IFdoeSBtb3ZlIHRoaXMgb3V0IG9mIGRybT8KCldl IGRvIGhhdmUgYSBidW5jaCBvZiBvdGhlciBzdWNoIHNoYXJlZCBoZWxwZXJzIGFscmVhZHkgKG1v c3RseSBpbgpkcml2ZXJzL3ZpZGVvKSBmb3IgZHQgdmlkZW9tb2RlIGFuZCBoZG1pIGluZm9mcmFt ZXMsIGFuZCBJJ20gbm90IHN1cGVyCnN1cmUgdGhhdCdzIGdvaW5nIGJldHRlciB0aGFuIGtlZXBp bmcgaXQgbWFpbnRhaW5lZCBpbiBkcm0uCgpQbHVzIHRoZSB1YXBpIGlzIGFscmVhZHkgdGhhdCB5 b3UgaW5jbHVkZSBkcm1fZm91cmNjLmggdG8gZ2V0IGF0IHRoZXNlLApkcm9wcGluZyB0aGUgZHJt IHByZWZpeCBpc24ndCBnb2luZyB0byBoZWxwIEkgdGhpbmsuCgpPZiBjb3Vyc2Ugd2UnZCBuZWVk IHRvIG1ha2UgaXQgYSBzZXBhcmF0ZSBkcm1fZm9ybWF0cy5rbyAoc28gdGhhdCB2NGwgY2FuCnVz ZSBpdCB3aXRob3V0IGRyYWdnaW5nIGluIGFsbCBvZiBkcm0pLCBhbmQgd2UgbmVlZCB0byBhZGQg c29tZSBmaWVsZHMgZm9yCmNvbnZlcnRpbmcgdG8gdjRsIGZvdXJjYyBjb2RlcyAod2hpY2ggYXJl IGRpZmZlcmVudCkuIEJ1dCB0aGF0IHNob3VsZCBiZQphbGwgcG9zc2libGUuIEFuZCBJIGRvbid0 IHRoaW5rIHRoZSBkcm1fIHByZWZpeCBpbiB2NGwgY29kZSBpcyBhIHByb2JsZW0sCml0J3MgYWN0 dWFsbHkgYSBmZWF0dXJlOiBJdCBtYWtlcyBpdCByZWFsbHkgY2xlYXIgdGhhdCB0aGVzZSBhcmUg dGhlIGRybQpmb3VyY2MgY29kZXMsIGFzIGFsbG9jYXRlZCBpbiBkcm1fZm91cmNjLmgsIHBsdXMg dGhlaXIgbW9kaWZpZXJzLCBhbmQgYWxsCnRoYXQuIFRoYXQgYWxsb2NhdGlvbiBhdXRob3JpdHkg aXMgYWxzbyBhbHJlYWR5IGJha2VkIGludG8gdmFyaW91cyBraHIvZXh0CnN0YW5kYXJkcywgdG9v LgoKT2ZjIGl0J2xsIHBlcnBldHVhdGUgdGhlIGpva2UgdGhhdCBkcm0gaGFzIG5vIG1lYW5pbmcg YW55bW9yZSBhcyBhbgphYmJyZXZhdGlvbiwgYnV0IG9oIHdlbHAgOi0pCi1EYW5pZWwKCgo+IAo+ ICBkcml2ZXJzL2dwdS9kcm0vS2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDIgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ZiLmMgICAgICAg ICAgICAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm0vbWFsaWRwX2Rydi5jICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtL21hbGlk cF9ody5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJt L2FybS9tYWxpZHBfbXcuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCj4gIGRyaXZl cnMvZ3B1L2RybS9hcm0vbWFsaWRwX3BsYW5lcy5jICAgICAgICAgICAgICAgICAgICB8ICAyMCAr LQo+ICBkcml2ZXJzL2dwdS9kcm0vYXJtYWRhL2FybWFkYV9mYi5jICAgICAgICAgICAgICAgICAg ICAgfCAgIDMgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2FybWFkYS9hcm1hZGFfb3ZlcmxheS5jICAg ICAgICAgICAgICAgIHwgICAyICstCj4gIGRyaXZlcnMvZ3B1L2RybS9hcm1hZGEvYXJtYWRhX3Bs YW5lLmMgICAgICAgICAgICAgICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vYXRtZWwt aGxjZGMvYXRtZWxfaGxjZGNfcGxhbmUuYyAgICAgICAgfCAgMTEgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL2JvY2hzL2JvY2hzLmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA0ICstCj4gIGRy aXZlcnMvZ3B1L2RybS9ib2Nocy9ib2Noc19ody5jICAgICAgICAgICAgICAgICAgICAgICB8ICAg MiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2NsaWVudC5jICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgIDcgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9mYl9jbWFfaGVscGVyLmMgICAg ICAgICAgICAgICAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fZmJfaGVscGVy LmMgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJt X2Zvcm1hdF9oZWxwZXIuYyAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9n cHUvZHJtL2RybV9mb3VyY2MuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgMzQ1ICstLS0t LQo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2ZyYW1lYnVmZmVyLmMgICAgICAgICAgICAgICAgICAg ICAgfCAgMTAgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2RybV9nZW1fZnJhbWVidWZmZXJfaGVscGVy LmMgICAgICAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2Ry bV9mYi5jICAgICAgICAgICAgICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZXh5bm9z L2V4eW5vc19kcm1faXBwLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KPiAgZHJpdmVycy9ncHUv ZHJtL2V4eW5vcy9leHlub3NfZHJtX2lwcC5oICAgICAgICAgICAgICAgIHwgICA0ICstCj4gIGRy aXZlcnMvZ3B1L2RybS9leHlub3MvZXh5bm9zX2RybV9zY2FsZXIuYyAgICAgICAgICAgICB8ICAg MyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vZ21hNTAwL2ZyYW1lYnVmZmVyLmMgICAgICAgICAgICAg ICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCAgICAgICAg ICAgICAgICAgICAgICAgIHwgICA2ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rp c3BsYXkuYyAgICAgICAgICAgICAgICAgICB8ICAxNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9pbnRlbF9wbS5jICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KPiAgZHJpdmVycy9n cHUvZHJtL2k5MTUvaW50ZWxfc3ByaXRlLmMgICAgICAgICAgICAgICAgICAgIHwgICAzICstCj4g IGRyaXZlcnMvZ3B1L2RybS9pbXgvaXB1djMtcGxhbmUuYyAgICAgICAgICAgICAgICAgICAgICB8 ICAxOSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbWVkaWF0ZWsvbXRrX2RybV9mYi5jICAgICAgICAg ICAgICAgICAgfCAgIDggKy0KPiAgZHJpdmVycy9ncHUvZHJtL21lc29uL21lc29uX292ZXJsYXku YyAgICAgICAgICAgICAgICAgIHwgIDE0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9k cHUxL2RwdV9mb3JtYXRzLmMgICAgICAgICAgICB8ICAxMSArLQo+ICBkcml2ZXJzL2dwdS9kcm0v bXNtL2Rpc3AvZHB1MS9kcHVfcGxhbmUuYyAgICAgICAgICAgICAgfCAgMTAgKy0KPiAgZHJpdmVy cy9ncHUvZHJtL21zbS9kaXNwL21kcDUvbWRwNV9jcnRjLmMgICAgICAgICAgICAgIHwgICA0ICst Cj4gIGRyaXZlcnMvZ3B1L2RybS9tc20vZGlzcC9tZHA1L21kcDVfcGxhbmUuYyAgICAgICAgICAg ICB8ICAyNSArLQo+ICBkcml2ZXJzL2dwdS9kcm0vbXNtL2Rpc3AvbWRwNS9tZHA1X3NtcC5jICAg ICAgICAgICAgICAgfCAgIDggKy0KPiAgZHJpdmVycy9ncHUvZHJtL21zbS9tc21fZmIuYyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwgIDE4ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9vbWFwZHJt L2Rzcy9kaXNwYy5jICAgICAgICAgICAgICAgICAgICB8ICAgOSArLQo+ICBkcml2ZXJzL2dwdS9k cm0vb21hcGRybS9vbWFwX2ZiLmMgICAgICAgICAgICAgICAgICAgICAgfCAgMTUgKy0KPiAgZHJp dmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZmIuYyAgICAgICAgICAgICAgICAgICAgIHwgICA0 ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9yb2NrY2hpcF9kcm1fZmIuYyAgICAgICAg ICAgICB8ICAxNyArLQo+ICBkcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvcm9ja2NoaXBfZHJtX3Zv cC5jICAgICAgICAgICAgfCAgMTQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9NYWtl ZmlsZSAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9zZWxm dGVzdHMvZHJtX21vZGVzZXRfc2VsZnRlc3RzLmggICAgICB8ICAgMyArLQo+ICBkcml2ZXJzL2dw dS9kcm0vc2VsZnRlc3RzL3Rlc3QtZHJtX2Zvcm1hdC5jICAgICAgICAgICAgfCAyODAgKy0tLS0K PiAgZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9tb2Rlc2V0X2NvbW1vbi5oICAg IHwgICAzICstCj4gIGRyaXZlcnMvZ3B1L2RybS9zdG0vbHRkYy5jICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8ICAgMiArLQo+ICBkcml2ZXJzL2dwdS9kcm0vc3VuNGkvc3VuNGlfYmFja2Vu ZC5jICAgICAgICAgICAgICAgICAgfCAgIDYgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1 bjRpX2Zyb250ZW5kLmMgICAgICAgICAgICAgICAgIHwgIDE4ICstCj4gIGRyaXZlcnMvZ3B1L2Ry bS9zdW40aS9zdW44aV92aV9sYXllci5jICAgICAgICAgICAgICAgICB8ICAgNCArLQo+ICBkcml2 ZXJzL2dwdS9kcm0vc3VuNGkvc3VuOGlfdmlfc2NhbGVyLmMgICAgICAgICAgICAgICAgfCAgIDYg Ky0KPiAgZHJpdmVycy9ncHUvZHJtL3N1bjRpL3N1bjhpX3ZpX3NjYWxlci5oICAgICAgICAgICAg ICAgIHwgICA1ICstCj4gIGRyaXZlcnMvZ3B1L2RybS90ZWdyYS9mYi5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAxNCArLQo+ICBkcml2ZXJzL2dwdS9kcm0vdGVncmEvcGxhbmUuYyAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KPiAgZHJpdmVycy9ncHUvZHJtL3ZjNC92 YzRfcGxhbmUuYyAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICstCj4gIGRyaXZlcnMvZ3B1 L2RybS96dGUvenhfcGxhbmUuYyAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQo+ICBk cml2ZXJzL2dwdS9pcHUtdjMvaXB1LXByZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg IDMgKy0KPiAgZHJpdmVycy9ncHUvaXB1LXYzL2lwdS1wcmcuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgICAzICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3Np L3N1bjZpX2NzaS5jICAgICB8ICA4OSArLQo+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3N1bnhp L3N1bjZpLWNzaS9zdW42aV9jc2kuaCAgICAgfCAgNDkgKy0KPiAgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9zdW54aS9zdW42aS1jc2kvc3VuNmlfY3NpX3JlZy5oIHwgICA2ICstCj4gIGRyaXZlcnMv bWVkaWEvcGxhdGZvcm0vc3VueGkvc3VuNmktY3NpL3N1bjZpX3ZpZGVvLmMgICB8ICAxMSArLQo+ ICBpbmNsdWRlL2RybS9kcm1fZm91cmNjLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAyMTkgKy0tLQo+ICBpbmNsdWRlL2RybS9kcm1fZnJhbWVidWZmZXIuaCAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDQgKy0KPiAgaW5jbHVkZS9kcm0vZHJtX21vZGVfY29uZmlnLmggICAg ICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICstCj4gIGluY2x1ZGUvbGludXgvaW1hZ2UtZm9y bWF0cy5oICAgICAgICAgICAgICAgICAgICAgICAgICB8IDQzOCArKysrKystCj4gIGxpYi9LY29u ZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNyArLQo+ ICBsaWIvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDMgKy0KPiAgbGliL2ltYWdlLWZvcm1hdHMtc2VsZnRlc3RzLmMgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgMzI1ICsrKysrLQo+ICBsaWIvaW1hZ2UtZm9ybWF0cy5jICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCA3MTcgKysrKysrKysrKy0KPiAgNzAgZmlsZXMgY2hh bmdlZCwgMTc0MCBpbnNlcnRpb25zKCspLCAxMTc0IGRlbGV0aW9ucygtKQo+ICBkZWxldGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9mb3JtYXQuYwo+ICBj cmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9pbWFnZS1mb3JtYXRzLmgKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGxpYi9pbWFnZS1mb3JtYXRzLXNlbGZ0ZXN0cy5jCj4gIGNyZWF0ZSBtb2Rl IDEwMDY0NCBsaWIvaW1hZ2UtZm9ybWF0cy5jCj4gCj4gYmFzZS1jb21taXQ6IGRlM2M2NTljODNj ZTg4ZDQ5NWYyYTM2Mzk3MDcxZmRkMGEzMzczNDUKPiAtLSAKPiBnaXQtc2VyaWVzIDAuOS4xCj4g X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KPiBkcmktZGV2 ZWwgbWFpbGluZyBsaXN0Cj4gZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBz Oi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVsCgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRl dmVs