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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 96360C47095 for ; Mon, 7 Jun 2021 22:46:32 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5573D610A1 for ; Mon, 7 Jun 2021 22:46:32 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5573D610A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id A7C356EA2B; Mon, 7 Jun 2021 22:46:29 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3EEF86EA29; Mon, 7 Jun 2021 22:46:28 +0000 (UTC) IronPort-SDR: sdLjohkh1y4G1w1AypPMq2umIAXsReG7ZnYCNuDLFx1EmHc9OTUUu7GdUnNAmuYg9+X1w7yAH8 0pClH0UqHD3A== X-IronPort-AV: E=McAfee;i="6200,9189,10008"; a="265881316" X-IronPort-AV: E=Sophos;i="5.83,256,1616482800"; d="scan'208";a="265881316" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2021 15:46:27 -0700 IronPort-SDR: rcmvm4SKYPpc+bWyPsyFharAwq3JZmO+f51S9O/BbV77gkq+uXTuu7VMBdNbKSDvJ5NFiIeB85 j83wzuRVrPig== X-IronPort-AV: E=Sophos;i="5.83,256,1616482800"; d="scan'208";a="476381742" Received: from dceraolo-mobl.amr.corp.intel.com (HELO [10.209.129.6]) ([10.209.129.6]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2021 15:46:27 -0700 Subject: Re: [PATCH 01/13] drm/i915/guc: Introduce unified HXG messages To: Matthew Brost , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210607180356.165785-1-matthew.brost@intel.com> <20210607180356.165785-2-matthew.brost@intel.com> From: Daniele Ceraolo Spurio Message-ID: <2cf32a16-d2db-65e5-5004-d739eeae0d05@intel.com> Date: Mon, 7 Jun 2021 15:46:24 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20210607180356.165785-2-matthew.brost@intel.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit Content-Language: en-US X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: john.c.harrison@intel.com, Michal.Wajdeczko@intel.com Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" On 6/7/2021 11:03 AM, Matthew Brost wrote: > From: Michal Wajdeczko > > New GuC firmware will unify format of MMIO and CTB H2G messages. > Introduce their definitions now to allow gradual transition of > our code to match new changes. > > Signed-off-by: Matthew Brost > Signed-off-by: Michal Wajdeczko > Cc: MichaƂ Winiarski > --- > .../gpu/drm/i915/gt/uc/abi/guc_messages_abi.h | 213 ++++++++++++++++++ > 1 file changed, 213 insertions(+) > > diff --git a/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h b/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h > index 775e21f3058c..29ac823acd4c 100644 > --- a/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h > +++ b/drivers/gpu/drm/i915/gt/uc/abi/guc_messages_abi.h > @@ -6,6 +6,219 @@ > #ifndef _ABI_GUC_MESSAGES_ABI_H > #define _ABI_GUC_MESSAGES_ABI_H > > +/** > + * DOC: HXG Message > + * > + * All messages exchanged with GuC are defined using 32 bit dwords. > + * First dword is treated as a message header. Remaining dwords are optional. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | | | | > + * | 0 | 31 | **ORIGIN** - originator of the message | > + * | | | - _`GUC_HXG_ORIGIN_HOST` = 0 | > + * | | | - _`GUC_HXG_ORIGIN_GUC` = 1 | > + * | | | | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | **TYPE** - message type | > + * | | | - _`GUC_HXG_TYPE_REQUEST` = 0 | > + * | | | - _`GUC_HXG_TYPE_EVENT` = 1 | > + * | | | - _`GUC_HXG_TYPE_NO_RESPONSE_BUSY` = 3 | > + * | | | - _`GUC_HXG_TYPE_NO_RESPONSE_RETRY` = 5 | > + * | | | - _`GUC_HXG_TYPE_RESPONSE_FAILURE` = 6 | > + * | | | - _`GUC_HXG_TYPE_RESPONSE_SUCCESS` = 7 | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:0 | **AUX** - auxiliary data (depends on TYPE) | > + * +---+-------+--------------------------------------------------------------+ > + * | 1 | 31:0 | | > + * +---+-------+ | > + * |...| | **PAYLOAD** - optional payload (depends on TYPE) | > + * +---+-------+ | > + * | n | 31:0 | | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_MSG_MIN_LEN 1u > +#define GUC_HXG_MSG_0_ORIGIN (0x1 << 31) Any reason not to use BIT(31) here? same below with other bits and with GENMASK for masks. > +#define GUC_HXG_ORIGIN_HOST 0u > +#define GUC_HXG_ORIGIN_GUC 1u > +#define GUC_HXG_MSG_0_TYPE (0x7 << 28) I think the masks could use a _MASK postfix > +#define GUC_HXG_TYPE_REQUEST 0u > +#define GUC_HXG_TYPE_EVENT 1u > +#define GUC_HXG_TYPE_NO_RESPONSE_BUSY 3u > +#define GUC_HXG_TYPE_NO_RESPONSE_RETRY 5u > +#define GUC_HXG_TYPE_RESPONSE_FAILURE 6u > +#define GUC_HXG_TYPE_RESPONSE_SUCCESS 7u > +#define GUC_HXG_MSG_0_AUX (0xfffffff << 0) > +#define GUC_HXG_MSG_n_PAYLOAD (0xffffffff << 0) Is a mask that covers the whole u32 really needed? Even for future proofing, I find it very unlikely that we'll ever have a case where the payload is not an entire dword. > + > +/** > + * DOC: HXG Request > + * > + * The `HXG Request`_ message should be used to initiate synchronous activity > + * for which confirmation or return data is expected. > + * > + * The recipient of this message shall use `HXG Response`_, `HXG Failure`_ > + * or `HXG Retry`_ message as a definite reply, and may use `HXG Busy`_ > + * message as a intermediate reply. > + * > + * Format of @DATA0 and all @DATAn fields depends on the @ACTION code. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | 0 | 31 | ORIGIN | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | TYPE = GUC_HXG_TYPE_REQUEST_ | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:16 | **DATA0** - request data (depends on ACTION) | > + * | +-------+--------------------------------------------------------------+ > + * | | 15:0 | **ACTION** - requested action code | > + * +---+-------+--------------------------------------------------------------+ > + * | 1 | 31:0 | | > + * +---+-------+ | > + * |...| | **DATAn** - optional data (depends on ACTION) | > + * +---+-------+ | > + * | n | 31:0 | | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_REQUEST_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN > +#define GUC_HXG_REQUEST_MSG_0_DATA0 (0xfff << 16) > +#define GUC_HXG_REQUEST_MSG_0_ACTION (0xffff << 0) > +#define GUC_HXG_REQUEST_MSG_n_DATAn GUC_HXG_MSG_n_PAYLOAD > + > +/** > + * DOC: HXG Event > + * > + * The `HXG Event`_ message should be used to initiate asynchronous activity > + * that does not involves immediate confirmation nor data. > + * > + * Format of @DATA0 and all @DATAn fields depends on the @ACTION code. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | 0 | 31 | ORIGIN | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | TYPE = GUC_HXG_TYPE_EVENT_ | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:16 | **DATA0** - event data (depends on ACTION) | > + * | +-------+--------------------------------------------------------------+ > + * | | 15:0 | **ACTION** - event action code | > + * +---+-------+--------------------------------------------------------------+ > + * | 1 | 31:0 | | > + * +---+-------+ | > + * |...| | **DATAn** - optional event data (depends on ACTION) | > + * +---+-------+ | > + * | n | 31:0 | | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_EVENT_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN > +#define GUC_HXG_EVENT_MSG_0_DATA0 (0xfff << 16) > +#define GUC_HXG_EVENT_MSG_0_ACTION (0xffff << 0) > +#define GUC_HXG_EVENT_MSG_n_DATAn GUC_HXG_MSG_n_PAYLOAD > + > +/** > + * DOC: HXG Busy > + * > + * The `HXG Busy`_ message may be used to acknowledge reception of the `HXG Request`_ > + * message if the recipient expects that it processing will be longer than default > + * timeout. > + * > + * The @COUNTER field may be used as a progress indicator. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | 0 | 31 | ORIGIN | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | TYPE = GUC_HXG_TYPE_NO_RESPONSE_BUSY_ | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:0 | **COUNTER** - progress indicator | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_BUSY_MSG_LEN GUC_HXG_MSG_MIN_LEN > +#define GUC_HXG_BUSY_MSG_0_COUNTER GUC_HXG_MSG_0_AUX > + > +/** > + * DOC: HXG Retry > + * > + * The `HXG Retry`_ message should be used by recipient to indicate that the > + * `HXG Request`_ message was dropped and it should be resent again. > + * > + * The @REASON field may be used to provide additional information. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | 0 | 31 | ORIGIN | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | TYPE = GUC_HXG_TYPE_NO_RESPONSE_RETRY_ | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:0 | **REASON** - reason for retry | > + * | | | - _`GUC_HXG_RETRY_REASON_UNSPECIFIED` = 0 | AFAICS in the specs for 62.0.0 this field is actually a MBZ. Where does the "reason" classification come from? Apart from this, all the defines match the specs. Daniele > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_RETRY_MSG_LEN GUC_HXG_MSG_MIN_LEN > +#define GUC_HXG_RETRY_MSG_0_REASON GUC_HXG_MSG_0_AUX > +#define GUC_HXG_RETRY_REASON_UNSPECIFIED 0u > + > +/** > + * DOC: HXG Failure > + * > + * The `HXG Failure`_ message shall be used as a reply to the `HXG Request`_ > + * message that could not be processed due to an error. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | 0 | 31 | ORIGIN | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_FAILURE_ | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:16 | **HINT** - additional error hint | > + * | +-------+--------------------------------------------------------------+ > + * | | 15:0 | **ERROR** - error/result code | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_FAILURE_MSG_LEN GUC_HXG_MSG_MIN_LEN > +#define GUC_HXG_FAILURE_MSG_0_HINT (0xfff << 16) > +#define GUC_HXG_FAILURE_MSG_0_ERROR (0xffff << 0) > + > +/** > + * DOC: HXG Response > + * > + * The `HXG Response`_ message shall be used as a reply to the `HXG Request`_ > + * message that was successfully processed without an error. > + * > + * +---+-------+--------------------------------------------------------------+ > + * | | Bits | Description | > + * +===+=======+==============================================================+ > + * | 0 | 31 | ORIGIN | > + * | +-------+--------------------------------------------------------------+ > + * | | 30:28 | TYPE = GUC_HXG_TYPE_RESPONSE_SUCCESS_ | > + * | +-------+--------------------------------------------------------------+ > + * | | 27:0 | **DATA0** - data (depends on ACTION from `HXG Request`_) | > + * +---+-------+--------------------------------------------------------------+ > + * | 1 | 31:0 | | > + * +---+-------+ | > + * |...| | **DATAn** - data (depends on ACTION from `HXG Request`_) | > + * +---+-------+ | > + * | n | 31:0 | | > + * +---+-------+--------------------------------------------------------------+ > + */ > + > +#define GUC_HXG_RESPONSE_MSG_MIN_LEN GUC_HXG_MSG_MIN_LEN > +#define GUC_HXG_RESPONSE_MSG_0_DATA0 GUC_HXG_MSG_0_AUX > +#define GUC_HXG_RESPONSE_MSG_n_DATAn GUC_HXG_MSG_n_PAYLOAD > + > +/* deprecated */ > #define INTEL_GUC_MSG_TYPE_SHIFT 28 > #define INTEL_GUC_MSG_TYPE_MASK (0xF << INTEL_GUC_MSG_TYPE_SHIFT) > #define INTEL_GUC_MSG_DATA_SHIFT 16 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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 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 DD39EC47082 for ; Mon, 7 Jun 2021 22:46:29 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9EC5E610A1 for ; Mon, 7 Jun 2021 22:46:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9EC5E610A1 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=intel-gfx-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 3CB1D6EA29; Mon, 7 Jun 2021 22:46:29 +0000 (UTC) Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3EEF86EA29; Mon, 7 Jun 2021 22:46:28 +0000 (UTC) IronPort-SDR: sdLjohkh1y4G1w1AypPMq2umIAXsReG7ZnYCNuDLFx1EmHc9OTUUu7GdUnNAmuYg9+X1w7yAH8 0pClH0UqHD3A== X-IronPort-AV: E=McAfee;i="6200,9189,10008"; a="265881316" X-IronPort-AV: E=Sophos;i="5.83,256,1616482800"; d="scan'208";a="265881316" Received: from fmsmga003.fm.intel.com ([10.253.24.29]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2021 15:46:27 -0700 IronPort-SDR: rcmvm4SKYPpc+bWyPsyFharAwq3JZmO+f51S9O/BbV77gkq+uXTuu7VMBdNbKSDvJ5NFiIeB85 j83wzuRVrPig== X-IronPort-AV: E=Sophos;i="5.83,256,1616482800"; d="scan'208";a="476381742" Received: from dceraolo-mobl.amr.corp.intel.com (HELO [10.209.129.6]) ([10.209.129.6]) by fmsmga003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jun 2021 15:46:27 -0700 To: Matthew Brost , intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org References: <20210607180356.165785-1-matthew.brost@intel.com> <20210607180356.165785-2-matthew.brost@intel.com> From: Daniele Ceraolo Spurio Message-ID: <2cf32a16-d2db-65e5-5004-d739eeae0d05@intel.com> Date: Mon, 7 Jun 2021 15:46:24 -0700 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.10.1 MIME-Version: 1.0 In-Reply-To: <20210607180356.165785-2-matthew.brost@intel.com> Content-Language: en-US Subject: Re: [Intel-gfx] [PATCH 01/13] drm/i915/guc: Introduce unified HXG messages X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" CgpPbiA2LzcvMjAyMSAxMTowMyBBTSwgTWF0dGhldyBCcm9zdCB3cm90ZToKPiBGcm9tOiBNaWNo YWwgV2FqZGVjemtvIDxtaWNoYWwud2FqZGVjemtvQGludGVsLmNvbT4KPgo+IE5ldyBHdUMgZmly bXdhcmUgd2lsbCB1bmlmeSBmb3JtYXQgb2YgTU1JTyBhbmQgQ1RCIEgyRyBtZXNzYWdlcy4KPiBJ bnRyb2R1Y2UgdGhlaXIgZGVmaW5pdGlvbnMgbm93IHRvIGFsbG93IGdyYWR1YWwgdHJhbnNpdGlv biBvZgo+IG91ciBjb2RlIHRvIG1hdGNoIG5ldyBjaGFuZ2VzLgo+Cj4gU2lnbmVkLW9mZi1ieTog TWF0dGhldyBCcm9zdCA8bWF0dGhldy5icm9zdEBpbnRlbC5jb20+Cj4gU2lnbmVkLW9mZi1ieTog TWljaGFsIFdhamRlY3prbyA8bWljaGFsLndhamRlY3prb0BpbnRlbC5jb20+Cj4gQ2M6IE1pY2hh xYIgV2luaWFyc2tpIDxtaWNoYWwud2luaWFyc2tpQGludGVsLmNvbT4KPiAtLS0KPiAgIC4uLi9n cHUvZHJtL2k5MTUvZ3QvdWMvYWJpL2d1Y19tZXNzYWdlc19hYmkuaCB8IDIxMyArKysrKysrKysr KysrKysrKysKPiAgIDEgZmlsZSBjaGFuZ2VkLCAyMTMgaW5zZXJ0aW9ucygrKQo+Cj4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2FiaS9ndWNfbWVzc2FnZXNfYWJpLmgg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9hYmkvZ3VjX21lc3NhZ2VzX2FiaS5oCj4gaW5k ZXggNzc1ZTIxZjMwNThjLi4yOWFjODIzYWNkNGMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvdWMvYWJpL2d1Y19tZXNzYWdlc19hYmkuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L3VjL2FiaS9ndWNfbWVzc2FnZXNfYWJpLmgKPiBAQCAtNiw2ICs2LDIxOSBA QAo+ICAgI2lmbmRlZiBfQUJJX0dVQ19NRVNTQUdFU19BQklfSAo+ICAgI2RlZmluZSBfQUJJX0dV Q19NRVNTQUdFU19BQklfSAo+ICAgCj4gKy8qKgo+ICsgKiBET0M6IEhYRyBNZXNzYWdlCj4gKyAq Cj4gKyAqIEFsbCBtZXNzYWdlcyBleGNoYW5nZWQgd2l0aCBHdUMgYXJlIGRlZmluZWQgdXNpbmcg MzIgYml0IGR3b3Jkcy4KPiArICogRmlyc3QgZHdvcmQgaXMgdHJlYXRlZCBhcyBhIG1lc3NhZ2Ug aGVhZGVyLiBSZW1haW5pbmcgZHdvcmRzIGFyZSBvcHRpb25hbC4KPiArICoKPiArICogICstLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKPiArICogIHwgICB8IEJpdHMgIHwgRGVzY3JpcHRpb24gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogICs9PT0rPT09 PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSsKPiArICogIHwgICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgMCB8ICAgIDMx IHwgKipPUklHSU4qKiAtIG9yaWdpbmF0b3Igb2YgdGhlIG1lc3NhZ2UgICAgICAgICAgICAgICAg ICAgICAgIHwKPiArICogIHwgICB8ICAgICAgIHwgICAtIF9gR1VDX0hYR19PUklHSU5fSE9TVGAg PSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICB8ICAgICAgIHwg ICAtIF9gR1VDX0hYR19PUklHSU5fR1VDYCA9IDEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwKPiArICogIHwgICB8ICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICArLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKPiArICogIHwgICB8IDMwOjI4IHwgKipUWVBFKiogLSBtZXNzYWdlIHR5cGUgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICB8ICAgICAgIHwgICAtIF9g R1VDX0hYR19UWVBFX1JFUVVFU1RgID0gMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwK PiArICogIHwgICB8ICAgICAgIHwgICAtIF9gR1VDX0hYR19UWVBFX0VWRU5UYCA9IDEgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICB8ICAgICAgIHwgICAtIF9gR1VD X0hYR19UWVBFX05PX1JFU1BPTlNFX0JVU1lgID0gMyAgICAgICAgICAgICAgICAgICAgIHwKPiAr ICogIHwgICB8ICAgICAgIHwgICAtIF9gR1VDX0hYR19UWVBFX05PX1JFU1BPTlNFX1JFVFJZYCA9 IDUgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICB8ICAgICAgIHwgICAtIF9gR1VDX0hY R19UWVBFX1JFU1BPTlNFX0ZBSUxVUkVgID0gNiAgICAgICAgICAgICAgICAgICAgIHwKPiArICog IHwgICB8ICAgICAgIHwgICAtIF9gR1VDX0hYR19UWVBFX1JFU1BPTlNFX1NVQ0NFU1NgID0gNyAg ICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICArLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiArICogIHwg ICB8ICAyNzowIHwgKipBVVgqKiAtIGF1eGlsaWFyeSBkYXRhIChkZXBlbmRzIG9uIFRZUEUpICAg ICAgICAgICAgICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiArICogIHwgMSB8 ICAzMTowIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwuLi58ICAg ICAgIHwgKipQQVlMT0FEKiogLSBvcHRpb25hbCBwYXlsb2FkIChkZXBlbmRzIG9uIFRZUEUpICAg ICAgICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgbiB8ICAzMTow IHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiArICovCj4gKwo+ICsjZGVmaW5l IEdVQ19IWEdfTVNHX01JTl9MRU4JCQkxdQo+ICsjZGVmaW5lIEdVQ19IWEdfTVNHXzBfT1JJR0lO CQkJKDB4MSA8PCAzMSkKCkFueSByZWFzb24gbm90IHRvIHVzZSBCSVQoMzEpIGhlcmU/IHNhbWUg YmVsb3cgd2l0aCBvdGhlciBiaXRzIGFuZCB3aXRoIApHRU5NQVNLIGZvciBtYXNrcy4KCj4gKyNk ZWZpbmUgICBHVUNfSFhHX09SSUdJTl9IT1NUCQkJMHUKPiArI2RlZmluZSAgIEdVQ19IWEdfT1JJ R0lOX0dVQwkJCTF1Cj4gKyNkZWZpbmUgR1VDX0hYR19NU0dfMF9UWVBFCQkJKDB4NyA8PCAyOCkK CkkgdGhpbmsgdGhlIG1hc2tzIGNvdWxkIHVzZSBhIF9NQVNLIHBvc3RmaXgKCj4gKyNkZWZpbmUg ICBHVUNfSFhHX1RZUEVfUkVRVUVTVAkJCTB1Cj4gKyNkZWZpbmUgICBHVUNfSFhHX1RZUEVfRVZF TlQJCQkxdQo+ICsjZGVmaW5lICAgR1VDX0hYR19UWVBFX05PX1JFU1BPTlNFX0JVU1kJCTN1Cj4g KyNkZWZpbmUgICBHVUNfSFhHX1RZUEVfTk9fUkVTUE9OU0VfUkVUUlkJNXUKPiArI2RlZmluZSAg IEdVQ19IWEdfVFlQRV9SRVNQT05TRV9GQUlMVVJFCQk2dQo+ICsjZGVmaW5lICAgR1VDX0hYR19U WVBFX1JFU1BPTlNFX1NVQ0NFU1MJCTd1Cj4gKyNkZWZpbmUgR1VDX0hYR19NU0dfMF9BVVgJCQko MHhmZmZmZmZmIDw8IDApCj4gKyNkZWZpbmUgR1VDX0hYR19NU0dfbl9QQVlMT0FECQkJKDB4ZmZm ZmZmZmYgPDwgMCkKCklzIGEgbWFzayB0aGF0IGNvdmVycyB0aGUgd2hvbGUgdTMyIHJlYWxseSBu ZWVkZWQ/IEV2ZW4gZm9yIGZ1dHVyZSAKcHJvb2ZpbmcsIEkgZmluZCBpdCB2ZXJ5IHVubGlrZWx5 IHRoYXQgd2UnbGwgZXZlciBoYXZlIGEgY2FzZSB3aGVyZSB0aGUgCnBheWxvYWQgaXMgbm90IGFu IGVudGlyZSBkd29yZC4KCj4gKwo+ICsvKioKPiArICogRE9DOiBIWEcgUmVxdWVzdAo+ICsgKgo+ ICsgKiBUaGUgYEhYRyBSZXF1ZXN0YF8gbWVzc2FnZSBzaG91bGQgYmUgdXNlZCB0byBpbml0aWF0 ZSBzeW5jaHJvbm91cyBhY3Rpdml0eQo+ICsgKiBmb3Igd2hpY2ggY29uZmlybWF0aW9uIG9yIHJl dHVybiBkYXRhIGlzIGV4cGVjdGVkLgo+ICsgKgo+ICsgKiBUaGUgcmVjaXBpZW50IG9mIHRoaXMg bWVzc2FnZSBzaGFsbCB1c2UgYEhYRyBSZXNwb25zZWBfLCBgSFhHIEZhaWx1cmVgXwo+ICsgKiBv ciBgSFhHIFJldHJ5YF8gbWVzc2FnZSBhcyBhIGRlZmluaXRlIHJlcGx5LCBhbmQgbWF5IHVzZSBg SFhHIEJ1c3lgXwo+ICsgKiBtZXNzYWdlIGFzIGEgaW50ZXJtZWRpYXRlIHJlcGx5Lgo+ICsgKgo+ ICsgKiBGb3JtYXQgb2YgQERBVEEwIGFuZCBhbGwgQERBVEFuIGZpZWxkcyBkZXBlbmRzIG9uIHRo ZSBAQUNUSU9OIGNvZGUuCj4gKyAqCj4gKyAqICArLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqICB8 ICAgfCBCaXRzICB8IERlc2NyaXB0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB8Cj4gKyAqICArPT09Kz09PT09PT0rPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCj4gKyAqICB8IDAg fCAgICAzMSB8IE9SSUdJTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8Cj4gKyAqICB8ICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqICB8ICAgfCAz MDoyOCB8IFRZUEUgPSBHVUNfSFhHX1RZUEVfUkVRVUVTVF8gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8Cj4gKyAqICB8ICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqICB8ICAgfCAyNzox NiB8ICoqREFUQTAqKiAtIHJlcXVlc3QgZGF0YSAoZGVwZW5kcyBvbiBBQ1RJT04pICAgICAgICAg ICAgICAgICB8Cj4gKyAqICB8ICAgKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqICB8ICAgfCAgMTU6MCB8 ICoqQUNUSU9OKiogLSByZXF1ZXN0ZWQgYWN0aW9uIGNvZGUgICAgICAgICAgICAgICAgICAgICAg ICAgICB8Cj4gKyAqICArLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqICB8IDEgfCAgMzE6MCB8ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8Cj4gKyAqICArLS0tKy0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqICB8Li4ufCAgICAgICB8ICoqREFU QW4qKiAtIG9wdGlvbmFsIGRhdGEgKGRlcGVuZHMgb24gQUNUSU9OKSAgICAgICAgICAgICAgICB8 Cj4gKyAqICArLS0tKy0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4gKyAqICB8IG4gfCAgMzE6MCB8ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cj4g KyAqICArLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCj4gKyAqLwo+ICsKPiArI2RlZmluZSBHVUNfSFhHX1JF UVVFU1RfTVNHX01JTl9MRU4JCUdVQ19IWEdfTVNHX01JTl9MRU4KPiArI2RlZmluZSBHVUNfSFhH X1JFUVVFU1RfTVNHXzBfREFUQTAJCSgweGZmZiA8PCAxNikKPiArI2RlZmluZSBHVUNfSFhHX1JF UVVFU1RfTVNHXzBfQUNUSU9OCQkoMHhmZmZmIDw8IDApCj4gKyNkZWZpbmUgR1VDX0hYR19SRVFV RVNUX01TR19uX0RBVEFuCQlHVUNfSFhHX01TR19uX1BBWUxPQUQKPiArCj4gKy8qKgo+ICsgKiBE T0M6IEhYRyBFdmVudAo+ICsgKgo+ICsgKiBUaGUgYEhYRyBFdmVudGBfIG1lc3NhZ2Ugc2hvdWxk IGJlIHVzZWQgdG8gaW5pdGlhdGUgYXN5bmNocm9ub3VzIGFjdGl2aXR5Cj4gKyAqIHRoYXQgZG9l cyBub3QgaW52b2x2ZXMgaW1tZWRpYXRlIGNvbmZpcm1hdGlvbiBub3IgZGF0YS4KPiArICoKPiAr ICogRm9ybWF0IG9mIEBEQVRBMCBhbmQgYWxsIEBEQVRBbiBmaWVsZHMgZGVwZW5kcyBvbiB0aGUg QEFDVElPTiBjb2RlLgo+ICsgKgo+ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAg IHwgQml0cyAgfCBEZXNjcmlwdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfAo+ICsgKiAgKz09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwo+ICsgKiAgfCAwIHwg ICAgMzEgfCBPUklHSU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgfAo+ICsgKiAgfCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMzA6 MjggfCBUWVBFID0gR1VDX0hYR19UWVBFX0VWRU5UXyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfAo+ICsgKiAgfCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMjc6MTYg fCAqKkRBVEEwKiogLSBldmVudCBkYXRhIChkZXBlbmRzIG9uIEFDVElPTikgICAgICAgICAgICAg ICAgICAgfAo+ICsgKiAgfCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgIDE1OjAgfCAq KkFDVElPTioqIC0gZXZlbnQgYWN0aW9uIGNvZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgfAo+ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAxIHwgIDMxOjAgfCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fAo+ICsgKiAgKy0tLSstLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfC4uLnwgICAgICAgfCAqKkRBVEFu KiogLSBvcHRpb25hbCBldmVudCAgZGF0YSAoZGVwZW5kcyBvbiBBQ1RJT04pICAgICAgICAgfAo+ ICsgKiAgKy0tLSstLS0tLS0tKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfCBuIHwgIDMxOjAgfCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsg KiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKi8KPiArCj4gKyNkZWZpbmUgR1VDX0hYR19FVkVO VF9NU0dfTUlOX0xFTgkJR1VDX0hYR19NU0dfTUlOX0xFTgo+ICsjZGVmaW5lIEdVQ19IWEdfRVZF TlRfTVNHXzBfREFUQTAJCSgweGZmZiA8PCAxNikKPiArI2RlZmluZSBHVUNfSFhHX0VWRU5UX01T R18wX0FDVElPTgkJKDB4ZmZmZiA8PCAwKQo+ICsjZGVmaW5lIEdVQ19IWEdfRVZFTlRfTVNHX25f REFUQW4JCUdVQ19IWEdfTVNHX25fUEFZTE9BRAo+ICsKPiArLyoqCj4gKyAqIERPQzogSFhHIEJ1 c3kKPiArICoKPiArICogVGhlIGBIWEcgQnVzeWBfIG1lc3NhZ2UgbWF5IGJlIHVzZWQgdG8gYWNr bm93bGVkZ2UgcmVjZXB0aW9uIG9mIHRoZSBgSFhHIFJlcXVlc3RgXwo+ICsgKiBtZXNzYWdlIGlm IHRoZSByZWNpcGllbnQgZXhwZWN0cyB0aGF0IGl0IHByb2Nlc3Npbmcgd2lsbCBiZSBsb25nZXIg dGhhbiBkZWZhdWx0Cj4gKyAqIHRpbWVvdXQuCj4gKyAqCj4gKyAqIFRoZSBAQ09VTlRFUiBmaWVs ZCBtYXkgYmUgdXNlZCBhcyBhIHByb2dyZXNzIGluZGljYXRvci4KPiArICoKPiArICogICstLS0r LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSsKPiArICogIHwgICB8IEJpdHMgIHwgRGVzY3JpcHRpb24gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogICs9PT0rPT09 PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSsKPiArICogIHwgMCB8ICAgIDMxIHwgT1JJR0lOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICArLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKPiArICogIHwgICB8IDMwOjI4IHwgVFlQRSA9IEdVQ19IWEdfVFlQRV9OT19SRVNQ T05TRV9CVVNZXyAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICArLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSsKPiArICogIHwgICB8ICAyNzowIHwgKipDT1VOVEVSKiogLSBwcm9ncmVzcyBpbmRpY2F0 b3IgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKPiArICovCj4gKwo+ICsjZGVmaW5lIEdVQ19IWEdfQlVTWV9NU0dfTEVOCQkJR1VDX0hYR19N U0dfTUlOX0xFTgo+ICsjZGVmaW5lIEdVQ19IWEdfQlVTWV9NU0dfMF9DT1VOVEVSCQlHVUNfSFhH X01TR18wX0FVWAo+ICsKPiArLyoqCj4gKyAqIERPQzogSFhHIFJldHJ5Cj4gKyAqCj4gKyAqIFRo ZSBgSFhHIFJldHJ5YF8gbWVzc2FnZSBzaG91bGQgYmUgdXNlZCBieSByZWNpcGllbnQgdG8gaW5k aWNhdGUgdGhhdCB0aGUKPiArICogYEhYRyBSZXF1ZXN0YF8gbWVzc2FnZSB3YXMgZHJvcHBlZCBh bmQgaXQgc2hvdWxkIGJlIHJlc2VudCBhZ2Fpbi4KPiArICoKPiArICogVGhlIEBSRUFTT04gZmll bGQgbWF5IGJlIHVzZWQgdG8gcHJvdmlkZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLgo+ICsgKgo+ ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgQml0cyAgfCBEZXNjcmlwdGlv biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsg KiAgKz09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09Kwo+ICsgKiAgfCAwIHwgICAgMzEgfCBPUklHSU4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAg fCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMzA6MjggfCBUWVBFID0gR1VDX0hYR19U WVBFX05PX1JFU1BPTlNFX1JFVFJZXyAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfCAg ICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgIDI3OjAgfCAqKlJFQVNPTioqIC0gcmVhc29u IGZvciByZXRyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfCAgIHwg ICAgICAgfCAgLSBfYEdVQ19IWEdfUkVUUllfUkVBU09OX1VOU1BFQ0lGSUVEYCA9IDAgICAgICAg ICAgICAgICAgICAgfAoKQUZBSUNTIGluIHRoZSBzcGVjcyBmb3IgNjIuMC4wIHRoaXMgZmllbGQg aXMgYWN0dWFsbHkgYSBNQlouIFdoZXJlIGRvZXMgCnRoZSAicmVhc29uIiBjbGFzc2lmaWNhdGlv biBjb21lIGZyb20/CgpBcGFydCBmcm9tIHRoaXMsIGFsbCB0aGUgZGVmaW5lcyBtYXRjaCB0aGUg c3BlY3MuCgpEYW5pZWxlCgo+ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKi8KPiArCj4g KyNkZWZpbmUgR1VDX0hYR19SRVRSWV9NU0dfTEVOCQkJR1VDX0hYR19NU0dfTUlOX0xFTgo+ICsj ZGVmaW5lIEdVQ19IWEdfUkVUUllfTVNHXzBfUkVBU09OCQlHVUNfSFhHX01TR18wX0FVWAo+ICsj ZGVmaW5lICAgR1VDX0hYR19SRVRSWV9SRUFTT05fVU5TUEVDSUZJRUQJMHUKPiArCj4gKy8qKgo+ ICsgKiBET0M6IEhYRyBGYWlsdXJlCj4gKyAqCj4gKyAqIFRoZSBgSFhHIEZhaWx1cmVgXyBtZXNz YWdlIHNoYWxsIGJlIHVzZWQgYXMgYSByZXBseSB0byB0aGUgYEhYRyBSZXF1ZXN0YF8KPiArICog bWVzc2FnZSB0aGF0IGNvdWxkIG5vdCBiZSBwcm9jZXNzZWQgZHVlIHRvIGFuIGVycm9yLgo+ICsg Kgo+ICsgKiAgKy0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgQml0cyAgfCBEZXNjcmlw dGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ ICsgKiAgKz09PSs9PT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09Kwo+ICsgKiAgfCAwIHwgICAgMzEgfCBPUklHSU4gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsg KiAgfCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMzA6MjggfCBUWVBFID0gR1VDX0hY R19UWVBFX1JFU1BPTlNFX0ZBSUxVUkVfICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAg fCAgICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgMjc6MTYgfCAqKkhJTlQqKiAtIGFkZGl0 aW9uYWwgZXJyb3IgaGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgfCAg ICstLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKwo+ICsgKiAgfCAgIHwgIDE1OjAgfCAqKkVSUk9SKiogLSBlcnJvci9y ZXN1bHQgY29kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAo+ICsgKiAgKy0tLSst LS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKwo+ICsgKi8KPiArCj4gKyNkZWZpbmUgR1VDX0hYR19GQUlMVVJFX01TR19M RU4JCQlHVUNfSFhHX01TR19NSU5fTEVOCj4gKyNkZWZpbmUgR1VDX0hYR19GQUlMVVJFX01TR18w X0hJTlQJCSgweGZmZiA8PCAxNikKPiArI2RlZmluZSBHVUNfSFhHX0ZBSUxVUkVfTVNHXzBfRVJS T1IJCSgweGZmZmYgPDwgMCkKPiArCj4gKy8qKgo+ICsgKiBET0M6IEhYRyBSZXNwb25zZQo+ICsg Kgo+ICsgKiBUaGUgYEhYRyBSZXNwb25zZWBfIG1lc3NhZ2Ugc2hhbGwgYmUgdXNlZCBhcyBhIHJl cGx5IHRvIHRoZSBgSFhHIFJlcXVlc3RgXwo+ICsgKiBtZXNzYWdlIHRoYXQgd2FzIHN1Y2Nlc3Nm dWxseSBwcm9jZXNzZWQgd2l0aG91dCBhbiBlcnJvci4KPiArICoKPiArICogICstLS0rLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSsKPiArICogIHwgICB8IEJpdHMgIHwgRGVzY3JpcHRpb24gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogICs9PT0rPT09PT09PSs9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PSsKPiArICogIHwgMCB8ICAgIDMxIHwgT1JJR0lOICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICArLS0tLS0tLSstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSsKPiArICogIHwgICB8IDMwOjI4IHwgVFlQRSA9IEdVQ19IWEdfVFlQRV9SRVNQT05TRV9TVUND RVNTXyAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwgICArLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsK PiArICogIHwgICB8ICAyNzowIHwgKipEQVRBMCoqIC0gZGF0YSAoZGVwZW5kcyBvbiBBQ1RJT04g ZnJvbSBgSFhHIFJlcXVlc3RgXykgICAgIHwKPiArICogICstLS0rLS0tLS0tLSstLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiAr ICogIHwgMSB8ICAzMTowIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICog IHwuLi58ICAgICAgIHwgKipEQVRBbioqIC0gZGF0YSAoZGVwZW5kcyBvbiBBQ1RJT04gZnJvbSBg SFhHIFJlcXVlc3RgXykgICAgIHwKPiArICogICstLS0rLS0tLS0tLSsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKPiArICogIHwg biB8ICAzMTowIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHwKPiArICogICstLS0rLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKPiArICovCj4gKwo+ ICsjZGVmaW5lIEdVQ19IWEdfUkVTUE9OU0VfTVNHX01JTl9MRU4JCUdVQ19IWEdfTVNHX01JTl9M RU4KPiArI2RlZmluZSBHVUNfSFhHX1JFU1BPTlNFX01TR18wX0RBVEEwCQlHVUNfSFhHX01TR18w X0FVWAo+ICsjZGVmaW5lIEdVQ19IWEdfUkVTUE9OU0VfTVNHX25fREFUQW4JCUdVQ19IWEdfTVNH X25fUEFZTE9BRAo+ICsKPiArLyogZGVwcmVjYXRlZCAqLwo+ICAgI2RlZmluZSBJTlRFTF9HVUNf TVNHX1RZUEVfU0hJRlQJMjgKPiAgICNkZWZpbmUgSU5URUxfR1VDX01TR19UWVBFX01BU0sJCSgw eEYgPDwgSU5URUxfR1VDX01TR19UWVBFX1NISUZUKQo+ICAgI2RlZmluZSBJTlRFTF9HVUNfTVNH X0RBVEFfU0hJRlQJMTYKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeAo=