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=-12.5 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MSGID_FROM_MTA_HEADER,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_GIT 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 74F41C4363A for ; Mon, 12 Oct 2020 10:47:52 +0000 (UTC) Received: from fraxinus.osuosl.org (smtp4.osuosl.org [140.211.166.137]) (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 190D0208FE for ; Mon, 12 Oct 2020 10:47:51 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=silabs.onmicrosoft.com header.i=@silabs.onmicrosoft.com header.b="kAKqsS47" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 190D0208FE Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=silabs.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=driverdev-devel-bounces@linuxdriverproject.org Received: from localhost (localhost [127.0.0.1]) by fraxinus.osuosl.org (Postfix) with ESMTP id B60DD86141; Mon, 12 Oct 2020 10:47:51 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from fraxinus.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 1fbtJgpBvgRQ; Mon, 12 Oct 2020 10:47:46 +0000 (UTC) Received: from ash.osuosl.org (ash.osuosl.org [140.211.166.34]) by fraxinus.osuosl.org (Postfix) with ESMTP id 0D62B86109; Mon, 12 Oct 2020 10:47:44 +0000 (UTC) Received: from hemlock.osuosl.org (smtp2.osuosl.org [140.211.166.133]) by ash.osuosl.org (Postfix) with ESMTP id 32C7C1BF5B5 for ; Mon, 12 Oct 2020 10:47:43 +0000 (UTC) Received: from localhost (localhost [127.0.0.1]) by hemlock.osuosl.org (Postfix) with ESMTP id 2526A872D7 for ; Mon, 12 Oct 2020 10:47:43 +0000 (UTC) X-Virus-Scanned: amavisd-new at osuosl.org Received: from hemlock.osuosl.org ([127.0.0.1]) by localhost (.osuosl.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id NDzpRgn+noOa for ; Mon, 12 Oct 2020 10:47:41 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (mail-dm6nam11on2060.outbound.protection.outlook.com [40.107.223.60]) by hemlock.osuosl.org (Postfix) with ESMTPS id 44D5D8727F for ; Mon, 12 Oct 2020 10:47:41 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PE5dN2G75aBWk4QfrAv+8QSdtsQUi+dCDNlMm67flwfwYkZcWL+GcyW34+S/25HJ9DMd7R/ucIYHnif2dY/m1kVCfMGvQXOLTdP1gB4k2sjr5sI2QK4Tqjs5qvy8Ms/HROtijG0gxrnBAdWrfbGX42sGMLB2+2vE/eu4zXgLowTps6m8WTXPlQiAwSpwSk9Ws6xPflvgo67AbRnDBZKB+HpDBBg9bM0sgXhT+vVe6WxxOO3kz1EtWCTPRSgH/2KaaoWh29bwjmXADpbXCOEQuN7tDT175rKn+MN91rbK8RbiehkO4GM1WYfAVtzkIE7nlY6hl4iumDn6Bb6VFKKnKw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+jdLHwt8cTK/Wk374OOaTXvb/8aSsk7m7ip+iciGfLI=; b=Nlm0N0xTEDHrkYyuCacOsS0a59EEyaAhnnIyISRcTQh2oDydwuf8DpLyRRchZT8W84KzewJOSq9Xfla8khe0gnrzYd9M831TRaGHy5cGdil2M92lcda6yZ2qaaxIVDO9eqmLr3w+3UVcU4IOv1gos4X93a+LBgJH+gLc2URD+YvFT5wR8oYJP+sk8s6agofFxKfBOrEAfzV9Tc0+RzekbdcWdQJsPTmPsFUJGTCzkHaKDim3XjvtZRApqgctato/R/JUzIsH6+cGnrjDRGkHJ+wOTbduZrsPh52KBUyyt/J1pB4JsVBtjZ2d66S/ZZ8QA9KevJJyayqpR76YhsOrXQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=silabs.com; dmarc=pass action=none header.from=silabs.com; dkim=pass header.d=silabs.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=silabs.onmicrosoft.com; s=selector2-silabs-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=+jdLHwt8cTK/Wk374OOaTXvb/8aSsk7m7ip+iciGfLI=; b=kAKqsS47IKOURTchaDcLL0y0UTF4bOcem8cvmPF8QmGABWuB0rbQsr1hGfW9RFHcCrrU3kDUJS9zAFuVN3yhinxOeNUsGDFxEGwQ3BZMF11UYKThd0LX+Zk0o56EomnN3KCQSGuphwbKIDxF6+6WxLWuWbOOE91lfgpQrSLGgro= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none; vger.kernel.org; dmarc=none action=none header.from=silabs.com; Received: from SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) by SA0PR11MB4734.namprd11.prod.outlook.com (2603:10b6:806:99::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.23; Mon, 12 Oct 2020 10:47:39 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::4f5:fbe5:44a7:cb8a%5]) with mapi id 15.20.3455.029; Mon, 12 Oct 2020 10:47:39 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org Subject: [PATCH 18/23] wfx: add sta.c/sta.h Date: Mon, 12 Oct 2020 12:46:43 +0200 Message-Id: <20201012104648.985256-19-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> References: <20201012104648.985256-1-Jerome.Pouiller@silabs.com> X-Originating-IP: [82.67.86.106] X-ClientProxiedBy: PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from pc-42.home (82.67.86.106) by PR3P189CA0005.EURP189.PROD.OUTLOOK.COM (2603:10a6:102:52::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3455.21 via Frontend Transport; Mon, 12 Oct 2020 10:47:37 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: d2ef6da7-96e3-4c22-8fb4-08d86e9c3d38 X-MS-TrafficTypeDiagnostic: SA0PR11MB4734: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1388; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: dFB2ANdpeHwVjePGYosEPcy50OO/4/Ug3aGN8cVBDtpXxnfTLLFK85pyrqyrwuCWfRrVbBdKemYZ5eeAg9JpL+EaDb3NiciMupZFWWEPM9O74kPrrgUrAwx2Qenn7E6Y2uOdfUhOi/GEtisN5nBJDMSSUHx2qEFRvJLE3Znp6kUB1H1FJCK4Fc79ExRPEbVYyeSGkkvmqPBvx59JRJXRbOhA0yuUQISnbMznJjOiGpZLJGwPWmmnVSSSvGYUppHCT0evJULC3nbU8CwJLE2EKcRcciL5v4EVLIaoqECn3NO6NeOmTOE4asxivXAAebvYHH/P7gA4wCaTmX/G6z2lZg== X-Forefront-Antispam-Report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB2718.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(39850400004)(396003)(366004)(136003)(346002)(376002)(66556008)(66476007)(6512007)(26005)(36756003)(66946007)(16526019)(186003)(316002)(4326008)(2616005)(956004)(1076003)(30864003)(5660300002)(107886003)(6486002)(54906003)(86362001)(8676002)(83380400001)(8936002)(66574015)(52116002)(2906002)(6506007)(8886007)(6666004)(478600001); DIR:OUT; SFP:1101; X-MS-Exchange-AntiSpam-MessageData: 5wNF+8wVPtkQVH93dHbHK56Eh+Ki4OUzXRmkbgjpyNh9VHR29orbtqfwaGpnwmiV/m1EbKs6wWFEYxE0BsSSRUyvrtMPPaMAnVga84Dd0iulrbkcBy3Q4v8cWebwdWQH4ZKyoAJNm1suZKZPbx6UudyE3/i27xPJBptfE46TSuhJ44xG0XMD5gyuUYuXyoEmh2hy4/HsuZ5AciwjfJoMspyhlgO9dv0SG6RVzfr52dja3MNxlmI31kfmyqnot/9J95TqHZ3VxRqQ6NTUePt6ADsu2KQCzx1plb+64bDIcbNRcDy0TZiKge/8r5xZdLvyhX/allIeZPo9Siovzf+mVe1CejZpIhn5PhAb/6EMaX+CTaPcV8/fNspVGaWIwZfdhBsymtqgfwGq9r7YXTD6CriKaMkE1IK8gh7DDM2Pv90g0HkE/ZlBTtaV1HR7J7TBZarfCinZlmELPl+nV8R2SmQCST3tabTBYlZ44I6+3m6qsKZRT7CJy2zfQPICxp/+3Dhti7boD5T9hvRSqzSryezZsrN1+YNF/fUCwgp26XSfEXqFhTD4xaRHH3o02zqwP8heKn/wPkkm/5qpBhGEwpU/ms77WnF6YHPiVeNjKwwGkFE7Z4EE1p9JKnyilKun91nu8LhWUjtZO53P8yE2gg== X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: d2ef6da7-96e3-4c22-8fb4-08d86e9c3d38 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 12 Oct 2020 10:47:39.7213 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 54dbd822-5231-4b20-944d-6f4abcd541fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: GS18FZ94JO+EqvJWgHcROUEbJzBsBVt1DbL/rly3JjcVzBC0KST+8zFENVD0DJYp1ptPjGDv0KldVBn5T98Qlw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA0PR11MB4734 X-BeenThere: driverdev-devel@linuxdriverproject.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux Driver Project Developer List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: devel@driverdev.osuosl.org, devicetree@vger.kernel.org, Greg Kroah-Hartman , linux-kernel@vger.kernel.org, Rob Herring , "David S . Miller" , Kalle Valo Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: driverdev-devel-bounces@linuxdriverproject.org Sender: "devel" RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMgfCA4MDcgKysrKysr KysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3Rh LmggfCAgNzMgKysrCiAyIGZpbGVzIGNoYW5nZWQsIDg4MCBpbnNlcnRpb25zKCspCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmgKCmRpZmYg LS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L3N0YS5jIGIvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMDAuLjIzMjBhODFlYWUwYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbmV0 L3dpcmVsZXNzL3NpbGFicy93Zngvc3RhLmMKQEAgLTAsMCArMSw4MDcgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBt YWM4MDIxMSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFi b3JhdG9yaWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8K KyNpbmNsdWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorI2luY2x1ZGUgPG5ldC9tYWM4MDIxMS5o PgorCisjaW5jbHVkZSAic3RhLmgiCisjaW5jbHVkZSAid2Z4LmgiCisjaW5jbHVkZSAiZndpby5o IgorI2luY2x1ZGUgImJoLmgiCisjaW5jbHVkZSAia2V5LmgiCisjaW5jbHVkZSAic2Nhbi5oIgor I2luY2x1ZGUgImRlYnVnLmgiCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVkZSAiaGlmX3R4 X21pYi5oIgorCisjZGVmaW5lIEhJRl9NQVhfQVJQX0lQX0FERFJUQUJMRV9FTlRSSUVTIDIKKwor dTMyIHdmeF9yYXRlX21hc2tfdG9faHcoc3RydWN0IHdmeF9kZXYgKndkZXYsIHUzMiByYXRlcykK K3sKKwlpbnQgaTsKKwl1MzIgcmV0ID0gMDsKKwkvLyBXRnggb25seSBzdXBwb3J0IDJHSHoKKwlz dHJ1Y3QgaWVlZTgwMjExX3N1cHBvcnRlZF9iYW5kICpzYmFuZCA9IHdkZXYtPmh3LT53aXBoeS0+ YmFuZHNbTkw4MDIxMV9CQU5EXzJHSFpdOworCisJZm9yIChpID0gMDsgaSA8IHNiYW5kLT5uX2Jp dHJhdGVzOyBpKyspIHsKKwkJaWYgKHJhdGVzICYgQklUKGkpKSB7CisJCQlpZiAoaSA+PSBzYmFu ZC0+bl9iaXRyYXRlcykKKwkJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICJ1bnN1cHBvcnRlZCBiYXNp YyByYXRlXG4iKTsKKwkJCWVsc2UKKwkJCQlyZXQgfD0gQklUKHNiYW5kLT5iaXRyYXRlc1tpXS5o d192YWx1ZSk7CisJCX0KKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3ZnhfY29vbGluZ190 aW1lb3V0X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQoreworCXN0cnVjdCB3ZnhfZGV2 ICp3ZGV2ID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKKwkJCQkJICAgIHN0 cnVjdCB3ZnhfZGV2LAorCQkJCQkgICAgY29vbGluZ190aW1lb3V0X3dvcmspOworCisJd2Rldi0+ Y2hpcF9mcm96ZW4gPSB0cnVlOworCXdmeF90eF91bmxvY2sod2Rldik7Cit9CisKK3ZvaWQgd2Z4 X3N1c3BlbmRfaG90X2RldihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBzdGFfbm90aWZ5X2Nt ZCBjbWQpCit7CisJaWYgKGNtZCA9PSBTVEFfTk9USUZZX0FXQUtFKSB7CisJCS8vIERldmljZSBy ZWNvdmVyIG5vcm1hbCB0ZW1wZXJhdHVyZQorCQlpZiAoY2FuY2VsX2RlbGF5ZWRfd29yaygmd2Rl di0+Y29vbGluZ190aW1lb3V0X3dvcmspKQorCQkJd2Z4X3R4X3VubG9jayh3ZGV2KTsKKwl9IGVs c2UgeworCQkvLyBEZXZpY2UgaXMgdG9vIGhvdAorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJndk ZXYtPmNvb2xpbmdfdGltZW91dF93b3JrLCAxMCAqIEhaKTsKKwkJd2Z4X3R4X2xvY2sod2Rldik7 CisJfQorfQorCitzdGF0aWMgdm9pZCB3ZnhfZmlsdGVyX2JlYWNvbihzdHJ1Y3Qgd2Z4X3ZpZiAq d3ZpZiwgYm9vbCBmaWx0ZXJfYmVhY29uKQoreworCWNvbnN0IHN0cnVjdCBoaWZfaWVfdGFibGVf ZW50cnkgZmlsdGVyX2llc1tdID0geworCQl7CisJCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURf VkVORE9SX1NQRUNJRklDLAorCQkJLmhhc19jaGFuZ2VkICA9IDEsCisJCQkubm9fbG9uZ2VyICAg ID0gMSwKKwkJCS5oYXNfYXBwZWFyZWQgPSAxLAorCQkJLm91aSAgICAgICAgICA9IHsgMHg1MCwg MHg2RiwgMHg5QSB9LAorCQl9LCB7CisJCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURfSFRfT1BF UkFUSU9OLAorCQkJLmhhc19jaGFuZ2VkICA9IDEsCisJCQkubm9fbG9uZ2VyICAgID0gMSwKKwkJ CS5oYXNfYXBwZWFyZWQgPSAxLAorCQl9LCB7CisJCQkuaWVfaWQgICAgICAgID0gV0xBTl9FSURf RVJQX0lORk8sCisJCQkuaGFzX2NoYW5nZWQgID0gMSwKKwkJCS5ub19sb25nZXIgICAgPSAxLAor CQkJLmhhc19hcHBlYXJlZCA9IDEsCisJCX0KKwl9OworCisJaWYgKCFmaWx0ZXJfYmVhY29uKSB7 CisJCWhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2wod3ZpZiwgMCwgMSk7CisJfSBlbHNlIHsKKwkJ aGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHd2aWYsIDMsIGZpbHRlcl9pZXMpOworCQloaWZf YmVhY29uX2ZpbHRlcl9jb250cm9sKHd2aWYsIEhJRl9CRUFDT05fRklMVEVSX0VOQUJMRSwgMCk7 CisJfQorfQorCit2b2lkIHdmeF9jb25maWd1cmVfZmlsdGVyKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCB1bnNpZ25lZCBpbnQgY2hhbmdlZF9mbGFncywKKwkJCSAgdW5zaWduZWQgaW50ICp0b3Rh bF9mbGFncywgdTY0IHVudXNlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IE5VTEw7CisJ c3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlib29sIGZpbHRlcl9ic3NpZCwgZmls dGVyX3ByYnJlcSwgZmlsdGVyX2JlYWNvbjsKKworCS8vIE5vdGVzOgorCS8vICAgLSBQcm9iZSBy ZXNwb25zZXMgKEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDKSBhcmUgbmV2ZXIgZmlsdGVyZWQKKwkv LyAgIC0gUFMtUG9sbCAoRklGX1BTUE9MTCkgYXJlIG5ldmVyIGZpbHRlcmVkCisJLy8gICAtIFJU UywgQ1RTIGFuZCBBY2sgKEZJRl9DT05UUk9MKSBhcmUgYWx3YXlzIGZpbHRlcmVkCisJLy8gICAt IEJyb2tlbiBmcmFtZXMgKEZJRl9GQ1NGQUlMIGFuZCBGSUZfUExDUEZBSUwpIGFyZSBhbHdheXMg ZmlsdGVyZWQKKwkvLyAgIC0gRmlybXdhcmUgZG9lcyAoeWV0KSBhbGxvdyB0byBmb3J3YXJkIHVu aWNhc3QgdHJhZmZpYyBzZW50IHRvCisJLy8gICAgIG90aGVyIHN0YXRpb25zIChha2EuIHByb21p c2N1b3VzIG1vZGUpCisJKnRvdGFsX2ZsYWdzICY9IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIHwg RklGX0FMTE1VTFRJIHwgRklGX09USEVSX0JTUyB8CisJCQlGSUZfUFJPQkVfUkVRIHwgRklGX1BT UE9MTDsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCXdoaWxlICgod3ZpZiA9 IHd2aWZfaXRlcmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgeworCQltdXRleF9sb2NrKCZ3dmlm LT5zY2FuX2xvY2spOworCisJCS8vIE5vdGU6IEZJRl9CQ05fUFJCUkVTUF9QUk9NSVNDIGNvdmVy cyBwcm9iZSByZXNwb25zZSBhbmQKKwkJLy8gYmVhY29ucyBmcm9tIG90aGVyIEJTUworCQlpZiAo KnRvdGFsX2ZsYWdzICYgRklGX0JDTl9QUkJSRVNQX1BST01JU0MpCisJCQlmaWx0ZXJfYmVhY29u ID0gZmFsc2U7CisJCWVsc2UKKwkJCWZpbHRlcl9iZWFjb24gPSB0cnVlOworCQl3ZnhfZmlsdGVy X2JlYWNvbih3dmlmLCBmaWx0ZXJfYmVhY29uKTsKKworCQlpZiAoKnRvdGFsX2ZsYWdzICYgRklG X09USEVSX0JTUykKKwkJCWZpbHRlcl9ic3NpZCA9IGZhbHNlOworCQllbHNlCisJCQlmaWx0ZXJf YnNzaWQgPSB0cnVlOworCisJCS8vIEluIEFQIG1vZGUsIGNoaXAgY2FuIHJlcGx5IHRvIHByb2Jl IHJlcXVlc3QgaXRzZWxmCisJCWlmICgqdG90YWxfZmxhZ3MgJiBGSUZfUFJPQkVfUkVRICYmCisJ CSAgICB3dmlmLT52aWYtPnR5cGUgPT0gTkw4MDIxMV9JRlRZUEVfQVApIHsKKwkJCWRldl9kYmco d2Rldi0+ZGV2LCAiZG8gbm90IGZvcndhcmQgcHJvYmUgcmVxdWVzdCBpbiBBUCBtb2RlXG4iKTsK KwkJCSp0b3RhbF9mbGFncyAmPSB+RklGX1BST0JFX1JFUTsKKwkJfQorCisJCWlmICgqdG90YWxf ZmxhZ3MgJiBGSUZfUFJPQkVfUkVRKQorCQkJZmlsdGVyX3ByYnJlcSA9IGZhbHNlOworCQllbHNl CisJCQlmaWx0ZXJfcHJicmVxID0gdHJ1ZTsKKwkJaGlmX3NldF9yeF9maWx0ZXIod3ZpZiwgZmls dGVyX2Jzc2lkLCBmaWx0ZXJfcHJicmVxKTsKKworCQltdXRleF91bmxvY2soJnd2aWYtPnNjYW5f bG9jayk7CisJfQorCW11dGV4X3VubG9jaygmd2Rldi0+Y29uZl9tdXRleCk7Cit9CisKK3N0YXRp YyBpbnQgd2Z4X2dldF9wc190aW1lb3V0KHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sICplbmFi bGVfcHMpCit7CisJc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFuMCA9IE5VTEwsICpjaGFu MSA9IE5VTEw7CisJc3RydWN0IGllZWU4MDIxMV9jb25mICpjb25mID0gJnd2aWYtPndkZXYtPmh3 LT5jb25mOworCisJV0FSTighd3ZpZi0+dmlmLT5ic3NfY29uZi5hc3NvYyAmJiBlbmFibGVfcHMs CisJICAgICAiZW5hYmxlX3BzIGlzIHJlbGlhYmxlIG9ubHkgaWYgYXNzb2NpYXRlZCIpOworCWlm ICh3ZGV2X3RvX3d2aWYod3ZpZi0+d2RldiwgMCkpCisJCWNoYW4wID0gd2Rldl90b193dmlmKHd2 aWYtPndkZXYsIDApLT52aWYtPmJzc19jb25mLmNoYW5kZWYuY2hhbjsKKwlpZiAod2Rldl90b193 dmlmKHd2aWYtPndkZXYsIDEpKQorCQljaGFuMSA9IHdkZXZfdG9fd3ZpZih3dmlmLT53ZGV2LCAx KS0+dmlmLT5ic3NfY29uZi5jaGFuZGVmLmNoYW47CisJaWYgKGNoYW4wICYmIGNoYW4xICYmIGNo YW4wLT5od192YWx1ZSAhPSBjaGFuMS0+aHdfdmFsdWUgJiYKKwkgICAgd3ZpZi0+dmlmLT50eXBl ICE9IE5MODAyMTFfSUZUWVBFX0FQKSB7CisJCS8vIEl0IGlzIG5lY2Vzc2FyeSB0byBlbmFibGUg cG93ZXJzYXZlIGlmIGNoYW5uZWxzCisJCS8vIGFyZSBkaWZmZXJlbnQuCisJCWlmIChlbmFibGVf cHMpCisJCQkqZW5hYmxlX3BzID0gdHJ1ZTsKKwkJaWYgKHd2aWYtPndkZXYtPmZvcmNlX3BzX3Rp bWVvdXQgPiAtMSkKKwkJCXJldHVybiB3dmlmLT53ZGV2LT5mb3JjZV9wc190aW1lb3V0OworCQll bHNlIGlmICh3ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMywgMikpCisJCQlyZXR1cm4g MDsKKwkJZWxzZQorCQkJcmV0dXJuIDMwOworCX0KKwlpZiAoZW5hYmxlX3BzKQorCQkqZW5hYmxl X3BzID0gd3ZpZi0+dmlmLT5ic3NfY29uZi5wczsKKwlpZiAod3ZpZi0+d2Rldi0+Zm9yY2VfcHNf dGltZW91dCA+IC0xKQorCQlyZXR1cm4gd3ZpZi0+d2Rldi0+Zm9yY2VfcHNfdGltZW91dDsKKwll bHNlIGlmICh3dmlmLT52aWYtPmJzc19jb25mLmFzc29jICYmIHd2aWYtPnZpZi0+YnNzX2NvbmYu cHMpCisJCXJldHVybiBjb25mLT5keW5hbWljX3BzX3RpbWVvdXQ7CisJZWxzZQorCQlyZXR1cm4g LTE7Cit9CisKK2ludCB3ZnhfdXBkYXRlX3BtKHN0cnVjdCB3ZnhfdmlmICp3dmlmKQoreworCWlu dCBwc190aW1lb3V0OworCWJvb2wgcHM7CisKKwlpZiAoIXd2aWYtPnZpZi0+YnNzX2NvbmYuYXNz b2MpCisJCXJldHVybiAwOworCXBzX3RpbWVvdXQgPSB3ZnhfZ2V0X3BzX3RpbWVvdXQod3ZpZiwg JnBzKTsKKwlpZiAoIXBzKQorCQlwc190aW1lb3V0ID0gMDsKKwlXQVJOX09OKHBzX3RpbWVvdXQg PCAwKTsKKwlpZiAod3ZpZi0+dWFwc2RfbWFzaykKKwkJcHNfdGltZW91dCA9IDA7CisKKwlpZiAo IXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUs CisJCQkJCSBUVV9UT19KSUZGSUVTKDUxMikpKQorCQlkZXZfd2Fybih3dmlmLT53ZGV2LT5kZXYs CisJCQkgInRpbWVvdXQgd2hpbGUgd2FpdGluZyBvZiBzZXRfcG1fbW9kZV9jb21wbGV0ZVxuIik7 CisJcmV0dXJuIGhpZl9zZXRfcG0od3ZpZiwgcHMsIHBzX3RpbWVvdXQpOworfQorCitpbnQgd2Z4 X2NvbmZfdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2 aWYsCisJCSAgIHUxNiBxdWV1ZSwgY29uc3Qgc3RydWN0IGllZWU4MDIxMV90eF9xdWV1ZV9wYXJh bXMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVj dCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwlpbnQg b2xkX3VhcHNkID0gd3ZpZi0+dWFwc2RfbWFzazsKKworCVdBUk5fT04ocXVldWUgPj0gaHctPnF1 ZXVlcyk7CisKKwltdXRleF9sb2NrKCZ3ZGV2LT5jb25mX211dGV4KTsKKwlhc3NpZ25fYml0KHF1 ZXVlLCAmd3ZpZi0+dWFwc2RfbWFzaywgcGFyYW1zLT51YXBzZCk7CisJaGlmX3NldF9lZGNhX3F1 ZXVlX3BhcmFtcyh3dmlmLCBxdWV1ZSwgcGFyYW1zKTsKKwlpZiAod3ZpZi0+dmlmLT50eXBlID09 IE5MODAyMTFfSUZUWVBFX1NUQVRJT04gJiYKKwkgICAgb2xkX3VhcHNkICE9IHd2aWYtPnVhcHNk X21hc2spIHsKKwkJaGlmX3NldF91YXBzZF9pbmZvKHd2aWYsIHd2aWYtPnVhcHNkX21hc2spOwor CQl3ZnhfdXBkYXRlX3BtKHd2aWYpOworCX0KKwltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0 ZXgpOworCXJldHVybiAwOworfQorCitpbnQgd2Z4X3NldF9ydHNfdGhyZXNob2xkKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCB1MzIgdmFsdWUpCit7CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBo dy0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IE5VTEw7CisKKwl3aGlsZSAoKHd2aWYg PSB3dmlmX2l0ZXJhdGUod2Rldiwgd3ZpZikpICE9IE5VTEwpCisJCWhpZl9ydHNfdGhyZXNob2xk KHd2aWYsIHZhbHVlKTsKKwlyZXR1cm4gMDsKK30KKworLyogV1NNIGNhbGxiYWNrcyAqLworCit2 b2lkIHdmeF9ldmVudF9yZXBvcnRfcnNzaShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTggcmF3X3Jj cGlfcnNzaSkKK3sKKwkvKiBSU1NJOiBzaWduZWQgUTguMCwgUkNQSTogdW5zaWduZWQgUTcuMQor CSAqIFJTU0kgPSBSQ1BJIC8gMiAtIDExMAorCSAqLworCWludCByY3BpX3Jzc2k7CisJaW50IGNx bV9ldnQ7CisKKwlyY3BpX3Jzc2kgPSByYXdfcmNwaV9yc3NpIC8gMiAtIDExMDsKKwlpZiAocmNw aV9yc3NpIDw9IHd2aWYtPnZpZi0+YnNzX2NvbmYuY3FtX3Jzc2lfdGhvbGQpCisJCWNxbV9ldnQg PSBOTDgwMjExX0NRTV9SU1NJX1RIUkVTSE9MRF9FVkVOVF9MT1c7CisJZWxzZQorCQljcW1fZXZ0 ID0gTkw4MDIxMV9DUU1fUlNTSV9USFJFU0hPTERfRVZFTlRfSElHSDsKKwlpZWVlODAyMTFfY3Ft X3Jzc2lfbm90aWZ5KHd2aWYtPnZpZiwgY3FtX2V2dCwgcmNwaV9yc3NpLCBHRlBfS0VSTkVMKTsK K30KKworc3RhdGljIHZvaWQgd2Z4X2JlYWNvbl9sb3NzX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0 ICp3b3JrKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gY29udGFpbmVyX29mKHRvX2RlbGF5 ZWRfd29yayh3b3JrKSwKKwkJCQkJICAgIHN0cnVjdCB3ZnhfdmlmLCBiZWFjb25fbG9zc193b3Jr KTsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpic3NfY29uZiA9ICZ3dmlmLT52aWYtPmJz c19jb25mOworCisJaWVlZTgwMjExX2JlYWNvbl9sb3NzKHd2aWYtPnZpZik7CisJc2NoZWR1bGVf ZGVsYXllZF93b3JrKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwKKwkJCSAgICAgIG1zZWNzX3RvX2pp ZmZpZXMoYnNzX2NvbmYtPmJlYWNvbl9pbnQpKTsKK30KKwordm9pZCB3Znhfc2V0X2RlZmF1bHRf dW5pY2FzdF9rZXkoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkJIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsIGludCBpZHgpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0 IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJaGlmX3dlcF9kZWZhdWx0X2tleV9pZCh3dmlm LCBpZHgpOworfQorCit2b2lkIHdmeF9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlz dHJ1Y3Qgd2Z4X2RldiAqd2RldiA9IHd2aWYtPndkZXY7CisKKwl3ZnhfdHhfbG9ja19mbHVzaCh3 ZGV2KTsKKwloaWZfcmVzZXQod3ZpZiwgZmFsc2UpOworCXdmeF90eF9wb2xpY3lfaW5pdCh3dmlm KTsKKwlpZiAod3ZpZl9jb3VudCh3ZGV2KSA8PSAxKQorCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xp Y3kod3ZpZiwgMHhGRiwgMHhGRik7CisJd2Z4X3R4X3VubG9jayh3ZGV2KTsKKwl3dmlmLT5qb2lu X2luX3Byb2dyZXNzID0gZmFsc2U7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZ3dmlmLT5i ZWFjb25fbG9zc193b3JrKTsKKwl3dmlmID0gIE5VTEw7CisJd2hpbGUgKCh3dmlmID0gd3ZpZl9p dGVyYXRlKHdkZXYsIHd2aWYpKSAhPSBOVUxMKQorCQl3ZnhfdXBkYXRlX3BtKHd2aWYpOworfQor CitpbnQgd2Z4X3N0YV9hZGQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAy MTFfdmlmICp2aWYsCisJCXN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpCit7CisJc3RydWN0IHdm eF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCB3 Znhfc3RhX3ByaXYgKnN0YV9wcml2ID0gKHN0cnVjdCB3Znhfc3RhX3ByaXYgKikmc3RhLT5kcnZf cHJpdjsKKworCXN0YV9wcml2LT52aWZfaWQgPSB3dmlmLT5pZDsKKworCWlmICh2aWYtPnR5cGUg PT0gTkw4MDIxMV9JRlRZUEVfU1RBVElPTikKKwkJaGlmX3NldF9tZnAod3ZpZiwgc3RhLT5tZnAs IHN0YS0+bWZwKTsKKworCS8vIEluIHN0YXRpb24gbW9kZSwgdGhlIGZpcm13YXJlIGludGVycHJl dHMgbmV3IGxpbmstaWQgYXMgYSBURExTIHBlZXIuCisJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjEx X0lGVFlQRV9TVEFUSU9OICYmICFzdGEtPnRkbHMpCisJCXJldHVybiAwOworCXN0YV9wcml2LT5s aW5rX2lkID0gZmZ6KHd2aWYtPmxpbmtfaWRfbWFwKTsKKwl3dmlmLT5saW5rX2lkX21hcCB8PSBC SVQoc3RhX3ByaXYtPmxpbmtfaWQpOworCVdBUk5fT04oIXN0YV9wcml2LT5saW5rX2lkKTsKKwlX QVJOX09OKHN0YV9wcml2LT5saW5rX2lkID49IEhJRl9MSU5LX0lEX01BWCk7CisJaGlmX21hcF9s aW5rKHd2aWYsIGZhbHNlLCBzdGEtPmFkZHIsIHN0YV9wcml2LT5saW5rX2lkLCBzdGEtPm1mcCk7 CisKKwlyZXR1cm4gMDsKK30KKworaW50IHdmeF9zdGFfcmVtb3ZlKHN0cnVjdCBpZWVlODAyMTFf aHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICBzdHJ1Y3QgaWVlZTgwMjEx X3N0YSAqc3RhKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3ZnhfdmlmICop dmlmLT5kcnZfcHJpdjsKKwlzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICpzdGFfcHJpdiA9IChzdHJ1Y3Qg d2Z4X3N0YV9wcml2ICopJnN0YS0+ZHJ2X3ByaXY7CisKKwkvLyBTZWUgbm90ZSBpbiB3Znhfc3Rh X2FkZCgpCisJaWYgKCFzdGFfcHJpdi0+bGlua19pZCkKKwkJcmV0dXJuIDA7CisJLy8gRklYTUUg YWRkIGEgbXV0ZXg/CisJaGlmX21hcF9saW5rKHd2aWYsIHRydWUsIHN0YS0+YWRkciwgc3RhX3By aXYtPmxpbmtfaWQsIGZhbHNlKTsKKwl3dmlmLT5saW5rX2lkX21hcCAmPSB+QklUKHN0YV9wcml2 LT5saW5rX2lkKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB3ZnhfdXBsb2FkX2FwX3Rl bXBsYXRlcyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZikKK3sKKwlzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwor CisJc2tiID0gaWVlZTgwMjExX2JlYWNvbl9nZXQod3ZpZi0+d2Rldi0+aHcsIHd2aWYtPnZpZik7 CisJaWYgKCFza2IpCisJCXJldHVybiAtRU5PTUVNOworCWhpZl9zZXRfdGVtcGxhdGVfZnJhbWUo d3ZpZiwgc2tiLCBISUZfVE1QTFRfQkNOLAorCQkJICAgICAgIEFQSV9SQVRFX0lOREVYX0JfMU1C UFMpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXNrYiA9IGllZWU4MDIxMV9wcm9iZXJlc3Bf Z2V0KHd2aWYtPndkZXYtPmh3LCB3dmlmLT52aWYpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVO T01FTTsKKwloaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHd2aWYsIHNrYiwgSElGX1RNUExUX1BSQlJF UywKKwkJCSAgICAgICBBUElfUkFURV9JTkRFWF9CXzFNQlBTKTsKKwlkZXZfa2ZyZWVfc2tiKHNr Yik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHdmeF9zZXRfbWZwX2FwKHN0cnVjdCB3 ZnhfdmlmICp3dmlmKQoreworCXN0cnVjdCBza19idWZmICpza2IgPSBpZWVlODAyMTFfYmVhY29u X2dldCh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmKTsKKwljb25zdCBpbnQgaWVvZmZzZXQgPSBv ZmZzZXRvZihzdHJ1Y3QgaWVlZTgwMjExX21nbXQsIHUuYmVhY29uLnZhcmlhYmxlKTsKKwljb25z dCB1MTYgKnB0ciA9ICh1MTYgKiljZmc4MDIxMV9maW5kX2llKFdMQU5fRUlEX1JTTiwKKwkJCQkJ CSBza2ItPmRhdGEgKyBpZW9mZnNldCwKKwkJCQkJCSBza2ItPmxlbiAtIGllb2Zmc2V0KTsKKwlj b25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50X29mZnNldCA9IDggLyBzaXplb2Yo dTE2KTsKKwljb25zdCBpbnQgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUgPSA0IC8gc2l6ZW9m KHUxNik7CisJY29uc3QgaW50IGFrbV9zdWl0ZV9zaXplID0gNCAvIHNpemVvZih1MTYpOworCisJ aWYgKHB0cikgeworCQlwdHIgKz0gcGFpcndpc2VfY2lwaGVyX3N1aXRlX2NvdW50X29mZnNldDsK KwkJaWYgKFdBUk5fT04ocHRyID4gKHUxNiAqKXNrYl90YWlsX3BvaW50ZXIoc2tiKSkpCisJCQly ZXR1cm47CisJCXB0ciArPSAxICsgcGFpcndpc2VfY2lwaGVyX3N1aXRlX3NpemUgKiAqcHRyOwor CQlpZiAoV0FSTl9PTihwdHIgPiAodTE2ICopc2tiX3RhaWxfcG9pbnRlcihza2IpKSkKKwkJCXJl dHVybjsKKwkJcHRyICs9IDEgKyBha21fc3VpdGVfc2l6ZSAqICpwdHI7CisJCWlmIChXQVJOX09O KHB0ciA+ICh1MTYgKilza2JfdGFpbF9wb2ludGVyKHNrYikpKQorCQkJcmV0dXJuOworCQloaWZf c2V0X21mcCh3dmlmLCAqcHRyICYgQklUKDcpLCAqcHRyICYgQklUKDYpKTsKKwl9Cit9CisKK2lu dCB3Znhfc3RhcnRfYXAoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFf dmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2 aWYtPmRydl9wcml2OworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gd3ZpZi0+d2RldjsKKwlpbnQg cmV0OworCisJd3ZpZiA9ICBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3ZGV2 LCB3dmlmKSkgIT0gTlVMTCkKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKwl3dmlmID0gKHN0cnVj dCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKwl3ZnhfdXBsb2FkX2FwX3RlbXBsYXRlcyh3dmlm KTsKKwlyZXQgPSBoaWZfc3RhcnQod3ZpZiwgJnZpZi0+YnNzX2NvbmYsIHd2aWYtPmNoYW5uZWwp OworCWlmIChyZXQgPiAwKQorCQlyZXR1cm4gLUVJTzsKKwl3Znhfc2V0X21mcF9hcCh3dmlmKTsK KwlyZXR1cm4gcmV0OworfQorCit2b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKQoreworCXN0cnVjdCB3ZnhfdmlmICp3dmlm ID0gKHN0cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdmeF9yZXNldCh3dmlmKTsK K30KKworc3RhdGljIHZvaWQgd2Z4X2pvaW4oc3RydWN0IHdmeF92aWYgKnd2aWYpCit7CisJaW50 IHJldDsKKwlzdHJ1Y3QgaWVlZTgwMjExX2Jzc19jb25mICpjb25mID0gJnd2aWYtPnZpZi0+YnNz X2NvbmY7CisJc3RydWN0IGNmZzgwMjExX2JzcyAqYnNzID0gTlVMTDsKKwl1OCBzc2lkW0lFRUU4 MDIxMV9NQVhfU1NJRF9MRU5dOworCWNvbnN0IHU4ICpzc2lkaWUgPSBOVUxMOworCWludCBzc2lk bGVuID0gMDsKKworCXdmeF90eF9sb2NrX2ZsdXNoKHd2aWYtPndkZXYpOworCisJYnNzID0gY2Zn ODAyMTFfZ2V0X2Jzcyh3dmlmLT53ZGV2LT5ody0+d2lwaHksIHd2aWYtPmNoYW5uZWwsCisJCQkg ICAgICAgY29uZi0+YnNzaWQsIE5VTEwsIDAsCisJCQkgICAgICAgSUVFRTgwMjExX0JTU19UWVBF X0FOWSwgSUVFRTgwMjExX1BSSVZBQ1lfQU5ZKTsKKwlpZiAoIWJzcyAmJiAhY29uZi0+aWJzc19q b2luZWQpIHsKKwkJd2Z4X3R4X3VubG9jayh3dmlmLT53ZGV2KTsKKwkJcmV0dXJuOworCX0KKwor CXJjdV9yZWFkX2xvY2soKTsgLy8gcHJvdGVjdCBzc2lkaWUKKwlpZiAoYnNzKQorCQlzc2lkaWUg PSBpZWVlODAyMTFfYnNzX2dldF9pZShic3MsIFdMQU5fRUlEX1NTSUQpOworCWlmIChzc2lkaWUp IHsKKwkJc3NpZGxlbiA9IHNzaWRpZVsxXTsKKwkJaWYgKHNzaWRsZW4gPiBJRUVFODAyMTFfTUFY X1NTSURfTEVOKQorCQkJc3NpZGxlbiA9IElFRUU4MDIxMV9NQVhfU1NJRF9MRU47CisJCW1lbWNw eShzc2lkLCAmc3NpZGllWzJdLCBzc2lkbGVuKTsKKwl9CisJcmN1X3JlYWRfdW5sb2NrKCk7CisK KwljZmc4MDIxMV9wdXRfYnNzKHd2aWYtPndkZXYtPmh3LT53aXBoeSwgYnNzKTsKKworCXd2aWYt PmpvaW5faW5fcHJvZ3Jlc3MgPSB0cnVlOworCXJldCA9IGhpZl9qb2luKHd2aWYsIGNvbmYsIHd2 aWYtPmNoYW5uZWwsIHNzaWQsIHNzaWRsZW4pOworCWlmIChyZXQpIHsKKwkJaWVlZTgwMjExX2Nv bm5lY3Rpb25fbG9zcyh3dmlmLT52aWYpOworCQl3ZnhfcmVzZXQod3ZpZik7CisJfSBlbHNlIHsK KwkJLyogRHVlIHRvIGJlYWNvbiBmaWx0ZXJpbmcgaXQgaXMgcG9zc2libGUgdGhhdCB0aGUKKwkJ ICogQVAncyBiZWFjb24gaXMgbm90IGtub3duIGZvciB0aGUgbWFjODAyMTEgc3RhY2suCisJCSAq IERpc2FibGUgZmlsdGVyaW5nIHRlbXBvcmFyeSB0byBtYWtlIHN1cmUgdGhlIHN0YWNrCisJCSAq IHJlY2VpdmVzIGF0IGxlYXN0IG9uZQorCQkgKi8KKwkJd2Z4X2ZpbHRlcl9iZWFjb24od3ZpZiwg ZmFsc2UpOworCX0KKwl3ZnhfdHhfdW5sb2NrKHd2aWYtPndkZXYpOworfQorCitzdGF0aWMgdm9p ZCB3Znhfam9pbl9maW5hbGl6ZShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCSAgICAgIHN0cnVj dCBpZWVlODAyMTFfYnNzX2NvbmYgKmluZm8pCit7CisJc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0 YSA9IE5VTEw7CisJaW50IGFtcGR1X2RlbnNpdHkgPSAwOworCWJvb2wgZ3JlZW5maWVsZCA9IGZh bHNlOworCisJcmN1X3JlYWRfbG9jaygpOyAvLyBwcm90ZWN0IHN0YQorCWlmIChpbmZvLT5ic3Np ZCAmJiAhaW5mby0+aWJzc19qb2luZWQpCisJCXN0YSA9IGllZWU4MDIxMV9maW5kX3N0YSh3dmlm LT52aWYsIGluZm8tPmJzc2lkKTsKKwlpZiAoc3RhICYmIHN0YS0+aHRfY2FwLmh0X3N1cHBvcnRl ZCkKKwkJYW1wZHVfZGVuc2l0eSA9IHN0YS0+aHRfY2FwLmFtcGR1X2RlbnNpdHk7CisJaWYgKHN0 YSAmJiBzdGEtPmh0X2NhcC5odF9zdXBwb3J0ZWQgJiYKKwkgICAgIShpbmZvLT5odF9vcGVyYXRp b25fbW9kZSAmIElFRUU4MDIxMV9IVF9PUF9NT0RFX05PTl9HRl9TVEFfUFJTTlQpKQorCQlncmVl bmZpZWxkID0gISEoc3RhLT5odF9jYXAuY2FwICYgSUVFRTgwMjExX0hUX0NBUF9HUk5fRkxEKTsK KwlyY3VfcmVhZF91bmxvY2soKTsKKworCXd2aWYtPmpvaW5faW5fcHJvZ3Jlc3MgPSBmYWxzZTsK KwloaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUod3ZpZiwgYW1wZHVfZGVuc2l0eSwgZ3JlZW5maWVs ZCwKKwkJCQkgaW5mby0+dXNlX3Nob3J0X3ByZWFtYmxlKTsKKwloaWZfa2VlcF9hbGl2ZV9wZXJp b2Qod3ZpZiwgMCk7CisJLy8gYmVhY29uX2xvc3NfY291bnQgaXMgZGVmaW5lZCB0byA3IGluIG5l dC9tYWM4MDIxMS9tbG1lLmMuIExldCdzIHVzZQorCS8vIHRoZSBzYW1lIHZhbHVlLgorCWhpZl9z ZXRfYnNzX3BhcmFtcyh3dmlmLCBpbmZvLT5haWQsIDcpOworCWhpZl9zZXRfYmVhY29uX3dha2V1 cF9wZXJpb2Qod3ZpZiwgMSwgMSk7CisJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKK30KKworaW50IHdm eF9qb2luX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlm ICp2aWYpCit7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYt PmRydl9wcml2OworCisJd2Z4X3VwbG9hZF9hcF90ZW1wbGF0ZXMod3ZpZik7CisJd2Z4X2pvaW4o d3ZpZik7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X2xlYXZlX2lic3Moc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCisJd2Z4X3Jlc2V0 KHd2aWYpOworfQorCitzdGF0aWMgdm9pZCB3ZnhfZW5hYmxlX2JlYWNvbihzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZiwgYm9vbCBlbmFibGUpCit7CisJLy8gRHJpdmVyIGhhcyBDb250ZW50IEFmdGVyIERU SU0gQmVhY29uIGluIHF1ZXVlLiBEcml2ZXIgaXMgd2FpdGluZyBmb3IKKwkvLyBhIHNpZ25hbCBm cm9tIHRoZSBmaXJtd2FyZS4gU2luY2Ugd2UgYXJlIGdvaW5nIHRvIHN0b3AgdG8gc2VuZAorCS8v IGJlYWNvbnMsIHRoaXMgc2lnbmFsIHdpbGwgbmV2ZXIgaGFwcGVucy4gU2VlIGFsc28KKwkvLyB3 Znhfc3VzcGVuZF9yZXN1bWVfbWMoKQorCWlmICghZW5hYmxlICYmIHdmeF90eF9xdWV1ZXNfaGFz X2NhYih3dmlmKSkgeworCQl3dmlmLT5hZnRlcl9kdGltX3R4X2FsbG93ZWQgPSB0cnVlOworCQl3 ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsKKwl9CisJaGlmX2JlYWNvbl90cmFuc21pdCh3 dmlmLCBlbmFibGUpOworfQorCit2b2lkIHdmeF9ic3NfaW5mb19jaGFuZ2VkKHN0cnVjdCBpZWVl ODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICBzdHJ1Y3QgaWVl ZTgwMjExX2Jzc19jb25mICppbmZvLCB1MzIgY2hhbmdlZCkKK3sKKwlzdHJ1Y3Qgd2Z4X2RldiAq d2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0cnVjdCB3Znhfdmlm ICopdmlmLT5kcnZfcHJpdjsKKwlpbnQgaTsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0 ZXgpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9CQVNJQ19SQVRFUyB8fAorCSAgICBj aGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OX0lOVCB8fAorCSAgICBjaGFuZ2VkICYgQlNTX0NI QU5HRURfQlNTSUQpIHsKKwkJaWYgKHZpZi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9O KQorCQkJd2Z4X2pvaW4od3ZpZik7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9B U1NPQykgeworCQlpZiAoaW5mby0+YXNzb2MgfHwgaW5mby0+aWJzc19qb2luZWQpCisJCQl3Znhf am9pbl9maW5hbGl6ZSh3dmlmLCBpbmZvKTsKKwkJZWxzZSBpZiAoIWluZm8tPmFzc29jICYmIHZp Zi0+dHlwZSA9PSBOTDgwMjExX0lGVFlQRV9TVEFUSU9OKQorCQkJd2Z4X3Jlc2V0KHd2aWYpOwor CQllbHNlCisJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFuZ2U6 IEFTU09DXG4iLAorCQkJCSBfX2Z1bmNfXyk7CisJfQorCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hB TkdFRF9CRUFDT05fSU5GTykgeworCQlpZiAodmlmLT50eXBlICE9IE5MODAyMTFfSUZUWVBFX1NU QVRJT04pCisJCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIlczogbWlzdW5kZXJzdG9vZCBjaGFuZ2U6 IEJFQUNPTl9JTkZPXG4iLAorCQkJCSBfX2Z1bmNfXyk7CisJCWhpZl9zZXRfYmVhY29uX3dha2V1 cF9wZXJpb2Qod3ZpZiwgaW5mby0+ZHRpbV9wZXJpb2QsCisJCQkJCSAgICAgaW5mby0+ZHRpbV9w ZXJpb2QpOworCQkvLyBXZSB0ZW1wb3JhcnkgZm9yd2FyZGVkIGJlYWNvbiBmb3Igam9pbiBwcm9j ZXNzLiBJdCBpcyBub3cgbm8KKwkJLy8gbW9yZSBuZWNlc3NhcnkuCisJCXdmeF9maWx0ZXJfYmVh Y29uKHd2aWYsIHRydWUpOworCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5HRURfQVJQX0ZJ TFRFUikgeworCQlmb3IgKGkgPSAwOyBpIDwgSElGX01BWF9BUlBfSVBfQUREUlRBQkxFX0VOVFJJ RVM7IGkrKykgeworCQkJX19iZTMyICphcnBfYWRkciA9ICZpbmZvLT5hcnBfYWRkcl9saXN0W2ld OworCisJCQlpZiAoaW5mby0+YXJwX2FkZHJfY250ID4gSElGX01BWF9BUlBfSVBfQUREUlRBQkxF X0VOVFJJRVMpCisJCQkJYXJwX2FkZHIgPSBOVUxMOworCQkJaWYgKGkgPj0gaW5mby0+YXJwX2Fk ZHJfY250KQorCQkJCWFycF9hZGRyID0gTlVMTDsKKwkJCWhpZl9zZXRfYXJwX2lwdjRfZmlsdGVy KHd2aWYsIGksIGFycF9hZGRyKTsKKwkJfQorCX0KKworCWlmIChjaGFuZ2VkICYgQlNTX0NIQU5H RURfQVBfUFJPQkVfUkVTUCB8fAorCSAgICBjaGFuZ2VkICYgQlNTX0NIQU5HRURfQkVBQ09OKQor CQl3ZnhfdXBsb2FkX2FwX3RlbXBsYXRlcyh3dmlmKTsKKworCWlmIChjaGFuZ2VkICYgQlNTX0NI QU5HRURfQkVBQ09OX0VOQUJMRUQpCisJCXdmeF9lbmFibGVfYmVhY29uKHd2aWYsIGluZm8tPmVu YWJsZV9iZWFjb24pOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9LRUVQX0FMSVZFKQor CQloaWZfa2VlcF9hbGl2ZV9wZXJpb2Qod3ZpZiwgaW5mby0+bWF4X2lkbGVfcGVyaW9kICoKKwkJ CQkJICAgIFVTRUNfUEVSX1RVIC8gVVNFQ19QRVJfTVNFQyk7CisKKwlpZiAoY2hhbmdlZCAmIEJT U19DSEFOR0VEX0VSUF9DVFNfUFJPVCkKKwkJaGlmX2VycF91c2VfcHJvdGVjdGlvbih3dmlmLCBp bmZvLT51c2VfY3RzX3Byb3QpOworCisJaWYgKGNoYW5nZWQgJiBCU1NfQ0hBTkdFRF9FUlBfU0xP VCkKKwkJaGlmX3Nsb3RfdGltZSh3dmlmLCBpbmZvLT51c2Vfc2hvcnRfc2xvdCA/IDkgOiAyMCk7 CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX0NRTSkKKwkJaGlmX3NldF9yY3BpX3Jzc2lf dGhyZXNob2xkKHd2aWYsIGluZm8tPmNxbV9yc3NpX3Rob2xkLAorCQkJCQkgICAgaW5mby0+Y3Ft X3Jzc2lfaHlzdCk7CisKKwlpZiAoY2hhbmdlZCAmIEJTU19DSEFOR0VEX1RYUE9XRVIpCisJCWhp Zl9zZXRfb3V0cHV0X3Bvd2VyKHd2aWYsIGluZm8tPnR4cG93ZXIpOworCisJaWYgKGNoYW5nZWQg JiBCU1NfQ0hBTkdFRF9QUykKKwkJd2Z4X3VwZGF0ZV9wbSh3dmlmKTsKKworCW11dGV4X3VubG9j aygmd2Rldi0+Y29uZl9tdXRleCk7Cit9CisKK3N0YXRpYyBpbnQgd2Z4X3VwZGF0ZV90aW0oc3Ry dWN0IHdmeF92aWYgKnd2aWYpCit7CisJc3RydWN0IHNrX2J1ZmYgKnNrYjsKKwl1MTYgdGltX29m ZnNldCwgdGltX2xlbmd0aDsKKwl1OCAqdGltX3B0cjsKKworCXNrYiA9IGllZWU4MDIxMV9iZWFj b25fZ2V0X3RpbSh3dmlmLT53ZGV2LT5odywgd3ZpZi0+dmlmLAorCQkJCSAgICAgICAmdGltX29m ZnNldCwgJnRpbV9sZW5ndGgpOworCWlmICghc2tiKQorCQlyZXR1cm4gLUVOT0VOVDsKKwl0aW1f cHRyID0gc2tiLT5kYXRhICsgdGltX29mZnNldDsKKworCWlmICh0aW1fb2Zmc2V0ICYmIHRpbV9s ZW5ndGggPj0gNikgeworCQkvKiBJZ25vcmUgRFRJTSBjb3VudCBmcm9tIG1hYzgwMjExOgorCQkg KiBmaXJtd2FyZSBoYW5kbGVzIERUSU0gaW50ZXJuYWxseS4KKwkJICovCisJCXRpbV9wdHJbMl0g PSAwOworCisJCS8qIFNldC9yZXNldCBhaWQwIGJpdCAqLworCQlpZiAod2Z4X3R4X3F1ZXVlc19o YXNfY2FiKHd2aWYpKQorCQkJdGltX3B0cls0XSB8PSAxOworCQllbHNlCisJCQl0aW1fcHRyWzRd ICY9IH4xOworCX0KKworCWhpZl91cGRhdGVfaWVfYmVhY29uKHd2aWYsIHRpbV9wdHIsIHRpbV9s ZW5ndGgpOworCWRldl9rZnJlZV9za2Ioc2tiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMg dm9pZCB3ZnhfdXBkYXRlX3RpbV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlz dHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgd2Z4X3ZpZiwg dXBkYXRlX3RpbV93b3JrKTsKKworCXdmeF91cGRhdGVfdGltKHd2aWYpOworfQorCitpbnQgd2Z4 X3NldF90aW0oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpz dGEsIGJvb2wgc2V0KQoreworCXN0cnVjdCB3ZnhfZGV2ICp3ZGV2ID0gaHctPnByaXY7CisJc3Ry dWN0IHdmeF9zdGFfcHJpdiAqc3RhX2RldiA9IChzdHJ1Y3Qgd2Z4X3N0YV9wcml2ICopJnN0YS0+ ZHJ2X3ByaXY7CisJc3RydWN0IHdmeF92aWYgKnd2aWYgPSB3ZGV2X3RvX3d2aWYod2Rldiwgc3Rh X2Rldi0+dmlmX2lkKTsKKworCWlmICghd3ZpZikgeworCQlkZXZfd2Fybih3ZGV2LT5kZXYsICIl czogcmVjZWl2ZWQgZXZlbnQgZm9yIG5vbi1leGlzdGVudCB2aWZcbiIsIF9fZnVuY19fKTsKKwkJ cmV0dXJuIC1FSU87CisJfQorCXNjaGVkdWxlX3dvcmsoJnd2aWYtPnVwZGF0ZV90aW1fd29yayk7 CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4X3N1c3BlbmRfcmVzdW1lX21jKHN0cnVjdCB3Znhf dmlmICp3dmlmLCBlbnVtIHN0YV9ub3RpZnlfY21kIG5vdGlmeV9jbWQpCit7CisJaWYgKG5vdGlm eV9jbWQgIT0gU1RBX05PVElGWV9BV0FLRSkKKwkJcmV0dXJuOworCVdBUk4oIXdmeF90eF9xdWV1 ZXNfaGFzX2NhYih3dmlmKSwgImluY29ycmVjdCBzZXF1ZW5jZSIpOworCVdBUk4od3ZpZi0+YWZ0 ZXJfZHRpbV90eF9hbGxvd2VkLCAiaW5jb3JyZWN0IHNlcXVlbmNlIik7CisJd3ZpZi0+YWZ0ZXJf ZHRpbV90eF9hbGxvd2VkID0gdHJ1ZTsKKwl3ZnhfYmhfcmVxdWVzdF90eCh3dmlmLT53ZGV2KTsK K30KKworaW50IHdmeF9hbXBkdV9hY3Rpb24oc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCSAg ICAgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICBzdHJ1Y3QgaWVlZTgwMjExX2Ft cGR1X3BhcmFtcyAqcGFyYW1zKQoreworCS8vIEFnZ3JlZ2F0aW9uIGlzIGltcGxlbWVudGVkIGZ1 bGx5IGluIGZpcm13YXJlCisJc3dpdGNoIChwYXJhbXMtPmFjdGlvbikgeworCWNhc2UgSUVFRTgw MjExX0FNUERVX1JYX1NUQVJUOgorCWNhc2UgSUVFRTgwMjExX0FNUERVX1JYX1NUT1A6CisJCS8v IEp1c3QgYWNrbm93bGVkZ2UgaXQgdG8gZW5hYmxlIGZyYW1lIHJlLW9yZGVyaW5nCisJCXJldHVy biAwOworCWRlZmF1bHQ6CisJCS8vIExlYXZlIHRoZSBmaXJtd2FyZSBkb2luZyBpdHMgYnVzaW5l c3MgZm9yIHR4IGFnZ3JlZ2F0aW9uCisJCXJldHVybiAtRU5PVFNVUFA7CisJfQorfQorCitpbnQg d2Z4X2FkZF9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkgICAgc3RydWN0IGll ZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJcmV0dXJuIDA7Cit9CisKK3ZvaWQgd2Z4 X3JlbW92ZV9jaGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4 MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7Cit9CisKK3ZvaWQgd2Z4X2NoYW5nZV9jaGFuY3R4 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2Nv bmYgKmNvbmYsCisJCQl1MzIgY2hhbmdlZCkKK3sKK30KKworaW50IHdmeF9hc3NpZ25fdmlmX2No YW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYs CisJCQkgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29uZikKK3sKKwlzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisJc3RydWN0 IGllZWU4MDIxMV9jaGFubmVsICpjaCA9IGNvbmYtPmRlZi5jaGFuOworCisJV0FSTih3dmlmLT5j aGFubmVsLCAiY2hhbm5lbCBvdmVyd3JpdGUiKTsKKwl3dmlmLT5jaGFubmVsID0gY2g7CisKKwly ZXR1cm4gMDsKK30KKwordm9pZCB3ZnhfdW5hc3NpZ25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAg ICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpCit7CisJc3RydWN0IHdmeF92 aWYgKnd2aWYgPSAoc3RydWN0IHdmeF92aWYgKil2aWYtPmRydl9wcml2OworCXN0cnVjdCBpZWVl ODAyMTFfY2hhbm5lbCAqY2ggPSBjb25mLT5kZWYuY2hhbjsKKworCVdBUk4od3ZpZi0+Y2hhbm5l bCAhPSBjaCwgImNoYW5uZWwgbWlzbWF0Y2giKTsKKwl3dmlmLT5jaGFubmVsID0gTlVMTDsKK30K KworaW50IHdmeF9jb25maWcoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHUzMiBjaGFuZ2VkKQor eworCXJldHVybiAwOworfQorCitpbnQgd2Z4X2FkZF9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIx MV9odyAqaHcsIHN0cnVjdCBpZWVlODAyMTFfdmlmICp2aWYpCit7CisJaW50IGksIHJldCA9IDA7 CisJc3RydWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKwlzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiA9IChzdHJ1Y3Qgd2Z4X3ZpZiAqKXZpZi0+ZHJ2X3ByaXY7CisKKwl2aWYtPmRyaXZlcl9mbGFn cyB8PSBJRUVFODAyMTFfVklGX0JFQUNPTl9GSUxURVIgfAorCQkJICAgICBJRUVFODAyMTFfVklG X1NVUFBPUlRTX1VBUFNEIHwKKwkJCSAgICAgSUVFRTgwMjExX1ZJRl9TVVBQT1JUU19DUU1fUlNT STsKKworCW11dGV4X2xvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCisJc3dpdGNoICh2aWYtPnR5 cGUpIHsKKwljYXNlIE5MODAyMTFfSUZUWVBFX1NUQVRJT046CisJY2FzZSBOTDgwMjExX0lGVFlQ RV9BREhPQzoKKwljYXNlIE5MODAyMTFfSUZUWVBFX0FQOgorCQlicmVhazsKKwlkZWZhdWx0Ogor CQltdXRleF91bmxvY2soJndkZXYtPmNvbmZfbXV0ZXgpOworCQlyZXR1cm4gLUVPUE5PVFNVUFA7 CisJfQorCisJLy8gRklYTUU6IHByZWZlciB1c2Ugb2YgY29udGFpbmVyX29mKCkgdG8gZ2V0IHZp ZgorCXd2aWYtPnZpZiA9IHZpZjsKKwl3dmlmLT53ZGV2ID0gd2RldjsKKworCXd2aWYtPmxpbmtf aWRfbWFwID0gMTsgLy8gbGluay1pZCAwIGlzIHJlc2VydmVkIGZvciBtdWx0aWNhc3QKKwlJTklU X1dPUksoJnd2aWYtPnVwZGF0ZV90aW1fd29yaywgd2Z4X3VwZGF0ZV90aW1fd29yayk7CisJSU5J VF9ERUxBWUVEX1dPUksoJnd2aWYtPmJlYWNvbl9sb3NzX3dvcmssIHdmeF9iZWFjb25fbG9zc193 b3JrKTsKKworCWluaXRfY29tcGxldGlvbigmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUpOwor CWNvbXBsZXRlKCZ3dmlmLT5zZXRfcG1fbW9kZV9jb21wbGV0ZSk7CisJSU5JVF9XT1JLKCZ3dmlm LT50eF9wb2xpY3lfdXBsb2FkX3dvcmssIHdmeF90eF9wb2xpY3lfdXBsb2FkX3dvcmspOworCisJ bXV0ZXhfaW5pdCgmd3ZpZi0+c2Nhbl9sb2NrKTsKKwlpbml0X2NvbXBsZXRpb24oJnd2aWYtPnNj YW5fY29tcGxldGUpOworCUlOSVRfV09SSygmd3ZpZi0+c2Nhbl93b3JrLCB3ZnhfaHdfc2Nhbl93 b3JrKTsKKworCXdmeF90eF9xdWV1ZXNfaW5pdCh3dmlmKTsKKwl3ZnhfdHhfcG9saWN5X2luaXQo d3ZpZik7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3ZGV2LT52aWYpOyBpKyspIHsK KwkJaWYgKCF3ZGV2LT52aWZbaV0pIHsKKwkJCXdkZXYtPnZpZltpXSA9IHZpZjsKKwkJCXd2aWYt PmlkID0gaTsKKwkJCWJyZWFrOworCQl9CisJfQorCVdBUk4oaSA9PSBBUlJBWV9TSVpFKHdkZXYt PnZpZiksICJ0cnkgdG8gaW5zdGFudGlhdGUgbW9yZSB2aWYgdGhhbiBzdXBwb3J0ZWQiKTsKKwor CWhpZl9zZXRfbWFjYWRkcih3dmlmLCB2aWYtPmFkZHIpOworCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2 LT5jb25mX211dGV4KTsKKworCXd2aWYgPSBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRl cmF0ZSh3ZGV2LCB3dmlmKSkgIT0gTlVMTCkgeworCQkvLyBDb21ibyBtb2RlIGRvZXMgbm90IHN1 cHBvcnQgQmxvY2sgQWNrcy4gV2UgY2FuIHJlLWVuYWJsZSB0aGVtCisJCWlmICh3dmlmX2NvdW50 KHdkZXYpID09IDEpCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhG Rik7CisJCWVsc2UKKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAw KTsKKwl9CisJcmV0dXJuIHJldDsKK30KKwordm9pZCB3ZnhfcmVtb3ZlX2ludGVyZmFjZShzdHJ1 Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZikKK3sKKwlzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiA9IGh3LT5wcml2OworCXN0cnVjdCB3ZnhfdmlmICp3dmlmID0gKHN0 cnVjdCB3ZnhfdmlmICopdmlmLT5kcnZfcHJpdjsKKworCXdhaXRfZm9yX2NvbXBsZXRpb25fdGlt ZW91dCgmd3ZpZi0+c2V0X3BtX21vZGVfY29tcGxldGUsIG1zZWNzX3RvX2ppZmZpZXMoMzAwKSk7 CisJd2Z4X3R4X3F1ZXVlc19jaGVja19lbXB0eSh3dmlmKTsKKworCW11dGV4X2xvY2soJndkZXYt PmNvbmZfbXV0ZXgpOworCVdBUk4od3ZpZi0+bGlua19pZF9tYXAgIT0gMSwgImNvcnJ1cHRlZCBz dGF0ZSIpOworCisJaGlmX3Jlc2V0KHd2aWYsIGZhbHNlKTsKKwloaWZfc2V0X21hY2FkZHIod3Zp ZiwgTlVMTCk7CisJd2Z4X3R4X3BvbGljeV9pbml0KHd2aWYpOworCisJY2FuY2VsX2RlbGF5ZWRf d29ya19zeW5jKCZ3dmlmLT5iZWFjb25fbG9zc193b3JrKTsKKwl3ZGV2LT52aWZbd3ZpZi0+aWRd ID0gTlVMTDsKKwl3dmlmLT52aWYgPSBOVUxMOworCisJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5jb25m X211dGV4KTsKKworCXd2aWYgPSBOVUxMOworCXdoaWxlICgod3ZpZiA9IHd2aWZfaXRlcmF0ZSh3 ZGV2LCB3dmlmKSkgIT0gTlVMTCkgeworCQkvLyBDb21ibyBtb2RlIGRvZXMgbm90IHN1cHBvcnQg QmxvY2sgQWNrcy4gV2UgY2FuIHJlLWVuYWJsZSB0aGVtCisJCWlmICh3dmlmX2NvdW50KHdkZXYp ID09IDEpCisJCQloaWZfc2V0X2Jsb2NrX2Fja19wb2xpY3kod3ZpZiwgMHhGRiwgMHhGRik7CisJ CWVsc2UKKwkJCWhpZl9zZXRfYmxvY2tfYWNrX3BvbGljeSh3dmlmLCAweDAwLCAweDAwKTsKKwl9 Cit9CisKK2ludCB3Znhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJcmV0dXJu IDA7Cit9CisKK3ZvaWQgd2Z4X3N0b3Aoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpCit7CisJc3Ry dWN0IHdmeF9kZXYgKndkZXYgPSBody0+cHJpdjsKKworCVdBUk5fT04oIXNrYl9xdWV1ZV9lbXB0 eV9sb2NrbGVzcygmd2Rldi0+dHhfcGVuZGluZykpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9u ZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9zdGEuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFi cy93Zngvc3RhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kN2I1 ZGY1ZWE0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L3N0YS5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wLW9ubHkgKi8KKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiBtYWM4MDIxMSBBUEkuCisg KgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9yaWVzLCBJbmMu CisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8KKyNpZm5kZWYgV0ZYX1NU QV9ICisjZGVmaW5lIFdGWF9TVEFfSAorCisjaW5jbHVkZSA8bmV0L21hYzgwMjExLmg+CisKK3N0 cnVjdCB3ZnhfZGV2Oworc3RydWN0IHdmeF92aWY7CisKK3N0cnVjdCB3Znhfc3RhX3ByaXYgewor CWludCBsaW5rX2lkOworCWludCB2aWZfaWQ7Cit9OworCisvLyBtYWM4MDIxMSBpbnRlcmZhY2UK K2ludCB3Znhfc3RhcnQoc3RydWN0IGllZWU4MDIxMV9odyAqaHcpOwordm9pZCB3Znhfc3RvcChz dHJ1Y3QgaWVlZTgwMjExX2h3ICpodyk7CitpbnQgd2Z4X2NvbmZpZyhzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgdTMyIGNoYW5nZWQpOworaW50IHdmeF9zZXRfcnRzX3RocmVzaG9sZChzdHJ1Y3Qg aWVlZTgwMjExX2h3ICpodywgdTMyIHZhbHVlKTsKK3ZvaWQgd2Z4X3NldF9kZWZhdWx0X3VuaWNh c3Rfa2V5KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJCSBzdHJ1Y3QgaWVlZTgwMjExX3Zp ZiAqdmlmLCBpbnQgaWR4KTsKK3ZvaWQgd2Z4X2NvbmZpZ3VyZV9maWx0ZXIoc3RydWN0IGllZWU4 MDIxMV9odyAqaHcsIHVuc2lnbmVkIGludCBjaGFuZ2VkX2ZsYWdzLAorCQkJICB1bnNpZ25lZCBp bnQgKnRvdGFsX2ZsYWdzLCB1NjQgdW51c2VkKTsKKworaW50IHdmeF9hZGRfaW50ZXJmYWNlKHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK3ZvaWQg d2Z4X3JlbW92ZV9pbnRlcmZhY2Uoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBpZWVl ODAyMTFfdmlmICp2aWYpOworaW50IHdmeF9zdGFydF9hcChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpo dywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZik7Cit2b2lkIHdmeF9zdG9wX2FwKHN0cnVjdCBp ZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmKTsKK2ludCB3Znhfam9p bl9pYnNzKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlm KTsKK3ZvaWQgd2Z4X2xlYXZlX2lic3Moc3RydWN0IGllZWU4MDIxMV9odyAqaHcsIHN0cnVjdCBp ZWVlODAyMTFfdmlmICp2aWYpOworaW50IHdmeF9jb25mX3R4KHN0cnVjdCBpZWVlODAyMTFfaHcg Kmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQl1MTYgcXVldWUsIGNvbnN0IHN0cnVj dCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zICpwYXJhbXMpOwordm9pZCB3ZnhfYnNzX2luZm9f Y2hhbmdlZChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZp ZiwKKwkJCSAgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqaW5mbywgdTMyIGNoYW5nZWQpOwor aW50IHdmeF9zdGFfYWRkKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjEx X3ZpZiAqdmlmLAorCQlzdHJ1Y3QgaWVlZTgwMjExX3N0YSAqc3RhKTsKK2ludCB3Znhfc3RhX3Jl bW92ZShzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwK KwkJICAgc3RydWN0IGllZWU4MDIxMV9zdGEgKnN0YSk7Cit2b2lkIHdmeF9zdGFfbm90aWZ5KHN0 cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkgICAg ZW51bSBzdGFfbm90aWZ5X2NtZCBjbWQsIHN0cnVjdCBpZWVlODAyMTFfc3RhICpzdGEpOworaW50 IHdmeF9zZXRfdGltKHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3N0 YSAqc3RhLCBib29sIHNldCk7CitpbnQgd2Z4X2FtcGR1X2FjdGlvbihzdHJ1Y3QgaWVlZTgwMjEx X2h3ICpodywgc3RydWN0IGllZWU4MDIxMV92aWYgKnZpZiwKKwkJICAgICBzdHJ1Y3QgaWVlZTgw MjExX2FtcGR1X3BhcmFtcyAqcGFyYW1zKTsKK2ludCB3ZnhfYWRkX2NoYW5jdHgoc3RydWN0IGll ZWU4MDIxMV9odyAqaHcsCisJCSAgICBzdHJ1Y3QgaWVlZTgwMjExX2NoYW5jdHhfY29uZiAqY29u Zik7Cit2b2lkIHdmeF9yZW1vdmVfY2hhbmN0eChzdHJ1Y3QgaWVlZTgwMjExX2h3ICpodywKKwkJ CXN0cnVjdCBpZWVlODAyMTFfY2hhbmN0eF9jb25mICpjb25mKTsKK3ZvaWQgd2Z4X2NoYW5nZV9j aGFuY3R4KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LAorCQkJc3RydWN0IGllZWU4MDIxMV9jaGFu Y3R4X2NvbmYgKmNvbmYsIHUzMiBjaGFuZ2VkKTsKK2ludCB3ZnhfYXNzaWduX3ZpZl9jaGFuY3R4 KHN0cnVjdCBpZWVlODAyMTFfaHcgKmh3LCBzdHJ1Y3QgaWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJ ICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2NvbmYgKmNvbmYpOwordm9pZCB3ZnhfdW5hc3Np Z25fdmlmX2NoYW5jdHgoc3RydWN0IGllZWU4MDIxMV9odyAqaHcsCisJCQkgICAgICBzdHJ1Y3Qg aWVlZTgwMjExX3ZpZiAqdmlmLAorCQkJICAgICAgc3RydWN0IGllZWU4MDIxMV9jaGFuY3R4X2Nv bmYgKmNvbmYpOworCisvLyBXU00gQ2FsbGJhY2tzCit2b2lkIHdmeF9jb29saW5nX3RpbWVvdXRf d29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwordm9pZCB3Znhfc3VzcGVuZF9ob3RfZGV2 KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBlbnVtIHN0YV9ub3RpZnlfY21kIGNtZCk7Cit2b2lkIHdm eF9zdXNwZW5kX3Jlc3VtZV9tYyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgZW51bSBzdGFfbm90aWZ5 X2NtZCBjbWQpOwordm9pZCB3ZnhfZXZlbnRfcmVwb3J0X3Jzc2koc3RydWN0IHdmeF92aWYgKnd2 aWYsIHU4IHJhd19yY3BpX3Jzc2kpOworaW50IHdmeF91cGRhdGVfcG0oc3RydWN0IHdmeF92aWYg Knd2aWYpOworCisvLyBPdGhlciBIZWxwZXJzCit2b2lkIHdmeF9yZXNldChzdHJ1Y3Qgd2Z4X3Zp ZiAqd3ZpZik7Cit1MzIgd2Z4X3JhdGVfbWFza190b19odyhzdHJ1Y3Qgd2Z4X2RldiAqd2Rldiwg dTMyIHJhdGVzKTsKKworI2VuZGlmIC8qIFdGWF9TVEFfSCAqLwotLSAKMi4yOC4wCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkZXZlbCBtYWlsaW5nIGxp c3QKZGV2ZWxAbGludXhkcml2ZXJwcm9qZWN0Lm9yZwpodHRwOi8vZHJpdmVyZGV2LmxpbnV4ZHJp dmVycHJvamVjdC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcml2ZXJkZXYtZGV2ZWwK