From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-pl1-f173.google.com (mail-pl1-f173.google.com [209.85.214.173]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A55812C80 for ; Mon, 29 Nov 2021 19:36:04 +0000 (UTC) Received: by mail-pl1-f173.google.com with SMTP id o14so13022687plg.5 for ; Mon, 29 Nov 2021 11:36:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gateworks-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=xohg7JdVvkvO2SUDiXwKowHodphNxP500HwNzMb+bfU=; b=3mJajd4V1DdvWtEF+wYEzCoqrnMMQRznFjD4nvIf9I7+pySjX6zaxFf/1dX6yvFAVo Ud79y+0FkUQvZzWVEB4fcm6/U8zeGg/8/7JodJ4XQYY/HzLufwHcVWafaORCNlApyIsg jmsV9GSaaqh5LWKI/Zr9+xCY4BkfnQzJ2kxrV54UnaNnob6DE9lZ0N7bJI3SeLWeGQL3 n8zH1ni2jqgGratb3Ipr0t3zw+MCdIgUFiEsuDtJ5gjs5e3aSnvyWBCXApLwNVAXQc7Z XVSWfMm6umx0mJmJPaTWV9WDLvRagwtJ8Z++9FtebkJ+kLJGr9DohAH5v1jNl39MKijx imTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xohg7JdVvkvO2SUDiXwKowHodphNxP500HwNzMb+bfU=; b=XgB2BdKAEjv8eJUaNOo5ZpNUYQwQOXV+cGVyMTXLzMRX17e/NSgKFG+C26uKfE+bRG 9H0acq1lPvBoJUutvgSVLq9ec/cGO8l5CsCSunItv2TtmW/QKQ9ebgmL/uKKsWmt9rEG zllCxryrRlgvGwwHDTCdTpSHvdJ94t4L+83vNMpzJNfRIWkZpRHvZ1dLvyPpI+YcAAc7 /hTJXxD1YeWi4P5eMjv028oLfT1H8ymY7z/b48ZAy4FEwWHcJyBsKqcN4Z0R/fcbPDc5 y6XhKNP/fqc+proGBZcsAbMFiP5z6LwATQGgr+/CGlnzIUGD+aU8vkxWLlswxmuA2G50 rwhg== X-Gm-Message-State: AOAM532ni3Y4QiBxEHXi1Qwkw93alqwBDlW0KmD7CJVK5KZJdaee7kI9 K1jO6csp4eJLvYIxt811MnAAe6BxXwvMTiB9vnoMiQ== X-Google-Smtp-Source: ABdhPJxuNaUbjV4bLmcxiXLKB+HIvSn9asc0AxMeUnpXUU1L5OoHO+ZOt1JvoDAaN4JiDPsEAouzXlKexW49JuVqeFU= X-Received: by 2002:a17:902:7c8a:b0:143:bb4a:7bb3 with SMTP id y10-20020a1709027c8a00b00143bb4a7bb3mr63117830pll.46.1638214563723; Mon, 29 Nov 2021 11:36:03 -0800 (PST) Precedence: bulk X-Mailing-List: linux-staging@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 References: <20211106183802.893285-1-aford173@gmail.com> <718f7f6d6cd564d031c1963f1590c62d549ae725.camel@ndufresne.ca> <8db00a4b6faa99c940d9bc86e17161eb0db5efe3.camel@ndufresne.ca> <7f94eaacfddb8c5434c17f1e069ea87a17657ce9.camel@ndufresne.ca> In-Reply-To: From: Tim Harvey Date: Mon, 29 Nov 2021 11:35:52 -0800 Message-ID: Subject: Re: [RFC 0/5] arm64: imx8mm: Enable Hantro VPUs To: Adam Ford Cc: Ezequiel Garcia , Nicolas Dufresne , linux-media , Schrempf Frieder , Marek Vasut , Jagan Teki , Adam Ford-BE , cstevens@beaconembedded.com, Philipp Zabel , Mauro Carvalho Chehab , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Greg Kroah-Hartman , Heiko Stuebner , Lucas Stach , Joakim Zhang , Alice Guo , Peng Fan , "open list:HANTRO VPU CODEC DRIVER" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , open list , "open list:STAGING SUBSYSTEM" Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Mon, Nov 29, 2021 at 10:59 AM Adam Ford wrote: > > On Mon, Nov 29, 2021 at 10:54 AM Ezequiel Garcia > wrote: > > > > On Mon, 29 Nov 2021 at 13:48, Adam Ford wrote: > > > > > > On Tue, Nov 23, 2021 at 2:07 PM Nicolas Dufresne wrote: > > > > > > > > Le lundi 22 novembre 2021 =C3=A0 09:25 -0800, Tim Harvey a =C3=A9cr= it : > > > > > On Sat, Nov 20, 2021 at 7:36 AM Adam Ford wr= ote: > > > > > > > > > > > > On Fri, Nov 19, 2021 at 5:37 PM Adam Ford = wrote: > > > > > > > > > > > > > > On Fri, Nov 19, 2021 at 10:29 AM Nicolas Dufresne wrote: > > > > > > > > > > > > > > > > Hi Adam, Tim, > > > > > > > > > > > > > > > > [...] > > > > > > > > > > > > Nicolas and Adam, > > > > > > > > > > > > > > > > > > > > > > > > For the H1 patches in this series: I've been able t= o test the IMX8MM > > > > > > > > > > > > H1 JPEG encode using GStreamer 1.18.5: > > > > > > > > > > > > $ gst-inspect-1.0 | grep -e "v4l2.*enc" > > > > > > > > > > > > video4linux2: v4l2jpegenc: V4L2 JPEG Encoder > > > > > > > > > > > > $ gst-launch-1.0 videotestsrc ! jpegenc ! rtpjpegpa= y ! udpsink > > > > > > > > > > > ^ v4l2jpegenc > > > > > > > > > > > > > > > > > > > > > > This is just a transcript error ? > > > > > > > > > > > > > > > > > > > > Nicolas, > > > > > > > > > > > > > > > > > > > > No! Thanks for catching my mistake. I was testing with = software encode... ooops! > > > > > > > > > > > > > > > > > > > > 'gst-launch-1.0 videotestsrc ! v4l2jpegenc ! fakesink' = actually hangs > > > > > > > > > > the board so likely a power-domain issue there? > > > > > > > > > > > > > > > > > > The v4l2-compliance tests fail on the h1 decoder with a h= ang, but I > > > > > > > > > think we're writing to registers which are not documented= in the Mini > > > > > > > > > TRM. The Mini TRM doesn't explicitly show the JPEG encod= ing as a > > > > > > > > > feature, but some of the registers state JPEG, but becaus= e some of the > > > > > > > > > registers written for the H1 are not documented in the TR= M. If those > > > > > > > > > registers are restricted or not in this SoC, I am concern= ed that it > > > > > > > > > might be related. I'll try to run some more tests this w= eekend to > > > > > > > > > check on the status of the power-domain stuff. > > > > > > > > > > > > > > > > To verify if the HW support JPEG encoding you can read SWRE= G63 bit 25. This is > > > > > > > > in the TRM, just not labelled properly. To mimic the decodi= ng side, would be "HW > > > > > > > > synthesis config register X" with the bit labelled SW_ENC_J= PEG_PROF (but > > > > > > > > PROF/profile is on or off). If your board hang while readin= g this, you likely > > > > > > > > didn't get the power bit right. > > > > > > > > > > > > > > > > IMX8 has an undocumented control block thing that we have b= een fighting with in > > > > > > > > imx8q, perhaps that's your issue. Few driver was proposed,= we are still pending > > > > > > > > on NXP solution to be submitted (they asked us to wait, sti= ll waiting =3D)). > > > > > > > > > > > > > > Nicolas, > > > > > > > > > > > > > > Thanks for the suggestion to read offset FC. There was an at= tempt > > > > > > > made by Lucas Stach to develop a VPU blk-ctrl driver to coord= inate the > > > > > > > power-domains with the GPC driver. Unfortunately, it does app= ear to > > > > > > > hang, so it might not be operating correctly. > > > > > > > > > > > > > > Lucas, > > > > > > > > > > > > > > Do you have any idea of stuff I can try to see if the power d= omain is > > > > > > > coming online correctly? > > > > > > > > > > > > > > [ 10.434727] imx-pgc imx-pgc-domain.6: request the vpumix d= omain to power up > > > > > > > [ 10.463647] imx-pgc imx-pgc-domain.6: request the vpumix A= DB400 to power up > > > > > > > [ 10.517155] imx-pgc imx-pgc-domain.6: genpd vpumix success > > > > > > > [ 10.728927] vpu: set fuse bits to enable > > > > > > > [ 10.825500] imx8m-blk-ctrl 38330000.blk-ctrl: power vpublk= -g1 GPC domain > > > > > > > [ 10.878986] imx-pgc imx-pgc-domain.7: request the vpu-g1 d= omain to power up > > > > > > > [ 10.932429] imx-pgc imx-pgc-domain.7: genpd vpu-g1 success > > > > > > > [ 10.971988] imx8m-blk-ctrl 38330000.blk-ctrl: genpd vpublk= -g1 success > > > > > > > [ 11.004726] hantro-vpu 38300000.video-codec: registered > > > > > > > nxp,imx8mm-vpu-dec as /dev/video0 > > > > > > > [ 11.040760] imx8m-blk-ctrl 38330000.blk-ctrl: power vpublk= -g2 GPC domain > > > > > > > [ 11.066181] imx-pgc imx-pgc-domain.8: request the vpu-g2 d= omain to power up > > > > > > > [ 11.087887] imx-pgc imx-pgc-domain.8: genpd vpu-g2 success > > > > > > > [ 11.113808] imx8m-blk-ctrl 38330000.blk-ctrl: genpd vpublk= -g2 success > > > > > > > [ 11.139634] hantro-vpu 38310000.video-codec: registered > > > > > > > nxp,imx8mm-vpu-g2-dec as /dev/video1 > > > > > > > [ 11.156463] imx8m-blk-ctrl 38330000.blk-ctrl: power vpublk= -h1 GPC domain > > > > > > > [ 11.170817] imx-pgc imx-pgc-domain.9: request the vpu-h1 d= omain to power up > > > > > > > [ 11.232990] imx-pgc imx-pgc-domain.9: genpd vpu-h1 success > > > > > > > [ 11.252546] imx8m-blk-ctrl 38330000.blk-ctrl: genpd vpublk= -h1 success > > > > > > > [ 11.266152] hantro-vpu 38320000.video-codec: Checking vpu-= >enc_base + 0xfc > > > > > > > > > > > > > > > > > > > > > > > > > > > > adam > > > > > > > > > > > > > > > > > > > Nicolas, Tim, and Lucas, > > > > > > > > > > > > I think I have the hanging resolved in the power domains, and I= 'll be > > > > > > pushing the fix to the GPCv2. > > > > > > > > > > > > For the H1 Encoder, I added some debugging code to read the off= set > > > > > > 0xfc and print some data based on the findings of that VPU-h1 o= ffset. > > > > > > I basically check the various bits per the TRM to see if they a= re set > > > > > > and print some splat to indicate whether or not the function is > > > > > > supported. > > > > > > > > > > > > [ 8.861865] hantro-vpu 38320000.video-codec: Checking vpu->e= nc_base + 0xfc > > > > > > [ 8.870594] hantro-vpu 38320000.video-codec: Stabilization s= upported by HW > > > > > > [ 8.889341] hantro-vpu 38320000.video-codec: VP8 encoding su= pported by HW > > > > > > [ 8.899386] hantro-vpu 38320000.video-codec: H.264 encoding = supported by HW > > > > > > [ 8.918171] hantro-vpu 38320000.video-codec: RGB to YUV conv= ersion > > > > > > supported by HW > > > > > > [ 8.934067] hantro-vpu 38320000.video-codec: registered > > > > > > nxp,imx8mm-vpu-h1-enc as /dev/video2 > > > > > > > > > > > > Unfortunately, JPEG is not listed as supported. :-( > > > > > > > > > > Adam, > > > > > > > > > > Well not having JPEG encode support is unfortunate, and unexpecte= d. Do > > > > > we not have hantro support yet for VP8/H264 encode? > > > > > > > > There is no mainline support yet. You can derive from RK3288 suppor= t using Google ChromeOS method (a v4l2 plugins that simulate in userspace a= stateful encoder): > > > > > > > > - libv4l plugins / https://chromium.googlesource.com/chromiumos/thi= rd_party/libv4lplugins/+/refs/heads/master > > > > - Kernel Driver / https://chromium.googlesource.com/chromiumos/thir= d_party/kernel/+/chromeos-4.4/drivers/media/platform/rockchip-vpu/ > > > > > > > > > > > > > > I haven't quite figured out how to build a modern mono-repo gstre= amer > > > > > on the ubuntu 20.04 rootfs I'm using so I haven't been able to te= st > > > > > VPU encode/decode properly. I'll keep working on it when I'm back= in > > > > > the office the following week. > > > > > > > > Did a quick test to make sure there isn't any ubuntu specific block= ers, here's a > > > > dirty script that produce a minimal GStreamer, there was really not= hing special > > > > compare to other meson projects. Note that I use --wrap-mode=3Dnofa= llback to avoid > > > > letting GStreamer complete it's feature-set by downloading the plan= et. This > > > > already build quite a lot and could likely be made smaller by avoid= plugins-good > > > > build-dep call, but then you need to check for v4l2odecs and video4= linux devs > > > > (mostly gudev a glib udev binding). > > > > > > > > # Install ubuntu > > > > podman run -it --rm ubuntu:20.04 > > > > sed -i "s/# deb-src/deb-src/" /etc/apt/sources.list > > > > apt update > > > > apt build-dep gstreamer1.0-plugins-good > > > > apt install git python3-pip flex bison > > > > > > > > # Need a newer meson > > > > pip3 install --user meson > > > > export PATH=3D$PATH:~/.local/bin > > > > > > > > # Build GStreamer > > > > git clone https://gitlab.freedesktop.org/gstreamer/gstreamer.git > > > > cd gstreamer > > > > meson setup build --wrap-mode=3Dnofallback > > > > ninja -C build > > > > > > > > # Run in-place > > > > ./gst-env.py > > > > gst-inspect-1.0 v4l2codecs > > > > gst-inspect 1.0 video4linux2 > > > > > > > Thanks for the suggestions. > > > > > > I downloaded what's in the master repo: > > > > > > [gst-main] root@localhost:~/gstreamer# gst-inspect-1.0 v4l2codecs > > > > > > ** (gst-plugin-scanner:7317): CRITICAL **: 10:29:51.847: can't find > > > gi.repository.Gst > > > Plugin Details: > > > Name v4l2codecs > > > Description V4L2 CODEC Accelerators plugin > > > Filename > > > /root/gstreamer/builddir/subprojects/gst-plugins-bad/sys/v4l2codecs/l= ibgstv4l2codecs.so > > > Version 1.19.3.1 > > > License LGPL > > > Source module gst-plugins-bad > > > Binary package GStreamer Bad Plug-ins git > > > Origin URL Unknown package origin > > > > > > v4l2slh264dec: V4L2 Stateless H.264 Video Decoder > > > v4l2slmpeg2dec: V4L2 Stateless Mpeg2 Video Decoder > > > v4l2slvp8alphadecodebin: VP8 Alpha Decoder > > > v4l2slvp8dec: V4L2 Stateless VP8 Video Decoder > > > > > > 4 features: > > > +-- 4 elements > > > > > > [gst-main] root@localhost:~/gstreamer# gst-inspect-1.0 video4linux2 > > > Plugin Details: > > > Name video4linux2 > > > Description elements for Video 4 Linux > > > Filename > > > /root/gstreamer/builddir/subprojects/gst-plugins-good/sys/v4l2/libgst= video4linux2.so > > > Version 1.19.3.1 > > > License LGPL > > > Source module gst-plugins-good > > > Binary package GStreamer Good Plug-ins git > > > Origin URL Unknown package origin > > > > > > v4l2deviceprovider: Video (video4linux2) Device Provider > > > v4l2jpegenc: V4L2 JPEG Encoder > > > v4l2radio: Radio (video4linux2) Tuner > > > v4l2sink: Video (video4linux2) Sink > > > v4l2src: Video (video4linux2) Source > > > > > > 5 features: > > > +-- 4 elements > > > +-- 1 device providers > > > > > > I still have the H1 encoder enabled, but I know JPEG isn't supported, > > > so I'm going to attempt to do some decoding and pipe to fakesink sinc= e > > > I don't have a functional display yet. > > > > > > gst-launch-1.0 -ev filesrc location=3Dtrailer_1080p_h264_mp3.avi ! > > > decodebin3 ! fakesink > > > > > > Redistribute latency... > > > /GstPipeline:pipeline0/GstDecodebin3:decodebin3-0/v4l2slh264dec:v4l2s= lh264dec0.GstPad:src: > > > caps =3D video/x-raw, format=3D(string)NV12, width=3D(int)1920, > > > height=3D(int)1080, interlace-mode=3D(string)progressive, > > > multiview-mode=3D(string)mono, > > > multiview-flags=3D(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-f= irst/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixe= d-mono, > > > pixel-aspect-ratio=3D(fraction)1/1, framerate=3D(fraction)25/1 > > > /GstPipeline:pipeline0/GstDecodebin3:decodebin3-0.GstGhostPad:video_0= : > > > caps =3D video/x-raw, format=3D(string)NV12, width=3D(int)1920, > > > height=3D(int)1080, interlace-mode=3D(string)progressive, > > > multiview-mode=3D(string)mono, > > > multiview-flags=3D(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-f= irst/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixe= d-mono, > > > pixel-aspect-ratio=3D(fraction)1/1, framerate=3D(fraction)25/1 > > > /GstPipeline:pipeline0/GstDecodebin3:decodebin3-0.GstGhostPad:video_0= .GstProxyPad:proxypad6: > > > caps =3D video/x-raw, format=3D(string)NV12, width=3D(int)1920, > > > height=3D(int)1080, interlace-mode=3D(string)progressive, > > > multiview-mode=3D(string)mono, > > > multiview-flags=3D(GstVideoMultiviewFlagsSet)0:ffffffff:/right-view-f= irst/left-flipped/left-flopped/right-flipped/right-flopped/half-aspect/mixe= d-mono, > > > pixel-aspect-ratio=3D(fraction)1/1, framerate=3D(fraction)25/1 > > > /GstPipeline:pipeline0/GstDecodebin3:decodebin3-0/GstMultiQueue:multi= queue0: > > > min-interleave-time =3D 300000000 > > > Redistribute latency... > > > /GstPipeline:pipeline0/GstDecodebin3:decodebin3-0/v4l2slh264dec:v4l2s= lh264dec0.GstPad:sink: > > > caps =3D video/x-h264, variant=3D(string)itu, framerate=3D(fraction)2= 5/1, > > > width=3D(int)1920, height=3D(int)1080, chroma-format=3D(string)4:2:0, > > > bit-depth-luma=3D(uint)8, bit-depth-chroma=3D(uint)8, > > > parsed=3D(boolean)true, stream-format=3D(string)avc, alignment=3D(str= ing)au, > > > profile=3D(string)high, level=3D(string)4, > > > codec_data=3D(buffer)01640028ffe1001a67640028acd940780227e58400000300= 0400000300c83c60c65801000668ebe3cb22c0 > > > New clock: GstSystemClock > > > > > > And it appears to stream, because the counter increases. I haven't > > > checked the CPU utilization, but the fact that it shows v4l2slh264dec > > > is good. > > > > > > Is there a way to know if/how the decoder is using the proper VPU? I > > > assume if it wasn't using the proper one, it would fail, but was just > > > curious. > > > > > > > A few ways. You can check /proc/interrupts, which should have > > VPU activity. > > > > Or enable debug messages for the module, > > using the debug hantro parameter. V4L2 has debug messages > > that you can enable, see /sys/class/video4linux/video0/dev_debug. > > > > Instead of fakesink you can output to pngenc/jpegenc and check the outp= ut > > is visually correct. If at all possible, the proper way is to use Flust= er, > > and report the score you get: > > > > https://github.com/fluendo/fluster > > > > I ran fluster on the VP8 decoder, but only 55/61 passed. > > *************************************************************************= *************************** > Running test suite VP8-TEST-VECTORS with decoder GStreamer-VP8-V4L2SL-Gst= 1.0 > Using 4 parallel job(s) > *************************************************************************= *************************** > > [TEST SUITE ] (DECODER ) TEST VECTOR > ... RESULT > ---------------------------------------------------------------------- > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-004 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-001 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-002 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-003 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-005 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-006 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-007 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-008 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-011 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-009 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-012 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-013 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-014 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-010 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-016 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-017 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-018 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-01-intra-1400 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-01-intra-1416 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-01-intra-1417 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-01-intra-1411 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-02-inter-1402 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-02-inter-1412 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-02-inter-1424 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-01 ... Fail > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-02 ... Fail > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-03 ... Fail > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-04 ... Fail > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1401 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) vp80-02-inter-1418 > ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1403 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1407 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1408 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1409 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1413 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1415 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1425 ... Fail > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1426 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1427 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1432 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1435 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1436 ... Fail > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-00-comprehensive-015 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1441 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1437 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-04-partitions-1404 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1442 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-04-partitions-1405 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-04-partitions-1406 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1428 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1429 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1431 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1410 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-03-segmentation-1414 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1430 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1433 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1438 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1434 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1439 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1440 ... Success > [VP8-TEST-VECTORS] (GStreamer-VP8-V4L2SL-Gst1.0) > vp80-05-sharpness-1443 ... Success > > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > FAIL: vp80-03-segmentation-01 (GStreamer-VP8-V4L2SL-Gst1.0.VP8-TEST-VECTO= RS) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/root/gstreamer/fluster/fluster/test.py", line 104, in _test > self.assertEqual( > AssertionError: 'db954c077b7a3f34a448ceaacf8f525c' !=3D > '8bbb396a9bdf8afa250d3b2e45e6b367' > - db954c077b7a3f34a448ceaacf8f525c > + 8bbb396a9bdf8afa250d3b2e45e6b367 > : vp80-03-segmentation-01 > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > FAIL: vp80-03-segmentation-02 (GStreamer-VP8-V4L2SL-Gst1.0.VP8-TEST-VECTO= RS) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/root/gstreamer/fluster/fluster/test.py", line 104, in _test > self.assertEqual( > AssertionError: '4d2d65efeee1c83772c33a13446bd1a4' !=3D > '1b2061d4a74549228769f8e292bcb15f' > - 4d2d65efeee1c83772c33a13446bd1a4 > + 1b2061d4a74549228769f8e292bcb15f > : vp80-03-segmentation-02 > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > FAIL: vp80-03-segmentation-03 (GStreamer-VP8-V4L2SL-Gst1.0.VP8-TEST-VECTO= RS) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/root/gstreamer/fluster/fluster/test.py", line 104, in _test > self.assertEqual( > AssertionError: '73d864433691f8db43257b88495ac8c3' !=3D > 'fd1eb6ebd7100995bad11042a9bea048' > - 73d864433691f8db43257b88495ac8c3 > + fd1eb6ebd7100995bad11042a9bea048 > : vp80-03-segmentation-03 > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > FAIL: vp80-03-segmentation-04 (GStreamer-VP8-V4L2SL-Gst1.0.VP8-TEST-VECTO= RS) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/root/gstreamer/fluster/fluster/test.py", line 104, in _test > self.assertEqual( > AssertionError: '7f846c8bd7cdfe61f8542f382f9d8eeb' !=3D > '0c27a47c4fd8bbfce173d005bef8be6a' > - 7f846c8bd7cdfe61f8542f382f9d8eeb > + 0c27a47c4fd8bbfce173d005bef8be6a > : vp80-03-segmentation-04 > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > FAIL: vp80-03-segmentation-1425 (GStreamer-VP8-V4L2SL-Gst1.0.VP8-TEST-VEC= TORS) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/root/gstreamer/fluster/fluster/test.py", line 104, in _test > self.assertEqual( > AssertionError: '96ffacf0c3eae59b58252be24a60e9b2' !=3D > '83e8a322e8ab23e60ba16430aacad827' > - 96ffacf0c3eae59b58252be24a60e9b2 > + 83e8a322e8ab23e60ba16430aacad827 > : vp80-03-segmentation-1425 > > =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > FAIL: vp80-03-segmentation-1436 (GStreamer-VP8-V4L2SL-Gst1.0.VP8-TEST-VEC= TORS) > ---------------------------------------------------------------------- > Traceback (most recent call last): > File "/root/gstreamer/fluster/fluster/test.py", line 104, in _test > self.assertEqual( > AssertionError: 'bfd17a557ee1ba347c755a18ce5a64a6' !=3D > '5bca61a733c1936205f82de1492a1b2b' > - bfd17a557ee1ba347c755a18ce5a64a6 > + 5bca61a733c1936205f82de1492a1b2b > : vp80-03-segmentation-1436 > > Ran 55/61 tests successfully in 12.104 secs > > I am not that familiar with this tool, but I assume failures are bad. > However these look like Python errors and not gst errors. > > The H264 decoder resulted in: > > Ran 85/135 tests successfully in 57.821 secs > > I can provide the splat if you want. Those looked like gst errors, > because most of the error messages state the gst-launch-1.0 returned > non-zero exit status 1. > > > > It should be easy to use. > > It was. > > > > > I think I'll redo the patch without the RFC and without the H1 encode= r > > > unless anyone has any objections. I know I need to rebase on > > > linux-next anyway because the patches don't apply cleanly. Is there = a > > > specific branch I should use? I don't know if this goes through > > > Shawn's IMX tree or the media tree (or a combination) > > > > > > > You should rebase on media's master branch: > > > > https://git.linuxtv.org/media_tree.git/log/ > > I'll submit the patch with a cover letter with the results of the VP8 > and H264 fluster test in the cover letter. Is there a stateless > decoder for the VP9 decoder? gst-inspect only shows the following > v4l2codecs. > > v4l2slh264dec: V4L2 Stateless H.264 Video Decoder > v4l2slmpeg2dec: V4L2 Stateless Mpeg2 Video Decoder > v4l2slvp8alphadecodebin: VP8 Alpha Decoder > v4l2slvp8dec: V4L2 Stateless VP8 Video Decoder > > thanks for all your help. Hopefully we can get this integrated soon. > Adam, What deps did you install in order to get v4l2codecs building? I installed libgudev-1.0-dev based on Nicolas' suggestion and rebuilt (not sure if I needed to re-configure somehow) but there is still nothing in build/subprojects/gst-plugins-bad/sys/v4l2codecs/. A 'meson configure' tells me that v4l2codecs is set to 'auto' but I'm not sure how to find out what dependencies are needed or what may be missing. Best regards, Tim 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id A635AC433EF for ; Mon, 29 Nov 2021 19:36:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zLq/OSTYiim6g5rbRTMygqLWYkuUB942mo46jrwqrWE=; b=pPCsA3DlZ8tPcb lZQv7hqd/ISNcZufJ2bUjUAoH7t2BqQmaCVEGEYvpYb9+/f/WmJkyR9xwkH1a+41xJSQpL1vYCsYa XWExBxoVeJ5zjm2/HDt9g/jBRXiqAoK1YT/3+aUWTgwDMWKDrL6eO2SkQQlA3VSpUMlU5fAOtu7Gm RMphTNIQFPXIiHZIM6y7H+FhH64Bp+RodPcSLm47RfClKIs0r9jJHkoL4uQxN4/IHJOHhlRc1t/pl d6fPL0/ArD6HdrysSmlztWHKrTSIr46mE9JQQY8dbVhhdKRRJ6q8wCHEv6AGVAKoRikLsd5wq1VIZ FOGLmv3tojctNN0+ZZ9A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mrmRd-0029P5-UP; Mon, 29 Nov 2021 19:36:09 +0000 Received: from mail-pj1-x102e.google.com ([2607:f8b0:4864:20::102e]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mrmRY-0029OI-T2 for linux-rockchip@lists.infradead.org; Mon, 29 Nov 2021 19:36:08 +0000 Received: by mail-pj1-x102e.google.com with SMTP id gt5so13500276pjb.1 for ; Mon, 29 Nov 2021 11:36:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gateworks-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=xohg7JdVvkvO2SUDiXwKowHodphNxP500HwNzMb+bfU=; b=3mJajd4V1DdvWtEF+wYEzCoqrnMMQRznFjD4nvIf9I7+pySjX6zaxFf/1dX6yvFAVo Ud79y+0FkUQvZzWVEB4fcm6/U8zeGg/8/7JodJ4XQYY/HzLufwHcVWafaORCNlApyIsg jmsV9GSaaqh5LWKI/Zr9+xCY4BkfnQzJ2kxrV54UnaNnob6DE9lZ0N7bJI3SeLWeGQL3 n8zH1ni2jqgGratb3Ipr0t3zw+MCdIgUFiEsuDtJ5gjs5e3aSnvyWBCXApLwNVAXQc7Z XVSWfMm6umx0mJmJPaTWV9WDLvRagwtJ8Z++9FtebkJ+kLJGr9DohAH5v1jNl39MKijx imTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xohg7JdVvkvO2SUDiXwKowHodphNxP500HwNzMb+bfU=; b=TMaG/NHJ5TJuA6db4aLn9SHGErD4f1jqT2kgI/77p7OycINFhDPvgkCQy59u7tqfH7 sJkikg3aIidmEFLS3ZYWMg0HnxqNRXiuoIgkf3Zx+N2dWz/dkb9IMgDe0HvpKzqNQ6/M jtxGaWgvjAjXp9xtmDgUpG/29jPaoz5vW57N6dkqUvbGelkeuacrfSo5N34VwQ2B3+AG xITnOLh7pExT1/eJVhOFf+fsSpZewreByv5AF1ht+St7zCQB/eKUgL5xVz/9SdFZMDeX LYbHRjA5OXqIw/lCyXipd99b3xFjbXdyOwaIe6r/zsLqKu34GH3ZTC80ZqgdFy8z4H3x VXAA== X-Gm-Message-State: AOAM531C2V436EFSnAxUvv487Opmm95qZVq/nP0ly974sXqd8LM2ynwc 14L698sDoy0veMBFmK35mV1eS2SONxu2zje1ZKOS/Q== X-Google-Smtp-Source: ABdhPJxuNaUbjV4bLmcxiXLKB+HIvSn9asc0AxMeUnpXUU1L5OoHO+ZOt1JvoDAaN4JiDPsEAouzXlKexW49JuVqeFU= X-Received: by 2002:a17:902:7c8a:b0:143:bb4a:7bb3 with SMTP id y10-20020a1709027c8a00b00143bb4a7bb3mr63117830pll.46.1638214563723; Mon, 29 Nov 2021 11:36:03 -0800 (PST) MIME-Version: 1.0 References: <20211106183802.893285-1-aford173@gmail.com> <718f7f6d6cd564d031c1963f1590c62d549ae725.camel@ndufresne.ca> <8db00a4b6faa99c940d9bc86e17161eb0db5efe3.camel@ndufresne.ca> <7f94eaacfddb8c5434c17f1e069ea87a17657ce9.camel@ndufresne.ca> In-Reply-To: From: Tim Harvey Date: Mon, 29 Nov 2021 11:35:52 -0800 Message-ID: Subject: Re: [RFC 0/5] arm64: imx8mm: Enable Hantro VPUs To: Adam Ford Cc: Ezequiel Garcia , Nicolas Dufresne , linux-media , Schrempf Frieder , Marek Vasut , Jagan Teki , Adam Ford-BE , cstevens@beaconembedded.com, Philipp Zabel , Mauro Carvalho Chehab , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Greg Kroah-Hartman , Heiko Stuebner , Lucas Stach , Joakim Zhang , Alice Guo , Peng Fan , "open list:HANTRO VPU CODEC DRIVER" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , open list , "open list:STAGING SUBSYSTEM" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211129_113604_959276_68A7EC87 X-CRM114-Status: GOOD ( 48.53 ) X-BeenThere: linux-rockchip@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: Upstream kernel work for Rockchip platforms List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "Linux-rockchip" Errors-To: linux-rockchip-bounces+linux-rockchip=archiver.kernel.org@lists.infradead.org T24gTW9uLCBOb3YgMjksIDIwMjEgYXQgMTA6NTkgQU0gQWRhbSBGb3JkIDxhZm9yZDE3M0BnbWFp bC5jb20+IHdyb3RlOgo+Cj4gT24gTW9uLCBOb3YgMjksIDIwMjEgYXQgMTA6NTQgQU0gRXplcXVp ZWwgR2FyY2lhCj4gPGV6ZXF1aWVsQHZhbmd1YXJkaWFzdXIuY29tLmFyPiB3cm90ZToKPiA+Cj4g PiBPbiBNb24sIDI5IE5vdiAyMDIxIGF0IDEzOjQ4LCBBZGFtIEZvcmQgPGFmb3JkMTczQGdtYWls LmNvbT4gd3JvdGU6Cj4gPiA+Cj4gPiA+IE9uIFR1ZSwgTm92IDIzLCAyMDIxIGF0IDI6MDcgUE0g Tmljb2xhcyBEdWZyZXNuZSA8bmljb2xhc0BuZHVmcmVzbmUuY2E+IHdyb3RlOgo+ID4gPiA+Cj4g PiA+ID4gTGUgbHVuZGkgMjIgbm92ZW1icmUgMjAyMSDDoCAwOToyNSAtMDgwMCwgVGltIEhhcnZl eSBhIMOpY3JpdCA6Cj4gPiA+ID4gPiBPbiBTYXQsIE5vdiAyMCwgMjAyMSBhdCA3OjM2IEFNIEFk YW0gRm9yZCA8YWZvcmQxNzNAZ21haWwuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gT24gRnJpLCBOb3YgMTksIDIwMjEgYXQgNTozNyBQTSBBZGFtIEZvcmQgPGFmb3JkMTczQGdt YWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBPbiBGcmksIE5vdiAx OSwgMjAyMSBhdCAxMDoyOSBBTSBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzQG5kdWZyZXNuZS5j YT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gSGkgQWRhbSwgVGltLAo+ ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFsuLi5dCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+IE5pY29sYXMgYW5kIEFkYW0sCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IEZvciB0aGUgSDEgcGF0Y2hlcyBpbiB0aGlzIHNlcmllczogSSd2ZSBiZWVu IGFibGUgdG8gdGVzdCB0aGUgSU1YOE1NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEgxIEpQRUcg ZW5jb2RlIHVzaW5nIEdTdHJlYW1lciAxLjE4LjU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICQg Z3N0LWluc3BlY3QtMS4wIHwgZ3JlcCAtZSAidjRsMi4qZW5jIgo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiB2aWRlbzRsaW51eDI6ICB2NGwyanBlZ2VuYzogVjRMMiBKUEVHIEVuY29kZXIKPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gJCBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBqcGVnZW5j ICEgcnRwanBlZ3BheSAhIHVkcHNpbmsKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeIHY0bDJqcGVnZW5jCj4gPiA+ID4gPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBpcyBqdXN0IGEgdHJhbnNjcmlwdCBlcnJvciA/ Cj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBOaWNvbGFzLAo+ID4gPiA+ ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gTm8hIFRoYW5rcyBmb3IgY2F0Y2hpbmcg bXkgbWlzdGFrZS4gSSB3YXMgdGVzdGluZyB3aXRoIHNvZnR3YXJlIGVuY29kZS4uLiBvb29wcyEK PiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ICdnc3QtbGF1bmNoLTEuMCB2 aWRlb3Rlc3RzcmMgISB2NGwyanBlZ2VuYyAhIGZha2VzaW5rJyBhY3R1YWxseSBoYW5ncwo+ID4g PiA+ID4gPiA+ID4gPiA+IHRoZSBib2FyZCBzbyBsaWtlbHkgYSBwb3dlci1kb21haW4gaXNzdWUg dGhlcmU/Cj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IFRoZSB2NGwyLWNvbXBs aWFuY2UgdGVzdHMgZmFpbCBvbiB0aGUgaDEgZGVjb2RlciB3aXRoIGEgaGFuZywgYnV0IEkKPiA+ ID4gPiA+ID4gPiA+ID4gdGhpbmsgd2UncmUgd3JpdGluZyB0byByZWdpc3RlcnMgd2hpY2ggYXJl IG5vdCBkb2N1bWVudGVkIGluIHRoZSBNaW5pCj4gPiA+ID4gPiA+ID4gPiA+IFRSTS4gIFRoZSBN aW5pIFRSTSBkb2Vzbid0IGV4cGxpY2l0bHkgc2hvdyB0aGUgSlBFRyBlbmNvZGluZyBhcyBhCj4g PiA+ID4gPiA+ID4gPiA+IGZlYXR1cmUsIGJ1dCBzb21lIG9mIHRoZSByZWdpc3RlcnMgc3RhdGUg SlBFRywgYnV0IGJlY2F1c2Ugc29tZSBvZiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gcmVnaXN0ZXJz IHdyaXR0ZW4gZm9yIHRoZSBIMSBhcmUgbm90IGRvY3VtZW50ZWQgaW4gdGhlIFRSTS4gIElmIHRo b3NlCj4gPiA+ID4gPiA+ID4gPiA+IHJlZ2lzdGVycyBhcmUgcmVzdHJpY3RlZCBvciBub3QgaW4g dGhpcyBTb0MsIEkgYW0gY29uY2VybmVkIHRoYXQgaXQKPiA+ID4gPiA+ID4gPiA+ID4gbWlnaHQg YmUgcmVsYXRlZC4gIEknbGwgdHJ5IHRvIHJ1biBzb21lIG1vcmUgdGVzdHMgdGhpcyB3ZWVrZW5k IHRvCj4gPiA+ID4gPiA+ID4gPiA+IGNoZWNrIG9uIHRoZSBzdGF0dXMgb2YgdGhlIHBvd2VyLWRv bWFpbiBzdHVmZi4KPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBUbyB2ZXJpZnkgaWYg dGhlIEhXIHN1cHBvcnQgSlBFRyBlbmNvZGluZyB5b3UgY2FuIHJlYWQgU1dSRUc2MyBiaXQgMjUu IFRoaXMgaXMKPiA+ID4gPiA+ID4gPiA+IGluIHRoZSBUUk0sIGp1c3Qgbm90IGxhYmVsbGVkIHBy b3Blcmx5LiBUbyBtaW1pYyB0aGUgZGVjb2Rpbmcgc2lkZSwgd291bGQgYmUgIkhXCj4gPiA+ID4g PiA+ID4gPiBzeW50aGVzaXMgY29uZmlnIHJlZ2lzdGVyIFgiIHdpdGggdGhlIGJpdCBsYWJlbGxl ZCBTV19FTkNfSlBFR19QUk9GIChidXQKPiA+ID4gPiA+ID4gPiA+IFBST0YvcHJvZmlsZSBpcyBv biBvciBvZmYpLiBJZiB5b3VyIGJvYXJkIGhhbmcgd2hpbGUgcmVhZGluZyB0aGlzLCB5b3UgbGlr ZWx5Cj4gPiA+ID4gPiA+ID4gPiBkaWRuJ3QgZ2V0IHRoZSBwb3dlciBiaXQgcmlnaHQuCj4gPiA+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gSU1YOCBoYXMgYW4gdW5kb2N1bWVudGVkIGNvbnRy b2wgYmxvY2sgdGhpbmcgdGhhdCB3ZSBoYXZlIGJlZW4gZmlnaHRpbmcgd2l0aCBpbgo+ID4gPiA+ ID4gPiA+ID4gaW14OHEsICBwZXJoYXBzIHRoYXQncyB5b3VyIGlzc3VlLiBGZXcgZHJpdmVyIHdh cyBwcm9wb3NlZCwgd2UgYXJlIHN0aWxsIHBlbmRpbmcKPiA+ID4gPiA+ID4gPiA+IG9uIE5YUCBz b2x1dGlvbiB0byBiZSBzdWJtaXR0ZWQgKHRoZXkgYXNrZWQgdXMgdG8gd2FpdCwgc3RpbGwgd2Fp dGluZyA9KSkuCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBOaWNvbGFzLAo+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gVGhhbmtzIGZvciB0aGUgc3VnZ2VzdGlvbiB0byByZWFkIG9mZnNl dCBGQy4gIFRoZXJlIHdhcyBhbiBhdHRlbXB0Cj4gPiA+ID4gPiA+ID4gbWFkZSBieSBMdWNhcyBT dGFjaCB0byBkZXZlbG9wIGEgVlBVIGJsay1jdHJsIGRyaXZlciB0byBjb29yZGluYXRlIHRoZQo+ ID4gPiA+ID4gPiA+IHBvd2VyLWRvbWFpbnMgd2l0aCB0aGUgR1BDIGRyaXZlci4gVW5mb3J0dW5h dGVseSwgaXQgZG9lcyBhcHBlYXIgdG8KPiA+ID4gPiA+ID4gPiBoYW5nLCBzbyBpdCBtaWdodCBu b3QgYmUgb3BlcmF0aW5nIGNvcnJlY3RseS4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IEx1 Y2FzLAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gRG8geW91IGhhdmUgYW55IGlkZWEgb2Yg c3R1ZmYgSSBjYW4gdHJ5IHRvIHNlZSBpZiB0aGUgcG93ZXIgZG9tYWluIGlzCj4gPiA+ID4gPiA+ ID4gY29taW5nIG9ubGluZSBjb3JyZWN0bHk/Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBb ICAgMTAuNDM0NzI3XSBpbXgtcGdjIGlteC1wZ2MtZG9tYWluLjY6IHJlcXVlc3QgdGhlIHZwdW1p eCBkb21haW4gdG8gcG93ZXIgdXAKPiA+ID4gPiA+ID4gPiBbICAgMTAuNDYzNjQ3XSBpbXgtcGdj IGlteC1wZ2MtZG9tYWluLjY6IHJlcXVlc3QgdGhlIHZwdW1peCBBREI0MDAgdG8gcG93ZXIgdXAK PiA+ID4gPiA+ID4gPiBbICAgMTAuNTE3MTU1XSBpbXgtcGdjIGlteC1wZ2MtZG9tYWluLjY6IGdl bnBkIHZwdW1peCBzdWNjZXNzCj4gPiA+ID4gPiA+ID4gWyAgIDEwLjcyODkyN10gdnB1OiBzZXQg ZnVzZSBiaXRzIHRvIGVuYWJsZQo+ID4gPiA+ID4gPiA+IFsgICAxMC44MjU1MDBdIGlteDhtLWJs ay1jdHJsIDM4MzMwMDAwLmJsay1jdHJsOiBwb3dlciB2cHVibGstZzEgR1BDIGRvbWFpbgo+ID4g PiA+ID4gPiA+IFsgICAxMC44Nzg5ODZdIGlteC1wZ2MgaW14LXBnYy1kb21haW4uNzogcmVxdWVz dCB0aGUgdnB1LWcxIGRvbWFpbiB0byBwb3dlciB1cAo+ID4gPiA+ID4gPiA+IFsgICAxMC45MzI0 MjldIGlteC1wZ2MgaW14LXBnYy1kb21haW4uNzogZ2VucGQgdnB1LWcxIHN1Y2Nlc3MKPiA+ID4g PiA+ID4gPiBbICAgMTAuOTcxOTg4XSBpbXg4bS1ibGstY3RybCAzODMzMDAwMC5ibGstY3RybDog Z2VucGQgdnB1YmxrLWcxIHN1Y2Nlc3MKPiA+ID4gPiA+ID4gPiBbICAgMTEuMDA0NzI2XSBoYW50 cm8tdnB1IDM4MzAwMDAwLnZpZGVvLWNvZGVjOiByZWdpc3RlcmVkCj4gPiA+ID4gPiA+ID4gbnhw LGlteDhtbS12cHUtZGVjIGFzIC9kZXYvdmlkZW8wCj4gPiA+ID4gPiA+ID4gWyAgIDExLjA0MDc2 MF0gaW14OG0tYmxrLWN0cmwgMzgzMzAwMDAuYmxrLWN0cmw6IHBvd2VyIHZwdWJsay1nMiBHUEMg ZG9tYWluCj4gPiA+ID4gPiA+ID4gWyAgIDExLjA2NjE4MV0gaW14LXBnYyBpbXgtcGdjLWRvbWFp bi44OiByZXF1ZXN0IHRoZSB2cHUtZzIgZG9tYWluIHRvIHBvd2VyIHVwCj4gPiA+ID4gPiA+ID4g WyAgIDExLjA4Nzg4N10gaW14LXBnYyBpbXgtcGdjLWRvbWFpbi44OiBnZW5wZCB2cHUtZzIgc3Vj Y2Vzcwo+ID4gPiA+ID4gPiA+IFsgICAxMS4xMTM4MDhdIGlteDhtLWJsay1jdHJsIDM4MzMwMDAw LmJsay1jdHJsOiBnZW5wZCB2cHVibGstZzIgc3VjY2Vzcwo+ID4gPiA+ID4gPiA+IFsgICAxMS4x Mzk2MzRdIGhhbnRyby12cHUgMzgzMTAwMDAudmlkZW8tY29kZWM6IHJlZ2lzdGVyZWQKPiA+ID4g PiA+ID4gPiBueHAsaW14OG1tLXZwdS1nMi1kZWMgYXMgL2Rldi92aWRlbzEKPiA+ID4gPiA+ID4g PiBbICAgMTEuMTU2NDYzXSBpbXg4bS1ibGstY3RybCAzODMzMDAwMC5ibGstY3RybDogcG93ZXIg dnB1YmxrLWgxIEdQQyBkb21haW4KPiA+ID4gPiA+ID4gPiBbICAgMTEuMTcwODE3XSBpbXgtcGdj IGlteC1wZ2MtZG9tYWluLjk6IHJlcXVlc3QgdGhlIHZwdS1oMSBkb21haW4gdG8gcG93ZXIgdXAK PiA+ID4gPiA+ID4gPiBbICAgMTEuMjMyOTkwXSBpbXgtcGdjIGlteC1wZ2MtZG9tYWluLjk6IGdl bnBkIHZwdS1oMSBzdWNjZXNzCj4gPiA+ID4gPiA+ID4gWyAgIDExLjI1MjU0Nl0gaW14OG0tYmxr LWN0cmwgMzgzMzAwMDAuYmxrLWN0cmw6IGdlbnBkIHZwdWJsay1oMSBzdWNjZXNzCj4gPiA+ID4g PiA+ID4gWyAgIDExLjI2NjE1Ml0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogQ2hl Y2tpbmcgdnB1LT5lbmNfYmFzZSArIDB4ZmMKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IDxo YW5nPgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gYWRhbQo+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IE5pY29sYXMsIFRpbSwgYW5kIEx1Y2FzLAo+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiBJIHRoaW5rIEkgaGF2ZSB0aGUgaGFuZ2luZyByZXNvbHZlZCBpbiB0aGUgcG93 ZXIgZG9tYWlucywgYW5kIEknbGwgYmUKPiA+ID4gPiA+ID4gcHVzaGluZyB0aGUgZml4IHRvIHRo ZSBHUEN2Mi4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gRm9yIHRoZSBIMSBFbmNvZGVyLCBJIGFk ZGVkIHNvbWUgZGVidWdnaW5nIGNvZGUgdG8gcmVhZCB0aGUgb2Zmc2V0Cj4gPiA+ID4gPiA+IDB4 ZmMgYW5kIHByaW50IHNvbWUgZGF0YSBiYXNlZCBvbiB0aGUgZmluZGluZ3Mgb2YgdGhhdCBWUFUt aDEgb2Zmc2V0Lgo+ID4gPiA+ID4gPiBJIGJhc2ljYWxseSBjaGVjayB0aGUgdmFyaW91cyBiaXRz IHBlciB0aGUgVFJNIHRvIHNlZSBpZiB0aGV5IGFyZSBzZXQKPiA+ID4gPiA+ID4gYW5kIHByaW50 IHNvbWUgc3BsYXQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIGZ1bmN0aW9uIGlzCj4g PiA+ID4gPiA+IHN1cHBvcnRlZC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gWyAgICA4Ljg2MTg2 NV0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogQ2hlY2tpbmcgdnB1LT5lbmNfYmFz ZSArIDB4ZmMKPiA+ID4gPiA+ID4gWyAgICA4Ljg3MDU5NF0gaGFudHJvLXZwdSAzODMyMDAwMC52 aWRlby1jb2RlYzogU3RhYmlsaXphdGlvbiBzdXBwb3J0ZWQgYnkgSFcKPiA+ID4gPiA+ID4gWyAg ICA4Ljg4OTM0MV0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogVlA4IGVuY29kaW5n IHN1cHBvcnRlZCBieSBIVwo+ID4gPiA+ID4gPiBbICAgIDguODk5Mzg2XSBoYW50cm8tdnB1IDM4 MzIwMDAwLnZpZGVvLWNvZGVjOiBILjI2NCBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgSFcKPiA+ID4g PiA+ID4gWyAgICA4LjkxODE3MV0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogUkdC IHRvIFlVViBjb252ZXJzaW9uCj4gPiA+ID4gPiA+IHN1cHBvcnRlZCBieSBIVwo+ID4gPiA+ID4g PiBbICAgIDguOTM0MDY3XSBoYW50cm8tdnB1IDM4MzIwMDAwLnZpZGVvLWNvZGVjOiByZWdpc3Rl cmVkCj4gPiA+ID4gPiA+IG54cCxpbXg4bW0tdnB1LWgxLWVuYyBhcyAvZGV2L3ZpZGVvMgo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiBVbmZvcnR1bmF0ZWx5LCBKUEVHIGlzIG5vdCBsaXN0ZWQgYXMg c3VwcG9ydGVkLiAgOi0oCj4gPiA+ID4gPgo+ID4gPiA+ID4gQWRhbSwKPiA+ID4gPiA+Cj4gPiA+ ID4gPiBXZWxsIG5vdCBoYXZpbmcgSlBFRyBlbmNvZGUgc3VwcG9ydCBpcyB1bmZvcnR1bmF0ZSwg YW5kIHVuZXhwZWN0ZWQuIERvCj4gPiA+ID4gPiB3ZSBub3QgaGF2ZSBoYW50cm8gc3VwcG9ydCB5 ZXQgZm9yIFZQOC9IMjY0IGVuY29kZT8KPiA+ID4gPgo+ID4gPiA+IFRoZXJlIGlzIG5vIG1haW5s aW5lIHN1cHBvcnQgeWV0LiBZb3UgY2FuIGRlcml2ZSBmcm9tIFJLMzI4OCBzdXBwb3J0IHVzaW5n IEdvb2dsZSBDaHJvbWVPUyBtZXRob2QgKGEgdjRsMiBwbHVnaW5zIHRoYXQgc2ltdWxhdGUgaW4g dXNlcnNwYWNlIGEgc3RhdGVmdWwgZW5jb2Rlcik6Cj4gPiA+ID4KPiA+ID4gPiAtIGxpYnY0bCBw bHVnaW5zIC8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3MvdGhp cmRfcGFydHkvbGlidjRscGx1Z2lucy8rL3JlZnMvaGVhZHMvbWFzdGVyCj4gPiA+ID4gLSBLZXJu ZWwgRHJpdmVyIC8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3Mv dGhpcmRfcGFydHkva2VybmVsLysvY2hyb21lb3MtNC40L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v cm9ja2NoaXAtdnB1Lwo+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSSBoYXZlbid0IHF1aXRl IGZpZ3VyZWQgb3V0IGhvdyB0byBidWlsZCBhIG1vZGVybiBtb25vLXJlcG8gZ3N0cmVhbWVyCj4g PiA+ID4gPiBvbiB0aGUgdWJ1bnR1IDIwLjA0IHJvb3RmcyBJJ20gdXNpbmcgc28gSSBoYXZlbid0 IGJlZW4gYWJsZSB0byB0ZXN0Cj4gPiA+ID4gPiBWUFUgZW5jb2RlL2RlY29kZSBwcm9wZXJseS4g SSdsbCBrZWVwIHdvcmtpbmcgb24gaXQgd2hlbiBJJ20gYmFjayBpbgo+ID4gPiA+ID4gdGhlIG9m ZmljZSB0aGUgZm9sbG93aW5nIHdlZWsuCj4gPiA+ID4KPiA+ID4gPiBEaWQgYSBxdWljayB0ZXN0 IHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24ndCBhbnkgdWJ1bnR1IHNwZWNpZmljIGJsb2NrZXJzLCBo ZXJlJ3MgYQo+ID4gPiA+IGRpcnR5IHNjcmlwdCB0aGF0IHByb2R1Y2UgYSBtaW5pbWFsIEdTdHJl YW1lciwgdGhlcmUgd2FzIHJlYWxseSBub3RoaW5nIHNwZWNpYWwKPiA+ID4gPiBjb21wYXJlIHRv IG90aGVyIG1lc29uIHByb2plY3RzLiBOb3RlIHRoYXQgSSB1c2UgLS13cmFwLW1vZGU9bm9mYWxs YmFjayB0byBhdm9pZAo+ID4gPiA+IGxldHRpbmcgR1N0cmVhbWVyIGNvbXBsZXRlIGl0J3MgZmVh dHVyZS1zZXQgYnkgZG93bmxvYWRpbmcgdGhlIHBsYW5ldC4gVGhpcwo+ID4gPiA+IGFscmVhZHkg YnVpbGQgcXVpdGUgYSBsb3QgYW5kIGNvdWxkIGxpa2VseSBiZSBtYWRlIHNtYWxsZXIgYnkgYXZv aWQgcGx1Z2lucy1nb29kCj4gPiA+ID4gYnVpbGQtZGVwIGNhbGwsIGJ1dCB0aGVuIHlvdSBuZWVk IHRvIGNoZWNrIGZvciB2NGwyb2RlY3MgYW5kIHZpZGVvNGxpbnV4IGRldnMKPiA+ID4gPiAobW9z dGx5IGd1ZGV2IGEgZ2xpYiB1ZGV2IGJpbmRpbmcpLgo+ID4gPiA+Cj4gPiA+ID4gIyBJbnN0YWxs IHVidW50dQo+ID4gPiA+IHBvZG1hbiBydW4gLWl0IC0tcm0gdWJ1bnR1OjIwLjA0Cj4gPiA+ID4g c2VkIC1pICJzLyMgZGViLXNyYy9kZWItc3JjLyIgL2V0Yy9hcHQvc291cmNlcy5saXN0Cj4gPiA+ ID4gYXB0IHVwZGF0ZQo+ID4gPiA+IGFwdCBidWlsZC1kZXAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMt Z29vZAo+ID4gPiA+IGFwdCBpbnN0YWxsIGdpdCBweXRob24zLXBpcCBmbGV4IGJpc29uCj4gPiA+ ID4KPiA+ID4gPiAjIE5lZWQgYSBuZXdlciBtZXNvbgo+ID4gPiA+IHBpcDMgaW5zdGFsbCAtLXVz ZXIgbWVzb24KPiA+ID4gPiBleHBvcnQgUEFUSD0kUEFUSDp+Ly5sb2NhbC9iaW4KPiA+ID4gPgo+ ID4gPiA+ICMgQnVpbGQgR1N0cmVhbWVyCj4gPiA+ID4gZ2l0IGNsb25lIGh0dHBzOi8vZ2l0bGFi LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyLmdpdAo+ID4gPiA+IGNkIGdzdHJl YW1lcgo+ID4gPiA+IG1lc29uIHNldHVwIGJ1aWxkIC0td3JhcC1tb2RlPW5vZmFsbGJhY2sKPiA+ ID4gPiBuaW5qYSAtQyBidWlsZAo+ID4gPiA+Cj4gPiA+ID4gIyBSdW4gaW4tcGxhY2UKPiA+ID4g PiAuL2dzdC1lbnYucHkKPiA+ID4gPiBnc3QtaW5zcGVjdC0xLjAgdjRsMmNvZGVjcwo+ID4gPiA+ IGdzdC1pbnNwZWN0IDEuMCB2aWRlbzRsaW51eDIKPiA+ID4gPgo+ID4gPiBUaGFua3MgZm9yIHRo ZSBzdWdnZXN0aW9ucy4KPiA+ID4KPiA+ID4gSSBkb3dubG9hZGVkIHdoYXQncyBpbiB0aGUgbWFz dGVyIHJlcG86Cj4gPiA+Cj4gPiA+IFtnc3QtbWFpbl0gcm9vdEBsb2NhbGhvc3Q6fi9nc3RyZWFt ZXIjIGdzdC1pbnNwZWN0LTEuMCB2NGwyY29kZWNzCj4gPiA+Cj4gPiA+ICoqIChnc3QtcGx1Z2lu LXNjYW5uZXI6NzMxNyk6IENSSVRJQ0FMICoqOiAxMDoyOTo1MS44NDc6IGNhbid0IGZpbmQKPiA+ ID4gZ2kucmVwb3NpdG9yeS5Hc3QKPiA+ID4gUGx1Z2luIERldGFpbHM6Cj4gPiA+ICAgTmFtZSAg ICAgICAgICAgICAgICAgICAgIHY0bDJjb2RlY3MKPiA+ID4gICBEZXNjcmlwdGlvbiAgICAgICAg ICAgICAgVjRMMiBDT0RFQyBBY2NlbGVyYXRvcnMgcGx1Z2luCj4gPiA+ICAgRmlsZW5hbWUKPiA+ ID4gL3Jvb3QvZ3N0cmVhbWVyL2J1aWxkZGlyL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9z eXMvdjRsMmNvZGVjcy9saWJnc3R2NGwyY29kZWNzLnNvCj4gPiA+ICAgVmVyc2lvbiAgICAgICAg ICAgICAgICAgIDEuMTkuMy4xCj4gPiA+ICAgTGljZW5zZSAgICAgICAgICAgICAgICAgIExHUEwK PiA+ID4gICBTb3VyY2UgbW9kdWxlICAgICAgICAgICAgZ3N0LXBsdWdpbnMtYmFkCj4gPiA+ICAg QmluYXJ5IHBhY2thZ2UgICAgICAgICAgIEdTdHJlYW1lciBCYWQgUGx1Zy1pbnMgZ2l0Cj4gPiA+ ICAgT3JpZ2luIFVSTCAgICAgICAgICAgICAgIFVua25vd24gcGFja2FnZSBvcmlnaW4KPiA+ID4K PiA+ID4gICB2NGwyc2xoMjY0ZGVjOiBWNEwyIFN0YXRlbGVzcyBILjI2NCBWaWRlbyBEZWNvZGVy Cj4gPiA+ICAgdjRsMnNsbXBlZzJkZWM6IFY0TDIgU3RhdGVsZXNzIE1wZWcyIFZpZGVvIERlY29k ZXIKPiA+ID4gICB2NGwyc2x2cDhhbHBoYWRlY29kZWJpbjogVlA4IEFscGhhIERlY29kZXIKPiA+ ID4gICB2NGwyc2x2cDhkZWM6IFY0TDIgU3RhdGVsZXNzIFZQOCBWaWRlbyBEZWNvZGVyCj4gPiA+ Cj4gPiA+ICAgNCBmZWF0dXJlczoKPiA+ID4gICArLS0gNCBlbGVtZW50cwo+ID4gPgo+ID4gPiBb Z3N0LW1haW5dIHJvb3RAbG9jYWxob3N0On4vZ3N0cmVhbWVyIyBnc3QtaW5zcGVjdC0xLjAgdmlk ZW80bGludXgyCj4gPiA+IFBsdWdpbiBEZXRhaWxzOgo+ID4gPiAgIE5hbWUgICAgICAgICAgICAg ICAgICAgICB2aWRlbzRsaW51eDIKPiA+ID4gICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgZWxl bWVudHMgZm9yIFZpZGVvIDQgTGludXgKPiA+ID4gICBGaWxlbmFtZQo+ID4gPiAvcm9vdC9nc3Ry ZWFtZXIvYnVpbGRkaXIvc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtZ29vZC9zeXMvdjRsMi9saWJn c3R2aWRlbzRsaW51eDIuc28KPiA+ID4gICBWZXJzaW9uICAgICAgICAgICAgICAgICAgMS4xOS4z LjEKPiA+ID4gICBMaWNlbnNlICAgICAgICAgICAgICAgICAgTEdQTAo+ID4gPiAgIFNvdXJjZSBt b2R1bGUgICAgICAgICAgICBnc3QtcGx1Z2lucy1nb29kCj4gPiA+ICAgQmluYXJ5IHBhY2thZ2Ug ICAgICAgICAgIEdTdHJlYW1lciBHb29kIFBsdWctaW5zIGdpdAo+ID4gPiAgIE9yaWdpbiBVUkwg ICAgICAgICAgICAgICBVbmtub3duIHBhY2thZ2Ugb3JpZ2luCj4gPiA+Cj4gPiA+ICAgdjRsMmRl dmljZXByb3ZpZGVyOiBWaWRlbyAodmlkZW80bGludXgyKSBEZXZpY2UgUHJvdmlkZXIKPiA+ID4g ICB2NGwyanBlZ2VuYzogVjRMMiBKUEVHIEVuY29kZXIKPiA+ID4gICB2NGwycmFkaW86IFJhZGlv ICh2aWRlbzRsaW51eDIpIFR1bmVyCj4gPiA+ICAgdjRsMnNpbms6IFZpZGVvICh2aWRlbzRsaW51 eDIpIFNpbmsKPiA+ID4gICB2NGwyc3JjOiBWaWRlbyAodmlkZW80bGludXgyKSBTb3VyY2UKPiA+ ID4KPiA+ID4gICA1IGZlYXR1cmVzOgo+ID4gPiAgICstLSA0IGVsZW1lbnRzCj4gPiA+ICAgKy0t IDEgZGV2aWNlIHByb3ZpZGVycwo+ID4gPgo+ID4gPiBJIHN0aWxsIGhhdmUgdGhlIEgxIGVuY29k ZXIgZW5hYmxlZCwgYnV0IEkga25vdyBKUEVHIGlzbid0IHN1cHBvcnRlZCwKPiA+ID4gc28gSSdt IGdvaW5nIHRvIGF0dGVtcHQgdG8gZG8gc29tZSBkZWNvZGluZyBhbmQgcGlwZSB0byBmYWtlc2lu ayBzaW5jZQo+ID4gPiBJIGRvbid0IGhhdmUgYSBmdW5jdGlvbmFsIGRpc3BsYXkgeWV0Lgo+ID4g Pgo+ID4gPiBnc3QtbGF1bmNoLTEuMCAtZXYgZmlsZXNyYyBsb2NhdGlvbj10cmFpbGVyXzEwODBw X2gyNjRfbXAzLmF2aSAhCj4gPiA+IGRlY29kZWJpbjMgICEgZmFrZXNpbmsKPiA+ID4KPiA+ID4g UmVkaXN0cmlidXRlIGxhdGVuY3kuLi4KPiA+ID4gL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3RE ZWNvZGViaW4zOmRlY29kZWJpbjMtMC92NGwyc2xoMjY0ZGVjOnY0bDJzbGgyNjRkZWMwLkdzdFBh ZDpzcmM6Cj4gPiA+IGNhcHMgPSB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpTlYxMiwgd2lk dGg9KGludCkxOTIwLAo+ID4gPiBoZWlnaHQ9KGludCkxMDgwLCBpbnRlcmxhY2UtbW9kZT0oc3Ry aW5nKXByb2dyZXNzaXZlLAo+ID4gPiBtdWx0aXZpZXctbW9kZT0oc3RyaW5nKW1vbm8sCj4gPiA+ IG11bHRpdmlldy1mbGFncz0oR3N0VmlkZW9NdWx0aXZpZXdGbGFnc1NldCkwOmZmZmZmZmZmOi9y aWdodC12aWV3LWZpcnN0L2xlZnQtZmxpcHBlZC9sZWZ0LWZsb3BwZWQvcmlnaHQtZmxpcHBlZC9y aWdodC1mbG9wcGVkL2hhbGYtYXNwZWN0L21peGVkLW1vbm8sCj4gPiA+IHBpeGVsLWFzcGVjdC1y YXRpbz0oZnJhY3Rpb24pMS8xLCBmcmFtZXJhdGU9KGZyYWN0aW9uKTI1LzEKPiA+ID4gL0dzdFBp cGVsaW5lOnBpcGVsaW5lMC9Hc3REZWNvZGViaW4zOmRlY29kZWJpbjMtMC5Hc3RHaG9zdFBhZDp2 aWRlb18wOgo+ID4gPiBjYXBzID0gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKU5WMTIsIHdp ZHRoPShpbnQpMTkyMCwKPiA+ID4gaGVpZ2h0PShpbnQpMTA4MCwgaW50ZXJsYWNlLW1vZGU9KHN0 cmluZylwcm9ncmVzc2l2ZSwKPiA+ID4gbXVsdGl2aWV3LW1vZGU9KHN0cmluZyltb25vLAo+ID4g PiBtdWx0aXZpZXctZmxhZ3M9KEdzdFZpZGVvTXVsdGl2aWV3RmxhZ3NTZXQpMDpmZmZmZmZmZjov cmlnaHQtdmlldy1maXJzdC9sZWZ0LWZsaXBwZWQvbGVmdC1mbG9wcGVkL3JpZ2h0LWZsaXBwZWQv cmlnaHQtZmxvcHBlZC9oYWxmLWFzcGVjdC9taXhlZC1tb25vLAo+ID4gPiBwaXhlbC1hc3BlY3Qt cmF0aW89KGZyYWN0aW9uKTEvMSwgZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xCj4gPiA+IC9Hc3RQ aXBlbGluZTpwaXBlbGluZTAvR3N0RGVjb2RlYmluMzpkZWNvZGViaW4zLTAuR3N0R2hvc3RQYWQ6 dmlkZW9fMC5Hc3RQcm94eVBhZDpwcm94eXBhZDY6Cj4gPiA+IGNhcHMgPSB2aWRlby94LXJhdywg Zm9ybWF0PShzdHJpbmcpTlYxMiwgd2lkdGg9KGludCkxOTIwLAo+ID4gPiBoZWlnaHQ9KGludCkx MDgwLCBpbnRlcmxhY2UtbW9kZT0oc3RyaW5nKXByb2dyZXNzaXZlLAo+ID4gPiBtdWx0aXZpZXct bW9kZT0oc3RyaW5nKW1vbm8sCj4gPiA+IG11bHRpdmlldy1mbGFncz0oR3N0VmlkZW9NdWx0aXZp ZXdGbGFnc1NldCkwOmZmZmZmZmZmOi9yaWdodC12aWV3LWZpcnN0L2xlZnQtZmxpcHBlZC9sZWZ0 LWZsb3BwZWQvcmlnaHQtZmxpcHBlZC9yaWdodC1mbG9wcGVkL2hhbGYtYXNwZWN0L21peGVkLW1v bm8sCj4gPiA+IHBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pMS8xLCBmcmFtZXJhdGU9KGZy YWN0aW9uKTI1LzEKPiA+ID4gL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3REZWNvZGViaW4zOmRl Y29kZWJpbjMtMC9Hc3RNdWx0aVF1ZXVlOm11bHRpcXVldWUwOgo+ID4gPiBtaW4taW50ZXJsZWF2 ZS10aW1lID0gMzAwMDAwMDAwCj4gPiA+IFJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uCj4gPiA+IC9H c3RQaXBlbGluZTpwaXBlbGluZTAvR3N0RGVjb2RlYmluMzpkZWNvZGViaW4zLTAvdjRsMnNsaDI2 NGRlYzp2NGwyc2xoMjY0ZGVjMC5Hc3RQYWQ6c2luazoKPiA+ID4gY2FwcyA9IHZpZGVvL3gtaDI2 NCwgdmFyaWFudD0oc3RyaW5nKWl0dSwgZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xLAo+ID4gPiB3 aWR0aD0oaW50KTE5MjAsIGhlaWdodD0oaW50KTEwODAsIGNocm9tYS1mb3JtYXQ9KHN0cmluZyk0 OjI6MCwKPiA+ID4gYml0LWRlcHRoLWx1bWE9KHVpbnQpOCwgYml0LWRlcHRoLWNocm9tYT0odWlu dCk4LAo+ID4gPiBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2 YywgYWxpZ25tZW50PShzdHJpbmcpYXUsCj4gPiA+IHByb2ZpbGU9KHN0cmluZyloaWdoLCBsZXZl bD0oc3RyaW5nKTQsCj4gPiA+IGNvZGVjX2RhdGE9KGJ1ZmZlcikwMTY0MDAyOGZmZTEwMDFhNjc2 NDAwMjhhY2Q5NDA3ODAyMjdlNTg0MDAwMDAzMDAwNDAwMDAwMzAwYzgzYzYwYzY1ODAxMDAwNjY4 ZWJlM2NiMjJjMAo+ID4gPiBOZXcgY2xvY2s6IEdzdFN5c3RlbUNsb2NrCj4gPiA+Cj4gPiA+IEFu ZCBpdCBhcHBlYXJzIHRvIHN0cmVhbSwgYmVjYXVzZSB0aGUgY291bnRlciBpbmNyZWFzZXMuICBJ IGhhdmVuJ3QKPiA+ID4gY2hlY2tlZCB0aGUgQ1BVIHV0aWxpemF0aW9uLCBidXQgdGhlIGZhY3Qg dGhhdCBpdCBzaG93cyB2NGwyc2xoMjY0ZGVjCj4gPiA+IGlzIGdvb2QuCj4gPiA+Cj4gPiA+IElz IHRoZXJlIGEgd2F5IHRvIGtub3cgaWYvaG93IHRoZSBkZWNvZGVyIGlzIHVzaW5nIHRoZSBwcm9w ZXIgVlBVPyAgSQo+ID4gPiBhc3N1bWUgaWYgaXQgd2Fzbid0IHVzaW5nIHRoZSBwcm9wZXIgb25l LCBpdCB3b3VsZCBmYWlsLCBidXQgd2FzIGp1c3QKPiA+ID4gY3VyaW91cy4KPiA+ID4KPiA+Cj4g PiBBIGZldyB3YXlzLiBZb3UgY2FuIGNoZWNrIC9wcm9jL2ludGVycnVwdHMsIHdoaWNoIHNob3Vs ZCBoYXZlCj4gPiBWUFUgYWN0aXZpdHkuCj4gPgo+ID4gT3IgZW5hYmxlIGRlYnVnIG1lc3NhZ2Vz IGZvciB0aGUgbW9kdWxlLAo+ID4gdXNpbmcgdGhlIGRlYnVnIGhhbnRybyBwYXJhbWV0ZXIuIFY0 TDIgaGFzIGRlYnVnIG1lc3NhZ2VzCj4gPiB0aGF0IHlvdSBjYW4gZW5hYmxlLCBzZWUgL3N5cy9j bGFzcy92aWRlbzRsaW51eC92aWRlbzAvZGV2X2RlYnVnLgo+ID4KPiA+IEluc3RlYWQgb2YgZmFr ZXNpbmsgeW91IGNhbiBvdXRwdXQgdG8gcG5nZW5jL2pwZWdlbmMgYW5kIGNoZWNrIHRoZSBvdXRw dXQKPiA+IGlzIHZpc3VhbGx5IGNvcnJlY3QuIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhlIHByb3Bl ciB3YXkgaXMgdG8gdXNlIEZsdXN0ZXIsCj4gPiBhbmQgcmVwb3J0IHRoZSBzY29yZSB5b3UgZ2V0 Ogo+ID4KPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9mbHVlbmRvL2ZsdXN0ZXIKPiA+Cj4KPiBJIHJh biBmbHVzdGVyIG9uIHRoZSBWUDggZGVjb2RlciwgYnV0IG9ubHkgNTUvNjEgcGFzc2VkLgo+Cj4g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IFJ1bm5pbmcgdGVz dCBzdWl0ZSBWUDgtVEVTVC1WRUNUT1JTIHdpdGggZGVjb2RlciBHU3RyZWFtZXItVlA4LVY0TDJT TC1Hc3QxLjAKPiBVc2luZyA0IHBhcmFsbGVsIGpvYihzKQo+ICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKPgo+IFtURVNUIFNVSVRFICAgICAgXSAoREVDT0RFUiAg ICAgICAgICAgICAgICAgICAgKSBURVNUIFZFQ1RPUgo+ICAgICAuLi4gUkVTVUxUCj4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4w KQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMDQgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVD VE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNp dmUtMDAxIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0 TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1jb21wcmVoZW5zaXZlLTAwMiAuLi4gU3VjY2Vzcwo+IFtW UDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAt Y29tcHJlaGVuc2l2ZS0wMDMgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJl YW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNpdmUtMDA1IC4uLiBT dWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjAp Cj4gdnA4MC0wMC1jb21wcmVoZW5zaXZlLTAwNiAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNU T1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2 ZS0wMDcgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRM MlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNpdmUtMDA4IC4uLiBTdWNjZXNzCj4gW1ZQ OC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1j b21wcmVoZW5zaXZlLTAxMSAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVh bWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMDkgLi4uIFN1 Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkK PiB2cDgwLTAwLWNvbXByZWhlbnNpdmUtMDEyIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RP UlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1jb21wcmVoZW5zaXZl LTAxMyAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwy U0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMTQgLi4uIFN1Y2Nlc3MKPiBbVlA4 LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNv bXByZWhlbnNpdmUtMDEwIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFt ZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1jb21wcmVoZW5zaXZlLTAxNiAuLi4gU3Vj Y2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+ IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMTcgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9S U10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNpdmUt MDE4IC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJT TC1Hc3QxLjApIHZwODAtMDEtaW50cmEtMTQwMAo+ICAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVT VC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKSB2cDgwLTAxLWludHJhLTE0 MTYKPiAgICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgt VjRMMlNMLUdzdDEuMCkgdnA4MC0wMS1pbnRyYS0xNDE3Cj4gICAgIC4uLiBTdWNjZXNzCj4gW1ZQ OC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApIHZwODAtMDEtaW50 cmEtMTQxMQo+ICAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVy LVZQOC1WNEwyU0wtR3N0MS4wKSB2cDgwLTAyLWludGVyLTE0MDIKPiAgICAgLi4uIFN1Y2Nlc3MK PiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkgdnA4MC0w Mi1pbnRlci0xNDEyCj4gICAgIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3Ry ZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApIHZwODAtMDItaW50ZXItMTQyNAo+ICAgICAuLi4gU3Vj Y2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+ IHZwODAtMDMtc2VnbWVudGF0aW9uLTAxICAgLi4uIEZhaWwKPiBbVlA4LVRFU1QtVkVDVE9SU10g KEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0wMiAg IC4uLiBGYWlsCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3Qx LjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMDMgICAuLi4gRmFpbAo+IFtWUDgtVEVTVC1WRUNU T1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9u LTA0ICAgLi4uIEZhaWwKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNM LUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDAxIC4uLiBTdWNjZXNzCj4gW1ZQOC1U RVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApIHZwODAtMDItaW50ZXIt MTQxOAo+ICAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQ OC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9uLTE0MDMgLi4uIFN1Y2Nlc3MK PiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgw LTAzLXNlZ21lbnRhdGlvbi0xNDA3IC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChH U3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQwOCAu Li4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0 MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9uLTE0MDkgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1Qt VkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRh dGlvbi0xNDEzIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4 LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQxNSAuLi4gU3VjY2Vzcwo+ IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAt MDMtc2VnbWVudGF0aW9uLTE0MjUgLi4uIEZhaWwKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJl YW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDI2IC4uLiBT dWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjAp Cj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQyNyAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNU T1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9u LTE0MzIgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRM MlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDM1IC4uLiBTdWNjZXNzCj4gW1ZQ OC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1z ZWdtZW50YXRpb24tMTQzNiAuLi4gRmFpbAo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVy LVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMTUgLi4uIFN1Y2Nl c3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2 cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDQxIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNd IChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQz NyAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wt R3N0MS4wKQo+IHZwODAtMDQtcGFydGl0aW9ucy0xNDA0ICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRF U1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21l bnRhdGlvbi0xNDQyIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXIt VlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wNC1wYXJ0aXRpb25zLTE0MDUgICAuLi4gU3VjY2Vz cwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZw ODAtMDQtcGFydGl0aW9ucy0xNDA2ICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10g KEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTA1LXNoYXJwbmVzcy0xNDI4ICAg IC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1H c3QxLjApCj4gdnA4MC0wNS1zaGFycG5lc3MtMTQyOSAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVT VC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDUtc2hhcnBu ZXNzLTE0MzEgICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1W UDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDEwIC4uLiBTdWNjZXNz Cj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4 MC0wMy1zZWdtZW50YXRpb24tMTQxNCAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAo R1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDUtc2hhcnBuZXNzLTE0MzAgICAg Li4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdz dDEuMCkKPiB2cDgwLTA1LXNoYXJwbmVzcy0xNDMzICAgIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNU LVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wNS1zaGFycG5l c3MtMTQzOCAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQ OC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDUtc2hhcnBuZXNzLTE0MzQgICAgLi4uIFN1Y2Nlc3MK PiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgw LTA1LXNoYXJwbmVzcy0xNDM5ICAgIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChH U3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wNS1zaGFycG5lc3MtMTQ0MCAgICAu Li4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0 MS4wKQo+IHZwODAtMDUtc2hhcnBuZXNzLTE0NDMgICAgLi4uIFN1Y2Nlc3MKPgo+Cj4gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiBGQUlMOiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0wMSAoR1N0cmVhbWVyLVZQOC1W NEwyU0wtR3N0MS4wLlZQOC1URVNULVZFQ1RPUlMpCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFRyYWNlYmFj ayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiAgIEZpbGUgIi9yb290L2dzdHJlYW1lci9mbHVz dGVyL2ZsdXN0ZXIvdGVzdC5weSIsIGxpbmUgMTA0LCBpbiBfdGVzdAo+ICAgICBzZWxmLmFzc2Vy dEVxdWFsKAo+IEFzc2VydGlvbkVycm9yOiAnZGI5NTRjMDc3YjdhM2YzNGE0NDhjZWFhY2Y4ZjUy NWMnICE9Cj4gJzhiYmIzOTZhOWJkZjhhZmEyNTBkM2IyZTQ1ZTZiMzY3Jwo+IC0gZGI5NTRjMDc3 YjdhM2YzNGE0NDhjZWFhY2Y4ZjUyNWMKPiArIDhiYmIzOTZhOWJkZjhhZmEyNTBkM2IyZTQ1ZTZi MzY3Cj4gIDogdnA4MC0wMy1zZWdtZW50YXRpb24tMDEKPgo+ID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gRkFJ TDogdnA4MC0wMy1zZWdtZW50YXRpb24tMDIgKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMC5W UDgtVEVTVC1WRUNUT1JTKQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50 IGNhbGwgbGFzdCk6Cj4gICBGaWxlICIvcm9vdC9nc3RyZWFtZXIvZmx1c3Rlci9mbHVzdGVyL3Rl c3QucHkiLCBsaW5lIDEwNCwgaW4gX3Rlc3QKPiAgICAgc2VsZi5hc3NlcnRFcXVhbCgKPiBBc3Nl cnRpb25FcnJvcjogJzRkMmQ2NWVmZWVlMWM4Mzc3MmMzM2ExMzQ0NmJkMWE0JyAhPQo+ICcxYjIw NjFkNGE3NDU0OTIyODc2OWY4ZTI5MmJjYjE1ZicKPiAtIDRkMmQ2NWVmZWVlMWM4Mzc3MmMzM2Ex MzQ0NmJkMWE0Cj4gKyAxYjIwNjFkNGE3NDU0OTIyODc2OWY4ZTI5MmJjYjE1Zgo+ICA6IHZwODAt MDMtc2VnbWVudGF0aW9uLTAyCj4KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+IEZBSUw6IHZwODAtMDMtc2Vn bWVudGF0aW9uLTAzIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjAuVlA4LVRFU1QtVkVDVE9S UykKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgo+ ICAgRmlsZSAiL3Jvb3QvZ3N0cmVhbWVyL2ZsdXN0ZXIvZmx1c3Rlci90ZXN0LnB5IiwgbGluZSAx MDQsIGluIF90ZXN0Cj4gICAgIHNlbGYuYXNzZXJ0RXF1YWwoCj4gQXNzZXJ0aW9uRXJyb3I6ICc3 M2Q4NjQ0MzM2OTFmOGRiNDMyNTdiODg0OTVhYzhjMycgIT0KPiAnZmQxZWI2ZWJkNzEwMDk5NWJh ZDExMDQyYTliZWEwNDgnCj4gLSA3M2Q4NjQ0MzM2OTFmOGRiNDMyNTdiODg0OTVhYzhjMwo+ICsg ZmQxZWI2ZWJkNzEwMDk5NWJhZDExMDQyYTliZWEwNDgKPiAgOiB2cDgwLTAzLXNlZ21lbnRhdGlv bi0wMwo+Cj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiBGQUlMOiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0wNCAo R1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wLlZQOC1URVNULVZFQ1RPUlMpCj4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiAgIEZpbGUgIi9yb290 L2dzdHJlYW1lci9mbHVzdGVyL2ZsdXN0ZXIvdGVzdC5weSIsIGxpbmUgMTA0LCBpbiBfdGVzdAo+ ICAgICBzZWxmLmFzc2VydEVxdWFsKAo+IEFzc2VydGlvbkVycm9yOiAnN2Y4NDZjOGJkN2NkZmU2 MWY4NTQyZjM4MmY5ZDhlZWInICE9Cj4gJzBjMjdhNDdjNGZkOGJiZmNlMTczZDAwNWJlZjhiZTZh Jwo+IC0gN2Y4NDZjOGJkN2NkZmU2MWY4NTQyZjM4MmY5ZDhlZWIKPiArIDBjMjdhNDdjNGZkOGJi ZmNlMTczZDAwNWJlZjhiZTZhCj4gIDogdnA4MC0wMy1zZWdtZW50YXRpb24tMDQKPgo+ID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Cj4gRkFJTDogdnA4MC0wMy1zZWdtZW50YXRpb24tMTQyNSAoR1N0cmVhbWVyLVZQ OC1WNEwyU0wtR3N0MS4wLlZQOC1URVNULVZFQ1RPUlMpCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFRyYWNl YmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiAgIEZpbGUgIi9yb290L2dzdHJlYW1lci9m bHVzdGVyL2ZsdXN0ZXIvdGVzdC5weSIsIGxpbmUgMTA0LCBpbiBfdGVzdAo+ICAgICBzZWxmLmFz c2VydEVxdWFsKAo+IEFzc2VydGlvbkVycm9yOiAnOTZmZmFjZjBjM2VhZTU5YjU4MjUyYmUyNGE2 MGU5YjInICE9Cj4gJzgzZThhMzIyZThhYjIzZTYwYmExNjQzMGFhY2FkODI3Jwo+IC0gOTZmZmFj ZjBjM2VhZTU5YjU4MjUyYmUyNGE2MGU5YjIKPiArIDgzZThhMzIyZThhYjIzZTYwYmExNjQzMGFh Y2FkODI3Cj4gIDogdnA4MC0wMy1zZWdtZW50YXRpb24tMTQyNQo+Cj4gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiBGQUlMOiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDM2IChHU3RyZWFtZXItVlA4LVY0TDJTTC1H c3QxLjAuVlA4LVRFU1QtVkVDVE9SUykKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gVHJhY2ViYWNrIChtb3N0 IHJlY2VudCBjYWxsIGxhc3QpOgo+ICAgRmlsZSAiL3Jvb3QvZ3N0cmVhbWVyL2ZsdXN0ZXIvZmx1 c3Rlci90ZXN0LnB5IiwgbGluZSAxMDQsIGluIF90ZXN0Cj4gICAgIHNlbGYuYXNzZXJ0RXF1YWwo Cj4gQXNzZXJ0aW9uRXJyb3I6ICdiZmQxN2E1NTdlZTFiYTM0N2M3NTVhMThjZTVhNjRhNicgIT0K PiAnNWJjYTYxYTczM2MxOTM2MjA1ZjgyZGUxNDkyYTFiMmInCj4gLSBiZmQxN2E1NTdlZTFiYTM0 N2M3NTVhMThjZTVhNjRhNgo+ICsgNWJjYTYxYTczM2MxOTM2MjA1ZjgyZGUxNDkyYTFiMmIKPiAg OiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDM2Cj4KPiBSYW4gNTUvNjEgdGVzdHMgc3VjY2Vzc2Z1 bGx5ICAgICAgICAgICAgICAgaW4gMTIuMTA0IHNlY3MKPgo+IEkgYW0gbm90IHRoYXQgZmFtaWxp YXIgd2l0aCB0aGlzIHRvb2wsIGJ1dCBJIGFzc3VtZSBmYWlsdXJlcyBhcmUgYmFkLgo+IEhvd2V2 ZXIgdGhlc2UgbG9vayBsaWtlIFB5dGhvbiBlcnJvcnMgYW5kIG5vdCBnc3QgZXJyb3JzLgo+Cj4g VGhlIEgyNjQgZGVjb2RlciByZXN1bHRlZCBpbjoKPgo+IFJhbiA4NS8xMzUgdGVzdHMgc3VjY2Vz c2Z1bGx5ICAgICAgICAgICAgICAgaW4gNTcuODIxIHNlY3MKPgo+IEkgY2FuIHByb3ZpZGUgdGhl IHNwbGF0IGlmIHlvdSB3YW50LiBUaG9zZSBsb29rZWQgbGlrZSBnc3QgZXJyb3JzLAo+IGJlY2F1 c2UgbW9zdCBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgc3RhdGUgdGhlIGdzdC1sYXVuY2gtMS4wIHJl dHVybmVkCj4gbm9uLXplcm8gZXhpdCBzdGF0dXMgMS4KPgo+Cj4gPiBJdCBzaG91bGQgYmUgZWFz eSB0byB1c2UuCj4KPiBJdCB3YXMuCj4gPgo+ID4gPiBJIHRoaW5rIEknbGwgcmVkbyB0aGUgcGF0 Y2ggd2l0aG91dCB0aGUgUkZDIGFuZCB3aXRob3V0IHRoZSBIMSBlbmNvZGVyCj4gPiA+IHVubGVz cyBhbnlvbmUgaGFzIGFueSBvYmplY3Rpb25zLiAgSSBrbm93IEkgbmVlZCB0byByZWJhc2Ugb24K PiA+ID4gbGludXgtbmV4dCBhbnl3YXkgYmVjYXVzZSB0aGUgcGF0Y2hlcyBkb24ndCBhcHBseSBj bGVhbmx5LiAgSXMgdGhlcmUgYQo+ID4gPiBzcGVjaWZpYyBicmFuY2ggSSBzaG91bGQgdXNlPyAg SSBkb24ndCBrbm93IGlmIHRoaXMgZ29lcyB0aHJvdWdoCj4gPiA+IFNoYXduJ3MgSU1YIHRyZWUg b3IgdGhlIG1lZGlhIHRyZWUgKG9yIGEgY29tYmluYXRpb24pCj4gPiA+Cj4gPgo+ID4gWW91IHNo b3VsZCByZWJhc2Ugb24gbWVkaWEncyBtYXN0ZXIgYnJhbmNoOgo+ID4KPiA+IGh0dHBzOi8vZ2l0 LmxpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0L2xvZy8KPgo+IEknbGwgc3VibWl0IHRoZSBwYXRj aCB3aXRoIGEgY292ZXIgbGV0dGVyIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIFZQOAo+IGFuZCBI MjY0IGZsdXN0ZXIgdGVzdCBpbiB0aGUgY292ZXIgbGV0dGVyLiAgSXMgdGhlcmUgYSBzdGF0ZWxl c3MKPiBkZWNvZGVyIGZvciB0aGUgVlA5IGRlY29kZXI/ICBnc3QtaW5zcGVjdCBvbmx5IHNob3dz IHRoZSBmb2xsb3dpbmcKPiB2NGwyY29kZWNzLgo+Cj4gICB2NGwyc2xoMjY0ZGVjOiBWNEwyIFN0 YXRlbGVzcyBILjI2NCBWaWRlbyBEZWNvZGVyCj4gICB2NGwyc2xtcGVnMmRlYzogVjRMMiBTdGF0 ZWxlc3MgTXBlZzIgVmlkZW8gRGVjb2Rlcgo+ICAgdjRsMnNsdnA4YWxwaGFkZWNvZGViaW46IFZQ OCBBbHBoYSBEZWNvZGVyCj4gICB2NGwyc2x2cDhkZWM6IFY0TDIgU3RhdGVsZXNzIFZQOCBWaWRl byBEZWNvZGVyCj4KPiB0aGFua3MgZm9yIGFsbCB5b3VyIGhlbHAuICBIb3BlZnVsbHkgd2UgY2Fu IGdldCB0aGlzIGludGVncmF0ZWQgc29vbi4KPgoKQWRhbSwKCldoYXQgZGVwcyBkaWQgeW91IGlu c3RhbGwgaW4gb3JkZXIgdG8gZ2V0IHY0bDJjb2RlY3MgYnVpbGRpbmc/IEkKaW5zdGFsbGVkIGxp Ymd1ZGV2LTEuMC1kZXYgYmFzZWQgb24gTmljb2xhcycgc3VnZ2VzdGlvbiBhbmQgcmVidWlsdAoo bm90IHN1cmUgaWYgSSBuZWVkZWQgdG8gcmUtY29uZmlndXJlIHNvbWVob3cpIGJ1dCB0aGVyZSBp cyBzdGlsbApub3RoaW5nIGluIGJ1aWxkL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMv djRsMmNvZGVjcy8uIEEgJ21lc29uCmNvbmZpZ3VyZScgdGVsbHMgbWUgdGhhdCB2NGwyY29kZWNz IGlzIHNldCB0byAnYXV0bycgYnV0IEknbSBub3Qgc3VyZQpob3cgdG8gZmluZCBvdXQgd2hhdCBk ZXBlbmRlbmNpZXMgYXJlIG5lZWRlZCBvciB3aGF0IG1heSBiZSBtaXNzaW5nLgoKQmVzdCByZWdh cmRzLAoKVGltCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpMaW51eC1yb2NrY2hpcCBtYWlsaW5nIGxpc3QKTGludXgtcm9ja2NoaXBAbGlzdHMuaW5mcmFk ZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4 LXJvY2tjaGlwCg== 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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AD434C433F5 for ; Mon, 29 Nov 2021 19:37:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=YDUFQoS9cjhguskX8QSIf5Zix+Lxac8wBKwkX99YMy4=; b=sdUcpblguUZ5Wh o3l2FAO1Gjnud/pnYQlKUvx3cS2/IkjCJGUwNYnES0iRoTV/oW4kWJFQyOPx6mA8AJ91XOubQTuPB wc4/82H4k+8Lk2asgU0aVtv8l8RbAUfcOvPpO/10aaPuyWFUWTTBL07KFc4ri14TX5Tzp//3CKbPj Xo+oye+q9+9fBguT1Yr+w848BYoKrlABRPkOHT0xJ0tUVkkMySuJHnbdgApCyTy4lMw6o2gWTkrqD Aul6O6a+Ch53ejg9VLIZX1smkOio1gbhzXYFl/wHOcC4ryN9dkw2/PY3xWoCm2xSD5P5NthkhpYfl oyGjGAdXzQcrOdc41c/w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mrmRf-0029PA-GY; Mon, 29 Nov 2021 19:36:11 +0000 Received: from mail-pl1-x630.google.com ([2607:f8b0:4864:20::630]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mrmRY-0029OJ-OR for linux-arm-kernel@lists.infradead.org; Mon, 29 Nov 2021 19:36:08 +0000 Received: by mail-pl1-x630.google.com with SMTP id o14so13022688plg.5 for ; Mon, 29 Nov 2021 11:36:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gateworks-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=xohg7JdVvkvO2SUDiXwKowHodphNxP500HwNzMb+bfU=; b=3mJajd4V1DdvWtEF+wYEzCoqrnMMQRznFjD4nvIf9I7+pySjX6zaxFf/1dX6yvFAVo Ud79y+0FkUQvZzWVEB4fcm6/U8zeGg/8/7JodJ4XQYY/HzLufwHcVWafaORCNlApyIsg jmsV9GSaaqh5LWKI/Zr9+xCY4BkfnQzJ2kxrV54UnaNnob6DE9lZ0N7bJI3SeLWeGQL3 n8zH1ni2jqgGratb3Ipr0t3zw+MCdIgUFiEsuDtJ5gjs5e3aSnvyWBCXApLwNVAXQc7Z XVSWfMm6umx0mJmJPaTWV9WDLvRagwtJ8Z++9FtebkJ+kLJGr9DohAH5v1jNl39MKijx imTA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=xohg7JdVvkvO2SUDiXwKowHodphNxP500HwNzMb+bfU=; b=Y6beRep6r1+t1f9GAM1ma7b6A0ocFvjYM4vdlL3cvuX42fF+SsNlxNJ6qFuv13rvkj 6AVRGy00ONAFjcXQIImZs/RKzKKnp1ntDKNhGAjURdbHfnauvzufFyuLvm3sUA/dslny TNdlKP/VErA7WjK1rNL3Kc9VnCeh9rpzfDRGoudTJUJoElGxLbBCpdX8teWnddqci/dl SNCh9pyszkNFC0PZmkkqw9wwARjbjkXTJAgpfyYoLlOYjux1GCUJ78WJbSdpFE8QMe8B qFONJEyNbce1DZDzcmeYrgPfkRG1pDTppVm5rmbPn0UYsQ98ni180C/YdO5Mp0zhjzRm GFtQ== X-Gm-Message-State: AOAM531knZg4KXxRfDeTOjImiFe6b6ACfIqIPTCEZfHxN1bhXxSrkEwG NURig2X7/2jHNmseKYJf0vlzZHDj97wLeoHz+Z4N6g== X-Google-Smtp-Source: ABdhPJxuNaUbjV4bLmcxiXLKB+HIvSn9asc0AxMeUnpXUU1L5OoHO+ZOt1JvoDAaN4JiDPsEAouzXlKexW49JuVqeFU= X-Received: by 2002:a17:902:7c8a:b0:143:bb4a:7bb3 with SMTP id y10-20020a1709027c8a00b00143bb4a7bb3mr63117830pll.46.1638214563723; Mon, 29 Nov 2021 11:36:03 -0800 (PST) MIME-Version: 1.0 References: <20211106183802.893285-1-aford173@gmail.com> <718f7f6d6cd564d031c1963f1590c62d549ae725.camel@ndufresne.ca> <8db00a4b6faa99c940d9bc86e17161eb0db5efe3.camel@ndufresne.ca> <7f94eaacfddb8c5434c17f1e069ea87a17657ce9.camel@ndufresne.ca> In-Reply-To: From: Tim Harvey Date: Mon, 29 Nov 2021 11:35:52 -0800 Message-ID: Subject: Re: [RFC 0/5] arm64: imx8mm: Enable Hantro VPUs To: Adam Ford Cc: Ezequiel Garcia , Nicolas Dufresne , linux-media , Schrempf Frieder , Marek Vasut , Jagan Teki , Adam Ford-BE , cstevens@beaconembedded.com, Philipp Zabel , Mauro Carvalho Chehab , Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Greg Kroah-Hartman , Heiko Stuebner , Lucas Stach , Joakim Zhang , Alice Guo , Peng Fan , "open list:HANTRO VPU CODEC DRIVER" , "open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , open list , "open list:STAGING SUBSYSTEM" X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211129_113604_844700_154A7D48 X-CRM114-Status: GOOD ( 49.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gTW9uLCBOb3YgMjksIDIwMjEgYXQgMTA6NTkgQU0gQWRhbSBGb3JkIDxhZm9yZDE3M0BnbWFp bC5jb20+IHdyb3RlOgo+Cj4gT24gTW9uLCBOb3YgMjksIDIwMjEgYXQgMTA6NTQgQU0gRXplcXVp ZWwgR2FyY2lhCj4gPGV6ZXF1aWVsQHZhbmd1YXJkaWFzdXIuY29tLmFyPiB3cm90ZToKPiA+Cj4g PiBPbiBNb24sIDI5IE5vdiAyMDIxIGF0IDEzOjQ4LCBBZGFtIEZvcmQgPGFmb3JkMTczQGdtYWls LmNvbT4gd3JvdGU6Cj4gPiA+Cj4gPiA+IE9uIFR1ZSwgTm92IDIzLCAyMDIxIGF0IDI6MDcgUE0g Tmljb2xhcyBEdWZyZXNuZSA8bmljb2xhc0BuZHVmcmVzbmUuY2E+IHdyb3RlOgo+ID4gPiA+Cj4g PiA+ID4gTGUgbHVuZGkgMjIgbm92ZW1icmUgMjAyMSDDoCAwOToyNSAtMDgwMCwgVGltIEhhcnZl eSBhIMOpY3JpdCA6Cj4gPiA+ID4gPiBPbiBTYXQsIE5vdiAyMCwgMjAyMSBhdCA3OjM2IEFNIEFk YW0gRm9yZCA8YWZvcmQxNzNAZ21haWwuY29tPiB3cm90ZToKPiA+ID4gPiA+ID4KPiA+ID4gPiA+ ID4gT24gRnJpLCBOb3YgMTksIDIwMjEgYXQgNTozNyBQTSBBZGFtIEZvcmQgPGFmb3JkMTczQGdt YWlsLmNvbT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBPbiBGcmksIE5vdiAx OSwgMjAyMSBhdCAxMDoyOSBBTSBOaWNvbGFzIER1ZnJlc25lIDxuaWNvbGFzQG5kdWZyZXNuZS5j YT4gd3JvdGU6Cj4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gSGkgQWRhbSwgVGltLAo+ ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+IFsuLi5dCj4gPiA+ID4gPiA+ID4gPiA+ID4g PiA+IE5pY29sYXMgYW5kIEFkYW0sCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ ID4gPiA+ID4gPiA+IEZvciB0aGUgSDEgcGF0Y2hlcyBpbiB0aGlzIHNlcmllczogSSd2ZSBiZWVu IGFibGUgdG8gdGVzdCB0aGUgSU1YOE1NCj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+IEgxIEpQRUcg ZW5jb2RlIHVzaW5nIEdTdHJlYW1lciAxLjE4LjU6Cj4gPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICQg Z3N0LWluc3BlY3QtMS4wIHwgZ3JlcCAtZSAidjRsMi4qZW5jIgo+ID4gPiA+ID4gPiA+ID4gPiA+ ID4gPiB2aWRlbzRsaW51eDI6ICB2NGwyanBlZ2VuYzogVjRMMiBKUEVHIEVuY29kZXIKPiA+ID4g PiA+ID4gPiA+ID4gPiA+ID4gJCBnc3QtbGF1bmNoLTEuMCB2aWRlb3Rlc3RzcmMgISBqcGVnZW5j ICEgcnRwanBlZ3BheSAhIHVkcHNpbmsKPiA+ID4gPiA+ID4gPiA+ID4gPiA+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBeIHY0bDJqcGVnZW5jCj4gPiA+ID4gPiA+ID4gPiA+ID4g Pgo+ID4gPiA+ID4gPiA+ID4gPiA+ID4gVGhpcyBpcyBqdXN0IGEgdHJhbnNjcmlwdCBlcnJvciA/ Cj4gPiA+ID4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiA+ID4gPiBOaWNvbGFzLAo+ID4gPiA+ ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+ID4gTm8hIFRoYW5rcyBmb3IgY2F0Y2hpbmcg bXkgbWlzdGFrZS4gSSB3YXMgdGVzdGluZyB3aXRoIHNvZnR3YXJlIGVuY29kZS4uLiBvb29wcyEK PiA+ID4gPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gPiA+ICdnc3QtbGF1bmNoLTEuMCB2 aWRlb3Rlc3RzcmMgISB2NGwyanBlZ2VuYyAhIGZha2VzaW5rJyBhY3R1YWxseSBoYW5ncwo+ID4g PiA+ID4gPiA+ID4gPiA+IHRoZSBib2FyZCBzbyBsaWtlbHkgYSBwb3dlci1kb21haW4gaXNzdWUg dGhlcmU/Cj4gPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiA+IFRoZSB2NGwyLWNvbXBs aWFuY2UgdGVzdHMgZmFpbCBvbiB0aGUgaDEgZGVjb2RlciB3aXRoIGEgaGFuZywgYnV0IEkKPiA+ ID4gPiA+ID4gPiA+ID4gdGhpbmsgd2UncmUgd3JpdGluZyB0byByZWdpc3RlcnMgd2hpY2ggYXJl IG5vdCBkb2N1bWVudGVkIGluIHRoZSBNaW5pCj4gPiA+ID4gPiA+ID4gPiA+IFRSTS4gIFRoZSBN aW5pIFRSTSBkb2Vzbid0IGV4cGxpY2l0bHkgc2hvdyB0aGUgSlBFRyBlbmNvZGluZyBhcyBhCj4g PiA+ID4gPiA+ID4gPiA+IGZlYXR1cmUsIGJ1dCBzb21lIG9mIHRoZSByZWdpc3RlcnMgc3RhdGUg SlBFRywgYnV0IGJlY2F1c2Ugc29tZSBvZiB0aGUKPiA+ID4gPiA+ID4gPiA+ID4gcmVnaXN0ZXJz IHdyaXR0ZW4gZm9yIHRoZSBIMSBhcmUgbm90IGRvY3VtZW50ZWQgaW4gdGhlIFRSTS4gIElmIHRo b3NlCj4gPiA+ID4gPiA+ID4gPiA+IHJlZ2lzdGVycyBhcmUgcmVzdHJpY3RlZCBvciBub3QgaW4g dGhpcyBTb0MsIEkgYW0gY29uY2VybmVkIHRoYXQgaXQKPiA+ID4gPiA+ID4gPiA+ID4gbWlnaHQg YmUgcmVsYXRlZC4gIEknbGwgdHJ5IHRvIHJ1biBzb21lIG1vcmUgdGVzdHMgdGhpcyB3ZWVrZW5k IHRvCj4gPiA+ID4gPiA+ID4gPiA+IGNoZWNrIG9uIHRoZSBzdGF0dXMgb2YgdGhlIHBvd2VyLWRv bWFpbiBzdHVmZi4KPiA+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gPiBUbyB2ZXJpZnkgaWYg dGhlIEhXIHN1cHBvcnQgSlBFRyBlbmNvZGluZyB5b3UgY2FuIHJlYWQgU1dSRUc2MyBiaXQgMjUu IFRoaXMgaXMKPiA+ID4gPiA+ID4gPiA+IGluIHRoZSBUUk0sIGp1c3Qgbm90IGxhYmVsbGVkIHBy b3Blcmx5LiBUbyBtaW1pYyB0aGUgZGVjb2Rpbmcgc2lkZSwgd291bGQgYmUgIkhXCj4gPiA+ID4g PiA+ID4gPiBzeW50aGVzaXMgY29uZmlnIHJlZ2lzdGVyIFgiIHdpdGggdGhlIGJpdCBsYWJlbGxl ZCBTV19FTkNfSlBFR19QUk9GIChidXQKPiA+ID4gPiA+ID4gPiA+IFBST0YvcHJvZmlsZSBpcyBv biBvciBvZmYpLiBJZiB5b3VyIGJvYXJkIGhhbmcgd2hpbGUgcmVhZGluZyB0aGlzLCB5b3UgbGlr ZWx5Cj4gPiA+ID4gPiA+ID4gPiBkaWRuJ3QgZ2V0IHRoZSBwb3dlciBiaXQgcmlnaHQuCj4gPiA+ ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+ID4gSU1YOCBoYXMgYW4gdW5kb2N1bWVudGVkIGNvbnRy b2wgYmxvY2sgdGhpbmcgdGhhdCB3ZSBoYXZlIGJlZW4gZmlnaHRpbmcgd2l0aCBpbgo+ID4gPiA+ ID4gPiA+ID4gaW14OHEsICBwZXJoYXBzIHRoYXQncyB5b3VyIGlzc3VlLiBGZXcgZHJpdmVyIHdh cyBwcm9wb3NlZCwgd2UgYXJlIHN0aWxsIHBlbmRpbmcKPiA+ID4gPiA+ID4gPiA+IG9uIE5YUCBz b2x1dGlvbiB0byBiZSBzdWJtaXR0ZWQgKHRoZXkgYXNrZWQgdXMgdG8gd2FpdCwgc3RpbGwgd2Fp dGluZyA9KSkuCj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBOaWNvbGFzLAo+ID4gPiA+ID4g PiA+Cj4gPiA+ID4gPiA+ID4gVGhhbmtzIGZvciB0aGUgc3VnZ2VzdGlvbiB0byByZWFkIG9mZnNl dCBGQy4gIFRoZXJlIHdhcyBhbiBhdHRlbXB0Cj4gPiA+ID4gPiA+ID4gbWFkZSBieSBMdWNhcyBT dGFjaCB0byBkZXZlbG9wIGEgVlBVIGJsay1jdHJsIGRyaXZlciB0byBjb29yZGluYXRlIHRoZQo+ ID4gPiA+ID4gPiA+IHBvd2VyLWRvbWFpbnMgd2l0aCB0aGUgR1BDIGRyaXZlci4gVW5mb3J0dW5h dGVseSwgaXQgZG9lcyBhcHBlYXIgdG8KPiA+ID4gPiA+ID4gPiBoYW5nLCBzbyBpdCBtaWdodCBu b3QgYmUgb3BlcmF0aW5nIGNvcnJlY3RseS4KPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IEx1 Y2FzLAo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gRG8geW91IGhhdmUgYW55IGlkZWEgb2Yg c3R1ZmYgSSBjYW4gdHJ5IHRvIHNlZSBpZiB0aGUgcG93ZXIgZG9tYWluIGlzCj4gPiA+ID4gPiA+ ID4gY29taW5nIG9ubGluZSBjb3JyZWN0bHk/Cj4gPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gPiBb ICAgMTAuNDM0NzI3XSBpbXgtcGdjIGlteC1wZ2MtZG9tYWluLjY6IHJlcXVlc3QgdGhlIHZwdW1p eCBkb21haW4gdG8gcG93ZXIgdXAKPiA+ID4gPiA+ID4gPiBbICAgMTAuNDYzNjQ3XSBpbXgtcGdj IGlteC1wZ2MtZG9tYWluLjY6IHJlcXVlc3QgdGhlIHZwdW1peCBBREI0MDAgdG8gcG93ZXIgdXAK PiA+ID4gPiA+ID4gPiBbICAgMTAuNTE3MTU1XSBpbXgtcGdjIGlteC1wZ2MtZG9tYWluLjY6IGdl bnBkIHZwdW1peCBzdWNjZXNzCj4gPiA+ID4gPiA+ID4gWyAgIDEwLjcyODkyN10gdnB1OiBzZXQg ZnVzZSBiaXRzIHRvIGVuYWJsZQo+ID4gPiA+ID4gPiA+IFsgICAxMC44MjU1MDBdIGlteDhtLWJs ay1jdHJsIDM4MzMwMDAwLmJsay1jdHJsOiBwb3dlciB2cHVibGstZzEgR1BDIGRvbWFpbgo+ID4g PiA+ID4gPiA+IFsgICAxMC44Nzg5ODZdIGlteC1wZ2MgaW14LXBnYy1kb21haW4uNzogcmVxdWVz dCB0aGUgdnB1LWcxIGRvbWFpbiB0byBwb3dlciB1cAo+ID4gPiA+ID4gPiA+IFsgICAxMC45MzI0 MjldIGlteC1wZ2MgaW14LXBnYy1kb21haW4uNzogZ2VucGQgdnB1LWcxIHN1Y2Nlc3MKPiA+ID4g PiA+ID4gPiBbICAgMTAuOTcxOTg4XSBpbXg4bS1ibGstY3RybCAzODMzMDAwMC5ibGstY3RybDog Z2VucGQgdnB1YmxrLWcxIHN1Y2Nlc3MKPiA+ID4gPiA+ID4gPiBbICAgMTEuMDA0NzI2XSBoYW50 cm8tdnB1IDM4MzAwMDAwLnZpZGVvLWNvZGVjOiByZWdpc3RlcmVkCj4gPiA+ID4gPiA+ID4gbnhw LGlteDhtbS12cHUtZGVjIGFzIC9kZXYvdmlkZW8wCj4gPiA+ID4gPiA+ID4gWyAgIDExLjA0MDc2 MF0gaW14OG0tYmxrLWN0cmwgMzgzMzAwMDAuYmxrLWN0cmw6IHBvd2VyIHZwdWJsay1nMiBHUEMg ZG9tYWluCj4gPiA+ID4gPiA+ID4gWyAgIDExLjA2NjE4MV0gaW14LXBnYyBpbXgtcGdjLWRvbWFp bi44OiByZXF1ZXN0IHRoZSB2cHUtZzIgZG9tYWluIHRvIHBvd2VyIHVwCj4gPiA+ID4gPiA+ID4g WyAgIDExLjA4Nzg4N10gaW14LXBnYyBpbXgtcGdjLWRvbWFpbi44OiBnZW5wZCB2cHUtZzIgc3Vj Y2Vzcwo+ID4gPiA+ID4gPiA+IFsgICAxMS4xMTM4MDhdIGlteDhtLWJsay1jdHJsIDM4MzMwMDAw LmJsay1jdHJsOiBnZW5wZCB2cHVibGstZzIgc3VjY2Vzcwo+ID4gPiA+ID4gPiA+IFsgICAxMS4x Mzk2MzRdIGhhbnRyby12cHUgMzgzMTAwMDAudmlkZW8tY29kZWM6IHJlZ2lzdGVyZWQKPiA+ID4g PiA+ID4gPiBueHAsaW14OG1tLXZwdS1nMi1kZWMgYXMgL2Rldi92aWRlbzEKPiA+ID4gPiA+ID4g PiBbICAgMTEuMTU2NDYzXSBpbXg4bS1ibGstY3RybCAzODMzMDAwMC5ibGstY3RybDogcG93ZXIg dnB1YmxrLWgxIEdQQyBkb21haW4KPiA+ID4gPiA+ID4gPiBbICAgMTEuMTcwODE3XSBpbXgtcGdj IGlteC1wZ2MtZG9tYWluLjk6IHJlcXVlc3QgdGhlIHZwdS1oMSBkb21haW4gdG8gcG93ZXIgdXAK PiA+ID4gPiA+ID4gPiBbICAgMTEuMjMyOTkwXSBpbXgtcGdjIGlteC1wZ2MtZG9tYWluLjk6IGdl bnBkIHZwdS1oMSBzdWNjZXNzCj4gPiA+ID4gPiA+ID4gWyAgIDExLjI1MjU0Nl0gaW14OG0tYmxr LWN0cmwgMzgzMzAwMDAuYmxrLWN0cmw6IGdlbnBkIHZwdWJsay1oMSBzdWNjZXNzCj4gPiA+ID4g PiA+ID4gWyAgIDExLjI2NjE1Ml0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogQ2hl Y2tpbmcgdnB1LT5lbmNfYmFzZSArIDB4ZmMKPiA+ID4gPiA+ID4gPgo+ID4gPiA+ID4gPiA+IDxo YW5nPgo+ID4gPiA+ID4gPiA+Cj4gPiA+ID4gPiA+ID4gYWRhbQo+ID4gPiA+ID4gPiA+Cj4gPiA+ ID4gPiA+Cj4gPiA+ID4gPiA+IE5pY29sYXMsIFRpbSwgYW5kIEx1Y2FzLAo+ID4gPiA+ID4gPgo+ ID4gPiA+ID4gPiBJIHRoaW5rIEkgaGF2ZSB0aGUgaGFuZ2luZyByZXNvbHZlZCBpbiB0aGUgcG93 ZXIgZG9tYWlucywgYW5kIEknbGwgYmUKPiA+ID4gPiA+ID4gcHVzaGluZyB0aGUgZml4IHRvIHRo ZSBHUEN2Mi4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gRm9yIHRoZSBIMSBFbmNvZGVyLCBJIGFk ZGVkIHNvbWUgZGVidWdnaW5nIGNvZGUgdG8gcmVhZCB0aGUgb2Zmc2V0Cj4gPiA+ID4gPiA+IDB4 ZmMgYW5kIHByaW50IHNvbWUgZGF0YSBiYXNlZCBvbiB0aGUgZmluZGluZ3Mgb2YgdGhhdCBWUFUt aDEgb2Zmc2V0Lgo+ID4gPiA+ID4gPiBJIGJhc2ljYWxseSBjaGVjayB0aGUgdmFyaW91cyBiaXRz IHBlciB0aGUgVFJNIHRvIHNlZSBpZiB0aGV5IGFyZSBzZXQKPiA+ID4gPiA+ID4gYW5kIHByaW50 IHNvbWUgc3BsYXQgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3QgdGhlIGZ1bmN0aW9uIGlzCj4g PiA+ID4gPiA+IHN1cHBvcnRlZC4KPiA+ID4gPiA+ID4KPiA+ID4gPiA+ID4gWyAgICA4Ljg2MTg2 NV0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogQ2hlY2tpbmcgdnB1LT5lbmNfYmFz ZSArIDB4ZmMKPiA+ID4gPiA+ID4gWyAgICA4Ljg3MDU5NF0gaGFudHJvLXZwdSAzODMyMDAwMC52 aWRlby1jb2RlYzogU3RhYmlsaXphdGlvbiBzdXBwb3J0ZWQgYnkgSFcKPiA+ID4gPiA+ID4gWyAg ICA4Ljg4OTM0MV0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogVlA4IGVuY29kaW5n IHN1cHBvcnRlZCBieSBIVwo+ID4gPiA+ID4gPiBbICAgIDguODk5Mzg2XSBoYW50cm8tdnB1IDM4 MzIwMDAwLnZpZGVvLWNvZGVjOiBILjI2NCBlbmNvZGluZyBzdXBwb3J0ZWQgYnkgSFcKPiA+ID4g PiA+ID4gWyAgICA4LjkxODE3MV0gaGFudHJvLXZwdSAzODMyMDAwMC52aWRlby1jb2RlYzogUkdC IHRvIFlVViBjb252ZXJzaW9uCj4gPiA+ID4gPiA+IHN1cHBvcnRlZCBieSBIVwo+ID4gPiA+ID4g PiBbICAgIDguOTM0MDY3XSBoYW50cm8tdnB1IDM4MzIwMDAwLnZpZGVvLWNvZGVjOiByZWdpc3Rl cmVkCj4gPiA+ID4gPiA+IG54cCxpbXg4bW0tdnB1LWgxLWVuYyBhcyAvZGV2L3ZpZGVvMgo+ID4g PiA+ID4gPgo+ID4gPiA+ID4gPiBVbmZvcnR1bmF0ZWx5LCBKUEVHIGlzIG5vdCBsaXN0ZWQgYXMg c3VwcG9ydGVkLiAgOi0oCj4gPiA+ID4gPgo+ID4gPiA+ID4gQWRhbSwKPiA+ID4gPiA+Cj4gPiA+ ID4gPiBXZWxsIG5vdCBoYXZpbmcgSlBFRyBlbmNvZGUgc3VwcG9ydCBpcyB1bmZvcnR1bmF0ZSwg YW5kIHVuZXhwZWN0ZWQuIERvCj4gPiA+ID4gPiB3ZSBub3QgaGF2ZSBoYW50cm8gc3VwcG9ydCB5 ZXQgZm9yIFZQOC9IMjY0IGVuY29kZT8KPiA+ID4gPgo+ID4gPiA+IFRoZXJlIGlzIG5vIG1haW5s aW5lIHN1cHBvcnQgeWV0LiBZb3UgY2FuIGRlcml2ZSBmcm9tIFJLMzI4OCBzdXBwb3J0IHVzaW5n IEdvb2dsZSBDaHJvbWVPUyBtZXRob2QgKGEgdjRsMiBwbHVnaW5zIHRoYXQgc2ltdWxhdGUgaW4g dXNlcnNwYWNlIGEgc3RhdGVmdWwgZW5jb2Rlcik6Cj4gPiA+ID4KPiA+ID4gPiAtIGxpYnY0bCBw bHVnaW5zIC8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3MvdGhp cmRfcGFydHkvbGlidjRscGx1Z2lucy8rL3JlZnMvaGVhZHMvbWFzdGVyCj4gPiA+ID4gLSBLZXJu ZWwgRHJpdmVyIC8gaHR0cHM6Ly9jaHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3Mv dGhpcmRfcGFydHkva2VybmVsLysvY2hyb21lb3MtNC40L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v cm9ja2NoaXAtdnB1Lwo+ID4gPiA+Cj4gPiA+ID4gPgo+ID4gPiA+ID4gSSBoYXZlbid0IHF1aXRl IGZpZ3VyZWQgb3V0IGhvdyB0byBidWlsZCBhIG1vZGVybiBtb25vLXJlcG8gZ3N0cmVhbWVyCj4g PiA+ID4gPiBvbiB0aGUgdWJ1bnR1IDIwLjA0IHJvb3RmcyBJJ20gdXNpbmcgc28gSSBoYXZlbid0 IGJlZW4gYWJsZSB0byB0ZXN0Cj4gPiA+ID4gPiBWUFUgZW5jb2RlL2RlY29kZSBwcm9wZXJseS4g SSdsbCBrZWVwIHdvcmtpbmcgb24gaXQgd2hlbiBJJ20gYmFjayBpbgo+ID4gPiA+ID4gdGhlIG9m ZmljZSB0aGUgZm9sbG93aW5nIHdlZWsuCj4gPiA+ID4KPiA+ID4gPiBEaWQgYSBxdWljayB0ZXN0 IHRvIG1ha2Ugc3VyZSB0aGVyZSBpc24ndCBhbnkgdWJ1bnR1IHNwZWNpZmljIGJsb2NrZXJzLCBo ZXJlJ3MgYQo+ID4gPiA+IGRpcnR5IHNjcmlwdCB0aGF0IHByb2R1Y2UgYSBtaW5pbWFsIEdTdHJl YW1lciwgdGhlcmUgd2FzIHJlYWxseSBub3RoaW5nIHNwZWNpYWwKPiA+ID4gPiBjb21wYXJlIHRv IG90aGVyIG1lc29uIHByb2plY3RzLiBOb3RlIHRoYXQgSSB1c2UgLS13cmFwLW1vZGU9bm9mYWxs YmFjayB0byBhdm9pZAo+ID4gPiA+IGxldHRpbmcgR1N0cmVhbWVyIGNvbXBsZXRlIGl0J3MgZmVh dHVyZS1zZXQgYnkgZG93bmxvYWRpbmcgdGhlIHBsYW5ldC4gVGhpcwo+ID4gPiA+IGFscmVhZHkg YnVpbGQgcXVpdGUgYSBsb3QgYW5kIGNvdWxkIGxpa2VseSBiZSBtYWRlIHNtYWxsZXIgYnkgYXZv aWQgcGx1Z2lucy1nb29kCj4gPiA+ID4gYnVpbGQtZGVwIGNhbGwsIGJ1dCB0aGVuIHlvdSBuZWVk IHRvIGNoZWNrIGZvciB2NGwyb2RlY3MgYW5kIHZpZGVvNGxpbnV4IGRldnMKPiA+ID4gPiAobW9z dGx5IGd1ZGV2IGEgZ2xpYiB1ZGV2IGJpbmRpbmcpLgo+ID4gPiA+Cj4gPiA+ID4gIyBJbnN0YWxs IHVidW50dQo+ID4gPiA+IHBvZG1hbiBydW4gLWl0IC0tcm0gdWJ1bnR1OjIwLjA0Cj4gPiA+ID4g c2VkIC1pICJzLyMgZGViLXNyYy9kZWItc3JjLyIgL2V0Yy9hcHQvc291cmNlcy5saXN0Cj4gPiA+ ID4gYXB0IHVwZGF0ZQo+ID4gPiA+IGFwdCBidWlsZC1kZXAgZ3N0cmVhbWVyMS4wLXBsdWdpbnMt Z29vZAo+ID4gPiA+IGFwdCBpbnN0YWxsIGdpdCBweXRob24zLXBpcCBmbGV4IGJpc29uCj4gPiA+ ID4KPiA+ID4gPiAjIE5lZWQgYSBuZXdlciBtZXNvbgo+ID4gPiA+IHBpcDMgaW5zdGFsbCAtLXVz ZXIgbWVzb24KPiA+ID4gPiBleHBvcnQgUEFUSD0kUEFUSDp+Ly5sb2NhbC9iaW4KPiA+ID4gPgo+ ID4gPiA+ICMgQnVpbGQgR1N0cmVhbWVyCj4gPiA+ID4gZ2l0IGNsb25lIGh0dHBzOi8vZ2l0bGFi LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0cmVhbWVyLmdpdAo+ID4gPiA+IGNkIGdzdHJl YW1lcgo+ID4gPiA+IG1lc29uIHNldHVwIGJ1aWxkIC0td3JhcC1tb2RlPW5vZmFsbGJhY2sKPiA+ ID4gPiBuaW5qYSAtQyBidWlsZAo+ID4gPiA+Cj4gPiA+ID4gIyBSdW4gaW4tcGxhY2UKPiA+ID4g PiAuL2dzdC1lbnYucHkKPiA+ID4gPiBnc3QtaW5zcGVjdC0xLjAgdjRsMmNvZGVjcwo+ID4gPiA+ IGdzdC1pbnNwZWN0IDEuMCB2aWRlbzRsaW51eDIKPiA+ID4gPgo+ID4gPiBUaGFua3MgZm9yIHRo ZSBzdWdnZXN0aW9ucy4KPiA+ID4KPiA+ID4gSSBkb3dubG9hZGVkIHdoYXQncyBpbiB0aGUgbWFz dGVyIHJlcG86Cj4gPiA+Cj4gPiA+IFtnc3QtbWFpbl0gcm9vdEBsb2NhbGhvc3Q6fi9nc3RyZWFt ZXIjIGdzdC1pbnNwZWN0LTEuMCB2NGwyY29kZWNzCj4gPiA+Cj4gPiA+ICoqIChnc3QtcGx1Z2lu LXNjYW5uZXI6NzMxNyk6IENSSVRJQ0FMICoqOiAxMDoyOTo1MS44NDc6IGNhbid0IGZpbmQKPiA+ ID4gZ2kucmVwb3NpdG9yeS5Hc3QKPiA+ID4gUGx1Z2luIERldGFpbHM6Cj4gPiA+ICAgTmFtZSAg ICAgICAgICAgICAgICAgICAgIHY0bDJjb2RlY3MKPiA+ID4gICBEZXNjcmlwdGlvbiAgICAgICAg ICAgICAgVjRMMiBDT0RFQyBBY2NlbGVyYXRvcnMgcGx1Z2luCj4gPiA+ICAgRmlsZW5hbWUKPiA+ ID4gL3Jvb3QvZ3N0cmVhbWVyL2J1aWxkZGlyL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9z eXMvdjRsMmNvZGVjcy9saWJnc3R2NGwyY29kZWNzLnNvCj4gPiA+ICAgVmVyc2lvbiAgICAgICAg ICAgICAgICAgIDEuMTkuMy4xCj4gPiA+ICAgTGljZW5zZSAgICAgICAgICAgICAgICAgIExHUEwK PiA+ID4gICBTb3VyY2UgbW9kdWxlICAgICAgICAgICAgZ3N0LXBsdWdpbnMtYmFkCj4gPiA+ICAg QmluYXJ5IHBhY2thZ2UgICAgICAgICAgIEdTdHJlYW1lciBCYWQgUGx1Zy1pbnMgZ2l0Cj4gPiA+ ICAgT3JpZ2luIFVSTCAgICAgICAgICAgICAgIFVua25vd24gcGFja2FnZSBvcmlnaW4KPiA+ID4K PiA+ID4gICB2NGwyc2xoMjY0ZGVjOiBWNEwyIFN0YXRlbGVzcyBILjI2NCBWaWRlbyBEZWNvZGVy Cj4gPiA+ICAgdjRsMnNsbXBlZzJkZWM6IFY0TDIgU3RhdGVsZXNzIE1wZWcyIFZpZGVvIERlY29k ZXIKPiA+ID4gICB2NGwyc2x2cDhhbHBoYWRlY29kZWJpbjogVlA4IEFscGhhIERlY29kZXIKPiA+ ID4gICB2NGwyc2x2cDhkZWM6IFY0TDIgU3RhdGVsZXNzIFZQOCBWaWRlbyBEZWNvZGVyCj4gPiA+ Cj4gPiA+ICAgNCBmZWF0dXJlczoKPiA+ID4gICArLS0gNCBlbGVtZW50cwo+ID4gPgo+ID4gPiBb Z3N0LW1haW5dIHJvb3RAbG9jYWxob3N0On4vZ3N0cmVhbWVyIyBnc3QtaW5zcGVjdC0xLjAgdmlk ZW80bGludXgyCj4gPiA+IFBsdWdpbiBEZXRhaWxzOgo+ID4gPiAgIE5hbWUgICAgICAgICAgICAg ICAgICAgICB2aWRlbzRsaW51eDIKPiA+ID4gICBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgZWxl bWVudHMgZm9yIFZpZGVvIDQgTGludXgKPiA+ID4gICBGaWxlbmFtZQo+ID4gPiAvcm9vdC9nc3Ry ZWFtZXIvYnVpbGRkaXIvc3VicHJvamVjdHMvZ3N0LXBsdWdpbnMtZ29vZC9zeXMvdjRsMi9saWJn c3R2aWRlbzRsaW51eDIuc28KPiA+ID4gICBWZXJzaW9uICAgICAgICAgICAgICAgICAgMS4xOS4z LjEKPiA+ID4gICBMaWNlbnNlICAgICAgICAgICAgICAgICAgTEdQTAo+ID4gPiAgIFNvdXJjZSBt b2R1bGUgICAgICAgICAgICBnc3QtcGx1Z2lucy1nb29kCj4gPiA+ICAgQmluYXJ5IHBhY2thZ2Ug ICAgICAgICAgIEdTdHJlYW1lciBHb29kIFBsdWctaW5zIGdpdAo+ID4gPiAgIE9yaWdpbiBVUkwg ICAgICAgICAgICAgICBVbmtub3duIHBhY2thZ2Ugb3JpZ2luCj4gPiA+Cj4gPiA+ICAgdjRsMmRl dmljZXByb3ZpZGVyOiBWaWRlbyAodmlkZW80bGludXgyKSBEZXZpY2UgUHJvdmlkZXIKPiA+ID4g ICB2NGwyanBlZ2VuYzogVjRMMiBKUEVHIEVuY29kZXIKPiA+ID4gICB2NGwycmFkaW86IFJhZGlv ICh2aWRlbzRsaW51eDIpIFR1bmVyCj4gPiA+ICAgdjRsMnNpbms6IFZpZGVvICh2aWRlbzRsaW51 eDIpIFNpbmsKPiA+ID4gICB2NGwyc3JjOiBWaWRlbyAodmlkZW80bGludXgyKSBTb3VyY2UKPiA+ ID4KPiA+ID4gICA1IGZlYXR1cmVzOgo+ID4gPiAgICstLSA0IGVsZW1lbnRzCj4gPiA+ICAgKy0t IDEgZGV2aWNlIHByb3ZpZGVycwo+ID4gPgo+ID4gPiBJIHN0aWxsIGhhdmUgdGhlIEgxIGVuY29k ZXIgZW5hYmxlZCwgYnV0IEkga25vdyBKUEVHIGlzbid0IHN1cHBvcnRlZCwKPiA+ID4gc28gSSdt IGdvaW5nIHRvIGF0dGVtcHQgdG8gZG8gc29tZSBkZWNvZGluZyBhbmQgcGlwZSB0byBmYWtlc2lu ayBzaW5jZQo+ID4gPiBJIGRvbid0IGhhdmUgYSBmdW5jdGlvbmFsIGRpc3BsYXkgeWV0Lgo+ID4g Pgo+ID4gPiBnc3QtbGF1bmNoLTEuMCAtZXYgZmlsZXNyYyBsb2NhdGlvbj10cmFpbGVyXzEwODBw X2gyNjRfbXAzLmF2aSAhCj4gPiA+IGRlY29kZWJpbjMgICEgZmFrZXNpbmsKPiA+ID4KPiA+ID4g UmVkaXN0cmlidXRlIGxhdGVuY3kuLi4KPiA+ID4gL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3RE ZWNvZGViaW4zOmRlY29kZWJpbjMtMC92NGwyc2xoMjY0ZGVjOnY0bDJzbGgyNjRkZWMwLkdzdFBh ZDpzcmM6Cj4gPiA+IGNhcHMgPSB2aWRlby94LXJhdywgZm9ybWF0PShzdHJpbmcpTlYxMiwgd2lk dGg9KGludCkxOTIwLAo+ID4gPiBoZWlnaHQ9KGludCkxMDgwLCBpbnRlcmxhY2UtbW9kZT0oc3Ry aW5nKXByb2dyZXNzaXZlLAo+ID4gPiBtdWx0aXZpZXctbW9kZT0oc3RyaW5nKW1vbm8sCj4gPiA+ IG11bHRpdmlldy1mbGFncz0oR3N0VmlkZW9NdWx0aXZpZXdGbGFnc1NldCkwOmZmZmZmZmZmOi9y aWdodC12aWV3LWZpcnN0L2xlZnQtZmxpcHBlZC9sZWZ0LWZsb3BwZWQvcmlnaHQtZmxpcHBlZC9y aWdodC1mbG9wcGVkL2hhbGYtYXNwZWN0L21peGVkLW1vbm8sCj4gPiA+IHBpeGVsLWFzcGVjdC1y YXRpbz0oZnJhY3Rpb24pMS8xLCBmcmFtZXJhdGU9KGZyYWN0aW9uKTI1LzEKPiA+ID4gL0dzdFBp cGVsaW5lOnBpcGVsaW5lMC9Hc3REZWNvZGViaW4zOmRlY29kZWJpbjMtMC5Hc3RHaG9zdFBhZDp2 aWRlb18wOgo+ID4gPiBjYXBzID0gdmlkZW8veC1yYXcsIGZvcm1hdD0oc3RyaW5nKU5WMTIsIHdp ZHRoPShpbnQpMTkyMCwKPiA+ID4gaGVpZ2h0PShpbnQpMTA4MCwgaW50ZXJsYWNlLW1vZGU9KHN0 cmluZylwcm9ncmVzc2l2ZSwKPiA+ID4gbXVsdGl2aWV3LW1vZGU9KHN0cmluZyltb25vLAo+ID4g PiBtdWx0aXZpZXctZmxhZ3M9KEdzdFZpZGVvTXVsdGl2aWV3RmxhZ3NTZXQpMDpmZmZmZmZmZjov cmlnaHQtdmlldy1maXJzdC9sZWZ0LWZsaXBwZWQvbGVmdC1mbG9wcGVkL3JpZ2h0LWZsaXBwZWQv cmlnaHQtZmxvcHBlZC9oYWxmLWFzcGVjdC9taXhlZC1tb25vLAo+ID4gPiBwaXhlbC1hc3BlY3Qt cmF0aW89KGZyYWN0aW9uKTEvMSwgZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xCj4gPiA+IC9Hc3RQ aXBlbGluZTpwaXBlbGluZTAvR3N0RGVjb2RlYmluMzpkZWNvZGViaW4zLTAuR3N0R2hvc3RQYWQ6 dmlkZW9fMC5Hc3RQcm94eVBhZDpwcm94eXBhZDY6Cj4gPiA+IGNhcHMgPSB2aWRlby94LXJhdywg Zm9ybWF0PShzdHJpbmcpTlYxMiwgd2lkdGg9KGludCkxOTIwLAo+ID4gPiBoZWlnaHQ9KGludCkx MDgwLCBpbnRlcmxhY2UtbW9kZT0oc3RyaW5nKXByb2dyZXNzaXZlLAo+ID4gPiBtdWx0aXZpZXct bW9kZT0oc3RyaW5nKW1vbm8sCj4gPiA+IG11bHRpdmlldy1mbGFncz0oR3N0VmlkZW9NdWx0aXZp ZXdGbGFnc1NldCkwOmZmZmZmZmZmOi9yaWdodC12aWV3LWZpcnN0L2xlZnQtZmxpcHBlZC9sZWZ0 LWZsb3BwZWQvcmlnaHQtZmxpcHBlZC9yaWdodC1mbG9wcGVkL2hhbGYtYXNwZWN0L21peGVkLW1v bm8sCj4gPiA+IHBpeGVsLWFzcGVjdC1yYXRpbz0oZnJhY3Rpb24pMS8xLCBmcmFtZXJhdGU9KGZy YWN0aW9uKTI1LzEKPiA+ID4gL0dzdFBpcGVsaW5lOnBpcGVsaW5lMC9Hc3REZWNvZGViaW4zOmRl Y29kZWJpbjMtMC9Hc3RNdWx0aVF1ZXVlOm11bHRpcXVldWUwOgo+ID4gPiBtaW4taW50ZXJsZWF2 ZS10aW1lID0gMzAwMDAwMDAwCj4gPiA+IFJlZGlzdHJpYnV0ZSBsYXRlbmN5Li4uCj4gPiA+IC9H c3RQaXBlbGluZTpwaXBlbGluZTAvR3N0RGVjb2RlYmluMzpkZWNvZGViaW4zLTAvdjRsMnNsaDI2 NGRlYzp2NGwyc2xoMjY0ZGVjMC5Hc3RQYWQ6c2luazoKPiA+ID4gY2FwcyA9IHZpZGVvL3gtaDI2 NCwgdmFyaWFudD0oc3RyaW5nKWl0dSwgZnJhbWVyYXRlPShmcmFjdGlvbikyNS8xLAo+ID4gPiB3 aWR0aD0oaW50KTE5MjAsIGhlaWdodD0oaW50KTEwODAsIGNocm9tYS1mb3JtYXQ9KHN0cmluZyk0 OjI6MCwKPiA+ID4gYml0LWRlcHRoLWx1bWE9KHVpbnQpOCwgYml0LWRlcHRoLWNocm9tYT0odWlu dCk4LAo+ID4gPiBwYXJzZWQ9KGJvb2xlYW4pdHJ1ZSwgc3RyZWFtLWZvcm1hdD0oc3RyaW5nKWF2 YywgYWxpZ25tZW50PShzdHJpbmcpYXUsCj4gPiA+IHByb2ZpbGU9KHN0cmluZyloaWdoLCBsZXZl bD0oc3RyaW5nKTQsCj4gPiA+IGNvZGVjX2RhdGE9KGJ1ZmZlcikwMTY0MDAyOGZmZTEwMDFhNjc2 NDAwMjhhY2Q5NDA3ODAyMjdlNTg0MDAwMDAzMDAwNDAwMDAwMzAwYzgzYzYwYzY1ODAxMDAwNjY4 ZWJlM2NiMjJjMAo+ID4gPiBOZXcgY2xvY2s6IEdzdFN5c3RlbUNsb2NrCj4gPiA+Cj4gPiA+IEFu ZCBpdCBhcHBlYXJzIHRvIHN0cmVhbSwgYmVjYXVzZSB0aGUgY291bnRlciBpbmNyZWFzZXMuICBJ IGhhdmVuJ3QKPiA+ID4gY2hlY2tlZCB0aGUgQ1BVIHV0aWxpemF0aW9uLCBidXQgdGhlIGZhY3Qg dGhhdCBpdCBzaG93cyB2NGwyc2xoMjY0ZGVjCj4gPiA+IGlzIGdvb2QuCj4gPiA+Cj4gPiA+IElz IHRoZXJlIGEgd2F5IHRvIGtub3cgaWYvaG93IHRoZSBkZWNvZGVyIGlzIHVzaW5nIHRoZSBwcm9w ZXIgVlBVPyAgSQo+ID4gPiBhc3N1bWUgaWYgaXQgd2Fzbid0IHVzaW5nIHRoZSBwcm9wZXIgb25l LCBpdCB3b3VsZCBmYWlsLCBidXQgd2FzIGp1c3QKPiA+ID4gY3VyaW91cy4KPiA+ID4KPiA+Cj4g PiBBIGZldyB3YXlzLiBZb3UgY2FuIGNoZWNrIC9wcm9jL2ludGVycnVwdHMsIHdoaWNoIHNob3Vs ZCBoYXZlCj4gPiBWUFUgYWN0aXZpdHkuCj4gPgo+ID4gT3IgZW5hYmxlIGRlYnVnIG1lc3NhZ2Vz IGZvciB0aGUgbW9kdWxlLAo+ID4gdXNpbmcgdGhlIGRlYnVnIGhhbnRybyBwYXJhbWV0ZXIuIFY0 TDIgaGFzIGRlYnVnIG1lc3NhZ2VzCj4gPiB0aGF0IHlvdSBjYW4gZW5hYmxlLCBzZWUgL3N5cy9j bGFzcy92aWRlbzRsaW51eC92aWRlbzAvZGV2X2RlYnVnLgo+ID4KPiA+IEluc3RlYWQgb2YgZmFr ZXNpbmsgeW91IGNhbiBvdXRwdXQgdG8gcG5nZW5jL2pwZWdlbmMgYW5kIGNoZWNrIHRoZSBvdXRw dXQKPiA+IGlzIHZpc3VhbGx5IGNvcnJlY3QuIElmIGF0IGFsbCBwb3NzaWJsZSwgdGhlIHByb3Bl ciB3YXkgaXMgdG8gdXNlIEZsdXN0ZXIsCj4gPiBhbmQgcmVwb3J0IHRoZSBzY29yZSB5b3UgZ2V0 Ogo+ID4KPiA+IGh0dHBzOi8vZ2l0aHViLmNvbS9mbHVlbmRvL2ZsdXN0ZXIKPiA+Cj4KPiBJIHJh biBmbHVzdGVyIG9uIHRoZSBWUDggZGVjb2RlciwgYnV0IG9ubHkgNTUvNjEgcGFzc2VkLgo+Cj4g KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IFJ1bm5pbmcgdGVz dCBzdWl0ZSBWUDgtVEVTVC1WRUNUT1JTIHdpdGggZGVjb2RlciBHU3RyZWFtZXItVlA4LVY0TDJT TC1Hc3QxLjAKPiBVc2luZyA0IHBhcmFsbGVsIGpvYihzKQo+ICoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioKPgo+IFtURVNUIFNVSVRFICAgICAgXSAoREVDT0RFUiAg ICAgICAgICAgICAgICAgICAgKSBURVNUIFZFQ1RPUgo+ICAgICAuLi4gUkVTVUxUCj4gLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4w KQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMDQgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVD VE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNp dmUtMDAxIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0 TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1jb21wcmVoZW5zaXZlLTAwMiAuLi4gU3VjY2Vzcwo+IFtW UDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAt Y29tcHJlaGVuc2l2ZS0wMDMgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJl YW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNpdmUtMDA1IC4uLiBT dWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjAp Cj4gdnA4MC0wMC1jb21wcmVoZW5zaXZlLTAwNiAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNU T1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2 ZS0wMDcgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRM MlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNpdmUtMDA4IC4uLiBTdWNjZXNzCj4gW1ZQ OC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1j b21wcmVoZW5zaXZlLTAxMSAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVh bWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMDkgLi4uIFN1 Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkK PiB2cDgwLTAwLWNvbXByZWhlbnNpdmUtMDEyIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RP UlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1jb21wcmVoZW5zaXZl LTAxMyAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwy U0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMTQgLi4uIFN1Y2Nlc3MKPiBbVlA4 LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNv bXByZWhlbnNpdmUtMDEwIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFt ZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMC1jb21wcmVoZW5zaXZlLTAxNiAuLi4gU3Vj Y2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+ IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMTcgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9S U10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAwLWNvbXByZWhlbnNpdmUt MDE4IC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJT TC1Hc3QxLjApIHZwODAtMDEtaW50cmEtMTQwMAo+ICAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVT VC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKSB2cDgwLTAxLWludHJhLTE0 MTYKPiAgICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgt VjRMMlNMLUdzdDEuMCkgdnA4MC0wMS1pbnRyYS0xNDE3Cj4gICAgIC4uLiBTdWNjZXNzCj4gW1ZQ OC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApIHZwODAtMDEtaW50 cmEtMTQxMQo+ICAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVy LVZQOC1WNEwyU0wtR3N0MS4wKSB2cDgwLTAyLWludGVyLTE0MDIKPiAgICAgLi4uIFN1Y2Nlc3MK PiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkgdnA4MC0w Mi1pbnRlci0xNDEyCj4gICAgIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3Ry ZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApIHZwODAtMDItaW50ZXItMTQyNAo+ICAgICAuLi4gU3Vj Y2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+ IHZwODAtMDMtc2VnbWVudGF0aW9uLTAxICAgLi4uIEZhaWwKPiBbVlA4LVRFU1QtVkVDVE9SU10g KEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0wMiAg IC4uLiBGYWlsCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3Qx LjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMDMgICAuLi4gRmFpbAo+IFtWUDgtVEVTVC1WRUNU T1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9u LTA0ICAgLi4uIEZhaWwKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNM LUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDAxIC4uLiBTdWNjZXNzCj4gW1ZQOC1U RVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApIHZwODAtMDItaW50ZXIt MTQxOAo+ICAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQ OC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9uLTE0MDMgLi4uIFN1Y2Nlc3MK PiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgw LTAzLXNlZ21lbnRhdGlvbi0xNDA3IC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChH U3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQwOCAu Li4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0 MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9uLTE0MDkgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1Qt VkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRh dGlvbi0xNDEzIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4 LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQxNSAuLi4gU3VjY2Vzcwo+ IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAt MDMtc2VnbWVudGF0aW9uLTE0MjUgLi4uIEZhaWwKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJl YW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDI2IC4uLiBT dWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjAp Cj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQyNyAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNU T1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDMtc2VnbWVudGF0aW9u LTE0MzIgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRM MlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDM1IC4uLiBTdWNjZXNzCj4gW1ZQ OC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1z ZWdtZW50YXRpb24tMTQzNiAuLi4gRmFpbAo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVy LVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDAtY29tcHJlaGVuc2l2ZS0wMTUgLi4uIFN1Y2Nl c3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2 cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDQxIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNd IChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wMy1zZWdtZW50YXRpb24tMTQz NyAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wt R3N0MS4wKQo+IHZwODAtMDQtcGFydGl0aW9ucy0xNDA0ICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRF U1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21l bnRhdGlvbi0xNDQyIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXIt VlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wNC1wYXJ0aXRpb25zLTE0MDUgICAuLi4gU3VjY2Vz cwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZw ODAtMDQtcGFydGl0aW9ucy0xNDA2ICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10g KEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTA1LXNoYXJwbmVzcy0xNDI4ICAg IC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1H c3QxLjApCj4gdnA4MC0wNS1zaGFycG5lc3MtMTQyOSAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVT VC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDUtc2hhcnBu ZXNzLTE0MzEgICAgLi4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1W UDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDEwIC4uLiBTdWNjZXNz Cj4gW1ZQOC1URVNULVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4 MC0wMy1zZWdtZW50YXRpb24tMTQxNCAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAo R1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDUtc2hhcnBuZXNzLTE0MzAgICAg Li4uIFN1Y2Nlc3MKPiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdz dDEuMCkKPiB2cDgwLTA1LXNoYXJwbmVzcy0xNDMzICAgIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNU LVZFQ1RPUlNdIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wNS1zaGFycG5l c3MtMTQzOCAgICAuLi4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQ OC1WNEwyU0wtR3N0MS4wKQo+IHZwODAtMDUtc2hhcnBuZXNzLTE0MzQgICAgLi4uIFN1Y2Nlc3MK PiBbVlA4LVRFU1QtVkVDVE9SU10gKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMCkKPiB2cDgw LTA1LXNoYXJwbmVzcy0xNDM5ICAgIC4uLiBTdWNjZXNzCj4gW1ZQOC1URVNULVZFQ1RPUlNdIChH U3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjApCj4gdnA4MC0wNS1zaGFycG5lc3MtMTQ0MCAgICAu Li4gU3VjY2Vzcwo+IFtWUDgtVEVTVC1WRUNUT1JTXSAoR1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0 MS4wKQo+IHZwODAtMDUtc2hhcnBuZXNzLTE0NDMgICAgLi4uIFN1Y2Nlc3MKPgo+Cj4gPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KPiBGQUlMOiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0wMSAoR1N0cmVhbWVyLVZQOC1W NEwyU0wtR3N0MS4wLlZQOC1URVNULVZFQ1RPUlMpCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFRyYWNlYmFj ayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiAgIEZpbGUgIi9yb290L2dzdHJlYW1lci9mbHVz dGVyL2ZsdXN0ZXIvdGVzdC5weSIsIGxpbmUgMTA0LCBpbiBfdGVzdAo+ICAgICBzZWxmLmFzc2Vy dEVxdWFsKAo+IEFzc2VydGlvbkVycm9yOiAnZGI5NTRjMDc3YjdhM2YzNGE0NDhjZWFhY2Y4ZjUy NWMnICE9Cj4gJzhiYmIzOTZhOWJkZjhhZmEyNTBkM2IyZTQ1ZTZiMzY3Jwo+IC0gZGI5NTRjMDc3 YjdhM2YzNGE0NDhjZWFhY2Y4ZjUyNWMKPiArIDhiYmIzOTZhOWJkZjhhZmEyNTBkM2IyZTQ1ZTZi MzY3Cj4gIDogdnA4MC0wMy1zZWdtZW50YXRpb24tMDEKPgo+ID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cj4gRkFJ TDogdnA4MC0wMy1zZWdtZW50YXRpb24tMDIgKEdTdHJlYW1lci1WUDgtVjRMMlNMLUdzdDEuMC5W UDgtVEVTVC1WRUNUT1JTKQo+IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KPiBUcmFjZWJhY2sgKG1vc3QgcmVjZW50 IGNhbGwgbGFzdCk6Cj4gICBGaWxlICIvcm9vdC9nc3RyZWFtZXIvZmx1c3Rlci9mbHVzdGVyL3Rl c3QucHkiLCBsaW5lIDEwNCwgaW4gX3Rlc3QKPiAgICAgc2VsZi5hc3NlcnRFcXVhbCgKPiBBc3Nl cnRpb25FcnJvcjogJzRkMmQ2NWVmZWVlMWM4Mzc3MmMzM2ExMzQ0NmJkMWE0JyAhPQo+ICcxYjIw NjFkNGE3NDU0OTIyODc2OWY4ZTI5MmJjYjE1ZicKPiAtIDRkMmQ2NWVmZWVlMWM4Mzc3MmMzM2Ex MzQ0NmJkMWE0Cj4gKyAxYjIwNjFkNGE3NDU0OTIyODc2OWY4ZTI5MmJjYjE1Zgo+ICA6IHZwODAt MDMtc2VnbWVudGF0aW9uLTAyCj4KPiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo+IEZBSUw6IHZwODAtMDMtc2Vn bWVudGF0aW9uLTAzIChHU3RyZWFtZXItVlA4LVY0TDJTTC1Hc3QxLjAuVlA4LVRFU1QtVkVDVE9S UykKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCj4gVHJhY2ViYWNrIChtb3N0IHJlY2VudCBjYWxsIGxhc3QpOgo+ ICAgRmlsZSAiL3Jvb3QvZ3N0cmVhbWVyL2ZsdXN0ZXIvZmx1c3Rlci90ZXN0LnB5IiwgbGluZSAx MDQsIGluIF90ZXN0Cj4gICAgIHNlbGYuYXNzZXJ0RXF1YWwoCj4gQXNzZXJ0aW9uRXJyb3I6ICc3 M2Q4NjQ0MzM2OTFmOGRiNDMyNTdiODg0OTVhYzhjMycgIT0KPiAnZmQxZWI2ZWJkNzEwMDk5NWJh ZDExMDQyYTliZWEwNDgnCj4gLSA3M2Q4NjQ0MzM2OTFmOGRiNDMyNTdiODg0OTVhYzhjMwo+ICsg ZmQxZWI2ZWJkNzEwMDk5NWJhZDExMDQyYTliZWEwNDgKPiAgOiB2cDgwLTAzLXNlZ21lbnRhdGlv bi0wMwo+Cj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT0KPiBGQUlMOiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0wNCAo R1N0cmVhbWVyLVZQOC1WNEwyU0wtR3N0MS4wLlZQOC1URVNULVZFQ1RPUlMpCj4gLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLQo+IFRyYWNlYmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiAgIEZpbGUgIi9yb290 L2dzdHJlYW1lci9mbHVzdGVyL2ZsdXN0ZXIvdGVzdC5weSIsIGxpbmUgMTA0LCBpbiBfdGVzdAo+ ICAgICBzZWxmLmFzc2VydEVxdWFsKAo+IEFzc2VydGlvbkVycm9yOiAnN2Y4NDZjOGJkN2NkZmU2 MWY4NTQyZjM4MmY5ZDhlZWInICE9Cj4gJzBjMjdhNDdjNGZkOGJiZmNlMTczZDAwNWJlZjhiZTZh Jwo+IC0gN2Y4NDZjOGJkN2NkZmU2MWY4NTQyZjM4MmY5ZDhlZWIKPiArIDBjMjdhNDdjNGZkOGJi ZmNlMTczZDAwNWJlZjhiZTZhCj4gIDogdnA4MC0wMy1zZWdtZW50YXRpb24tMDQKPgo+ID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09Cj4gRkFJTDogdnA4MC0wMy1zZWdtZW50YXRpb24tMTQyNSAoR1N0cmVhbWVyLVZQ OC1WNEwyU0wtR3N0MS4wLlZQOC1URVNULVZFQ1RPUlMpCj4gLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo+IFRyYWNl YmFjayAobW9zdCByZWNlbnQgY2FsbCBsYXN0KToKPiAgIEZpbGUgIi9yb290L2dzdHJlYW1lci9m bHVzdGVyL2ZsdXN0ZXIvdGVzdC5weSIsIGxpbmUgMTA0LCBpbiBfdGVzdAo+ICAgICBzZWxmLmFz c2VydEVxdWFsKAo+IEFzc2VydGlvbkVycm9yOiAnOTZmZmFjZjBjM2VhZTU5YjU4MjUyYmUyNGE2 MGU5YjInICE9Cj4gJzgzZThhMzIyZThhYjIzZTYwYmExNjQzMGFhY2FkODI3Jwo+IC0gOTZmZmFj ZjBjM2VhZTU5YjU4MjUyYmUyNGE2MGU5YjIKPiArIDgzZThhMzIyZThhYjIzZTYwYmExNjQzMGFh Y2FkODI3Cj4gIDogdnA4MC0wMy1zZWdtZW50YXRpb24tMTQyNQo+Cj4gPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K PiBGQUlMOiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDM2IChHU3RyZWFtZXItVlA4LVY0TDJTTC1H c3QxLjAuVlA4LVRFU1QtVkVDVE9SUykKPiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCj4gVHJhY2ViYWNrIChtb3N0 IHJlY2VudCBjYWxsIGxhc3QpOgo+ICAgRmlsZSAiL3Jvb3QvZ3N0cmVhbWVyL2ZsdXN0ZXIvZmx1 c3Rlci90ZXN0LnB5IiwgbGluZSAxMDQsIGluIF90ZXN0Cj4gICAgIHNlbGYuYXNzZXJ0RXF1YWwo Cj4gQXNzZXJ0aW9uRXJyb3I6ICdiZmQxN2E1NTdlZTFiYTM0N2M3NTVhMThjZTVhNjRhNicgIT0K PiAnNWJjYTYxYTczM2MxOTM2MjA1ZjgyZGUxNDkyYTFiMmInCj4gLSBiZmQxN2E1NTdlZTFiYTM0 N2M3NTVhMThjZTVhNjRhNgo+ICsgNWJjYTYxYTczM2MxOTM2MjA1ZjgyZGUxNDkyYTFiMmIKPiAg OiB2cDgwLTAzLXNlZ21lbnRhdGlvbi0xNDM2Cj4KPiBSYW4gNTUvNjEgdGVzdHMgc3VjY2Vzc2Z1 bGx5ICAgICAgICAgICAgICAgaW4gMTIuMTA0IHNlY3MKPgo+IEkgYW0gbm90IHRoYXQgZmFtaWxp YXIgd2l0aCB0aGlzIHRvb2wsIGJ1dCBJIGFzc3VtZSBmYWlsdXJlcyBhcmUgYmFkLgo+IEhvd2V2 ZXIgdGhlc2UgbG9vayBsaWtlIFB5dGhvbiBlcnJvcnMgYW5kIG5vdCBnc3QgZXJyb3JzLgo+Cj4g VGhlIEgyNjQgZGVjb2RlciByZXN1bHRlZCBpbjoKPgo+IFJhbiA4NS8xMzUgdGVzdHMgc3VjY2Vz c2Z1bGx5ICAgICAgICAgICAgICAgaW4gNTcuODIxIHNlY3MKPgo+IEkgY2FuIHByb3ZpZGUgdGhl IHNwbGF0IGlmIHlvdSB3YW50LiBUaG9zZSBsb29rZWQgbGlrZSBnc3QgZXJyb3JzLAo+IGJlY2F1 c2UgbW9zdCBvZiB0aGUgZXJyb3IgbWVzc2FnZXMgc3RhdGUgdGhlIGdzdC1sYXVuY2gtMS4wIHJl dHVybmVkCj4gbm9uLXplcm8gZXhpdCBzdGF0dXMgMS4KPgo+Cj4gPiBJdCBzaG91bGQgYmUgZWFz eSB0byB1c2UuCj4KPiBJdCB3YXMuCj4gPgo+ID4gPiBJIHRoaW5rIEknbGwgcmVkbyB0aGUgcGF0 Y2ggd2l0aG91dCB0aGUgUkZDIGFuZCB3aXRob3V0IHRoZSBIMSBlbmNvZGVyCj4gPiA+IHVubGVz cyBhbnlvbmUgaGFzIGFueSBvYmplY3Rpb25zLiAgSSBrbm93IEkgbmVlZCB0byByZWJhc2Ugb24K PiA+ID4gbGludXgtbmV4dCBhbnl3YXkgYmVjYXVzZSB0aGUgcGF0Y2hlcyBkb24ndCBhcHBseSBj bGVhbmx5LiAgSXMgdGhlcmUgYQo+ID4gPiBzcGVjaWZpYyBicmFuY2ggSSBzaG91bGQgdXNlPyAg SSBkb24ndCBrbm93IGlmIHRoaXMgZ29lcyB0aHJvdWdoCj4gPiA+IFNoYXduJ3MgSU1YIHRyZWUg b3IgdGhlIG1lZGlhIHRyZWUgKG9yIGEgY29tYmluYXRpb24pCj4gPiA+Cj4gPgo+ID4gWW91IHNo b3VsZCByZWJhc2Ugb24gbWVkaWEncyBtYXN0ZXIgYnJhbmNoOgo+ID4KPiA+IGh0dHBzOi8vZ2l0 LmxpbnV4dHYub3JnL21lZGlhX3RyZWUuZ2l0L2xvZy8KPgo+IEknbGwgc3VibWl0IHRoZSBwYXRj aCB3aXRoIGEgY292ZXIgbGV0dGVyIHdpdGggdGhlIHJlc3VsdHMgb2YgdGhlIFZQOAo+IGFuZCBI MjY0IGZsdXN0ZXIgdGVzdCBpbiB0aGUgY292ZXIgbGV0dGVyLiAgSXMgdGhlcmUgYSBzdGF0ZWxl c3MKPiBkZWNvZGVyIGZvciB0aGUgVlA5IGRlY29kZXI/ICBnc3QtaW5zcGVjdCBvbmx5IHNob3dz IHRoZSBmb2xsb3dpbmcKPiB2NGwyY29kZWNzLgo+Cj4gICB2NGwyc2xoMjY0ZGVjOiBWNEwyIFN0 YXRlbGVzcyBILjI2NCBWaWRlbyBEZWNvZGVyCj4gICB2NGwyc2xtcGVnMmRlYzogVjRMMiBTdGF0 ZWxlc3MgTXBlZzIgVmlkZW8gRGVjb2Rlcgo+ICAgdjRsMnNsdnA4YWxwaGFkZWNvZGViaW46IFZQ OCBBbHBoYSBEZWNvZGVyCj4gICB2NGwyc2x2cDhkZWM6IFY0TDIgU3RhdGVsZXNzIFZQOCBWaWRl byBEZWNvZGVyCj4KPiB0aGFua3MgZm9yIGFsbCB5b3VyIGhlbHAuICBIb3BlZnVsbHkgd2UgY2Fu IGdldCB0aGlzIGludGVncmF0ZWQgc29vbi4KPgoKQWRhbSwKCldoYXQgZGVwcyBkaWQgeW91IGlu c3RhbGwgaW4gb3JkZXIgdG8gZ2V0IHY0bDJjb2RlY3MgYnVpbGRpbmc/IEkKaW5zdGFsbGVkIGxp Ymd1ZGV2LTEuMC1kZXYgYmFzZWQgb24gTmljb2xhcycgc3VnZ2VzdGlvbiBhbmQgcmVidWlsdAoo bm90IHN1cmUgaWYgSSBuZWVkZWQgdG8gcmUtY29uZmlndXJlIHNvbWVob3cpIGJ1dCB0aGVyZSBp cyBzdGlsbApub3RoaW5nIGluIGJ1aWxkL3N1YnByb2plY3RzL2dzdC1wbHVnaW5zLWJhZC9zeXMv djRsMmNvZGVjcy8uIEEgJ21lc29uCmNvbmZpZ3VyZScgdGVsbHMgbWUgdGhhdCB2NGwyY29kZWNz IGlzIHNldCB0byAnYXV0bycgYnV0IEknbSBub3Qgc3VyZQpob3cgdG8gZmluZCBvdXQgd2hhdCBk ZXBlbmRlbmNpZXMgYXJlIG5lZWRlZCBvciB3aGF0IG1heSBiZSBtaXNzaW5nLgoKQmVzdCByZWdh cmRzLAoKVGltCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmlu ZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9s aW51eC1hcm0ta2VybmVsCg==