From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from perceval.ideasonboard.com ([213.167.242.64]:36630 "EHLO perceval.ideasonboard.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757592AbeD0VGw (ORCPT ); Fri, 27 Apr 2018 17:06:52 -0400 From: Laurent Pinchart To: Daniel Vetter Cc: dri-devel@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, Kieran Bingham , Ulrich Hecht Subject: igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) Date: Sat, 28 Apr 2018 00:07:04 +0300 Message-ID: <3482108.jirjkbZynl@avalon> In-Reply-To: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-renesas-soc-owner@vger.kernel.org List-ID: Hi Daniel, (Removing the linux-media mailing list from CC as it is out of scope) You enquired on IRC whether this patch series passes the igt CRC tests. # ./kms_pipe_crc_basic --run-subtest read-crc-pipe-A IGT-Version: 1.22-gf447f5fc531d (aarch64) (Linux: 4.17.0-rc1-00085-g56e849d93cc9 aarch64) read-crc-pipe-A: Testing connector LVDS-1 using pipe A (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Test assertion failure function igt_pipe_crc_start, file igt_debugfs.c:764: (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Failed assertion: pipe_crc->crc_fd != -1 (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Last errno: 5, Input/output error Stack trace: Subtest read-crc-pipe-A failed. **** DEBUG **** (kms_pipe_crc_basic:1638) DEBUG: Test requirement passed: !(pipe >= data->display.n_pipes) (kms_pipe_crc_basic:1638) INFO: read-crc-pipe-A: Testing connector LVDS-1 using pipe A (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: set_pipe(A) (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: Selecting pipe A (kms_pipe_crc_basic:1638) DEBUG: Clearing the fb with color (0.00,1.00,0.00) (kms_pipe_crc_basic:1638) igt-fb-DEBUG: igt_create_fb_with_bo_size(width=1024, height=768, format=0x34325258, tiling=0x0, size=0) (kms_pipe_crc_basic:1638) igt-fb-DEBUG: igt_create_fb_with_bo_size(handle=1, pitch=4096) (kms_pipe_crc_basic:1638) igt-kms-DEBUG: Test requirement passed: plane_idx >= 0 && plane_idx < pipe->n_planes (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: plane_set_fb(140) (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: plane_set_size (1024x768) (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: fb_set_position(0,0) (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: A.0: fb_set_size(1024x768) (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: commit { (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: LVDS-1: SetCrtc pipe A, fb 140, src (0, 0), mode 1024x768 (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe A, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 2, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 3, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe A, plane 4, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe B, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 1, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 2, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 3, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe B, plane 4, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe C, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 1, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 2, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 3, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe C, plane 4, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe D, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetCrtc pipe D, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 2, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 3, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: SetPlane pipe D, plane 4, disabling (kms_pipe_crc_basic:1638) igt-kms-DEBUG: display: } (kms_pipe_crc_basic:1638) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (kms_pipe_crc_basic:1638) igt-debugfs-DEBUG: Opening debugfs directory '/sys/kernel/debug/dri/0' (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Test assertion failure function igt_pipe_crc_start, file igt_debugfs.c:764: (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Failed assertion: pipe_crc->crc_fd != -1 (kms_pipe_crc_basic:1638) igt-debugfs-CRITICAL: Last errno: 5, Input/output error (kms_pipe_crc_basic:1638) igt-core-INFO: Stack trace: **** END **** Subtest read-crc-pipe-A: FAIL (0.061s) I think the answer is no, but I don't think it's the fault of this patch series. Opening the CRC data file returns -EIO because the CRTC is not active, and I'm trying to find out why that is the case. The debug log shows a commit that seems strange to me, enabling pipe A and immediately disabling right afterwards. After some investigation I believe that this is caused by sharing primary planes between CRTCs. The R-Car DU groups CRTCs by two and shares 5 planes between the two CRTCs of the group. This specific SoC has two groups of two CRTCs, but that's not relevant here, so we can ignore pipes C and D. Pipes A and B thus shared 5 planes that I will number 0 to 4 for simplicity. The driver sets plane 0 as the primary plane for CRTC A and plane 1 as the primary plane for CRTC B. Planes 2, 3 and 4 are created as overlay planes. When igt iterates over all planes for pipe A, it will first encounter plane 0 that has a framebuffer, and thus enables the pipe. It then iterates over plane 1, recognizes it as a primary plane without a framebuffer, and thus disables the pipe. Planes 2, 3 and 4 are recognized as overlay planes and thus don't affect the pipe active state. Pipe B is handled the same way, and igt disables it twice as planes 0 and 1 are primary. I don't know if the fault here is with igt that doesn't properly support this architecture, or with the driver that shouldn't have two primary planes available for a CRTC. In the former case, I'm not sure how to fix it, as I'm not familiar enough with igt to rearchitecture the commit helpers. In the latter case, how would you recommend fixing it on the driver side ? On Monday, 23 April 2018 01:34:22 EEST Laurent Pinchart wrote: > Hello, > > This patch series adds support for CRC calculation to the rcar-du-drm > driver. > > CRC calculation is supported starting at the Renesas R-Car Gen3 SoCs, as > earlier versions don't have the necessary hardware. On Gen3 SoCs, the CRC is > computed by the DISCOM module part of the VSP-D and VSP-DL. > > The DISCOM is interfaced to the VSP through the UIF glue and appears as a > VSP entity with a sink pad and a source pad. > > The series starts with a switch to SPDX license headers in patch 1/8, > prompted by a checkpatch.pl warning for a later patch that complained about > missing SPDX license headers. It then continues with cleanup and > refactoring. Patches 2/8 and 3/8 prepare for DISCOM and UIF support by > extending generic code to make it usable for the UIF. Patch 4/8 documents a > structure that will receive new fields. > > Patch 5/8 then extends the API exposed by the VSP driver to the DU driver to > support CRC computation configuration and reporting. The patch > unfortunately needs to touch both the VSP and DU drivers, so the whole > series will need to be merged through a single tree. > > Patch 5/8 adds support for the DISCOM and UIF in the VSP driver, patch 7/8 > integrates it in the DRM pipeline, and patch 8/8 finally implements the CRC > API in the DU driver to expose CRC computation to userspace. > > The hardware supports computing the CRC at any arbitrary point in the > pipeline on a configurable window of the frame. This patch series supports > CRC computation on input planes or pipeline output, but on the full frame > only. Support for CRC window configuration can be added later if needed but > will require extending the userspace API, as the DRM/KMS CRC API doesn't > support this feature. > > Compared to v1, the CRC source names for plane inputs are now constructed > from plane IDs instead of plane indices. This allows userspace to match CRC > sources with planes. > > Note that exposing the DISCOM and UIF though the V4L2 API isn't supported as > the module is only found in VSP-D and VSP-DL instances that are not exposed > through V4L2. It is possible to expose those instances through V4L2 with a > small modification to the driver for testing purpose. If the need arises to > test DISCOM and UIF with such an out-of-tree patch, support for CRC > reporting through a V4L2 control can be added later without affecting how > CRC is exposed through the DRM/KMS API. > > The patches are based on top of the "[PATCH v2 00/15] R-Car VSP1: > Dynamically assign blend units to display pipelines" patch series, itself > based on top of the Linux media master branch and scheduled for merge in > v4.18. The new base caused heavy conflicts, requiring this series to be > merged through the V4L2 tree. Once the patches receive the necessary review > I will ask Dave to ack the merge plan. > > For convenience the patches are available at > > git://linuxtv.org/pinchartl/media.git vsp1-discom-v2-20180423 > > The code has been tested through the kms-test-crc.py script part of the DU > test suite available at > > git://git.ideasonboard.com/renesas/kms-tests.git discom > > Laurent Pinchart (8): > v4l: vsp1: Use SPDX license headers > v4l: vsp1: Share the CLU, LIF and LUT set_fmt pad operation code > v4l: vsp1: Reset the crop and compose rectangles in the set_fmt helper > v4l: vsp1: Document the vsp1_du_atomic_config structure > v4l: vsp1: Extend the DU API to support CRC computation > v4l: vsp1: Add support for the DISCOM entity > v4l: vsp1: Integrate DISCOM in display pipeline > drm: rcar-du: Add support for CRC computation > > drivers/gpu/drm/rcar-du/rcar_du_crtc.c | 156 ++++++++++++++++- > drivers/gpu/drm/rcar-du/rcar_du_crtc.h | 19 +++ > drivers/gpu/drm/rcar-du/rcar_du_vsp.c | 13 +- > drivers/media/platform/vsp1/Makefile | 2 +- > drivers/media/platform/vsp1/vsp1.h | 10 +- > drivers/media/platform/vsp1/vsp1_brx.c | 6 +- > drivers/media/platform/vsp1/vsp1_brx.h | 6 +- > drivers/media/platform/vsp1/vsp1_clu.c | 71 ++------ > drivers/media/platform/vsp1/vsp1_clu.h | 6 +- > drivers/media/platform/vsp1/vsp1_dl.c | 8 +- > drivers/media/platform/vsp1/vsp1_dl.h | 6 +- > drivers/media/platform/vsp1/vsp1_drm.c | 127 ++++++++++++-- > drivers/media/platform/vsp1/vsp1_drm.h | 20 ++- > drivers/media/platform/vsp1/vsp1_drv.c | 26 ++- > drivers/media/platform/vsp1/vsp1_entity.c | 103 +++++++++++- > drivers/media/platform/vsp1/vsp1_entity.h | 13 +- > drivers/media/platform/vsp1/vsp1_hgo.c | 6 +- > drivers/media/platform/vsp1/vsp1_hgo.h | 6 +- > drivers/media/platform/vsp1/vsp1_hgt.c | 6 +- > drivers/media/platform/vsp1/vsp1_hgt.h | 6 +- > drivers/media/platform/vsp1/vsp1_histo.c | 65 +------ > drivers/media/platform/vsp1/vsp1_histo.h | 6 +- > drivers/media/platform/vsp1/vsp1_hsit.c | 6 +- > drivers/media/platform/vsp1/vsp1_hsit.h | 6 +- > drivers/media/platform/vsp1/vsp1_lif.c | 71 ++------ > drivers/media/platform/vsp1/vsp1_lif.h | 6 +- > drivers/media/platform/vsp1/vsp1_lut.c | 71 ++------ > drivers/media/platform/vsp1/vsp1_lut.h | 6 +- > drivers/media/platform/vsp1/vsp1_pipe.c | 6 +- > drivers/media/platform/vsp1/vsp1_pipe.h | 6 +- > drivers/media/platform/vsp1/vsp1_regs.h | 46 ++++- > drivers/media/platform/vsp1/vsp1_rpf.c | 6 +- > drivers/media/platform/vsp1/vsp1_rwpf.c | 6 +- > drivers/media/platform/vsp1/vsp1_rwpf.h | 6 +- > drivers/media/platform/vsp1/vsp1_sru.c | 6 +- > drivers/media/platform/vsp1/vsp1_sru.h | 6 +- > drivers/media/platform/vsp1/vsp1_uds.c | 6 +- > drivers/media/platform/vsp1/vsp1_uds.h | 6 +- > drivers/media/platform/vsp1/vsp1_uif.c | 271 +++++++++++++++++++++++++++ > drivers/media/platform/vsp1/vsp1_uif.h | 32 ++++ > drivers/media/platform/vsp1/vsp1_video.c | 6 +- > drivers/media/platform/vsp1/vsp1_video.h | 6 +- > drivers/media/platform/vsp1/vsp1_wpf.c | 6 +- > include/media/vsp1.h | 39 ++++- > 44 files changed, 896 insertions(+), 417 deletions(-) > create mode 100644 drivers/media/platform/vsp1/vsp1_uif.c > create mode 100644 drivers/media/platform/vsp1/vsp1_uif.h -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: igt trouble with planes shared between multiple CRTCs (Re: [PATCH v2 0/8] R-Car DU: Support CRC calculation) Date: Sat, 28 Apr 2018 00:07:04 +0300 Message-ID: <3482108.jirjkbZynl@avalon> References: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0C2866EADB for ; Fri, 27 Apr 2018 21:06:53 +0000 (UTC) In-Reply-To: <20180422223430.16407-1-laurent.pinchart+renesas@ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Daniel Vetter Cc: linux-renesas-soc@vger.kernel.org, Ulrich Hecht , Kieran Bingham , dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org SGkgRGFuaWVsLAoKKFJlbW92aW5nIHRoZSBsaW51eC1tZWRpYSBtYWlsaW5nIGxpc3QgZnJvbSBD QyBhcyBpdCBpcyBvdXQgb2Ygc2NvcGUpCgpZb3UgZW5xdWlyZWQgb24gSVJDIHdoZXRoZXIgdGhp cyBwYXRjaCBzZXJpZXMgcGFzc2VzIHRoZSBpZ3QgQ1JDIHRlc3RzLgoKIyAuL2ttc19waXBlX2Ny Y19iYXNpYyAtLXJ1bi1zdWJ0ZXN0IHJlYWQtY3JjLXBpcGUtQQpJR1QtVmVyc2lvbjogMS4yMi1n ZjQ0N2Y1ZmM1MzFkIChhYXJjaDY0KSAoTGludXg6IDQuMTcuMC1yYzEtMDAwODUtZzU2ZTg0OWQ5 M2NjOSBhYXJjaDY0KQpyZWFkLWNyYy1waXBlLUE6IFRlc3RpbmcgY29ubmVjdG9yIExWRFMtMSB1 c2luZyBwaXBlIEEKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklUSUNB TDogVGVzdCBhc3NlcnRpb24gZmFpbHVyZSBmdW5jdGlvbiBpZ3RfcGlwZV9jcmNfc3RhcnQsIGZp bGUgaWd0X2RlYnVnZnMuYzo3NjQ6CihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVn ZnMtQ1JJVElDQUw6IEZhaWxlZCBhc3NlcnRpb246IHBpcGVfY3JjLT5jcmNfZmQgIT0gLTEKKGtt c19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklUSUNBTDogTGFzdCBlcnJubzog NSwgSW5wdXQvb3V0cHV0IGVycm9yClN0YWNrIHRyYWNlOgpTdWJ0ZXN0IHJlYWQtY3JjLXBpcGUt QSBmYWlsZWQuCioqKiogREVCVUcgKioqKgooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIERFQlVH OiBUZXN0IHJlcXVpcmVtZW50IHBhc3NlZDogIShwaXBlID49IGRhdGEtPmRpc3BsYXkubl9waXBl cykKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBJTkZPOiByZWFkLWNyYy1waXBlLUE6IFRlc3Rp bmcgY29ubmVjdG9yIExWRFMtMSB1c2luZyBwaXBlIEEKKGttc19waXBlX2NyY19iYXNpYzoxNjM4 KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiBMVkRTLTE6IHNldF9waXBlKEEpCihrbXNfcGlwZV9j cmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogTFZEUy0xOiBTZWxlY3Rpbmcg cGlwZSBBCihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgREVCVUc6IENsZWFyaW5nIHRoZSBmYiB3 aXRoIGNvbG9yICgwLjAwLDEuMDAsMC4wMCkKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qt ZmItREVCVUc6IGlndF9jcmVhdGVfZmJfd2l0aF9ib19zaXplKHdpZHRoPTEwMjQsIGhlaWdodD03 NjgsIGZvcm1hdD0weDM0MzI1MjU4LCB0aWxpbmc9MHgwLCBzaXplPTApCihrbXNfcGlwZV9jcmNf YmFzaWM6MTYzOCkgaWd0LWZiLURFQlVHOiBpZ3RfY3JlYXRlX2ZiX3dpdGhfYm9fc2l6ZShoYW5k bGU9MSwgcGl0Y2g9NDA5NikKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVH OiBUZXN0IHJlcXVpcmVtZW50IHBhc3NlZDogcGxhbmVfaWR4ID49IDAgJiYgcGxhbmVfaWR4IDwg cGlwZS0+bl9wbGFuZXMKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBk aXNwbGF5OiBBLjA6IHBsYW5lX3NldF9mYigxNDApCihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkg aWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBwbGFuZV9zZXRfc2l6ZSAoMTAyNHg3NjgpCihr bXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogQS4wOiBmYl9z ZXRfcG9zaXRpb24oMCwwKQooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6 IGRpc3BsYXk6IEEuMDogZmJfc2V0X3NpemUoMTAyNHg3NjgpCihrbXNfcGlwZV9jcmNfYmFzaWM6 MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogY29tbWl0IHsKKGttc19waXBlX2NyY19iYXNp YzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgTFZEUy0xOiBTZXRDcnRjIHBpcGUg QSwgZmIgMTQwLCBzcmMgKDAsIDApLCBtb2RlIDEwMjR4NzY4CihrbXNfcGlwZV9jcmNfYmFzaWM6 MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldENydGMgcGlwZSBBLCBkaXNhYmxp bmcKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAg U2V0UGxhbmUgcGlwZSBBLCBwbGFuZSAyLCBkaXNhYmxpbmcKKGttc19waXBlX2NyY19iYXNpYzox NjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFuZSAz LCBkaXNhYmxpbmcKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNw bGF5OiAgICAgU2V0UGxhbmUgcGlwZSBBLCBwbGFuZSA0LCBkaXNhYmxpbmcKKGttc19waXBlX2Ny Y19iYXNpYzoxNjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEIs IGRpc2FibGluZwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3Bs YXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDEsIGRpc2FibGluZwooa21zX3BpcGVfY3Jj X2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIs IHBsYW5lIDIsIGRpc2FibGluZwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVC VUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEIsIHBsYW5lIDMsIGRpc2FibGluZwooa21z X3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFu ZSBwaXBlIEIsIHBsYW5lIDQsIGRpc2FibGluZwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGln dC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRDcnRjIHBpcGUgQywgZGlzYWJsaW5nCihrbXNf cGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5l IHBpcGUgQywgcGxhbmUgMSwgZGlzYWJsaW5nCihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0 LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUgMiwgZGlzYWJs aW5nCihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAg IFNldFBsYW5lIHBpcGUgQywgcGxhbmUgMywgZGlzYWJsaW5nCihrbXNfcGlwZV9jcmNfYmFzaWM6 MTYzOCkgaWd0LWttcy1ERUJVRzogZGlzcGxheTogICAgIFNldFBsYW5lIHBpcGUgQywgcGxhbmUg NCwgZGlzYWJsaW5nCihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWttcy1ERUJVRzogZGlz cGxheTogICAgIFNldENydGMgcGlwZSBELCBkaXNhYmxpbmcKKGttc19waXBlX2NyY19iYXNpYzox NjM4KSBpZ3Qta21zLURFQlVHOiBkaXNwbGF5OiAgICAgU2V0Q3J0YyBwaXBlIEQsIGRpc2FibGlu Zwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBT ZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDIsIGRpc2FibGluZwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2 MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDMs IGRpc2FibGluZwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3Bs YXk6ICAgICBTZXRQbGFuZSBwaXBlIEQsIHBsYW5lIDQsIGRpc2FibGluZwooa21zX3BpcGVfY3Jj X2Jhc2ljOjE2MzgpIGlndC1rbXMtREVCVUc6IGRpc3BsYXk6IH0KKGttc19waXBlX2NyY19iYXNp YzoxNjM4KSBpZ3QtZGVidWdmcy1ERUJVRzogT3BlbmluZyBkZWJ1Z2ZzIGRpcmVjdG9yeSAnL3N5 cy9rZXJuZWwvZGVidWcvZHJpLzAnCihrbXNfcGlwZV9jcmNfYmFzaWM6MTYzOCkgaWd0LWRlYnVn ZnMtREVCVUc6IE9wZW5pbmcgZGVidWdmcyBkaXJlY3RvcnkgJy9zeXMva2VybmVsL2RlYnVnL2Ry aS8wJwooa21zX3BpcGVfY3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBUZXN0 IGFzc2VydGlvbiBmYWlsdXJlIGZ1bmN0aW9uIGlndF9waXBlX2NyY19zdGFydCwgZmlsZSBpZ3Rf ZGVidWdmcy5jOjc2NDoKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtZGVidWdmcy1DUklU SUNBTDogRmFpbGVkIGFzc2VydGlvbjogcGlwZV9jcmMtPmNyY19mZCAhPSAtMQooa21zX3BpcGVf Y3JjX2Jhc2ljOjE2MzgpIGlndC1kZWJ1Z2ZzLUNSSVRJQ0FMOiBMYXN0IGVycm5vOiA1LCBJbnB1 dC9vdXRwdXQgZXJyb3IKKGttc19waXBlX2NyY19iYXNpYzoxNjM4KSBpZ3QtY29yZS1JTkZPOiBT dGFjayB0cmFjZToKKioqKiAgRU5EICAqKioqClN1YnRlc3QgcmVhZC1jcmMtcGlwZS1BOiBGQUlM ICgwLjA2MXMpCgpJIHRoaW5rIHRoZSBhbnN3ZXIgaXMgbm8sIGJ1dCBJIGRvbid0IHRoaW5rIGl0 J3MgdGhlIGZhdWx0IG9mIHRoaXMgcGF0Y2gKc2VyaWVzLiBPcGVuaW5nIHRoZSBDUkMgZGF0YSBm aWxlIHJldHVybnMgLUVJTyBiZWNhdXNlIHRoZSBDUlRDIGlzIG5vdCBhY3RpdmUsCmFuZCBJJ20g dHJ5aW5nIHRvIGZpbmQgb3V0IHdoeSB0aGF0IGlzIHRoZSBjYXNlLiBUaGUgZGVidWcgbG9nIHNo b3dzIGEgY29tbWl0CnRoYXQgc2VlbXMgc3RyYW5nZSB0byBtZSwgZW5hYmxpbmcgcGlwZSBBIGFu ZCBpbW1lZGlhdGVseSBkaXNhYmxpbmcgcmlnaHQKYWZ0ZXJ3YXJkcy4gQWZ0ZXIgc29tZSBpbnZl c3RpZ2F0aW9uIEkgYmVsaWV2ZSB0aGF0IHRoaXMgaXMgY2F1c2VkIGJ5IHNoYXJpbmcKcHJpbWFy eSBwbGFuZXMgYmV0d2VlbiBDUlRDcy4KClRoZSBSLUNhciBEVSBncm91cHMgQ1JUQ3MgYnkgdHdv IGFuZCBzaGFyZXMgNSBwbGFuZXMgYmV0d2VlbiB0aGUgdHdvIENSVENzIG9mCnRoZSBncm91cC4g VGhpcyBzcGVjaWZpYyBTb0MgaGFzIHR3byBncm91cHMgb2YgdHdvIENSVENzLCBidXQgdGhhdCdz IG5vdApyZWxldmFudCBoZXJlLCBzbyB3ZSBjYW4gaWdub3JlIHBpcGVzIEMgYW5kIEQuCgpQaXBl cyBBIGFuZCBCIHRodXMgc2hhcmVkIDUgcGxhbmVzIHRoYXQgSSB3aWxsIG51bWJlciAwIHRvIDQg Zm9yIHNpbXBsaWNpdHkuClRoZSBkcml2ZXIgc2V0cyBwbGFuZSAwIGFzIHRoZSBwcmltYXJ5IHBs YW5lIGZvciBDUlRDIEEgYW5kIHBsYW5lIDEgYXMgdGhlCnByaW1hcnkgcGxhbmUgZm9yIENSVEMg Qi4gUGxhbmVzIDIsIDMgYW5kIDQgYXJlIGNyZWF0ZWQgYXMgb3ZlcmxheSBwbGFuZXMuCgpXaGVu IGlndCBpdGVyYXRlcyBvdmVyIGFsbCBwbGFuZXMgZm9yIHBpcGUgQSwgaXQgd2lsbCBmaXJzdCBl bmNvdW50ZXIgcGxhbmUgMAp0aGF0IGhhcyBhIGZyYW1lYnVmZmVyLCBhbmQgdGh1cyBlbmFibGVz IHRoZSBwaXBlLiBJdCB0aGVuIGl0ZXJhdGVzIG92ZXIKcGxhbmUgMSwgcmVjb2duaXplcyBpdCBh cyBhIHByaW1hcnkgcGxhbmUgd2l0aG91dCBhIGZyYW1lYnVmZmVyLCBhbmQgdGh1cwpkaXNhYmxl cyB0aGUgcGlwZS4gUGxhbmVzIDIsIDMgYW5kIDQgYXJlIHJlY29nbml6ZWQgYXMgb3ZlcmxheSBw bGFuZXMgYW5kIHRodXMKZG9uJ3QgYWZmZWN0IHRoZSBwaXBlIGFjdGl2ZSBzdGF0ZS4gUGlwZSBC IGlzIGhhbmRsZWQgdGhlIHNhbWUgd2F5LCBhbmQgaWd0CmRpc2FibGVzIGl0IHR3aWNlIGFzIHBs YW5lcyAwIGFuZCAxIGFyZSBwcmltYXJ5LgoKSSBkb24ndCBrbm93IGlmIHRoZSBmYXVsdCBoZXJl IGlzIHdpdGggaWd0IHRoYXQgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IHRoaXMKYXJjaGl0ZWN0 dXJlLCBvciB3aXRoIHRoZSBkcml2ZXIgdGhhdCBzaG91bGRuJ3QgaGF2ZSB0d28gcHJpbWFyeSBw bGFuZXMKYXZhaWxhYmxlIGZvciBhIENSVEMuIEluIHRoZSBmb3JtZXIgY2FzZSwgSSdtIG5vdCBz dXJlIGhvdyB0byBmaXggaXQsIGFzIEknbQpub3QgZmFtaWxpYXIgZW5vdWdoIHdpdGggaWd0IHRv IHJlYXJjaGl0ZWN0dXJlIHRoZSBjb21taXQgaGVscGVycy4gSW4gdGhlCmxhdHRlciBjYXNlLCBo b3cgd291bGQgeW91IHJlY29tbWVuZCBmaXhpbmcgaXQgb24gdGhlIGRyaXZlciBzaWRlID8KCk9u IE1vbmRheSwgMjMgQXByaWwgMjAxOCAwMTozNDoyMiBFRVNUIExhdXJlbnQgUGluY2hhcnQgd3Jv dGU6Cj4gSGVsbG8sCj4gCj4gVGhpcyBwYXRjaCBzZXJpZXMgYWRkcyBzdXBwb3J0IGZvciBDUkMg Y2FsY3VsYXRpb24gdG8gdGhlIHJjYXItZHUtZHJtCj4gZHJpdmVyLgo+IAo+IENSQyBjYWxjdWxh dGlvbiBpcyBzdXBwb3J0ZWQgc3RhcnRpbmcgYXQgdGhlIFJlbmVzYXMgUi1DYXIgR2VuMyBTb0Nz LCBhcwo+IGVhcmxpZXIgdmVyc2lvbnMgZG9uJ3QgaGF2ZSB0aGUgbmVjZXNzYXJ5IGhhcmR3YXJl LiBPbiBHZW4zIFNvQ3MsIHRoZSBDUkMgaXMKPiBjb21wdXRlZCBieSB0aGUgRElTQ09NIG1vZHVs ZSBwYXJ0IG9mIHRoZSBWU1AtRCBhbmQgVlNQLURMLgo+IAo+IFRoZSBESVNDT00gaXMgaW50ZXJm YWNlZCB0byB0aGUgVlNQIHRocm91Z2ggdGhlIFVJRiBnbHVlIGFuZCBhcHBlYXJzIGFzIGEKPiBW U1AgZW50aXR5IHdpdGggYSBzaW5rIHBhZCBhbmQgYSBzb3VyY2UgcGFkLgo+IAo+IFRoZSBzZXJp ZXMgc3RhcnRzIHdpdGggYSBzd2l0Y2ggdG8gU1BEWCBsaWNlbnNlIGhlYWRlcnMgaW4gcGF0Y2gg MS84LAo+IHByb21wdGVkIGJ5IGEgY2hlY2twYXRjaC5wbCB3YXJuaW5nIGZvciBhIGxhdGVyIHBh dGNoIHRoYXQgY29tcGxhaW5lZCBhYm91dAo+IG1pc3NpbmcgU1BEWCBsaWNlbnNlIGhlYWRlcnMu IEl0IHRoZW4gY29udGludWVzIHdpdGggY2xlYW51cCBhbmQKPiByZWZhY3RvcmluZy4gUGF0Y2hl cyAyLzggYW5kIDMvOCBwcmVwYXJlIGZvciBESVNDT00gYW5kIFVJRiBzdXBwb3J0IGJ5Cj4gZXh0 ZW5kaW5nIGdlbmVyaWMgY29kZSB0byBtYWtlIGl0IHVzYWJsZSBmb3IgdGhlIFVJRi4gUGF0Y2gg NC84IGRvY3VtZW50cyBhCj4gc3RydWN0dXJlIHRoYXQgd2lsbCByZWNlaXZlIG5ldyBmaWVsZHMu Cj4gCj4gUGF0Y2ggNS84IHRoZW4gZXh0ZW5kcyB0aGUgQVBJIGV4cG9zZWQgYnkgdGhlIFZTUCBk cml2ZXIgdG8gdGhlIERVIGRyaXZlciB0bwo+IHN1cHBvcnQgQ1JDIGNvbXB1dGF0aW9uIGNvbmZp Z3VyYXRpb24gYW5kIHJlcG9ydGluZy4gVGhlIHBhdGNoCj4gdW5mb3J0dW5hdGVseSBuZWVkcyB0 byB0b3VjaCBib3RoIHRoZSBWU1AgYW5kIERVIGRyaXZlcnMsIHNvIHRoZSB3aG9sZQo+IHNlcmll cyB3aWxsIG5lZWQgdG8gYmUgbWVyZ2VkIHRocm91Z2ggYSBzaW5nbGUgdHJlZS4KPiAKPiBQYXRj aCA1LzggYWRkcyBzdXBwb3J0IGZvciB0aGUgRElTQ09NIGFuZCBVSUYgaW4gdGhlIFZTUCBkcml2 ZXIsIHBhdGNoIDcvOAo+IGludGVncmF0ZXMgaXQgaW4gdGhlIERSTSBwaXBlbGluZSwgYW5kIHBh dGNoIDgvOCBmaW5hbGx5IGltcGxlbWVudHMgdGhlIENSQwo+IEFQSSBpbiB0aGUgRFUgZHJpdmVy IHRvIGV4cG9zZSBDUkMgY29tcHV0YXRpb24gdG8gdXNlcnNwYWNlLgo+IAo+IFRoZSBoYXJkd2Fy ZSBzdXBwb3J0cyBjb21wdXRpbmcgdGhlIENSQyBhdCBhbnkgYXJiaXRyYXJ5IHBvaW50IGluIHRo ZQo+IHBpcGVsaW5lIG9uIGEgY29uZmlndXJhYmxlIHdpbmRvdyBvZiB0aGUgZnJhbWUuIFRoaXMg cGF0Y2ggc2VyaWVzIHN1cHBvcnRzCj4gQ1JDIGNvbXB1dGF0aW9uIG9uIGlucHV0IHBsYW5lcyBv ciBwaXBlbGluZSBvdXRwdXQsIGJ1dCBvbiB0aGUgZnVsbCBmcmFtZQo+IG9ubHkuIFN1cHBvcnQg Zm9yIENSQyB3aW5kb3cgY29uZmlndXJhdGlvbiBjYW4gYmUgYWRkZWQgbGF0ZXIgaWYgbmVlZGVk IGJ1dAo+IHdpbGwgcmVxdWlyZSBleHRlbmRpbmcgdGhlIHVzZXJzcGFjZSBBUEksIGFzIHRoZSBE Uk0vS01TIENSQyBBUEkgZG9lc24ndAo+IHN1cHBvcnQgdGhpcyBmZWF0dXJlLgo+IAo+IENvbXBh cmVkIHRvIHYxLCB0aGUgQ1JDIHNvdXJjZSBuYW1lcyBmb3IgcGxhbmUgaW5wdXRzIGFyZSBub3cg Y29uc3RydWN0ZWQKPiBmcm9tIHBsYW5lIElEcyBpbnN0ZWFkIG9mIHBsYW5lIGluZGljZXMuIFRo aXMgYWxsb3dzIHVzZXJzcGFjZSB0byBtYXRjaCBDUkMKPiBzb3VyY2VzIHdpdGggcGxhbmVzLgo+ IAo+IE5vdGUgdGhhdCBleHBvc2luZyB0aGUgRElTQ09NIGFuZCBVSUYgdGhvdWdoIHRoZSBWNEwy IEFQSSBpc24ndCBzdXBwb3J0ZWQgYXMKPiB0aGUgbW9kdWxlIGlzIG9ubHkgZm91bmQgaW4gVlNQ LUQgYW5kIFZTUC1ETCBpbnN0YW5jZXMgdGhhdCBhcmUgbm90IGV4cG9zZWQKPiB0aHJvdWdoIFY0 TDIuIEl0IGlzIHBvc3NpYmxlIHRvIGV4cG9zZSB0aG9zZSBpbnN0YW5jZXMgdGhyb3VnaCBWNEwy IHdpdGggYQo+IHNtYWxsIG1vZGlmaWNhdGlvbiB0byB0aGUgZHJpdmVyIGZvciB0ZXN0aW5nIHB1 cnBvc2UuIElmIHRoZSBuZWVkIGFyaXNlcyB0bwo+IHRlc3QgRElTQ09NIGFuZCBVSUYgd2l0aCBz dWNoIGFuIG91dC1vZi10cmVlIHBhdGNoLCBzdXBwb3J0IGZvciBDUkMKPiByZXBvcnRpbmcgdGhy b3VnaCBhIFY0TDIgY29udHJvbCBjYW4gYmUgYWRkZWQgbGF0ZXIgd2l0aG91dCBhZmZlY3Rpbmcg aG93Cj4gQ1JDIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgRFJNL0tNUyBBUEkuCj4gCj4gVGhlIHBh dGNoZXMgYXJlIGJhc2VkIG9uIHRvcCBvZiB0aGUgIltQQVRDSCB2MiAwMC8xNV0gUi1DYXIgVlNQ MToKPiBEeW5hbWljYWxseSBhc3NpZ24gYmxlbmQgdW5pdHMgdG8gZGlzcGxheSBwaXBlbGluZXMi IHBhdGNoIHNlcmllcywgaXRzZWxmCj4gYmFzZWQgb24gdG9wIG9mIHRoZSBMaW51eCBtZWRpYSBt YXN0ZXIgYnJhbmNoIGFuZCBzY2hlZHVsZWQgZm9yIG1lcmdlIGluCj4gdjQuMTguIFRoZSBuZXcg YmFzZSBjYXVzZWQgaGVhdnkgY29uZmxpY3RzLCByZXF1aXJpbmcgdGhpcyBzZXJpZXMgdG8gYmUK PiBtZXJnZWQgdGhyb3VnaCB0aGUgVjRMMiB0cmVlLiBPbmNlIHRoZSBwYXRjaGVzIHJlY2VpdmUg dGhlIG5lY2Vzc2FyeSByZXZpZXcKPiBJIHdpbGwgYXNrIERhdmUgdG8gYWNrIHRoZSBtZXJnZSBw bGFuLgo+IAo+IEZvciBjb252ZW5pZW5jZSB0aGUgcGF0Y2hlcyBhcmUgYXZhaWxhYmxlIGF0Cj4g Cj4gICAgICAgICBnaXQ6Ly9saW51eHR2Lm9yZy9waW5jaGFydGwvbWVkaWEuZ2l0IHZzcDEtZGlz Y29tLXYyLTIwMTgwNDIzCj4gCj4gVGhlIGNvZGUgaGFzIGJlZW4gdGVzdGVkIHRocm91Z2ggdGhl IGttcy10ZXN0LWNyYy5weSBzY3JpcHQgcGFydCBvZiB0aGUgRFUKPiB0ZXN0IHN1aXRlIGF2YWls YWJsZSBhdAo+IAo+ICAgICAgICAgZ2l0Oi8vZ2l0LmlkZWFzb25ib2FyZC5jb20vcmVuZXNhcy9r bXMtdGVzdHMuZ2l0IGRpc2NvbQo+IAo+IExhdXJlbnQgUGluY2hhcnQgKDgpOgo+ICAgdjRsOiB2 c3AxOiBVc2UgU1BEWCBsaWNlbnNlIGhlYWRlcnMKPiAgIHY0bDogdnNwMTogU2hhcmUgdGhlIENM VSwgTElGIGFuZCBMVVQgc2V0X2ZtdCBwYWQgb3BlcmF0aW9uIGNvZGUKPiAgIHY0bDogdnNwMTog UmVzZXQgdGhlIGNyb3AgYW5kIGNvbXBvc2UgcmVjdGFuZ2xlcyBpbiB0aGUgc2V0X2ZtdCBoZWxw ZXIKPiAgIHY0bDogdnNwMTogRG9jdW1lbnQgdGhlIHZzcDFfZHVfYXRvbWljX2NvbmZpZyBzdHJ1 Y3R1cmUKPiAgIHY0bDogdnNwMTogRXh0ZW5kIHRoZSBEVSBBUEkgdG8gc3VwcG9ydCBDUkMgY29t cHV0YXRpb24KPiAgIHY0bDogdnNwMTogQWRkIHN1cHBvcnQgZm9yIHRoZSBESVNDT00gZW50aXR5 Cj4gICB2NGw6IHZzcDE6IEludGVncmF0ZSBESVNDT00gaW4gZGlzcGxheSBwaXBlbGluZQo+ICAg ZHJtOiByY2FyLWR1OiBBZGQgc3VwcG9ydCBmb3IgQ1JDIGNvbXB1dGF0aW9uCj4gCj4gIGRyaXZl cnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfY3J0Yy5jICAgIHwgMTU2ICsrKysrKysrKysrKysr KystCj4gIGRyaXZlcnMvZ3B1L2RybS9yY2FyLWR1L3JjYXJfZHVfY3J0Yy5oICAgIHwgIDE5ICsr Kwo+ICBkcml2ZXJzL2dwdS9kcm0vcmNhci1kdS9yY2FyX2R1X3ZzcC5jICAgICB8ICAxMyArLQo+ ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvTWFrZWZpbGUgICAgICB8ICAgMiArLQo+ICBk cml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMS5oICAgICAgICB8ICAxMCArLQo+ICBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9icnguYyAgICB8ICAgNiArLQo+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9icnguaCAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9jbHUuYyAgICB8ICA3MSArKy0tLS0tLQo+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9jbHUuaCAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kbC5jICAgICB8ICAgOCArLQo+ICBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL3ZzcDEvdnNwMV9kbC5oICAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3ZzcDEvdnNwMV9kcm0uYyAgICB8IDEyNyArKysrKysrKysrKystLQo+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9kcm0uaCAgICB8ICAyMCArKy0KPiAgZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS92c3AxL3ZzcDFfZHJ2LmMgICAgfCAgMjYgKystCj4gIGRyaXZlcnMvbWVk aWEvcGxhdGZvcm0vdnNwMS92c3AxX2VudGl0eS5jIHwgMTAzICsrKysrKysrKysrLQo+ICBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9lbnRpdHkuaCB8ICAxMyArLQo+ICBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oZ28uYyAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL3ZzcDEvdnNwMV9oZ28uaCAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL3ZzcDEvdnNwMV9oZ3QuYyAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL3ZzcDEvdnNwMV9oZ3QuaCAgICB8ICAgNiArLQo+ICBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL3ZzcDEvdnNwMV9oaXN0by5jICB8ICA2NSArLS0tLS0tCj4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vdnNwMS92c3AxX2hpc3RvLmggIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vdnNwMS92c3AxX2hzaXQuYyAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dnNwMS92c3AxX2hzaXQuaCAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX2xpZi5jICAgIHwgIDcxICsrLS0tLS0tCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dnNwMS92c3AxX2xpZi5oICAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX2x1dC5jICAgIHwgIDcxICsrLS0tLS0tCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0v dnNwMS92c3AxX2x1dC5oICAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNw MS92c3AxX3BpcGUuYyAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92 c3AxX3BpcGUuaCAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X3JlZ3MuaCAgIHwgIDQ2ICsrKystCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X3JwZi5jICAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3J3 cGYuYyAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3J3cGYu aCAgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3NydS5jICAg IHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3NydS5oICAgIHwg ICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3Vkcy5jICAgIHwgICA2 ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3Vkcy5oICAgIHwgICA2ICst Cj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3VpZi5jICAgIHwgMjcxICsrKysr KysrKysrKysrKysrKysrKysrKysrKwo+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3ZzcDEvdnNw MV91aWYuaCAgICB8ICAzMiArKysrCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3Ax X3ZpZGVvLmMgIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3Zp ZGVvLmggIHwgICA2ICstCj4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vdnNwMS92c3AxX3dwZi5j ICAgIHwgICA2ICstCj4gIGluY2x1ZGUvbWVkaWEvdnNwMS5oICAgICAgICAgICAgICAgICAgICAg IHwgIDM5ICsrKystCj4gIDQ0IGZpbGVzIGNoYW5nZWQsIDg5NiBpbnNlcnRpb25zKCspLCA0MTcg ZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L3ZzcDEvdnNwMV91aWYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS92c3AxL3ZzcDFfdWlmLmgKCi0tIApSZWdhcmRzLAoKTGF1cmVudCBQaW5jaGFydAoKCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwg bWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0 cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwK