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=-13.0 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=unavailable 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 4ADBCC433EC for ; Fri, 17 Jul 2020 01:49:45 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (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 071682070E for ; Fri, 17 Jul 2020 01:49:45 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Bprd4Tnm"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=samsung.com header.i=@samsung.com header.b="ZXQZffHF" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 071682070E Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=samsung.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:References:MIME-Version:In-Reply-To:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=40pVsHkTg4kQ80MqMg9EA/5C7NKRjQD29dwsGt550aU=; b=Bprd4TnmaeWFDPuxdyyF+Tt7I xPzdrng5CSHk5Jz95HeinAicnaVG+l1G1jX9e9nt8b+pRChiqI1uDUOG+Qv45+p5SxWJAloCK8a4L dp+OForiMrDteqL4ZWQi6fx+08OlYFwk5U5vvMyinniBOBB81024WKOplUV44Fa/CcKd2ZnijcbuG ravnVOy8eubpjlo3brEvtx1jjYinKkENeHpdyQ6PQM6KyRa4+vW8oeFAf1/W8CGlzqVvXoKE6CB6F cSzOn+v+C/G91xUkd+kq4ZwwLow4N6daDyAcP0814YCttTDUQVpOVAHWTo83IZamzHx3hmoL23MoG +ikEB05EA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1jwFTM-0003IF-IB; Fri, 17 Jul 2020 01:47:36 +0000 Received: from mailout2.samsung.com ([203.254.224.25]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1jwFTJ-0003Hr-98 for linux-arm-kernel@lists.infradead.org; Fri, 17 Jul 2020 01:47:35 +0000 Received: from epcas5p1.samsung.com (unknown [182.195.41.39]) by mailout2.samsung.com (KnoxPortal) with ESMTP id 20200717014728epoutp029dd01b1bd4d429bf42348032cd1da053~iZvuQT63G2877528775epoutp02f for ; Fri, 17 Jul 2020 01:47:28 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.samsung.com 20200717014728epoutp029dd01b1bd4d429bf42348032cd1da053~iZvuQT63G2877528775epoutp02f DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1594950448; bh=7Z+XwmoCvUvvh9iHZt9klSv4JcpZHagNyaoTh8MWdmA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ZXQZffHFFehN+J0MZXcJWbd8scn1fHdu2g50d9yPt6ss80WNNHw1CiJijWAtON29R wy48oi8omOYtjx5EmWNc19hUBvh3dd3hobmYZyOvwI6h9ZWMzRlCIgQQRc1NlJBclh sPVOSMsF8yP7eyypdAe0xsTiZKQvY0eUzuWXWWK8= Received: from epsmges5p3new.samsung.com (unknown [182.195.42.75]) by epcas5p4.samsung.com (KnoxPortal) with ESMTP id 20200717014728epcas5p407a95f0dae44dc6345251509186a1feb~iZvtpgWen2266422664epcas5p4W; Fri, 17 Jul 2020 01:47:28 +0000 (GMT) Received: from epcas5p2.samsung.com ( [182.195.41.40]) by epsmges5p3new.samsung.com (Symantec Messaging Gateway) with SMTP id CA.13.09475.F23011F5; Fri, 17 Jul 2020 10:47:27 +0900 (KST) Received: from epsmtrp2.samsung.com (unknown [182.195.40.14]) by epcas5p2.samsung.com (KnoxPortal) with ESMTPA id 20200716194407epcas5p291e5f0b9cf9da29e8f63d79289a5d2a5~iUyeLjns60038300383epcas5p2_; Thu, 16 Jul 2020 19:44:07 +0000 (GMT) Received: from epsmgms1p1new.samsung.com (unknown [182.195.42.41]) by epsmtrp2.samsung.com (KnoxPortal) with ESMTP id 20200716194407epsmtrp2fdcee29154ea9b922b3e4bcd23d0b9ee~iUyeKqkEH1392113921epsmtrp2G; Thu, 16 Jul 2020 19:44:07 +0000 (GMT) X-AuditID: b6c32a4b-389ff70000002503-5e-5f11032f1b57 Received: from epsmtip1.samsung.com ( [182.195.34.30]) by epsmgms1p1new.samsung.com (Symantec Messaging Gateway) with SMTP id E5.AE.08382.70EA01F5; Fri, 17 Jul 2020 04:44:07 +0900 (KST) Received: from Jaguar.sa.corp.samsungelectronics.net (unknown [107.108.73.139]) by epsmtip1.samsung.com (KnoxPortal) with ESMTPA id 20200716194405epsmtip18bc608c3a6f125ed8e8a4234beb58853~iUyctTuMp1985919859epsmtip1V; Thu, 16 Jul 2020 19:44:05 +0000 (GMT) From: Alim Akhtar To: vkoul@kernel.org Subject: [PATCH v13 2/2] phy: samsung-ufs: add UFS PHY driver for samsung SoC Date: Fri, 17 Jul 2020 00:52:17 +0530 Message-Id: <20200716192217.35740-2-alim.akhtar@samsung.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200716192217.35740-1-alim.akhtar@samsung.com> MIME-Version: 1.0 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprPKsWRmVeSWpSXmKPExsWy7bCmhq4+s2C8wc+v1hYP5m1js5h/5Byr xYWnPWwW589vYLfY9Pgaq8XlXXPYLGac38dk0br3CLvFzjsnmB04PTat6mTz2Lyk3qNvyypG j+M3tjN5fN4kF8AaxWWTkpqTWZZapG+XwJVxpfUsU8GseYwVX3cdY21g3NPC2MXIySEhYCKx 5PN1IJuLQ0hgN6PEjc2/oZxPjBJn7yxjBakSEvjGKHGwwxemY97BicwQRXsZJWb/mQHV0cIk 8bO1gQWkik1AW+Lu9C1MILaIgIjE6pXzwIqYBf4zSux8OBVsubCAv8SiKTvYQGwWAVWJ/mOT mUFsXgEbif233rJDrJOXWL3hAFicU8BWYvfiF0wQNYISJ2c+AVvGDFTTvHU2M0R9L4fEv2uy ELaLxKdVvVBzhCVeHd8CZUtJfH63F2gvB5CdLdGzyxgiXCOxdN4xFgjbXuLAlTksICXMApoS 63fpQ4RlJaaeWscEsZVPovf3EyaIOK/EjnkwtqpE87urUGOkJSZ2d7NC2B4S0y4+YoOE1QRG iZsfetkmMCrMQvLNLCTfzEJYvYCReRWjZGpBcW56arFpgXFearlecWJucWleul5yfu4mRnAa 0vLewfjowQe9Q4xMHIyHGCU4mJVEeOe/FIgX4k1JrKxKLcqPLyrNSS0+xCjNwaIkzqv040yc kEB6YklqdmpqQWoRTJaJg1OqgWmlSai8ze0jS7KmdVV0LF3puvzexsebG+avmdNjd2jOblG1 5dv8jVd8X+W44GFs7TTdqOhZCx/3z2Iy5Pfbb6i9hCH34gMeLYvJby78+X+P336lHffLqweX rZ4hItrVXzA3Vy5EIHvl27cW8nZqCg8q3pgzpt/X4Sw8sv2g6HpxF56pPPMV1ynlqNxNF9O/ fKDg8fGHpyb+ZLLsf62v78Z/89BX19h3SmG5v2UKOLPPx5xxkVG/wqpu+8L2usB09fbm9U6W z4SDtvhtrlkQm3763XSuKf3MKwTUb/Bc+FA9w0ltW1vOzqkvGnv2yvMxijgn3pTY/vSY9bZf 70812DDz2056X7nRgisugfO1l5USS3FGoqEWc1FxIgD1U6BXsgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrBLMWRmVeSWpSXmKPExsWy7bCSnC77OoF4g6/L+SwezNvGZjH/yDlW iwtPe9gszp/fwG6x6fE1VovLu+awWcw4v4/JonXvEXaLnXdOMDtwemxa1cnmsXlJvUffllWM HsdvbGfy+LxJLoA1issmJTUnsyy1SN8ugSvjSutZpoJZ8xgrvu46xtrAuKeFsYuRk0NCwERi 3sGJzF2MXBxCArsZJc7+v8YGkZCWuL5xAjuELSyx8t9zdoiiJiaJK5/PMoMk2AS0Je5O38IE YosIiEisXjmPEaSIWaCdSeLYoQlADgeHsICvxMqnVSA1LAKqEv3HJoP18grYSOy/9RZqgbzE 6g0HwOKcArYSuxe/AJspBFSz9fpNNoh6QYmTM5+wgIxkFlCXWD9PCCTMDNTavHU28wRGwVlI qmYhVM1CUrWAkXkVo2RqQXFuem6xYYFhXmq5XnFibnFpXrpecn7uJkZwZGhp7mDcvuqD3iFG Jg7GQ4wSHMxKIrw8XLzxQrwpiZVVqUX58UWlOanFhxilOViUxHlvFC6MExJITyxJzU5NLUgt gskycXBKNTCduz7RplG36c7W2YIhi38eWVZ5/cdq599fahKPzj9YIMxs5cO4yrXjyrqGSqvH lVKPpBkvT7st5Rgc25FRaPlzucf0yfG2PvJvvXaqL7DcWOS9jWu33sv5/lmNC9hOvthkn7Xi qOeuwyckP0zzaRFQPyTCar/5+gvXmK47c11Dpn5IL/serGPTpf7+JwvfhD2ZJ+MXJmxOT3Yv MlzNunBax6cJWUILt2x8/O646DGpDT8tm+YfK4+4mbtngkNIBm+69vf9Ii0+p98EzVt/97d+ dxTj8tVt0ScERDLuzDh9f5JWkIb41PiljvbGWtmPTTufOCudqeR/Hr7a72xK2/eT/UemPFxr 7OqgdNzKes1mJZbijERDLeai4kQA56VVl/sCAAA= X-CMS-MailID: 20200716194407epcas5p291e5f0b9cf9da29e8f63d79289a5d2a5 X-Msg-Generator: CA X-Sendblock-Type: REQ_APPROVE CMS-TYPE: 105P X-CMS-RootMailID: 20200716194407epcas5p291e5f0b9cf9da29e8f63d79289a5d2a5 References: <20200716192217.35740-1-alim.akhtar@samsung.com> X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200716_214734_076863_BE832A40 X-CRM114-Status: GOOD ( 28.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devicetree@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org, krzk@kernel.org, Kishon Vijay Abraham I , robh+dt@kernel.org, Alim Akhtar , linux-arm-kernel@lists.infradead.org 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 VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIFNhbXN1bmcgVUZTIFBIWSBkcml2ZXIuIFRoaXMgZHJpdmVy CnN1cHBvcnRzIHRvIGRlYWwgd2l0aCBwaHkgY2FsaWJyYXRpb24gYW5kIHBvd2VyIGNvbnRyb2wK YWNjb3JkaW5nIHRvIFVGUyBob3N0IGRyaXZlcidzIGJlaGF2aW9yLgoKW1JvYm90OiAtV21pc3Np bmctcHJvdG90eXBlcyBhbmQgLVdzb21ldGltZXMtdW5pbml0aWFsaXplZF0KUmVwb3J0ZWQtYnk6 IGtlcm5lbCB0ZXN0IHJvYm90IDxsa3BAaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogS2l3b29uZyBL aW0gPGt3bWFkLmtpbUBzYW1zdW5nLmNvbT4KU2lnbmVkLW9mZi1ieTogU2V1bmd3b24gSmVvbiA8 ZXNzdXVqQGdtYWlsLmNvbT4KU2lnbmVkLW9mZi1ieTogQWxpbSBBa2h0YXIgPGFsaW0uYWtodGFy QHNhbXN1bmcuY29tPgpDYzogS2lzaG9uIFZpamF5IEFicmFoYW0gSSA8a2lzaG9uQHRpLmNvbT4K Q2M6IFZpbm9kIEtvdWwgPHZrb3VsQGtlcm5lbC5vcmc+ClRlc3RlZC1ieTogUGF3ZcWCIENobWll bCA8cGF3ZWwubWlrb2xhai5jaG1pZWxAZ21haWwuY29tPgotLS0KIC0gQ2hhbmdlcyBWMTIgLT4g VjEzCiAqIEFkZHJlc3NlZCBtb3JlIHJldmlldyBjb21tZW50cyBmcm9tIFZpbm9kIFsxXQogWzFd IGh0dHBzOi8vbGttbC5vcmcvbGttbC8yMDIwLzcvMTMvOTkKIAogLSBDaGFuZ2VzIFYxMSAtPiBW MTIKICogRml4ZWQga2VybmVsIHRlc3Qgcm9ib3Qgd2FybmluZ3MKCiAtIENoYW5nZXMgVjEwIC0+ IFYxMQogKiBBZGRyZXNzZWQgcmV2aWV3IGNvbW1lbnRzIGZyb20gVmlub2QKCiBkcml2ZXJzL3Bo eS9zYW1zdW5nL0tjb25maWcgICAgICAgICAgIHwgICA5ICsKIGRyaXZlcnMvcGh5L3NhbXN1bmcv TWFrZWZpbGUgICAgICAgICAgfCAgIDEgKwogZHJpdmVycy9waHkvc2Ftc3VuZy9waHktZXh5bm9z Ny11ZnMuaCB8ICA4MSArKysrKysKIGRyaXZlcnMvcGh5L3NhbXN1bmcvcGh5LXNhbXN1bmctdWZz LmMgfCAzNjYgKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvcGh5L3NhbXN1bmcv cGh5LXNhbXN1bmctdWZzLmggfCAxMzkgKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA1OTYg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGh5L3NhbXN1bmcvcGh5 LWV4eW5vczctdWZzLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BoeS9zYW1zdW5nL3Bo eS1zYW1zdW5nLXVmcy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9waHkvc2Ftc3VuZy9w aHktc2Ftc3VuZy11ZnMuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3NhbXN1bmcvS2NvbmZp ZyBiL2RyaXZlcnMvcGh5L3NhbXN1bmcvS2NvbmZpZwppbmRleCAxOWYyZTMxMTkzNDMuLmUyMGQy ZmNjOWZlNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9waHkvc2Ftc3VuZy9LY29uZmlnCisrKyBiL2Ry aXZlcnMvcGh5L3NhbXN1bmcvS2NvbmZpZwpAQCAtMjksNiArMjksMTUgQEAgY29uZmlnIFBIWV9F WFlOT1NfUENJRQogCSAgRW5hYmxlIFBDSWUgUEhZIHN1cHBvcnQgZm9yIEV4eW5vcyBTb0Mgc2Vy aWVzLgogCSAgVGhpcyBkcml2ZXIgcHJvdmlkZXMgUEhZIGludGVyZmFjZSBmb3IgRXh5bm9zIFBD SWUgY29udHJvbGxlci4KIAorY29uZmlnIFBIWV9TQU1TVU5HX1VGUworCXRyaXN0YXRlICJTQU1T VU5HIFNvQyBzZXJpZXMgVUZTIFBIWSBkcml2ZXIiCisJZGVwZW5kcyBvbiBPRiAmJiAoQVJDSF9F WFlOT1MgfHwgQ09NUElMRV9URVNUKQorCXNlbGVjdCBHRU5FUklDX1BIWQorCWhlbHAKKwkgIEVu YWJsZSB0aGlzIHRvIHN1cHBvcnQgdGhlIFNhbXN1bmcgVUZTIFBIWSBkcml2ZXIgZm9yCisJICBT YW1zdW5nIFNvQ3MuIFRoaXMgZHJpdmVyIHByb3ZpZGVzIHRoZSBpbnRlcmZhY2UgZm9yIFVGUwor CSAgaG9zdCBjb250cm9sbGVyIHRvIGRvIFBIWSByZWxhdGVkIHByb2dyYW1taW5nLgorCiBjb25m aWcgUEhZX1NBTVNVTkdfVVNCMgogCXRyaXN0YXRlICJTYW1zdW5nIFVTQiAyLjAgUEhZIGRyaXZl ciIKIAlkZXBlbmRzIG9uIEhBU19JT01FTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9waHkvc2Ftc3Vu Zy9NYWtlZmlsZSBiL2RyaXZlcnMvcGh5L3NhbXN1bmcvTWFrZWZpbGUKaW5kZXggZGI5YjFhYTBk ZTZlLi4zOTU5MTAwZmU4YTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGh5L3NhbXN1bmcvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9waHkvc2Ftc3VuZy9NYWtlZmlsZQpAQCAtMiw2ICsyLDcgQEAKIG9i ai0kKENPTkZJR19QSFlfRVhZTk9TX0RQX1ZJREVPKQkrPSBwaHktZXh5bm9zLWRwLXZpZGVvLm8K IG9iai0kKENPTkZJR19QSFlfRVhZTk9TX01JUElfVklERU8pCSs9IHBoeS1leHlub3MtbWlwaS12 aWRlby5vCiBvYmotJChDT05GSUdfUEhZX0VYWU5PU19QQ0lFKQkJKz0gcGh5LWV4eW5vcy1wY2ll Lm8KK29iai0kKENPTkZJR19QSFlfU0FNU1VOR19VRlMpCQkrPSBwaHktc2Ftc3VuZy11ZnMubwog b2JqLSQoQ09ORklHX1BIWV9TQU1TVU5HX1VTQjIpCQkrPSBwaHktZXh5bm9zLXVzYjIubwogcGh5 LWV4eW5vcy11c2IyLXkJCQkrPSBwaHktc2Ftc3VuZy11c2IyLm8KIHBoeS1leHlub3MtdXNiMi0k KENPTkZJR19QSFlfRVhZTk9TNDIxMF9VU0IyKQkrPSBwaHktZXh5bm9zNDIxMC11c2IyLm8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3NhbXN1bmcvcGh5LWV4eW5vczctdWZzLmggYi9kcml2ZXJz L3BoeS9zYW1zdW5nL3BoeS1leHlub3M3LXVmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNTE4OTIzMTQxOTU4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9w aHkvc2Ftc3VuZy9waHktZXh5bm9zNy11ZnMuaApAQCAtMCwwICsxLDgxIEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogVUZTIFBIWSBkcml2ZXIg ZGF0YSBmb3IgU2Ftc3VuZyBFWFlOT1M3IFNvQworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBT YW1zdW5nIEVsZWN0cm9uaWNzIENvLiwgTHRkLgorICovCisjaWZuZGVmIF9QSFlfRVhZTk9TN19V RlNfSF8KKyNkZWZpbmUgX1BIWV9FWFlOT1M3X1VGU19IXworCisjaW5jbHVkZSAicGh5LXNhbXN1 bmctdWZzLmgiCisKKyNkZWZpbmUgRVhZTk9TN19FTUJFRERFRF9DT01CT19QSFlfQ1RSTAkweDcy MAorI2RlZmluZSBFWFlOT1M3X0VNQkVEREVEX0NPTUJPX1BIWV9DVFJMX01BU0sJMHgxCisjZGVm aW5lIEVYWU5PUzdfRU1CRURERURfQ09NQk9fUEhZX0NUUkxfRU4JQklUKDApCisKKy8qIENhbGli cmF0aW9uIGZvciBwaHkgaW5pdGlhbGl6YXRpb24gKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Ft c3VuZ191ZnNfcGh5X2NmZyBleHlub3M3X3ByZV9pbml0X2NmZ1tdID0geworCVBIWV9DT01OX1JF R19DRkcoMHgwMGYsIDB4ZmEsIFBXUl9NT0RFX0FOWSksCisJUEhZX0NPTU5fUkVHX0NGRygweDAx MCwgMHg4MiwgUFdSX01PREVfQU5ZKSwKKwlQSFlfQ09NTl9SRUdfQ0ZHKDB4MDExLCAweDFlLCBQ V1JfTU9ERV9BTlkpLAorCVBIWV9DT01OX1JFR19DRkcoMHgwMTcsIDB4ODQsIFBXUl9NT0RFX0FO WSksCisJUEhZX1RSU1ZfUkVHX0NGRygweDAzNSwgMHg1OCwgUFdSX01PREVfQU5ZKSwKKwlQSFlf VFJTVl9SRUdfQ0ZHKDB4MDM2LCAweDMyLCBQV1JfTU9ERV9BTlkpLAorCVBIWV9UUlNWX1JFR19D RkcoMHgwMzcsIDB4NDAsIFBXUl9NT0RFX0FOWSksCisJUEhZX1RSU1ZfUkVHX0NGRygweDAzYiwg MHg4MywgUFdSX01PREVfQU5ZKSwKKwlQSFlfVFJTVl9SRUdfQ0ZHKDB4MDQyLCAweDg4LCBQV1Jf TU9ERV9BTlkpLAorCVBIWV9UUlNWX1JFR19DRkcoMHgwNDMsIDB4YTYsIFBXUl9NT0RFX0FOWSks CisJUEhZX1RSU1ZfUkVHX0NGRygweDA0OCwgMHg3NCwgUFdSX01PREVfQU5ZKSwKKwlQSFlfVFJT Vl9SRUdfQ0ZHKDB4MDRjLCAweDViLCBQV1JfTU9ERV9BTlkpLAorCVBIWV9UUlNWX1JFR19DRkco MHgwNGQsIDB4ODMsIFBXUl9NT0RFX0FOWSksCisJUEhZX1RSU1ZfUkVHX0NGRygweDA1YywgMHgx NCwgUFdSX01PREVfQU5ZKSwKKwlFTkRfVUZTX1BIWV9DRkcKK307CisKKy8qIENhbGlicmF0aW9u IGZvciBIUyBtb2RlIHNlcmllcyBBL0IgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2Ftc3VuZ191 ZnNfcGh5X2NmZyBleHlub3M3X3ByZV9wd3JfaHNfY2ZnW10gPSB7CisJUEhZX0NPTU5fUkVHX0NG RygweDAwZiwgMHhmYSwgUFdSX01PREVfSFNfQU5ZKSwKKwlQSFlfQ09NTl9SRUdfQ0ZHKDB4MDEw LCAweDgyLCBQV1JfTU9ERV9IU19BTlkpLAorCVBIWV9DT01OX1JFR19DRkcoMHgwMTEsIDB4MWUs IFBXUl9NT0RFX0hTX0FOWSksCisJLyogU2V0dGluZyBvcmRlcjogMXN0KDB4MTYsIDJuZCgweDE1 KSAqLworCVBIWV9DT01OX1JFR19DRkcoMHgwMTYsIDB4ZmYsIFBXUl9NT0RFX0hTX0FOWSksCisJ UEhZX0NPTU5fUkVHX0NGRygweDAxNSwgMHg4MCwgUFdSX01PREVfSFNfQU5ZKSwKKwlQSFlfQ09N Tl9SRUdfQ0ZHKDB4MDE3LCAweDk0LCBQV1JfTU9ERV9IU19BTlkpLAorCVBIWV9UUlNWX1JFR19D RkcoMHgwMzYsIDB4MzIsIFBXUl9NT0RFX0hTX0FOWSksCisJUEhZX1RSU1ZfUkVHX0NGRygweDAz NywgMHg0MywgUFdSX01PREVfSFNfQU5ZKSwKKwlQSFlfVFJTVl9SRUdfQ0ZHKDB4MDM4LCAweDNm LCBQV1JfTU9ERV9IU19BTlkpLAorCVBIWV9UUlNWX1JFR19DRkcoMHgwNDIsIDB4ODgsIFBXUl9N T0RFX0hTX0cyX1NFUl9BKSwKKwlQSFlfVFJTVl9SRUdfQ0ZHKDB4MDQyLCAweGJiLCBQV1JfTU9E RV9IU19HMl9TRVJfQiksCisJUEhZX1RSU1ZfUkVHX0NGRygweDA0MywgMHhhNiwgUFdSX01PREVf SFNfQU5ZKSwKKwlQSFlfVFJTVl9SRUdfQ0ZHKDB4MDQ4LCAweDc0LCBQV1JfTU9ERV9IU19BTlkp LAorCVBIWV9UUlNWX1JFR19DRkcoMHgwMzQsIDB4MzUsIFBXUl9NT0RFX0hTX0cyX1NFUl9BKSwK KwlQSFlfVFJTVl9SRUdfQ0ZHKDB4MDM0LCAweDM2LCBQV1JfTU9ERV9IU19HMl9TRVJfQiksCisJ UEhZX1RSU1ZfUkVHX0NGRygweDAzNSwgMHg1YiwgUFdSX01PREVfSFNfRzJfU0VSX0EpLAorCVBI WV9UUlNWX1JFR19DRkcoMHgwMzUsIDB4NWMsIFBXUl9NT0RFX0hTX0cyX1NFUl9CKSwKKwlFTkRf VUZTX1BIWV9DRkcKK307CisKKy8qIENhbGlicmF0aW9uIGZvciBIUyBtb2RlIHNlcmllcyBBL0Ig YXRmZXIgUE1DICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNhbXN1bmdfdWZzX3BoeV9jZmcgZXh5 bm9zN19wb3N0X3B3cl9oc19jZmdbXSA9IHsKKwlQSFlfQ09NTl9SRUdfQ0ZHKDB4MDE1LCAweDAw LCBQV1JfTU9ERV9IU19BTlkpLAorCVBIWV9UUlNWX1JFR19DRkcoMHgwNGQsIDB4ODMsIFBXUl9N T0RFX0hTX0FOWSksCisJRU5EX1VGU19QSFlfQ0ZHCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0 IHNhbXN1bmdfdWZzX3BoeV9jZmcgKmV4eW5vczdfdWZzX3BoeV9jZmdzW0NGR19UQUdfTUFYXSA9 IHsKKwlbQ0ZHX1BSRV9JTklUXQkJPSBleHlub3M3X3ByZV9pbml0X2NmZywKKwlbQ0ZHX1BSRV9Q V1JfSFNdCT0gZXh5bm9zN19wcmVfcHdyX2hzX2NmZywKKwlbQ0ZHX1BPU1RfUFdSX0hTXQk9IGV4 eW5vczdfcG9zdF9wd3JfaHNfY2ZnLAorfTsKKworc3RhdGljIHN0cnVjdCBzYW1zdW5nX3Vmc19w aHlfZHJ2ZGF0YSBleHlub3M3X3Vmc19waHkgPSB7CisJLmNmZyA9IGV4eW5vczdfdWZzX3BoeV9j ZmdzLAorCS5pc29sID0geworCQkub2Zmc2V0ID0gRVhZTk9TN19FTUJFRERFRF9DT01CT19QSFlf Q1RSTCwKKwkJLm1hc2sgPSBFWFlOT1M3X0VNQkVEREVEX0NPTUJPX1BIWV9DVFJMX01BU0ssCisJ CS5lbiA9IEVYWU5PUzdfRU1CRURERURfQ09NQk9fUEhZX0NUUkxfRU4sCisJfSwKKwkuaGFzX3N5 bWJvbF9jbGsgPSAxLAorfTsKKworI2VuZGlmIC8qIF9QSFlfRVhZTk9TN19VRlNfSF8gKi8KZGlm ZiAtLWdpdCBhL2RyaXZlcnMvcGh5L3NhbXN1bmcvcGh5LXNhbXN1bmctdWZzLmMgYi9kcml2ZXJz L3BoeS9zYW1zdW5nL3BoeS1zYW1zdW5nLXVmcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwMC4uNDNlZjc3ZDFkOTZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9w aHkvc2Ftc3VuZy9waHktc2Ftc3VuZy11ZnMuYwpAQCAtMCwwICsxLDM2NiBAQAorLy8gU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIFVGUyBQSFkgZHJpdmVyIGZv ciBTYW1zdW5nIFNvQworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9u aWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBTZXVuZ3dvbiBKZW9uIDxlc3N1dWpAZ21haWwuY29t PgorICogQXV0aG9yOiBBbGltIEFraHRhciA8YWxpbS5ha2h0YXJAc2Ftc3VuZy5jb20+CisgKgor ICovCisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNp bmNsdWRlIDxsaW51eC9lcnIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxp bnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvaW9wb2xsLmg+CisjaW5jbHVkZSA8bGludXgvbWZk L3N5c2Nvbi5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Bo eS9waHkuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxs aW51eC9yZWdtYXAuaD4KKworI2luY2x1ZGUgInBoeS1zYW1zdW5nLXVmcy5oIgorCisjZGVmaW5l IGZvcl9lYWNoX3BoeV9sYW5lKHBoeSwgaSkgXAorCWZvciAoaSA9IDA7IGkgPCAocGh5KS0+bGFu ZV9jbnQ7IGkrKykKKyNkZWZpbmUgZm9yX2VhY2hfcGh5X2NmZyhjZmcpIFwKKwlmb3IgKDsgKGNm ZyktPmlkOyAoY2ZnKSsrKQorCisjZGVmaW5lIFBIWV9ERUZfTEFORV9DTlQJMQorCitzdGF0aWMg dm9pZCBzYW1zdW5nX3Vmc19waHlfY29uZmlnKHN0cnVjdCBzYW1zdW5nX3Vmc19waHkgKnBoeSwK KwkJCQkgICBjb25zdCBzdHJ1Y3Qgc2Ftc3VuZ191ZnNfcGh5X2NmZyAqY2ZnLAorCQkJCSAgIHU4 IGxhbmUpCit7CisJZW51bSB7TEFORV8wLCBMQU5FXzF9OyAvKiBsYW5lIGluZGV4ICovCisKKwlz d2l0Y2ggKGxhbmUpIHsKKwljYXNlIExBTkVfMDoKKwkJd3JpdGVsKGNmZy0+dmFsLCAocGh5KS0+ cmVnX3BtYSArIGNmZy0+b2ZmXzApOworCQlicmVhazsKKwljYXNlIExBTkVfMToKKwkJaWYgKGNm Zy0+aWQgPT0gUEhZX1RSU1ZfQkxLKQorCQkJd3JpdGVsKGNmZy0+dmFsLCAocGh5KS0+cmVnX3Bt YSArIGNmZy0+b2ZmXzEpOworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ191 ZnNfcGh5X3dhaXRfZm9yX2xvY2tfYWNxKHN0cnVjdCBwaHkgKnBoeSkKK3sKKwlzdHJ1Y3Qgc2Ft c3VuZ191ZnNfcGh5ICp1ZnNfcGh5ID0gZ2V0X3NhbXN1bmdfdWZzX3BoeShwaHkpOworCWNvbnN0 IHVuc2lnbmVkIGludCB0aW1lb3V0X3VzID0gMTAwMDAwOworCWNvbnN0IHVuc2lnbmVkIGludCBz bGVlcF91cyA9IDEwOworCXUzMiB2YWw7CisJaW50IGVycjsKKworCWVyciA9IHJlYWRsX3BvbGxf dGltZW91dCgKKwkJCXVmc19waHktPnJlZ19wbWEgKyBQSFlfQVBCX0FERFIoUEhZX1BMTF9MT0NL X1NUQVRVUyksCisJCQl2YWwsICh2YWwgJiBQSFlfUExMX0xPQ0tfQklUKSwgc2xlZXBfdXMsIHRp bWVvdXRfdXMpOworCWlmIChlcnIpIHsKKwkJZGV2X2Vycih1ZnNfcGh5LT5kZXYsCisJCQkiZmFp bGVkIHRvIGdldCBwaHkgcGxsIGxvY2sgYWNxdWlzaXRpb24gJWRcbiIsIGVycik7CisJCWdvdG8g b3V0OworCX0KKworCWVyciA9IHJlYWRsX3BvbGxfdGltZW91dCgKKwkJCXVmc19waHktPnJlZ19w bWEgKyBQSFlfQVBCX0FERFIoUEhZX0NEUl9MT0NLX1NUQVRVUyksCisJCQl2YWwsICh2YWwgJiBQ SFlfQ0RSX0xPQ0tfQklUKSwgc2xlZXBfdXMsIHRpbWVvdXRfdXMpOworCWlmIChlcnIpCisJCWRl dl9lcnIodWZzX3BoeS0+ZGV2LAorCQkJImZhaWxlZCB0byBnZXQgcGh5IGNkciBsb2NrIGFjcXVp c2l0aW9uICVkXG4iLCBlcnIpOworb3V0OgorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQg c2Ftc3VuZ191ZnNfcGh5X2NhbGlicmF0ZShzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IHNh bXN1bmdfdWZzX3BoeSAqdWZzX3BoeSA9IGdldF9zYW1zdW5nX3Vmc19waHkocGh5KTsKKwlzdHJ1 Y3Qgc2Ftc3VuZ191ZnNfcGh5X2NmZyAqKmNmZ3MgPSB1ZnNfcGh5LT5jZmc7CisJY29uc3Qgc3Ry dWN0IHNhbXN1bmdfdWZzX3BoeV9jZmcgKmNmZzsKKwlpbnQgZXJyID0gMDsKKwlpbnQgaTsKKwor CWlmICh1bmxpa2VseSh1ZnNfcGh5LT51ZnNfcGh5X3N0YXRlIDwgQ0ZHX1BSRV9JTklUIHx8CisJ CSAgICAgdWZzX3BoeS0+dWZzX3BoeV9zdGF0ZSA+PSBDRkdfVEFHX01BWCkpIHsKKwkJZGV2X2Vy cih1ZnNfcGh5LT5kZXYsICJpbnZhbGlkIHBoeSBjb25maWcgaW5kZXggJWRcbiIsIHVmc19waHkt PnVmc19waHlfc3RhdGUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwljZmcgPSBjZmdzW3Vm c19waHktPnVmc19waHlfc3RhdGVdOworCWlmICghY2ZnKQorCQlnb3RvIG91dDsKKworCWZvcl9l YWNoX3BoeV9jZmcoY2ZnKSB7CisJCWZvcl9lYWNoX3BoeV9sYW5lKHVmc19waHksIGkpIHsKKwkJ CXNhbXN1bmdfdWZzX3BoeV9jb25maWcodWZzX3BoeSwgY2ZnLCBpKTsKKwkJfQorCX0KKworCWlm ICh1ZnNfcGh5LT51ZnNfcGh5X3N0YXRlID09IENGR19QT1NUX1BXUl9IUykKKwkJZXJyID0gc2Ft c3VuZ191ZnNfcGh5X3dhaXRfZm9yX2xvY2tfYWNxKHBoeSk7CisKKwkvKioKKwkgKiBJbiBTYW1z dW5nIHVmc2hjaSwgUEhZIG5lZWQgdG8gYmUgY2FsaWJyYXRlZCBhdCBkaWZmZXJlbnQKKwkgKiBz dGFnZXMgLyBzdGF0ZSBtYWlubHkgYmVmb3JlIExpbmtzdGFydHVwLCBhZnRlciBMaW5rc3RhcnR1 cCwKKwkgKiBiZWZvcmUgcG93ZXIgbW9kZSBjaGFuZ2UgYW5kIGFmdGVyIHBvd2VyIG1vZGUgY2hh bmdlLgorCSAqIEJlbG93IHN0YXRlIG1hY2hpbmUgdG8gbWFrZSBzdXJlIHRvIGNhbGlicmF0ZSBQ SFkgaW4gZWFjaAorCSAqIHN0YXRlLiBIZXJlIGFmdGVyIGNvbmZpZ3VyaW5nIFBIWSBpbiBhIGdp dmVuIHN0YXRlLCB3aWxsCisJICogY2hhbmdlIHRoZSBzdGF0ZSB0byBuZXh0IHN0YXRlIHNvIHRo YXQgbmV4dCBzdGF0ZSBwaHkKKwkgKiBjYWxpYnJhdGlvbiB2YWx1ZSBjYW4gYmUgcHJvZ3JhbWVk CisJICovCitvdXQ6CisJc3dpdGNoICh1ZnNfcGh5LT51ZnNfcGh5X3N0YXRlKSB7CisJY2FzZSBD RkdfUFJFX0lOSVQ6CisJCXVmc19waHktPnVmc19waHlfc3RhdGUgPSBDRkdfUE9TVF9JTklUOwor CQlicmVhazsKKwljYXNlIENGR19QT1NUX0lOSVQ6CisJCXVmc19waHktPnVmc19waHlfc3RhdGUg PSBDRkdfUFJFX1BXUl9IUzsKKwkJYnJlYWs7CisJY2FzZSBDRkdfUFJFX1BXUl9IUzoKKwkJdWZz X3BoeS0+dWZzX3BoeV9zdGF0ZSA9IENGR19QT1NUX1BXUl9IUzsKKwkJYnJlYWs7CisJY2FzZSBD RkdfUE9TVF9QV1JfSFM6CisJCS8qIENoYW5nZSBiYWNrIHRvIElOSVQgc3RhdGUgKi8KKwkJdWZz X3BoeS0+dWZzX3BoeV9zdGF0ZSA9IENGR19QUkVfSU5JVDsKKwkJYnJlYWs7CisJZGVmYXVsdDoK KwkJZGV2X2Vycih1ZnNfcGh5LT5kZXYsICJ3cm9uZyBzdGF0ZSBmb3IgcGh5IGNhbGlicmF0aW9u XG4iKTsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHNhbXN1bmdfdWZzX3Bo eV9zeW1ib2xfY2xrX2luaXQoc3RydWN0IHNhbXN1bmdfdWZzX3BoeSAqcGh5KQoreworCWludCBy ZXQ7CisKKwlwaHktPnR4MF9zeW1ib2xfY2xrID0gZGV2bV9jbGtfZ2V0KHBoeS0+ZGV2LCAidHgw X3N5bWJvbF9jbGsiKTsKKwlpZiAoSVNfRVJSKHBoeS0+dHgwX3N5bWJvbF9jbGspKSB7CisJCWRl dl9lcnIocGh5LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHR4MF9zeW1ib2xfY2xrIGNsb2NrXG4iKTsK KwkJcmV0dXJuIFBUUl9FUlIocGh5LT50eDBfc3ltYm9sX2Nsayk7CisJfQorCisJcGh5LT5yeDBf c3ltYm9sX2NsayA9IGRldm1fY2xrX2dldChwaHktPmRldiwgInJ4MF9zeW1ib2xfY2xrIik7CisJ aWYgKElTX0VSUihwaHktPnJ4MF9zeW1ib2xfY2xrKSkgeworCQlkZXZfZXJyKHBoeS0+ZGV2LCAi ZmFpbGVkIHRvIGdldCByeDBfc3ltYm9sX2NsayBjbG9ja1xuIik7CisJCXJldHVybiBQVFJfRVJS KHBoeS0+cngwX3N5bWJvbF9jbGspOworCX0KKworCXBoeS0+cngxX3N5bWJvbF9jbGsgPSBkZXZt X2Nsa19nZXQocGh5LT5kZXYsICJyeDFfc3ltYm9sX2NsayIpOworCWlmIChJU19FUlIocGh5LT5y eDBfc3ltYm9sX2NsaykpIHsKKwkJZGV2X2VycihwaHktPmRldiwgImZhaWxlZCB0byBnZXQgcngx X3N5bWJvbF9jbGsgY2xvY2tcbiIpOworCQlyZXR1cm4gUFRSX0VSUihwaHktPnJ4MV9zeW1ib2xf Y2xrKTsKKwl9CisKKwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocGh5LT50eDBfc3ltYm9sX2Ns ayk7CisJaWYgKHJldCkgeworCQlkZXZfZXJyKHBoeS0+ZGV2LCAiJXM6IHR4MF9zeW1ib2xfY2xr IGVuYWJsZSBmYWlsZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlnb3RvIG91dDsKKwl9CisK KwlyZXQgPSBjbGtfcHJlcGFyZV9lbmFibGUocGh5LT5yeDBfc3ltYm9sX2Nsayk7CisJaWYgKHJl dCkgeworCQlkZXZfZXJyKHBoeS0+ZGV2LCAiJXM6IHJ4MF9zeW1ib2xfY2xrIGVuYWJsZSBmYWls ZWQgJWRcbiIsIF9fZnVuY19fLCByZXQpOworCQlnb3RvIG91dF9kaXNhYmxlX3R4MF9jbGs7CisJ fQorCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeS0+cngxX3N5bWJvbF9jbGspOworCWlm IChyZXQpIHsKKwkJZGV2X2VycihwaHktPmRldiwgIiVzOiByeDFfc3ltYm9sX2NsayBlbmFibGUg ZmFpbGVkICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKwkJZ290byBvdXRfZGlzYWJsZV9yeDBfY2xr OworCX0KKworCXJldHVybiAwOworCitvdXRfZGlzYWJsZV9yeDBfY2xrOgorCWNsa19kaXNhYmxl X3VucHJlcGFyZShwaHktPnJ4MF9zeW1ib2xfY2xrKTsKK291dF9kaXNhYmxlX3R4MF9jbGs6CisJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBoeS0+dHgwX3N5bWJvbF9jbGspOworb3V0OgorCXJldHVy biByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ191ZnNfcGh5X2Nsa3NfaW5pdChzdHJ1Y3Qg c2Ftc3VuZ191ZnNfcGh5ICpwaHkpCit7CisJaW50IHJldDsKKworCXBoeS0+cmVmX2NsayA9IGRl dm1fY2xrX2dldChwaHktPmRldiwgInJlZl9jbGsiKTsKKwlpZiAoSVNfRVJSKHBoeS0+cmVmX2Ns aykpCisJCWRldl9lcnIocGh5LT5kZXYsICJmYWlsZWQgdG8gZ2V0IHJlZl9jbGsgY2xvY2tcbiIp OworCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBoeS0+cmVmX2Nsayk7CisJaWYgKHJldCkg eworCQlkZXZfZXJyKHBoeS0+ZGV2LCAiJXM6IHJlZl9jbGsgZW5hYmxlIGZhaWxlZCAlZFxuIiwg X19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJZGV2X2RiZyhwaHktPmRldiwg IlVGUyBNUEhZIHJlZl9jbGtfcmF0ZSA9ICVsZFxuIiwgY2xrX2dldF9yYXRlKHBoeS0+cmVmX2Ns aykpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3VuZ191ZnNfcGh5X2luaXQo c3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBzYW1zdW5nX3Vmc19waHkgKnNzX3BoeSA9IGdl dF9zYW1zdW5nX3Vmc19waHkocGh5KTsKKwlpbnQgcmV0OworCisJc3NfcGh5LT5sYW5lX2NudCA9 IHBoeS0+YXR0cnMuYnVzX3dpZHRoOworCXNzX3BoeS0+dWZzX3BoeV9zdGF0ZSA9IENGR19QUkVf SU5JVDsKKworCWlmIChzc19waHktPmRydmRhdGEtPmhhc19zeW1ib2xfY2xrKSB7CisJCXJldCA9 IHNhbXN1bmdfdWZzX3BoeV9zeW1ib2xfY2xrX2luaXQoc3NfcGh5KTsKKwkJaWYgKHJldCkKKwkJ CWRldl9lcnIoc3NfcGh5LT5kZXYsICJmYWlsZWQgdG8gc2V0IHVmcyBwaHkgc3ltYm9sIGNsb2Nr c1xuIik7CisJfQorCisJcmV0ID0gc2Ftc3VuZ191ZnNfcGh5X2Nsa3NfaW5pdChzc19waHkpOwor CWlmIChyZXQpCisJCWRldl9lcnIoc3NfcGh5LT5kZXYsICJmYWlsZWQgdG8gc2V0IHVmcyBwaHkg Y2xvY2tzXG4iKTsKKworCXJldCA9IHNhbXN1bmdfdWZzX3BoeV9jYWxpYnJhdGUocGh5KTsKKwlp ZiAocmV0KQorCQlkZXZfZXJyKHNzX3BoeS0+ZGV2LCAidWZzIHBoeSBjYWxpYnJhdGlvbiBmYWls ZWRcbiIpOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBzYW1zdW5nX3Vmc19waHlf cG93ZXJfb24oc3RydWN0IHBoeSAqcGh5KQoreworCXN0cnVjdCBzYW1zdW5nX3Vmc19waHkgKnNz X3BoeSA9IGdldF9zYW1zdW5nX3Vmc19waHkocGh5KTsKKworCXNhbXN1bmdfdWZzX3BoeV9jdHJs X2lzb2woc3NfcGh5LCBmYWxzZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Ftc3Vu Z191ZnNfcGh5X3Bvd2VyX29mZihzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IHNhbXN1bmdf dWZzX3BoeSAqc3NfcGh5ID0gZ2V0X3NhbXN1bmdfdWZzX3BoeShwaHkpOworCisJc2Ftc3VuZ191 ZnNfcGh5X2N0cmxfaXNvbChzc19waHksIHRydWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMg aW50IHNhbXN1bmdfdWZzX3BoeV9zZXRfbW9kZShzdHJ1Y3QgcGh5ICpnZW5lcmljX3BoeSwKKwkJ CQkgICAgZW51bSBwaHlfbW9kZSBtb2RlLCBpbnQgc3VibW9kZSkKK3sKKwlzdHJ1Y3Qgc2Ftc3Vu Z191ZnNfcGh5ICpzc19waHkgPSBnZXRfc2Ftc3VuZ191ZnNfcGh5KGdlbmVyaWNfcGh5KTsKKwor CXNzX3BoeS0+bW9kZSA9IFBIWV9NT0RFX0lOVkFMSUQ7CisKKwlpZiAobW9kZSA+IDApCisJCXNz X3BoeS0+bW9kZSA9IG1vZGU7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYW1zdW5n X3Vmc19waHlfZXhpdChzdHJ1Y3QgcGh5ICpwaHkpCit7CisJc3RydWN0IHNhbXN1bmdfdWZzX3Bo eSAqc3NfcGh5ID0gZ2V0X3NhbXN1bmdfdWZzX3BoeShwaHkpOworCisJY2xrX2Rpc2FibGVfdW5w cmVwYXJlKHNzX3BoeS0+cmVmX2Nsayk7CisKKwlpZiAoc3NfcGh5LT5kcnZkYXRhLT5oYXNfc3lt Ym9sX2NsaykgeworCQljbGtfZGlzYWJsZV91bnByZXBhcmUoc3NfcGh5LT50eDBfc3ltYm9sX2Ns ayk7CisJCWNsa19kaXNhYmxlX3VucHJlcGFyZShzc19waHktPnJ4MF9zeW1ib2xfY2xrKTsKKwkJ Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKHNzX3BoeS0+cngxX3N5bWJvbF9jbGspOworCX0KKworCXJl dHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBoeV9vcHMgc2Ftc3VuZ191ZnNfcGh5X29wcyA9 IHsKKwkuaW5pdAkJPSBzYW1zdW5nX3Vmc19waHlfaW5pdCwKKwkuZXhpdAkJPSBzYW1zdW5nX3Vm c19waHlfZXhpdCwKKwkucG93ZXJfb24JPSBzYW1zdW5nX3Vmc19waHlfcG93ZXJfb24sCisJLnBv d2VyX29mZgk9IHNhbXN1bmdfdWZzX3BoeV9wb3dlcl9vZmYsCisJLmNhbGlicmF0ZQk9IHNhbXN1 bmdfdWZzX3BoeV9jYWxpYnJhdGUsCisJLnNldF9tb2RlCT0gc2Ftc3VuZ191ZnNfcGh5X3NldF9t b2RlLAorCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAorfTsKKworc3RhdGljIGNvbnN0 IHN0cnVjdCBvZl9kZXZpY2VfaWQgc2Ftc3VuZ191ZnNfcGh5X21hdGNoW107CisKK3N0YXRpYyBp bnQgc2Ftc3VuZ191ZnNfcGh5X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCit7 CisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsKKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkICptYXRjaDsKKwlzdHJ1Y3Qgc2Ftc3VuZ191ZnNfcGh5ICpwaHk7CisJc3RydWN0IHBo eSAqZ2VuX3BoeTsKKwlzdHJ1Y3QgcGh5X3Byb3ZpZGVyICpwaHlfcHJvdmlkZXI7CisJY29uc3Qg c3RydWN0IHNhbXN1bmdfdWZzX3BoeV9kcnZkYXRhICpkcnZkYXRhOworCWludCBlcnIgPSAwOwor CisJbWF0Y2ggPSBvZl9tYXRjaF9ub2RlKHNhbXN1bmdfdWZzX3BoeV9tYXRjaCwgZGV2LT5vZl9u b2RlKTsKKwlpZiAoIW1hdGNoKSB7CisJCWVyciA9IC1FSU5WQUw7CisJCWRldl9lcnIoZGV2LCAi ZmFpbGVkIHRvIGdldCBtYXRjaF9ub2RlXG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJcGh5ID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCpwaHkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIXBoeSkg eworCQllcnIgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisKKwlwaHktPnJlZ19wbWEgPSBk ZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsICJwaHktcG1hIik7CisJ aWYgKElTX0VSUihwaHktPnJlZ19wbWEpKSB7CisJCWVyciA9IFBUUl9FUlIocGh5LT5yZWdfcG1h KTsKKwkJZ290byBvdXQ7CisJfQorCisJcGh5LT5yZWdfcG11ID0gc3lzY29uX3JlZ21hcF9sb29r dXBfYnlfcGhhbmRsZSgKKwkJCQlkZXYtPm9mX25vZGUsICJzYW1zdW5nLHBtdS1zeXNjb24iKTsK KwlpZiAoSVNfRVJSKHBoeS0+cmVnX3BtdSkpIHsKKwkJZXJyID0gUFRSX0VSUihwaHktPnJlZ19w bXUpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCBzeXNjb24gcmVtYXAgZm9yIHBtdVxuIik7CisJ CWdvdG8gb3V0OworCX0KKworCWdlbl9waHkgPSBkZXZtX3BoeV9jcmVhdGUoZGV2LCBOVUxMLCAm c2Ftc3VuZ191ZnNfcGh5X29wcyk7CisJaWYgKElTX0VSUihnZW5fcGh5KSkgeworCQllcnIgPSBQ VFJfRVJSKGdlbl9waHkpOworCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBjcmVhdGUgUEhZIGZv ciB1ZnMtcGh5XG4iKTsKKwkJZ290byBvdXQ7CisJfQorCisJZHJ2ZGF0YSA9IG1hdGNoLT5kYXRh OworCXBoeS0+ZGV2ID0gZGV2OworCXBoeS0+ZHJ2ZGF0YSA9IGRydmRhdGE7CisJcGh5LT5jZmcg PSAoc3RydWN0IHNhbXN1bmdfdWZzX3BoeV9jZmcgKiopZHJ2ZGF0YS0+Y2ZnOworCXBoeS0+aXNv bCA9ICZkcnZkYXRhLT5pc29sOworCXBoeS0+bGFuZV9jbnQgPSBQSFlfREVGX0xBTkVfQ05UOwor CisJcGh5X3NldF9kcnZkYXRhKGdlbl9waHksIHBoeSk7CisKKwlwaHlfcHJvdmlkZXIgPSBkZXZt X29mX3BoeV9wcm92aWRlcl9yZWdpc3RlcihkZXYsIG9mX3BoeV9zaW1wbGVfeGxhdGUpOworCWlm IChJU19FUlIocGh5X3Byb3ZpZGVyKSkgeworCQllcnIgPSBQVFJfRVJSKHBoeV9wcm92aWRlcik7 CisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHBoeS1wcm92aWRlclxuIik7CisJ CWdvdG8gb3V0OworCX0KK291dDoKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgY29uc3Qgc3Ry dWN0IG9mX2RldmljZV9pZCBzYW1zdW5nX3Vmc19waHlfbWF0Y2hbXSA9IHsKKwl7CisJCS5jb21w YXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNy11ZnMtcGh5IiwKKwkJLmRhdGEgPSAmZXh5bm9zN191 ZnNfcGh5LAorCX0sCisJe30sCit9OworTU9EVUxFX0RFVklDRV9UQUJMRShvZiwgc2Ftc3VuZ191 ZnNfcGh5X21hdGNoKTsKKworc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgc2Ftc3VuZ191 ZnNfcGh5X2RyaXZlciA9IHsKKwkucHJvYmUgID0gc2Ftc3VuZ191ZnNfcGh5X3Byb2JlLAorCS5k cml2ZXIgPSB7CisJCS5uYW1lID0gInNhbXN1bmctdWZzLXBoeSIsCisJCS5vZl9tYXRjaF90YWJs ZSA9IHNhbXN1bmdfdWZzX3BoeV9tYXRjaCwKKwl9LAorfTsKK21vZHVsZV9wbGF0Zm9ybV9kcml2 ZXIoc2Ftc3VuZ191ZnNfcGh5X2RyaXZlcik7CitNT0RVTEVfREVTQ1JJUFRJT04oIlNhbXN1bmcg U29DIFVGUyBQSFkgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJTZXVuZ3dvbiBKZW9uIDxlc3N1 dWpAZ21haWwuY29tPiIpOworTU9EVUxFX0FVVEhPUigiQWxpbSBBa2h0YXIgPGFsaW0uYWtodGFy QHNhbXN1bmcuY29tPiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOwpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9waHkvc2Ftc3VuZy9waHktc2Ftc3VuZy11ZnMuaCBiL2RyaXZlcnMvcGh5L3NhbXN1 bmcvcGh5LXNhbXN1bmctdWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAwLi41ZGU3ODcxMDUyNGMKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL3BoeS9zYW1zdW5n L3BoeS1zYW1zdW5nLXVmcy5oCkBAIC0wLDAgKzEsMTM5IEBACisvKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMC1vbmx5ICovCisvKgorICogVUZTIFBIWSBkcml2ZXIgZm9yIFNhbXN1 bmcgRVhZTk9TIFNvQworICoKKyAqIENvcHlyaWdodCAoQykgMjAyMCBTYW1zdW5nIEVsZWN0cm9u aWNzIENvLiwgTHRkLgorICogQXV0aG9yOiBTZXVuZ3dvbiBKZW9uIDxlc3N1dWpAZ21haWwuY29t PgorICogQXV0aG9yOiBBbGltIEFraHRhciA8YWxpbS5ha2h0YXJAc2Ftc3VuZy5jb20+CisgKgor ICovCisjaWZuZGVmIF9QSFlfU0FNU1VOR19VRlNfCisjZGVmaW5lIF9QSFlfU0FNU1VOR19VRlNf CisKKyNkZWZpbmUgUEhZX0NPTU5fQkxLCTEKKyNkZWZpbmUgUEhZX1RSU1ZfQkxLCTIKKyNkZWZp bmUgRU5EX1VGU19QSFlfQ0ZHIHsgMCB9CisjZGVmaW5lIFBIWV9UUlNWX0NIX09GRlNFVAkweDMw CisjZGVmaW5lIFBIWV9BUEJfQUREUihvZmYpCSgob2ZmKSA8PCAyKQorCisjZGVmaW5lIFBIWV9D T01OX1JFR19DRkcobywgdiwgZCkgewlcCisJLm9mZl8wID0gUEhZX0FQQl9BRERSKChvKSksCVwK Kwkub2ZmXzEgPSAwLAkJXAorCS52YWwgPSAodiksCQlcCisJLmRlc2MgPSAoZCksCQlcCisJLmlk ID0gUEhZX0NPTU5fQkxLLAlcCit9CisKKyNkZWZpbmUgUEhZX1RSU1ZfUkVHX0NGRyhvLCB2LCBk KSB7CVwKKwkub2ZmXzAgPSBQSFlfQVBCX0FERFIoKG8pKSwJXAorCS5vZmZfMSA9IFBIWV9BUEJf QUREUigobykgKyBQSFlfVFJTVl9DSF9PRkZTRVQpLAlcCisJLnZhbCA9ICh2KSwJCVwKKwkuZGVz YyA9IChkKSwJCVwKKwkuaWQgPSBQSFlfVFJTVl9CTEssCVwKK30KKworLyogVUZTIFBIWSByZWdp c3RlcnMgKi8KKyNkZWZpbmUgUEhZX1BMTF9MT0NLX1NUQVRVUwkweDFlCisjZGVmaW5lIFBIWV9D RFJfTE9DS19TVEFUVVMJMHg1ZQorCisjZGVmaW5lIFBIWV9QTExfTE9DS19CSVQJQklUKDUpCisj ZGVmaW5lIFBIWV9DRFJfTE9DS19CSVQJQklUKDQpCisKKy8qIGRlc2NyaXB0aW9uIGZvciBQSFkg Y2FsaWJyYXRpb24gKi8KK2VudW0geworCS8qIGFwcGxpY2FibGUgdG8gYW55ICovCisJUFdSX0RF U0NfQU5ZCT0gMCwKKwkvKiBtb2RlICovCisJUFdSX0RFU0NfUFdNCT0gMSwKKwlQV1JfREVTQ19I Uwk9IDIsCisJLyogc2VyaWVzICovCisJUFdSX0RFU0NfU0VSX0EJPSAxLAorCVBXUl9ERVNDX1NF Ul9CCT0gMiwKKwkvKiBnZWFyICovCisJUFdSX0RFU0NfRzEJPSAxLAorCVBXUl9ERVNDX0cyCT0g MiwKKwlQV1JfREVTQ19HMwk9IDMsCisJLyogZmllbGQgbWFzayAqLworCU1EX01BU0sJCT0gMHgz LAorCVNSX01BU0sJCT0gMHgzLAorCUdSX01BU0sJCT0gMHg3LAorfTsKKworI2RlZmluZSBQV1Jf TU9ERV9IU19HMV9BTlkJUFdSX01PREVfSFMoUFdSX0RFU0NfRzEsIFBXUl9ERVNDX0FOWSkKKyNk ZWZpbmUgUFdSX01PREVfSFNfRzFfU0VSX0EJUFdSX01PREVfSFMoUFdSX0RFU0NfRzEsIFBXUl9E RVNDX1NFUl9BKQorI2RlZmluZSBQV1JfTU9ERV9IU19HMV9TRVJfQglQV1JfTU9ERV9IUyhQV1Jf REVTQ19HMSwgUFdSX0RFU0NfU0VSX0IpCisjZGVmaW5lIFBXUl9NT0RFX0hTX0cyX0FOWQlQV1Jf TU9ERV9IUyhQV1JfREVTQ19HMiwgUFdSX0RFU0NfQU5ZKQorI2RlZmluZSBQV1JfTU9ERV9IU19H Ml9TRVJfQQlQV1JfTU9ERV9IUyhQV1JfREVTQ19HMiwgUFdSX0RFU0NfU0VSX0EpCisjZGVmaW5l IFBXUl9NT0RFX0hTX0cyX1NFUl9CCVBXUl9NT0RFX0hTKFBXUl9ERVNDX0cyLCBQV1JfREVTQ19T RVJfQikKKyNkZWZpbmUgUFdSX01PREVfSFNfRzNfQU5ZCVBXUl9NT0RFX0hTKFBXUl9ERVNDX0cz LCBQV1JfREVTQ19BTlkpCisjZGVmaW5lIFBXUl9NT0RFX0hTX0czX1NFUl9BCVBXUl9NT0RFX0hT KFBXUl9ERVNDX0czLCBQV1JfREVTQ19TRVJfQSkKKyNkZWZpbmUgUFdSX01PREVfSFNfRzNfU0VS X0IJUFdSX01PREVfSFMoUFdSX0RFU0NfRzMsIFBXUl9ERVNDX1NFUl9CKQorI2RlZmluZSBQV1Jf TU9ERShnLCBzLCBtKQkoKCgoZykgJiBHUl9NQVNLKSA8PCA0KSB8XAorCQkJCSAoKChzKSAmIFNS X01BU0spIDw8IDIpIHwgKChtKSAmIE1EX01BU0spKQorI2RlZmluZSBQV1JfTU9ERV9QV01fQU5Z CVBXUl9NT0RFKFBXUl9ERVNDX0FOWSxcCisJCQkJCSBQV1JfREVTQ19BTlksIFBXUl9ERVNDX1BX TSkKKyNkZWZpbmUgUFdSX01PREVfSFMoZywgcykJKCgoKGcpICYgR1JfTUFTSykgPDwgNCkgfFwK KwkJCQkgKCgocykgJiBTUl9NQVNLKSA8PCAyKSB8IFBXUl9ERVNDX0hTKQorI2RlZmluZSBQV1Jf TU9ERV9IU19BTlkJCVBXUl9NT0RFKFBXUl9ERVNDX0FOWSxcCisJCQkJCSBQV1JfREVTQ19BTlks IFBXUl9ERVNDX0hTKQorI2RlZmluZSBQV1JfTU9ERV9BTlkJCVBXUl9NT0RFKFBXUl9ERVNDX0FO WSxcCisJCQkJCSBQV1JfREVTQ19BTlksIFBXUl9ERVNDX0FOWSkKKy8qIFBIWSBjYWxpYnJhdGlv biBwb2ludC9zdGF0ZSAqLworZW51bSB7CisJQ0ZHX1BSRV9JTklULAorCUNGR19QT1NUX0lOSVQs CisJQ0ZHX1BSRV9QV1JfSFMsCisJQ0ZHX1BPU1RfUFdSX0hTLAorCUNGR19UQUdfTUFYLAorfTsK Kworc3RydWN0IHNhbXN1bmdfdWZzX3BoeV9jZmcgeworCXUzMiBvZmZfMDsKKwl1MzIgb2ZmXzE7 CisJdTMyIHZhbDsKKwl1OCBkZXNjOworCXU4IGlkOworfTsKKworc3RydWN0IHNhbXN1bmdfdWZz X3BoeV9kcnZkYXRhIHsKKwljb25zdCBzdHJ1Y3Qgc2Ftc3VuZ191ZnNfcGh5X2NmZyAqKmNmZzsK KwlzdHJ1Y3QgcG11X2lzb2wgeworCQl1MzIgb2Zmc2V0OworCQl1MzIgbWFzazsKKwkJdTMyIGVu OworCX0gaXNvbDsKKwlib29sIGhhc19zeW1ib2xfY2xrOworfTsKKworc3RydWN0IHNhbXN1bmdf dWZzX3BoeSB7CisJc3RydWN0IGRldmljZSAqZGV2OworCXZvaWQgX19pb21lbSAqcmVnX3BtYTsK KwlzdHJ1Y3QgcmVnbWFwICpyZWdfcG11OworCXN0cnVjdCBjbGsgKnJlZl9jbGs7CisJc3RydWN0 IGNsayAqcmVmX2Nsa19wYXJlbnQ7CisJc3RydWN0IGNsayAqdHgwX3N5bWJvbF9jbGs7CisJc3Ry dWN0IGNsayAqcngwX3N5bWJvbF9jbGs7CisJc3RydWN0IGNsayAqcngxX3N5bWJvbF9jbGs7CisJ Y29uc3Qgc3RydWN0IHNhbXN1bmdfdWZzX3BoeV9kcnZkYXRhICpkcnZkYXRhOworCXN0cnVjdCBz YW1zdW5nX3Vmc19waHlfY2ZnICoqY2ZnOworCWNvbnN0IHN0cnVjdCBwbXVfaXNvbCAqaXNvbDsK Kwl1OCBsYW5lX2NudDsKKwlpbnQgdWZzX3BoeV9zdGF0ZTsKKwllbnVtIHBoeV9tb2RlIG1vZGU7 Cit9OworCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYW1zdW5nX3Vmc19waHkgKmdldF9zYW1zdW5n X3Vmc19waHkoc3RydWN0IHBoeSAqcGh5KQoreworCXJldHVybiAoc3RydWN0IHNhbXN1bmdfdWZz X3BoeSAqKXBoeV9nZXRfZHJ2ZGF0YShwaHkpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc2Ft c3VuZ191ZnNfcGh5X2N0cmxfaXNvbCgKKwkJc3RydWN0IHNhbXN1bmdfdWZzX3BoeSAqcGh5LCB1 MzIgaXNvbCkKK3sKKwlyZWdtYXBfdXBkYXRlX2JpdHMocGh5LT5yZWdfcG11LCBwaHktPmlzb2wt Pm9mZnNldCwKKwkJCSAgIHBoeS0+aXNvbC0+bWFzaywgaXNvbCA/IDAgOiBwaHktPmlzb2wtPmVu KTsKK30KKworI2luY2x1ZGUgInBoeS1leHlub3M3LXVmcy5oIgorCisjZW5kaWYgLyogX1BIWV9T QU1TVU5HX1VGU18gKi8KLS0gCjIuMTcuMQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK