From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-alma10-1.taild15c8.ts.net [100.103.45.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1D6D32C0299; Fri, 26 Jun 2026 13:35:20 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=100.103.45.18 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782480921; cv=none; b=HXPsnE0UQDmRqUy67GX/FilPoI3vC5q5cF6RSYNFlin3ZX71zXMY6s7hiOfGn2ehb2AdwjJrUrGVQpWp0s1/g8KnmGEMTc6vPEnHJ/VGpVC7E4gNLEAM6DwPQ/PuYOJ4JFkFPv2XT8w2oH3BbaXt1rnWCFXy3qnW7B1uPlIhoAo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1782480921; c=relaxed/simple; bh=W77wuuZmi8OTU3SRAxh4KFlsovF51YIBLPWX5lsQDfs=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=FEAKByB5htulmuLhErZRpZZZ8dBB0dJFyT0XWkyBmnQq0GLmqwz/Vfwn45nIrIdULesLfJeyQG12Np5euuaPbdqpVKKX1LqPKEQ3i5V61pkkTOdU59fmkQt0W2idw0NL4GmpA9a9AETHv2P3Bqm3CvYaC58L4eX4rdzut8pNvpo= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=f4luWlP5; arc=none smtp.client-ip=100.103.45.18 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="f4luWlP5" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 37EB51F000E9; Fri, 26 Jun 2026 13:34:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782480919; bh=hH510sudv5X4F+U/OA58bG3WrGtZ8R+7l3HMyghVbtg=; h=From:To:Cc:Subject:Date; b=f4luWlP5i+ZVcrnK+dhMEPLcfUOePLMCMdFRYBPCknaPjvtzi2otHqfZwIkvbh33x pXNuzdBZs5YCZawmsN0FF9QkhxSQSSYCUaB7nWvMdSIsV5kEZkUWrUfgxt/CFhNKLy XVvCBRJXEuoUnLw39y5X3EBnkfjJUDoJPt3D+tMCwcthUofJPK+Jo9TFjhccJBlQ8/ qXu33dtpTBgpsYrxyfHSAmwjLCUhUv27vfUN5Yr2DoGSj92RriowxvqV5ATkh3xAa0 Pf5kLN3F6D0ljD2cvthsxOltZSYyRfKKnlsLCYEEU6jzY+LuX5xHm9DKGioGCVbQwM JUxSbE59k0M0A== From: Sumit Garg To: andersson@kernel.org Cc: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-media@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, ath12k@lists.infradead.org, linux-remoteproc@vger.kernel.org, konradybcio@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, robin.clark@oss.qualcomm.com, sean@poorly.run, akhilpo@oss.qualcomm.com, lumag@kernel.org, abhinav.kumar@linux.dev, jesszhan0024@gmail.com, marijn.suijten@somainline.org, airlied@gmail.com, simona@ffwll.ch, vikash.garodia@oss.qualcomm.com, bod@kernel.org, mchehab@kernel.org, elder@kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jjohnson@kernel.org, mathieu.poirier@linaro.org, trilokkumar.soni@oss.qualcomm.com, mukesh.ojha@oss.qualcomm.com, pavan.kondeti@oss.qualcomm.com, jorge.ramirez@oss.qualcomm.com, tonyh@qti.qualcomm.com, vignesh.viswanathan@oss.qualcomm.com, srinivas.kandagatla@oss.qualcomm.com, amirreza.zarrabi@oss.qualcomm.com, jens.wiklander@linaro.org, op-tee@lists.trustedfirmware.org, apurupa@qti.qualcomm.com, skare@qti.qualcomm.com, linux-kernel@vger.kernel.org, Sumit Garg Subject: [PATCH v8 00/14] firmware: qcom: Add OP-TEE PAS service support Date: Fri, 26 Jun 2026 19:04:20 +0530 Message-ID: <20260626133440.692849-1-sumit.garg@kernel.org> X-Mailer: git-send-email 2.53.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Sumit Garg Qcom platforms has the legacy of using non-standard SCM calls splintered over the various kernel drivers. These SCM calls aren't compliant with the standard SMC calling conventions which is a prerequisite to enable migration to the FF-A specifications from Arm. OP-TEE as an alternative trusted OS to Qualcomm TEE (QTEE) can't support these non-standard SCM calls. And even for newer architectures using S-EL2 with Hafnium support, QTEE won't be able to support SCM calls either with FF-A requirements coming in. And with both OP-TEE and QTEE drivers well integrated in the TEE subsystem, it makes further sense to reuse the TEE bus client drivers infrastructure. The added benefit of TEE bus infrastructure is that there is support for discoverable/enumerable services. With that client drivers don't have to manually invoke a special SCM call to know the service status. So enable the generic Peripheral Authentication Service (PAS) provided by the firmware. It acts as the common layer with different TZ backends plugged in whether it's an SCM implementation or a proper TEE bus based PAS service implementation. The TEE PAS service ABI is designed to be extensible with additional API as PTA_QCOM_PAS_CAPABILITIES. This allows to accommodate any future extensions of the PAS service needed while still maintaining backwards compatibility. Currently OP-TEE support is being added to provide the backend PAS service implementation which can be found as part of this PR [1]. This implementation has been tested on Kodiak/RB3Gen2 and lemans EVK boards. In addition to that WIN/IPQ targets tested OP-TEE with this service too. Surely the backwards compatibility is maintained and tested for SCM backend. Note that kernel PAS service support while running in EL2 is at parity among OP-TEE vs QTEE. Especially the media (venus/iris) support depends on proper IOMMU support being worked out on the PAS client end. Patch summary: - Patch #1: adds generic PAS service. - Patch #2: migrates SCM backend to generic PAS service. - Patch #3: adds TEE/OP-TEE backend for generic PAS service. - Patch #4-#12: migrates all client drivers to generic PAS service. - Patch #13: drops legacy PAS SCM exported APIs. The patch-set is based on qcom tree tip [2] and can be found in git tree here [3]. Merge strategy: It is expected due to APIs dependency, the entire patch-set to go via the Qcom tree. All other subsystem maintainers, it will be great if I can get acks for the corresponding subsystem patches. [1] https://github.com/OP-TEE/optee_os/pull/7721 (already merged) [2] https://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git/log/?h=for-next [3] https://git.kernel.org/pub/scm/linux/kernel/git/sumit.garg/linux.git/log/?h=qcom-pas-v8 --- Changes in v8: - Rebased on mainline tip (no functional changes). - Now Lemans EVK is also tested to support OP-TEE PAS here: https://github.com/OP-TEE/optee_os/pull/7845 - Drop Kodiak DT patch as it is carried independently by Mukesh here: https://lore.kernel.org/lkml/20260624063952.2242702-1-mukesh.ojha@oss.qualcomm.com/ - Regarding Sashiko comments, I have already replied in v6 the ones that don't apply but in v7 I got the same comments again. Specific context reasoning which Shashiko ignores: - ABI contract between Linux and TZ - No support for multiple concurrent backends - The TZ backend doesn’t detach during the entire boot cycle Changes in v7: - Rebased to qcom tree (for-next branch) tip. - Merged patch #5 and #7 due to build dependency. - Disabled modem for kodiak EL2 as it isn't tested yet. - Fix an issue found out by sashiko-bot for patch #4. Changes in v6: - Rebased to v7.1-rc4 tag. - Patch #14: fixed ret error print. - Add Kconfig descriptions for PAS symbols such that they are visible in menuconfig to update. Changes in v5: - Incorporated misc. comments from Mukesh. - Split up patch #11 into 2 to add an independent commit for passing proper PAS ID to set_remote_state API. - Picked up tags. Changes in v4: - Incorporate misc. comments on patch #4. - Picked up an ack for patch #10. - Clarify in cover letter about state of media support. Changes in v3: - Incorporated some style and misc. comments for patch #2, #3 and #4. - Add QCOM_PAS Kconfig dependency for various subsystems. - Switch from pseudo TA to proper TA invoke commands. Changes in v2: - Fixed kernel doc warnings. - Polish commit message and comments for patch #2. - Pass proper PAS ID in set_remote_state API for media firmware drivers. - Added Maintainer entry and dropped MODULE_AUTHOR. Sumit Garg (14): firmware: qcom: Add a generic PAS service firmware: qcom_scm: Migrate to generic PAS service firmware: qcom: Add a PAS TEE service remoteproc: qcom_q6v5_pas: Switch over to generic PAS TZ APIs remoteproc: qcom_q6v5_mss: Switch to generic PAS TZ APIs remoteproc: qcom_wcnss: Switch to generic PAS TZ APIs remoteproc: qcom: Select QCOM_PAS generic service drm/msm: Switch to generic PAS TZ APIs media: qcom: Switch to generic PAS TZ APIs media: qcom: Pass proper PAS ID to set_remote_state API net: ipa: Switch to generic PAS TZ APIs wifi: ath12k: Switch to generic PAS TZ APIs firmware: qcom_scm: Remove SCM PAS wrappers MAINTAINERS: Add maintainer entry for Qualcomm PAS TZ service MAINTAINERS | 9 + drivers/firmware/qcom/Kconfig | 21 +- drivers/firmware/qcom/Makefile | 2 + drivers/firmware/qcom/qcom_pas.c | 291 +++++++++++ drivers/firmware/qcom/qcom_pas.h | 50 ++ drivers/firmware/qcom/qcom_pas_tee.c | 477 ++++++++++++++++++ drivers/firmware/qcom/qcom_scm.c | 302 ++++------- drivers/gpu/drm/msm/Kconfig | 1 + drivers/gpu/drm/msm/adreno/a5xx_gpu.c | 4 +- drivers/gpu/drm/msm/adreno/adreno_gpu.c | 11 +- drivers/media/platform/qcom/iris/Kconfig | 27 +- .../media/platform/qcom/iris/iris_firmware.c | 9 +- drivers/media/platform/qcom/venus/Kconfig | 1 + drivers/media/platform/qcom/venus/firmware.c | 11 +- drivers/net/ipa/Kconfig | 2 +- drivers/net/ipa/ipa_main.c | 13 +- drivers/net/wireless/ath/ath12k/Kconfig | 2 +- drivers/net/wireless/ath/ath12k/ahb.c | 10 +- drivers/remoteproc/Kconfig | 4 +- drivers/remoteproc/qcom_q6v5_mss.c | 5 +- drivers/remoteproc/qcom_q6v5_pas.c | 51 +- drivers/remoteproc/qcom_wcnss.c | 12 +- drivers/soc/qcom/mdt_loader.c | 12 +- include/linux/firmware/qcom/qcom_pas.h | 43 ++ include/linux/firmware/qcom/qcom_scm.h | 29 -- include/linux/soc/qcom/mdt_loader.h | 6 +- 26 files changed, 1084 insertions(+), 321 deletions(-) create mode 100644 drivers/firmware/qcom/qcom_pas.c create mode 100644 drivers/firmware/qcom/qcom_pas.h create mode 100644 drivers/firmware/qcom/qcom_pas_tee.c create mode 100644 include/linux/firmware/qcom/qcom_pas.h -- 2.53.0 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 lists.trustedfirmware.org (lists.trustedfirmware.org [18.214.241.189]) (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 64628C43458 for ; Fri, 26 Jun 2026 13:35:28 +0000 (UTC) Received: from lists.trustedfirmware.org (localhost [127.0.0.1]) by lists.trustedfirmware.org (Postfix) with ESMTP id 8815E43A68 for ; Fri, 26 Jun 2026 13:35:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.trustedfirmware.org; s=2024; t=1782480927; bh=JcKWyuIIDuD43fehVr4my33oN8ePT483KtZkFdXr0wM=; h=To:Subject:Date:CC:List-Id:List-Archive:List-Help:List-Owner: List-Post:List-Subscribe:List-Unsubscribe:From:Reply-To:From; b=ai3DoCtAw6f6T1tLh7KJ3RY5CwANN45XhnOuZFlyhu34xSJyEnN6Xx+Xy6yLxsQb4 uRqGpFTDh8lRAsyNBbsptTz18Goe1hk1+rAv2hSdqxImoNVyQ0rqxggxZEmOt2amF3 eFR+cd25HhY95lGYolakNS01sens27QIEp0QZ4OR5aKOK6XV3tL4luuJQLE+GiMeZJ lqIgdPB7cU/kz2D6kchiWGaPUS0cwA5GMjPQBcahlCszSDPb7UE9qWUd6ft3xUgz+k Lznz2wafM05lIu26/FONbMHt/NkjjNNnO+I4NzphSdcgN2s1fg+S/wnK7sU+XsHUb6 +SlelqzovBoYQ== Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by lists.trustedfirmware.org (Postfix) with ESMTPS id A858943A68 for ; Fri, 26 Jun 2026 13:35:20 +0000 (UTC) Authentication-Results: lists.trustedfirmware.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20260515 header.b=f4luWlP5; dkim-atps=neutral Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) by tor.source.kernel.org (Postfix) with ESMTP id 3D9EB600C8; Fri, 26 Jun 2026 13:35:20 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 37EB51F000E9; Fri, 26 Jun 2026 13:34:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=kernel.org; s=k20260515; t=1782480919; bh=hH510sudv5X4F+U/OA58bG3WrGtZ8R+7l3HMyghVbtg=; h=From:To:Cc:Subject:Date; b=f4luWlP5i+ZVcrnK+dhMEPLcfUOePLMCMdFRYBPCknaPjvtzi2otHqfZwIkvbh33x pXNuzdBZs5YCZawmsN0FF9QkhxSQSSYCUaB7nWvMdSIsV5kEZkUWrUfgxt/CFhNKLy XVvCBRJXEuoUnLw39y5X3EBnkfjJUDoJPt3D+tMCwcthUofJPK+Jo9TFjhccJBlQ8/ qXu33dtpTBgpsYrxyfHSAmwjLCUhUv27vfUN5Yr2DoGSj92RriowxvqV5ATkh3xAa0 Pf5kLN3F6D0ljD2cvthsxOltZSYyRfKKnlsLCYEEU6jzY+LuX5xHm9DKGioGCVbQwM JUxSbE59k0M0A== To: andersson@kernel.org Subject: [PATCH v8 00/14] firmware: qcom: Add OP-TEE PAS service support Date: Fri, 26 Jun 2026 19:04:20 +0530 Message-ID: <20260626133440.692849-1-sumit.garg@kernel.org> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-Rspamd-Action: no action X-Spamd-Result: default: False [-6.50 / 15.00]; WHITELIST_SPF_DKIM(-3.00)[kernel.org:d:+,kernel.org:s:+]; BAYES_HAM(-3.00)[99.99%]; DWL_DNSWL_MED(-2.00)[kernel.org:dkim]; SUSPICIOUS_RECIPS(1.50)[]; MID_CONTAINS_FROM(1.00)[]; DMARC_POLICY_ALLOW(-0.50)[kernel.org,quarantine]; R_DKIM_ALLOW(-0.20)[kernel.org:s=k20260515]; R_SPF_ALLOW(-0.20)[+ip4:172.105.4.254]; MIME_GOOD(-0.10)[text/plain]; RCVD_COUNT_TWO(0.00)[2]; RCVD_VIA_SMTP_AUTH(0.00)[]; ARC_NA(0.00)[]; MIME_TRACE(0.00)[0:+]; RCPT_COUNT_TWELVE(0.00)[47]; ASN(0.00)[asn:63949, ipnet:172.105.0.0/19, country:SG]; FREEMAIL_CC(0.00)[vger.kernel.org,lists.freedesktop.org,lists.infradead.org,kernel.org,oss.qualcomm.com,poorly.run,linux.dev,gmail.com,somainline.org,ffwll.ch,lunn.ch,davemloft.net,google.com,redhat.com,linaro.org,qti.qualcomm.com,lists.trustedfirmware.org]; FROM_HAS_DN(0.00)[]; TAGGED_RCPT(0.00)[dt,netdev]; ALIAS_RESOLVED(0.00)[]; RCVD_TLS_LAST(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; NEURAL_HAM(-0.00)[-1.000]; FROM_EQ_ENVFROM(0.00)[]; TO_DN_SOME(0.00)[]; DKIM_TRACE(0.00)[kernel.org:+] X-Rspamd-Server: lists.trustedfirmware.org X-Rspamd-Queue-Id: A858943A68 X-Spamd-Bar: ------ Message-ID-Hash: WPCME3FZF6VU2OY6JXQ6J7ARPH3AHLNU X-Message-ID-Hash: WPCME3FZF6VU2OY6JXQ6J7ARPH3AHLNU X-MailFrom: sumit.garg@kernel.org X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-op-tee.lists.trustedfirmware.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: linux-arm-msm@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-media@vger.kernel.org, netdev@vger.kernel.org, linux-wireless@vger.kernel.org, ath12k@lists.infradead.org, linux-remoteproc@vger.kernel.org, konradybcio@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, robin.clark@oss.qualcomm.com, sean@poorly.run, akhilpo@oss.qualcomm.com, lumag@kernel.org, abhinav.kumar@linux.dev, jesszhan0024@gmail.com, marijn.suijten@somainline.org, airlied@gmail.com, simona@ffwll.ch, vikash.garodia@oss.qualcomm.com, bod@kernel.org, mchehab@kernel.org, elder@kernel.org, andrew+netdev@lunn.ch, davem@davemloft.net, edumazet@google.com, kuba@kernel.org, pabeni@redhat.com, jjohnson@kernel.org, mathieu.poirier@linaro.org, trilokkumar.soni@oss.qualcomm.com, mukesh.ojha@oss.qualcomm.com, pavan.kondeti@oss.qualcomm.com, jorge.ramirez@oss.qualcomm.com, tonyh@qti.qualcomm.com, vignesh.viswanathan@oss.qualcomm.com, srinivas.kandagatla@oss.qualcomm. com, amirreza.zarrabi@oss.qualcomm.com, op-tee@lists.trustedfirmware.org, apurupa@qti.qualcomm.com, skare@qti.qualcomm.com, linux-kernel@vger.kernel.org, Sumit Garg X-Mailman-Version: 3.3.5 Precedence: list List-Id: Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: From: Sumit Garg via OP-TEE Reply-To: Sumit Garg RnJvbTogU3VtaXQgR2FyZyA8c3VtaXQuZ2FyZ0Bvc3MucXVhbGNvbW0uY29tPg0KDQpRY29tIHBs YXRmb3JtcyBoYXMgdGhlIGxlZ2FjeSBvZiB1c2luZyBub24tc3RhbmRhcmQgU0NNIGNhbGxzDQpz cGxpbnRlcmVkIG92ZXIgdGhlIHZhcmlvdXMga2VybmVsIGRyaXZlcnMuIFRoZXNlIFNDTSBjYWxs cyBhcmVuJ3QNCmNvbXBsaWFudCB3aXRoIHRoZSBzdGFuZGFyZCBTTUMgY2FsbGluZyBjb252ZW50 aW9ucyB3aGljaCBpcyBhDQpwcmVyZXF1aXNpdGUgdG8gZW5hYmxlIG1pZ3JhdGlvbiB0byB0aGUg RkYtQSBzcGVjaWZpY2F0aW9ucyBmcm9tIEFybS4NCg0KT1AtVEVFIGFzIGFuIGFsdGVybmF0aXZl IHRydXN0ZWQgT1MgdG8gUXVhbGNvbW0gVEVFIChRVEVFKSBjYW4ndA0Kc3VwcG9ydCB0aGVzZSBu b24tc3RhbmRhcmQgU0NNIGNhbGxzLiBBbmQgZXZlbiBmb3IgbmV3ZXIgYXJjaGl0ZWN0dXJlcw0K dXNpbmcgUy1FTDIgd2l0aCBIYWZuaXVtIHN1cHBvcnQsIFFURUUgd29uJ3QgYmUgYWJsZSB0byBz dXBwb3J0IFNDTQ0KY2FsbHMgZWl0aGVyIHdpdGggRkYtQSByZXF1aXJlbWVudHMgY29taW5nIGlu LiBBbmQgd2l0aCBib3RoIE9QLVRFRQ0KYW5kIFFURUUgZHJpdmVycyB3ZWxsIGludGVncmF0ZWQg aW4gdGhlIFRFRSBzdWJzeXN0ZW0sIGl0IG1ha2VzIGZ1cnRoZXINCnNlbnNlIHRvIHJldXNlIHRo ZSBURUUgYnVzIGNsaWVudCBkcml2ZXJzIGluZnJhc3RydWN0dXJlLg0KDQpUaGUgYWRkZWQgYmVu ZWZpdCBvZiBURUUgYnVzIGluZnJhc3RydWN0dXJlIGlzIHRoYXQgdGhlcmUgaXMgc3VwcG9ydA0K Zm9yIGRpc2NvdmVyYWJsZS9lbnVtZXJhYmxlIHNlcnZpY2VzLiBXaXRoIHRoYXQgY2xpZW50IGRy aXZlcnMgZG9uJ3QNCmhhdmUgdG8gbWFudWFsbHkgaW52b2tlIGEgc3BlY2lhbCBTQ00gY2FsbCB0 byBrbm93IHRoZSBzZXJ2aWNlIHN0YXR1cy4NCg0KU28gZW5hYmxlIHRoZSBnZW5lcmljIFBlcmlw aGVyYWwgQXV0aGVudGljYXRpb24gU2VydmljZSAoUEFTKSBwcm92aWRlZA0KYnkgdGhlIGZpcm13 YXJlLiBJdCBhY3RzIGFzIHRoZSBjb21tb24gbGF5ZXIgd2l0aCBkaWZmZXJlbnQgVFoNCmJhY2tl bmRzIHBsdWdnZWQgaW4gd2hldGhlciBpdCdzIGFuIFNDTSBpbXBsZW1lbnRhdGlvbiBvciBhIHBy b3Blcg0KVEVFIGJ1cyBiYXNlZCBQQVMgc2VydmljZSBpbXBsZW1lbnRhdGlvbi4NCg0KVGhlIFRF RSBQQVMgc2VydmljZSBBQkkgaXMgZGVzaWduZWQgdG8gYmUgZXh0ZW5zaWJsZSB3aXRoIGFkZGl0 aW9uYWwgQVBJDQphcyBQVEFfUUNPTV9QQVNfQ0FQQUJJTElUSUVTLiBUaGlzIGFsbG93cyB0byBh Y2NvbW1vZGF0ZSBhbnkgZnV0dXJlDQpleHRlbnNpb25zIG9mIHRoZSBQQVMgc2VydmljZSBuZWVk ZWQgd2hpbGUgc3RpbGwgbWFpbnRhaW5pbmcgYmFja3dhcmRzDQpjb21wYXRpYmlsaXR5Lg0KDQpD dXJyZW50bHkgT1AtVEVFIHN1cHBvcnQgaXMgYmVpbmcgYWRkZWQgdG8gcHJvdmlkZSB0aGUgYmFj a2VuZCBQQVMNCnNlcnZpY2UgaW1wbGVtZW50YXRpb24gd2hpY2ggY2FuIGJlIGZvdW5kIGFzIHBh cnQgb2YgdGhpcyBQUiBbMV0uDQpUaGlzIGltcGxlbWVudGF0aW9uIGhhcyBiZWVuIHRlc3RlZCBv biBLb2RpYWsvUkIzR2VuMiBhbmQgbGVtYW5zDQpFVksgYm9hcmRzLiBJbiBhZGRpdGlvbiB0byB0 aGF0IFdJTi9JUFEgdGFyZ2V0cyB0ZXN0ZWQgT1AtVEVFIHdpdGgNCnRoaXMgc2VydmljZSB0b28u IFN1cmVseSB0aGUgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXMgbWFpbnRhaW5lZCBhbmQNCnRl c3RlZCBmb3IgU0NNIGJhY2tlbmQuDQoNCk5vdGUgdGhhdCBrZXJuZWwgUEFTIHNlcnZpY2Ugc3Vw cG9ydCB3aGlsZSBydW5uaW5nIGluIEVMMiBpcyBhdCBwYXJpdHkNCmFtb25nIE9QLVRFRSB2cyBR VEVFLiBFc3BlY2lhbGx5IHRoZSBtZWRpYSAodmVudXMvaXJpcykgc3VwcG9ydCBkZXBlbmRzDQpv biBwcm9wZXIgSU9NTVUgc3VwcG9ydCBiZWluZyB3b3JrZWQgb3V0IG9uIHRoZSBQQVMgY2xpZW50 IGVuZC4NCg0KUGF0Y2ggc3VtbWFyeToNCi0gUGF0Y2ggIzE6IGFkZHMgZ2VuZXJpYyBQQVMgc2Vy dmljZS4NCi0gUGF0Y2ggIzI6IG1pZ3JhdGVzIFNDTSBiYWNrZW5kIHRvIGdlbmVyaWMgUEFTIHNl cnZpY2UuDQotIFBhdGNoICMzOiBhZGRzIFRFRS9PUC1URUUgYmFja2VuZCBmb3IgZ2VuZXJpYyBQ QVMgc2VydmljZS4NCi0gUGF0Y2ggIzQtIzEyOiBtaWdyYXRlcyBhbGwgY2xpZW50IGRyaXZlcnMg dG8gZ2VuZXJpYyBQQVMgc2VydmljZS4NCi0gUGF0Y2ggIzEzOiBkcm9wcyBsZWdhY3kgUEFTIFND TSBleHBvcnRlZCBBUElzLg0KDQpUaGUgcGF0Y2gtc2V0IGlzIGJhc2VkIG9uIHFjb20gdHJlZSB0 aXAgWzJdIGFuZCBjYW4gYmUgZm91bmQgaW4gZ2l0IHRyZWUNCmhlcmUgWzNdLg0KDQpNZXJnZSBz dHJhdGVneToNCg0KSXQgaXMgZXhwZWN0ZWQgZHVlIHRvIEFQSXMgZGVwZW5kZW5jeSwgdGhlIGVu dGlyZSBwYXRjaC1zZXQgdG8gZ28gdmlhDQp0aGUgUWNvbSB0cmVlLiBBbGwgb3RoZXIgc3Vic3lz dGVtIG1haW50YWluZXJzLCBpdCB3aWxsIGJlIGdyZWF0IGlmIEkNCmNhbiBnZXQgYWNrcyBmb3Ig dGhlIGNvcnJlc3BvbmRpbmcgc3Vic3lzdGVtIHBhdGNoZXMuDQoNClsxXSBodHRwczovL2dpdGh1 Yi5jb20vT1AtVEVFL29wdGVlX29zL3B1bGwvNzcyMSAoYWxyZWFkeSBtZXJnZWQpDQpbMl0gaHR0 cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQvcWNvbS9saW51eC5n aXQvbG9nLz9oPWZvci1uZXh0DQpbM10gaHR0cHM6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xp bnV4L2tlcm5lbC9naXQvc3VtaXQuZ2FyZy9saW51eC5naXQvbG9nLz9oPXFjb20tcGFzLXY4DQoN Ci0tLQ0KQ2hhbmdlcyBpbiB2ODoNCi0gUmViYXNlZCBvbiBtYWlubGluZSB0aXAgKG5vIGZ1bmN0 aW9uYWwgY2hhbmdlcykuDQotIE5vdyBMZW1hbnMgRVZLIGlzIGFsc28gdGVzdGVkIHRvIHN1cHBv cnQgT1AtVEVFIFBBUyBoZXJlOg0KICBodHRwczovL2dpdGh1Yi5jb20vT1AtVEVFL29wdGVlX29z L3B1bGwvNzg0NQ0KLSBEcm9wIEtvZGlhayBEVCBwYXRjaCBhcyBpdCBpcyBjYXJyaWVkIGluZGVw ZW5kZW50bHkgYnkgTXVrZXNoIGhlcmU6DQogIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL2xrbWwv MjAyNjA2MjQwNjM5NTIuMjI0MjcwMi0xLW11a2VzaC5vamhhQG9zcy5xdWFsY29tbS5jb20vDQot IFJlZ2FyZGluZyBTYXNoaWtvIGNvbW1lbnRzLCBJIGhhdmUgYWxyZWFkeSByZXBsaWVkIGluIHY2 IHRoZSBvbmVzIHRoYXQNCiAgZG9uJ3QgYXBwbHkgYnV0IGluIHY3IEkgZ290IHRoZSBzYW1lIGNv bW1lbnRzIGFnYWluLiBTcGVjaWZpYyBjb250ZXh0DQogIHJlYXNvbmluZyB3aGljaCBTaGFzaGlr byBpZ25vcmVzOg0KICAgIC0gQUJJIGNvbnRyYWN0IGJldHdlZW4gTGludXggYW5kIFRaDQogICAg LSBObyBzdXBwb3J0IGZvciBtdWx0aXBsZSBjb25jdXJyZW50IGJhY2tlbmRzDQogICAgLSBUaGUg VFogYmFja2VuZCBkb2VzbuKAmXQgZGV0YWNoIGR1cmluZyB0aGUgZW50aXJlIGJvb3QgY3ljbGUN Cg0KQ2hhbmdlcyBpbiB2NzoNCi0gUmViYXNlZCB0byBxY29tIHRyZWUgKGZvci1uZXh0IGJyYW5j aCkgdGlwLg0KLSBNZXJnZWQgcGF0Y2ggIzUgYW5kICM3IGR1ZSB0byBidWlsZCBkZXBlbmRlbmN5 Lg0KLSBEaXNhYmxlZCBtb2RlbSBmb3Iga29kaWFrIEVMMiBhcyBpdCBpc24ndCB0ZXN0ZWQgeWV0 Lg0KLSBGaXggYW4gaXNzdWUgZm91bmQgb3V0IGJ5IHNhc2hpa28tYm90IGZvciBwYXRjaCAjNC4N Cg0KQ2hhbmdlcyBpbiB2NjoNCi0gUmViYXNlZCB0byB2Ny4xLXJjNCB0YWcuDQotIFBhdGNoICMx NDogZml4ZWQgcmV0IGVycm9yIHByaW50Lg0KLSBBZGQgS2NvbmZpZyBkZXNjcmlwdGlvbnMgZm9y IFBBUyBzeW1ib2xzIHN1Y2ggdGhhdCB0aGV5IGFyZSB2aXNpYmxlDQogIGluIG1lbnVjb25maWcg dG8gdXBkYXRlLg0KDQpDaGFuZ2VzIGluIHY1Og0KLSBJbmNvcnBvcmF0ZWQgbWlzYy4gY29tbWVu dHMgZnJvbSBNdWtlc2guDQotIFNwbGl0IHVwIHBhdGNoICMxMSBpbnRvIDIgdG8gYWRkIGFuIGlu ZGVwZW5kZW50IGNvbW1pdCBmb3IgcGFzc2luZw0KICBwcm9wZXIgUEFTIElEIHRvIHNldF9yZW1v dGVfc3RhdGUgQVBJLg0KLSBQaWNrZWQgdXAgdGFncy4NCg0KQ2hhbmdlcyBpbiB2NDoNCi0gSW5j b3Jwb3JhdGUgbWlzYy4gY29tbWVudHMgb24gcGF0Y2ggIzQuDQotIFBpY2tlZCB1cCBhbiBhY2sg Zm9yIHBhdGNoICMxMC4NCi0gQ2xhcmlmeSBpbiBjb3ZlciBsZXR0ZXIgYWJvdXQgc3RhdGUgb2Yg bWVkaWEgc3VwcG9ydC4NCg0KQ2hhbmdlcyBpbiB2MzoNCi0gSW5jb3Jwb3JhdGVkIHNvbWUgc3R5 bGUgYW5kIG1pc2MuIGNvbW1lbnRzIGZvciBwYXRjaCAjMiwgIzMgYW5kICM0Lg0KLSBBZGQgUUNP TV9QQVMgS2NvbmZpZyBkZXBlbmRlbmN5IGZvciB2YXJpb3VzIHN1YnN5c3RlbXMuDQotIFN3aXRj aCBmcm9tIHBzZXVkbyBUQSB0byBwcm9wZXIgVEEgaW52b2tlIGNvbW1hbmRzLg0KDQpDaGFuZ2Vz IGluIHYyOg0KLSBGaXhlZCBrZXJuZWwgZG9jIHdhcm5pbmdzLg0KLSBQb2xpc2ggY29tbWl0IG1l c3NhZ2UgYW5kIGNvbW1lbnRzIGZvciBwYXRjaCAjMi4NCi0gUGFzcyBwcm9wZXIgUEFTIElEIGlu IHNldF9yZW1vdGVfc3RhdGUgQVBJIGZvciBtZWRpYSBmaXJtd2FyZSBkcml2ZXJzLg0KLSBBZGRl ZCBNYWludGFpbmVyIGVudHJ5IGFuZCBkcm9wcGVkIE1PRFVMRV9BVVRIT1IuDQoNClN1bWl0IEdh cmcgKDE0KToNCiAgZmlybXdhcmU6IHFjb206IEFkZCBhIGdlbmVyaWMgUEFTIHNlcnZpY2UNCiAg ZmlybXdhcmU6IHFjb21fc2NtOiBNaWdyYXRlIHRvIGdlbmVyaWMgUEFTIHNlcnZpY2UNCiAgZmly bXdhcmU6IHFjb206IEFkZCBhIFBBUyBURUUgc2VydmljZQ0KICByZW1vdGVwcm9jOiBxY29tX3E2 djVfcGFzOiBTd2l0Y2ggb3ZlciB0byBnZW5lcmljIFBBUyBUWiBBUElzDQogIHJlbW90ZXByb2M6 IHFjb21fcTZ2NV9tc3M6IFN3aXRjaCB0byBnZW5lcmljIFBBUyBUWiBBUElzDQogIHJlbW90ZXBy b2M6IHFjb21fd2Nuc3M6IFN3aXRjaCB0byBnZW5lcmljIFBBUyBUWiBBUElzDQogIHJlbW90ZXBy b2M6IHFjb206IFNlbGVjdCBRQ09NX1BBUyBnZW5lcmljIHNlcnZpY2UNCiAgZHJtL21zbTogU3dp dGNoIHRvIGdlbmVyaWMgUEFTIFRaIEFQSXMNCiAgbWVkaWE6IHFjb206IFN3aXRjaCB0byBnZW5l cmljIFBBUyBUWiBBUElzDQogIG1lZGlhOiBxY29tOiBQYXNzIHByb3BlciBQQVMgSUQgdG8gc2V0 X3JlbW90ZV9zdGF0ZSBBUEkNCiAgbmV0OiBpcGE6IFN3aXRjaCB0byBnZW5lcmljIFBBUyBUWiBB UElzDQogIHdpZmk6IGF0aDEyazogU3dpdGNoIHRvIGdlbmVyaWMgUEFTIFRaIEFQSXMNCiAgZmly bXdhcmU6IHFjb21fc2NtOiBSZW1vdmUgU0NNIFBBUyB3cmFwcGVycw0KICBNQUlOVEFJTkVSUzog QWRkIG1haW50YWluZXIgZW50cnkgZm9yIFF1YWxjb21tIFBBUyBUWiBzZXJ2aWNlDQoNCiBNQUlO VEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDkgKw0KIGRyaXZl cnMvZmlybXdhcmUvcWNvbS9LY29uZmlnICAgICAgICAgICAgICAgICB8ICAyMSArLQ0KIGRyaXZl cnMvZmlybXdhcmUvcWNvbS9NYWtlZmlsZSAgICAgICAgICAgICAgICB8ICAgMiArDQogZHJpdmVy cy9maXJtd2FyZS9xY29tL3Fjb21fcGFzLmMgICAgICAgICAgICAgIHwgMjkxICsrKysrKysrKysr DQogZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fcGFzLmggICAgICAgICAgICAgIHwgIDUwICsr DQogZHJpdmVycy9maXJtd2FyZS9xY29tL3Fjb21fcGFzX3RlZS5jICAgICAgICAgIHwgNDc3ICsr KysrKysrKysrKysrKysrKw0KIGRyaXZlcnMvZmlybXdhcmUvcWNvbS9xY29tX3NjbS5jICAgICAg ICAgICAgICB8IDMwMiArKysrLS0tLS0tLQ0KIGRyaXZlcnMvZ3B1L2RybS9tc20vS2NvbmZpZyAg ICAgICAgICAgICAgICAgICB8ICAgMSArDQogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYTV4 eF9ncHUuYyAgICAgICAgIHwgICA0ICstDQogZHJpdmVycy9ncHUvZHJtL21zbS9hZHJlbm8vYWRy ZW5vX2dwdS5jICAgICAgIHwgIDExICstDQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL2ly aXMvS2NvbmZpZyAgICAgIHwgIDI3ICstDQogLi4uL21lZGlhL3BsYXRmb3JtL3Fjb20vaXJpcy9p cmlzX2Zpcm13YXJlLmMgIHwgICA5ICstDQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9xY29tL3Zl bnVzL0tjb25maWcgICAgIHwgICAxICsNCiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL3Fjb20vdmVu dXMvZmlybXdhcmUuYyAgfCAgMTEgKy0NCiBkcml2ZXJzL25ldC9pcGEvS2NvbmZpZyAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL25ldC9pcGEvaXBhX21haW4uYyAgICAg ICAgICAgICAgICAgICAgfCAgMTMgKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJr L0tjb25maWcgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL25ldC93aXJlbGVzcy9hdGgvYXRoMTJr L2FoYi5jICAgICAgICAgfCAgMTAgKy0NCiBkcml2ZXJzL3JlbW90ZXByb2MvS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgfCAgIDQgKy0NCiBkcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X21z cy5jICAgICAgICAgICAgfCAgIDUgKy0NCiBkcml2ZXJzL3JlbW90ZXByb2MvcWNvbV9xNnY1X3Bh cy5jICAgICAgICAgICAgfCAgNTEgKy0NCiBkcml2ZXJzL3JlbW90ZXByb2MvcWNvbV93Y25zcy5j ICAgICAgICAgICAgICAgfCAgMTIgKy0NCiBkcml2ZXJzL3NvYy9xY29tL21kdF9sb2FkZXIuYyAg ICAgICAgICAgICAgICAgfCAgMTIgKy0NCiBpbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNv bV9wYXMuaCAgICAgICAgfCAgNDMgKysNCiBpbmNsdWRlL2xpbnV4L2Zpcm13YXJlL3Fjb20vcWNv bV9zY20uaCAgICAgICAgfCAgMjkgLS0NCiBpbmNsdWRlL2xpbnV4L3NvYy9xY29tL21kdF9sb2Fk ZXIuaCAgICAgICAgICAgfCAgIDYgKy0NCiAyNiBmaWxlcyBjaGFuZ2VkLCAxMDg0IGluc2VydGlv bnMoKyksIDMyMSBkZWxldGlvbnMoLSkNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9maXJt d2FyZS9xY29tL3Fjb21fcGFzLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9maXJtd2Fy ZS9xY29tL3Fjb21fcGFzLmgNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9maXJtd2FyZS9x Y29tL3Fjb21fcGFzX3RlZS5jDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvZmly bXdhcmUvcWNvbS9xY29tX3Bhcy5oDQoNCi0tIA0KMi41My4wDQoNCg==