From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-7.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A3227C282CB for ; Tue, 5 Feb 2019 08:48:53 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5A7182054F for ; Tue, 5 Feb 2019 08:48:53 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="oXWawnlK" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726550AbfBEIsw (ORCPT ); Tue, 5 Feb 2019 03:48:52 -0500 Received: from mail-lj1-f182.google.com ([209.85.208.182]:45687 "EHLO mail-lj1-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725898AbfBEIsw (ORCPT ); Tue, 5 Feb 2019 03:48:52 -0500 Received: by mail-lj1-f182.google.com with SMTP id s5-v6so2140595ljd.12 for ; Tue, 05 Feb 2019 00:48:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:references:from:message-id:date:user-agent:mime-version :in-reply-to:content-transfer-encoding:content-language; bh=e0g+bo75yBjuQ2T9RTAqlte5/N0gl85lnZ9mOMQMw3o=; b=oXWawnlKqehNUj9wmsy8LtNSCATrIWba1Y4W5VK3v+DIYpzyhsDKu2EkNxKgQ0augG fjHJ0bT5cU0+7fXDEUKh9EOsZapaCvAXHk4BKtorF0/goCcACmI1wgyQBP+WNKKWsFvP Anqh5OZLUEXHzg6bwRJDdTKVM1Mj6OWRoMDQOYgITyhmS5WC/iP6XMVq2KIYlcDcjLUr zLnWh9Y7+ZYd/DFx4FEtrR93KCzz4/MLkimjKTm6HY0fLkOP9AVq5XaAtmUTS3513JWW uX9laEHVKQS6OiHVOwsyzIBHjmsZndkXEkBs0dWyJzO8B8Q7OhtAXnQbcAsnF0d7Qgtz CefQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-transfer-encoding :content-language; bh=e0g+bo75yBjuQ2T9RTAqlte5/N0gl85lnZ9mOMQMw3o=; b=K0z0btA2B+HWRUTKvw11vm8P4eL4ufgz0JULtVbSW7cGvbwEyLq+DqhwKliFCIUSwh MwV394uaZkitXg876a5WguUEKxwaCblkkC1tBiGxQS5mzKN+zMnTproK+dEsx0vGe7/+ Qb8PgmuzihQKxSc94RHPSUKm3dkunwl6qLeonHw7rRiEG6Oe+yFjfZieE4RWDOCL3lzz CiyEhHxZsRRTFn2IeXM2p0izj6auyWyTzYfuuHk0oxRUzFJIVUqNTyuBMZMocRoqxUN8 KkgU6YChk4T0uB8tgWk3mTZkHw/nOUwRanSHsFOXzDhi+eN08kydSnHiAFpL1Wgw5vPN +DfQ== X-Gm-Message-State: AHQUAuaO0XqFgluqr+xQjpoeBLVAW+IfXaAOzFIvo+sFVnDR6qThI/3V w6C1gSHvZgkp1uKcHPzan6U= X-Google-Smtp-Source: AHgI3Ia/8RuZVXozHuTZ5P6tvRKC0uTbMnWfMCaxBOOtRBDr0yh6dyodYoqVbS0kSQ+XdWNzjvEqVA== X-Received: by 2002:a2e:8007:: with SMTP id j7-v6mr2251215ljg.50.1549356530043; Tue, 05 Feb 2019 00:48:50 -0800 (PST) Received: from [10.17.182.20] (ll-22.209.223.85.sovam.net.ua. [85.223.209.22]) by smtp.gmail.com with ESMTPSA id y23-v6sm3169910ljk.95.2019.02.05.00.48.48 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Feb 2019 00:48:49 -0800 (PST) Subject: Re: [Xen-devel][PATCH v4 1/1] cameraif: add ABI for para-virtual camera To: Oleksandr Andrushchenko , Hans Verkuil , "xen-devel@lists.xenproject.org" , "konrad.wilk@oracle.com" , "jgross@suse.com" , "boris.ostrovsky@oracle.com" , "mchehab@kernel.org" , "linux-media@vger.kernel.org" , "sakari.ailus@linux.intel.com" , "koji.matsuoka.xm@renesas.com" References: <20190115093853.15495-1-andr2000@gmail.com> <20190115093853.15495-2-andr2000@gmail.com> <393f824d-e543-476c-777f-402bcc1c0bcb@xs4all.nl> <1152536e-9238-4192-653e-b784b34b8a0d@epam.com> From: Oleksandr Andrushchenko Message-ID: Date: Tue, 5 Feb 2019 10:48:48 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.4.0 MIME-Version: 1.0 In-Reply-To: <1152536e-9238-4192-653e-b784b34b8a0d@epam.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org On 1/23/19 10:14 AM, Oleksandr Andrushchenko wrote: > Any comments from Xen community? > Konrad? While I am still looking forward to any comments from Xen community... > > On 1/15/19 4:44 PM, Hans Verkuil wrote: >> Hi Oleksandr, >> >> Just two remaining comments: >> >> On 1/15/19 10:38 AM, Oleksandr Andrushchenko wrote: >>> From: Oleksandr Andrushchenko >>> >>> This is the ABI for the two halves of a para-virtualized >>> camera driver which extends Xen's reach multimedia capabilities even >>> farther enabling it for video conferencing, In-Vehicle Infotainment, >>> high definition maps etc. >>> >>> The initial goal is to support most needed functionality with the >>> final idea to make it possible to extend the protocol if need be: >>> >>> 1. Provide means for base virtual device configuration: >>> - pixel formats >>> - resolutions >>> - frame rates >>> 2. Support basic camera controls: >>> - contrast >>> - brightness >>> - hue >>> - saturation >>> 3. Support streaming control >>> >>> Signed-off-by: Oleksandr Andrushchenko >>> --- >>> xen/include/public/io/cameraif.h | 1364 ++++++++++++++++++++++++++++++ >>> 1 file changed, 1364 insertions(+) >>> create mode 100644 xen/include/public/io/cameraif.h >>> >>> diff --git a/xen/include/public/io/cameraif.h b/xen/include/public/io/cameraif.h >>> new file mode 100644 >>> index 000000000000..246eb2457f40 >>> --- /dev/null >>> +++ b/xen/include/public/io/cameraif.h >>> @@ -0,0 +1,1364 @@ >> >> >>> +/* >>> + ****************************************************************************** >>> + * EVENT CODES >>> + ****************************************************************************** >>> + */ >>> +#define XENCAMERA_EVT_FRAME_AVAIL 0x00 >>> +#define XENCAMERA_EVT_CTRL_CHANGE 0x01 >>> + >>> +/* Resolution has changed. */ >>> +#define XENCAMERA_EVT_CFG_FLG_RESOL (1 << 0) >> I think this flag is a left-over from v2 and should be removed. >> >> >> >>> + * Request number of buffers to be used: >>> + * 0 1 2 3 octet >>> + * +----------------+----------------+----------------+----------------+ >>> + * | id | _OP_BUF_REQUEST| reserved | 4 >>> + * +----------------+----------------+----------------+----------------+ >>> + * | reserved | 8 >>> + * +----------------+----------------+----------------+----------------+ >>> + * | num_bufs | reserved | 12 >>> + * +----------------+----------------+----------------+----------------+ >>> + * | reserved | 16 >>> + * +----------------+----------------+----------------+----------------+ >>> + * |/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/| >>> + * +----------------+----------------+----------------+----------------+ >>> + * | reserved | 64 >>> + * +----------------+----------------+----------------+----------------+ >>> + * >>> + * num_bufs - uint8_t, desired number of buffers to be used. This is >>> + * limited to the value configured in XenStore.max-buffers. >>> + * Passing zero num_bufs in this request (after streaming has stopped >>> + * and all buffers destroyed) unblocks camera configuration changes. >> I think the phrase 'unblocks camera configuration changes' is confusing. >> >> In v3 this sentence came after the third note below, and so it made sense >> in that context, but now the order has been reversed and it became hard to >> understand. >> >> I'm not sure what the best approach is to fix this. One option is to remove >> the third note and integrate it somehow in the sentence above. Or perhaps >> do away with the 'notes' at all and just write a more extensive documentation >> for this op. I leave that up to you. Hans, how about:  * num_bufs - uint8_t, desired number of buffers to be used.  *  * The number of buffers in this request must not exceed the value configured  * in XenStore.max-buffers. If the number of buffers is not zero then after this  * request the camera configuration cannot be changed. In order to allow camera  * (re)configuration this request must be sent with num_bufs set to zero and  * the streaming must be stopped and buffers destroyed.  * It is allowed for the frontend to send multiple XENCAMERA_OP_BUF_REQUEST  * requests before sending XENCAMERA_OP_STREAM_START request to update or  * tune the final configuration.  * Frontend is responsible for checking the corresponding response in order to  * see if the values reported back by the backend do match the desired ones  * and can be accepted.  *  * See response format for this request.  */ >>> + * >>> + * See response format for this request. >>> + * >>> + * Notes: >>> + * - frontend must check the corresponding response in order to see >>> + * if the values reported back by the backend do match the desired ones >>> + * and can be accepted. >>> + * - frontend may send multiple XENCAMERA_OP_BUF_REQUEST requests before >>> + * sending XENCAMERA_OP_STREAM_START request to update or tune the >>> + * configuration. >>> + * - after this request camera configuration cannot be changed, unless >> camera configuration -> the camera configuration >> >>> + * streaming is stopped and buffers destroyed >>> + */ >> Regards, >> >> Hans From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oleksandr Andrushchenko Subject: Re: [PATCH v4 1/1] cameraif: add ABI for para-virtual camera Date: Tue, 5 Feb 2019 10:48:48 +0200 Message-ID: References: <20190115093853.15495-1-andr2000@gmail.com> <20190115093853.15495-2-andr2000@gmail.com> <393f824d-e543-476c-777f-402bcc1c0bcb@xs4all.nl> <1152536e-9238-4192-653e-b784b34b8a0d@epam.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1gqwPV-0006QK-Dj for xen-devel@lists.xenproject.org; Tue, 05 Feb 2019 08:48:53 +0000 Received: by mail-lj1-x236.google.com with SMTP id n18-v6so2166642lji.7 for ; Tue, 05 Feb 2019 00:48:51 -0800 (PST) In-Reply-To: <1152536e-9238-4192-653e-b784b34b8a0d@epam.com> Content-Language: en-US List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Oleksandr Andrushchenko , Hans Verkuil , "xen-devel@lists.xenproject.org" , "konrad.wilk@oracle.com" , "jgross@suse.com" , "boris.ostrovsky@oracle.com" , "mchehab@kernel.org" , "linux-media@vger.kernel.org" , "sakari.ailus@linux.intel.com" , "koji.matsuoka.xm@renesas.com" List-Id: xen-devel@lists.xenproject.org T24gMS8yMy8xOSAxMDoxNCBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4gQW55 IGNvbW1lbnRzIGZyb20gWGVuIGNvbW11bml0eT8KPiBLb25yYWQ/CldoaWxlIEkgYW0gc3RpbGwg bG9va2luZyBmb3J3YXJkIHRvIGFueSBjb21tZW50cyBmcm9tIFhlbiBjb21tdW5pdHkuLi4KPgo+ IE9uIDEvMTUvMTkgNDo0NCBQTSwgSGFucyBWZXJrdWlsIHdyb3RlOgo+PiBIaSBPbGVrc2FuZHIs Cj4+Cj4+IEp1c3QgdHdvIHJlbWFpbmluZyBjb21tZW50czoKPj4KPj4gT24gMS8xNS8xOSAxMDoz OCBBTSwgT2xla3NhbmRyIEFuZHJ1c2hjaGVua28gd3JvdGU6Cj4+PiBGcm9tOiBPbGVrc2FuZHIg QW5kcnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4+Pgo+Pj4g VGhpcyBpcyB0aGUgQUJJIGZvciB0aGUgdHdvIGhhbHZlcyBvZiBhIHBhcmEtdmlydHVhbGl6ZWQK Pj4+IGNhbWVyYSBkcml2ZXIgd2hpY2ggZXh0ZW5kcyBYZW4ncyByZWFjaCBtdWx0aW1lZGlhIGNh cGFiaWxpdGllcyBldmVuCj4+PiBmYXJ0aGVyIGVuYWJsaW5nIGl0IGZvciB2aWRlbyBjb25mZXJl bmNpbmcsIEluLVZlaGljbGUgSW5mb3RhaW5tZW50LAo+Pj4gaGlnaCBkZWZpbml0aW9uIG1hcHMg ZXRjLgo+Pj4KPj4+IFRoZSBpbml0aWFsIGdvYWwgaXMgdG8gc3VwcG9ydCBtb3N0IG5lZWRlZCBm dW5jdGlvbmFsaXR5IHdpdGggdGhlCj4+PiBmaW5hbCBpZGVhIHRvIG1ha2UgaXQgcG9zc2libGUg dG8gZXh0ZW5kIHRoZSBwcm90b2NvbCBpZiBuZWVkIGJlOgo+Pj4KPj4+IDEuIFByb3ZpZGUgbWVh bnMgZm9yIGJhc2UgdmlydHVhbCBkZXZpY2UgY29uZmlndXJhdGlvbjoKPj4+ICAgIC0gcGl4ZWwg Zm9ybWF0cwo+Pj4gICAgLSByZXNvbHV0aW9ucwo+Pj4gICAgLSBmcmFtZSByYXRlcwo+Pj4gMi4g U3VwcG9ydCBiYXNpYyBjYW1lcmEgY29udHJvbHM6Cj4+PiAgICAtIGNvbnRyYXN0Cj4+PiAgICAt IGJyaWdodG5lc3MKPj4+ICAgIC0gaHVlCj4+PiAgICAtIHNhdHVyYXRpb24KPj4+IDMuIFN1cHBv cnQgc3RyZWFtaW5nIGNvbnRyb2wKPj4+Cj4+PiBTaWduZWQtb2ZmLWJ5OiBPbGVrc2FuZHIgQW5k cnVzaGNoZW5rbyA8b2xla3NhbmRyX2FuZHJ1c2hjaGVua29AZXBhbS5jb20+Cj4+PiAtLS0KPj4+ ICAgIHhlbi9pbmNsdWRlL3B1YmxpYy9pby9jYW1lcmFpZi5oIHwgMTM2NCArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPj4+ICAgIDEgZmlsZSBjaGFuZ2VkLCAxMzY0IGluc2VydGlvbnMo KykKPj4+ICAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vaW5jbHVkZS9wdWJsaWMvaW8vY2FtZXJh aWYuaAo+Pj4KPj4+IGRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9wdWJsaWMvaW8vY2FtZXJhaWYu aCBiL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9jYW1lcmFpZi5oCj4+PiBuZXcgZmlsZSBtb2RlIDEw MDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4yNDZlYjI0NTdmNDAKPj4+IC0tLSAvZGV2L251 bGwKPj4+ICsrKyBiL3hlbi9pbmNsdWRlL3B1YmxpYy9pby9jYW1lcmFpZi5oCj4+PiBAQCAtMCww ICsxLDEzNjQgQEAKPj4gPHNuaXA+Cj4+Cj4+PiArLyoKPj4+ICsgKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqCj4+PiArICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFVkVOVCBDT0RFUwo+ Pj4gKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioKPj4+ICsgKi8KPj4+ICsjZGVmaW5lIFhFTkNBTUVS QV9FVlRfRlJBTUVfQVZBSUwgICAgICAweDAwCj4+PiArI2RlZmluZSBYRU5DQU1FUkFfRVZUX0NU UkxfQ0hBTkdFICAgICAgMHgwMQo+Pj4gKwo+Pj4gKy8qIFJlc29sdXRpb24gaGFzIGNoYW5nZWQu ICovCj4+PiArI2RlZmluZSBYRU5DQU1FUkFfRVZUX0NGR19GTEdfUkVTT0wgICAgKDEgPDwgMCkK Pj4gSSB0aGluayB0aGlzIGZsYWcgaXMgYSBsZWZ0LW92ZXIgZnJvbSB2MiBhbmQgc2hvdWxkIGJl IHJlbW92ZWQuCj4+Cj4+IDxzbmlwPgo+Pgo+Pj4gKyAqIFJlcXVlc3QgbnVtYmVyIG9mIGJ1ZmZl cnMgdG8gYmUgdXNlZDoKPj4+ICsgKiAgICAgICAgIDAgICAgICAgICAgICAgICAgMSAgICAgICAg ICAgICAgICAgMiAgICAgICAgICAgICAgIDMgICAgICAgIG9jdGV0Cj4+PiArICogKy0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0t LS0rCj4+PiArICogfCAgICAgICAgICAgICAgIGlkICAgICAgICAgICAgICAgIHwgX09QX0JVRl9S RVFVRVNUfCAgIHJlc2VydmVkICAgICB8IDQKPj4+ICsgKiArLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSsKPj4+ICsgKiB8 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNlcnZlZCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgOAo+Pj4gKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwo+Pj4gKyAqIHwgICAgbnVtX2J1ZnMg ICAgfCAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgfCAx Mgo+Pj4gKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0tLS0tKwo+Pj4gKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAxNgo+Pj4gKyAqICst LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tKwo+Pj4gKyAqIHwvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wv XC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvXC9cL1wvfAo+Pj4gKyAqICstLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwo+Pj4g KyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2VydmVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCA2NAo+Pj4gKyAqICstLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tKwo+Pj4gKyAqCj4+PiArICog bnVtX2J1ZnMgLSB1aW50OF90LCBkZXNpcmVkIG51bWJlciBvZiBidWZmZXJzIHRvIGJlIHVzZWQu IFRoaXMgaXMKPj4+ICsgKiAgIGxpbWl0ZWQgdG8gdGhlIHZhbHVlIGNvbmZpZ3VyZWQgaW4gWGVu U3RvcmUubWF4LWJ1ZmZlcnMuCj4+PiArICogICBQYXNzaW5nIHplcm8gbnVtX2J1ZnMgaW4gdGhp cyByZXF1ZXN0IChhZnRlciBzdHJlYW1pbmcgaGFzIHN0b3BwZWQKPj4+ICsgKiAgIGFuZCBhbGwg YnVmZmVycyBkZXN0cm95ZWQpIHVuYmxvY2tzIGNhbWVyYSBjb25maWd1cmF0aW9uIGNoYW5nZXMu Cj4+IEkgdGhpbmsgdGhlIHBocmFzZSAndW5ibG9ja3MgY2FtZXJhIGNvbmZpZ3VyYXRpb24gY2hh bmdlcycgaXMgY29uZnVzaW5nLgo+Pgo+PiBJbiB2MyB0aGlzIHNlbnRlbmNlIGNhbWUgYWZ0ZXIg dGhlIHRoaXJkIG5vdGUgYmVsb3csIGFuZCBzbyBpdCBtYWRlIHNlbnNlCj4+IGluIHRoYXQgY29u dGV4dCwgYnV0IG5vdyB0aGUgb3JkZXIgaGFzIGJlZW4gcmV2ZXJzZWQgYW5kIGl0IGJlY2FtZSBo YXJkIHRvCj4+IHVuZGVyc3RhbmQuCj4+Cj4+IEknbSBub3Qgc3VyZSB3aGF0IHRoZSBiZXN0IGFw cHJvYWNoIGlzIHRvIGZpeCB0aGlzLiBPbmUgb3B0aW9uIGlzIHRvIHJlbW92ZQo+PiB0aGUgdGhp cmQgbm90ZSBhbmQgaW50ZWdyYXRlIGl0IHNvbWVob3cgaW4gdGhlIHNlbnRlbmNlIGFib3ZlLiBP ciBwZXJoYXBzCj4+IGRvIGF3YXkgd2l0aCB0aGUgJ25vdGVzJyBhdCBhbGwgYW5kIGp1c3Qgd3Jp dGUgYSBtb3JlIGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uCj4+IGZvciB0aGlzIG9wLiBJIGxlYXZl IHRoYXQgdXAgdG8geW91LgpIYW5zLCBob3cgYWJvdXQ6CgogwqAqIG51bV9idWZzIC0gdWludDhf dCwgZGVzaXJlZCBudW1iZXIgb2YgYnVmZmVycyB0byBiZSB1c2VkLgogwqAqCiDCoCogVGhlIG51 bWJlciBvZiBidWZmZXJzIGluIHRoaXMgcmVxdWVzdCBtdXN0IG5vdCBleGNlZWQgdGhlIHZhbHVl IApjb25maWd1cmVkCiDCoCogaW4gWGVuU3RvcmUubWF4LWJ1ZmZlcnMuIElmIHRoZSBudW1iZXIg b2YgYnVmZmVycyBpcyBub3QgemVybyB0aGVuIAphZnRlciB0aGlzCiDCoCogcmVxdWVzdCB0aGUg Y2FtZXJhIGNvbmZpZ3VyYXRpb24gY2Fubm90IGJlIGNoYW5nZWQuIEluIG9yZGVyIHRvIAphbGxv dyBjYW1lcmEKIMKgKiAocmUpY29uZmlndXJhdGlvbiB0aGlzIHJlcXVlc3QgbXVzdCBiZSBzZW50 IHdpdGggbnVtX2J1ZnMgc2V0IHRvIAp6ZXJvIGFuZAogwqAqIHRoZSBzdHJlYW1pbmcgbXVzdCBi ZSBzdG9wcGVkIGFuZCBidWZmZXJzIGRlc3Ryb3llZC4KIMKgKiBJdCBpcyBhbGxvd2VkIGZvciB0 aGUgZnJvbnRlbmQgdG8gc2VuZCBtdWx0aXBsZSBYRU5DQU1FUkFfT1BfQlVGX1JFUVVFU1QKIMKg KiByZXF1ZXN0cyBiZWZvcmUgc2VuZGluZyBYRU5DQU1FUkFfT1BfU1RSRUFNX1NUQVJUIHJlcXVl c3QgdG8gdXBkYXRlIG9yCiDCoCogdHVuZSB0aGUgZmluYWwgY29uZmlndXJhdGlvbi4KIMKgKiBG cm9udGVuZCBpcyByZXNwb25zaWJsZSBmb3IgY2hlY2tpbmcgdGhlIGNvcnJlc3BvbmRpbmcgcmVz cG9uc2UgaW4gCm9yZGVyIHRvCiDCoCogc2VlIGlmIHRoZSB2YWx1ZXMgcmVwb3J0ZWQgYmFjayBi eSB0aGUgYmFja2VuZCBkbyBtYXRjaCB0aGUgZGVzaXJlZCBvbmVzCiDCoCogYW5kIGNhbiBiZSBh Y2NlcHRlZC4KIMKgKgogwqAqIFNlZSByZXNwb25zZSBmb3JtYXQgZm9yIHRoaXMgcmVxdWVzdC4K IMKgKi8KCj4+PiArICoKPj4+ICsgKiBTZWUgcmVzcG9uc2UgZm9ybWF0IGZvciB0aGlzIHJlcXVl c3QuCj4+PiArICoKPj4+ICsgKiBOb3RlczoKPj4+ICsgKiAgLSBmcm9udGVuZCBtdXN0IGNoZWNr IHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlIGluIG9yZGVyIHRvIHNlZQo+Pj4gKyAqICAgIGlm IHRoZSB2YWx1ZXMgcmVwb3J0ZWQgYmFjayBieSB0aGUgYmFja2VuZCBkbyBtYXRjaCB0aGUgZGVz aXJlZCBvbmVzCj4+PiArICogICAgYW5kIGNhbiBiZSBhY2NlcHRlZC4KPj4+ICsgKiAgLSBmcm9u dGVuZCBtYXkgc2VuZCBtdWx0aXBsZSBYRU5DQU1FUkFfT1BfQlVGX1JFUVVFU1QgcmVxdWVzdHMg YmVmb3JlCj4+PiArICogICAgc2VuZGluZyBYRU5DQU1FUkFfT1BfU1RSRUFNX1NUQVJUIHJlcXVl c3QgdG8gdXBkYXRlIG9yIHR1bmUgdGhlCj4+PiArICogICAgY29uZmlndXJhdGlvbi4KPj4+ICsg KiAgLSBhZnRlciB0aGlzIHJlcXVlc3QgY2FtZXJhIGNvbmZpZ3VyYXRpb24gY2Fubm90IGJlIGNo YW5nZWQsIHVubGVzcwo+PiBjYW1lcmEgY29uZmlndXJhdGlvbiAtPiB0aGUgY2FtZXJhIGNvbmZp Z3VyYXRpb24KPj4KPj4+ICsgKiAgICBzdHJlYW1pbmcgaXMgc3RvcHBlZCBhbmQgYnVmZmVycyBk ZXN0cm95ZWQKPj4+ICsgKi8KPj4gUmVnYXJkcywKPj4KPj4gCUhhbnMKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qu b3JnL21haWxtYW4vbGlzdGluZm8veGVuLWRldmVs