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=-16.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, 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 A126FC433FE for ; Mon, 20 Sep 2021 16:13:16 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 86EF060F70 for ; Mon, 20 Sep 2021 16:13:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242886AbhITQOj (ORCPT ); Mon, 20 Sep 2021 12:14:39 -0400 Received: from mail-dm6nam11on2076.outbound.protection.outlook.com ([40.107.223.76]:21537 "EHLO NAM11-DM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S242950AbhITQOK (ORCPT ); Mon, 20 Sep 2021 12:14:10 -0400 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=KVg8mZlDXS0nhPCEQBZQCFYR4z3YqkCl1D1ITi/BCdRW60KKqbeet2BnB6/VbmPjBERd1OHbWNmYsjNM3vgQxSfu9LPPZ8CHlDFO2YUZEbmRk0kc3JPkjCD999BrDZSUiuSJ37s8v841gJ3uiC93rMvkYcI0FpmqOpEwrDqp//h5X9/G57WDoV0HP5i5SFe92oEe3dd/vusB887YD/CAXIKe/96+zjB5pK6P++ZcmqiC4pAUn3WEgSFaDpjCyY7CVsZIh7SL5xXbt+pCMKad5nF+1h6Owza9exstFusxU85Z7QyI2vsrw4lVJzJyHyiaAFD9v98Hku/wI41C9Wpnig== 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; bh=JoF8rd7pOcuK4trIqHcnLJlpHT7+vJdshQrnJJlm26k=; b=VoRbxskgHqOl5dXTWBgYx69B+RjP9UuA2qQPkCh3sO9Q/1Rwwz0ziRWQZ0JGhUKyXQHbzACwQBzxeTXjZXzJSlJKtgmts+KcGqDDssFH8I8StQy3YSN1x7+12iE6L1VGERPwemoZdITWIFyY/JpCUs0khk7v7CSXqJ6xhrPbjx5YgfZy5AFmGh1NUWXK4GhgMqsy9xZMwLCLeeptmZZrvgWD/dYHJSc9p6+0PwGBTypX0kyQc4CvfXasDDJtZP9eOiLp+si5MLS9F4h8FK4/2h4rexdTTP2CoazVPvgVV7osfYb3xzz9v5DFDMwviUBCDPkxbNztu9l3MHKkkHvPtw== 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=JoF8rd7pOcuK4trIqHcnLJlpHT7+vJdshQrnJJlm26k=; b=QnuStiXniHQDmFfmSbPqBgg5zGSTc+yMLaDN9wsFJNb7Ikh09Mvb3FD+okZasUWxOqrx4jg59OIAz3+oHocIcL4S0PsfBw2Ecv+8hL7n7PTILterXKdPoB60vaPmirR+zq+o1BobStCylwE45EHbzq9QxPJuhD44XeUezb4SJz8= 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 SN6PR11MB2557.namprd11.prod.outlook.com (2603:10b6:805:56::33) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14; Mon, 20 Sep 2021 16:12:25 +0000 Received: from SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd]) by SN6PR11MB2718.namprd11.prod.outlook.com ([fe80::7050:a0a:415:2ccd%7]) with mapi id 15.20.4523.018; Mon, 20 Sep 2021 16:12:25 +0000 From: Jerome Pouiller To: linux-wireless@vger.kernel.org, netdev@vger.kernel.org, Kalle Valo Cc: devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "David S . Miller" , devicetree@vger.kernel.org, Rob Herring , linux-mmc@vger.kernel.org, =?UTF-8?q?Pali=20Roh=C3=A1r?= , Ulf Hansson , =?UTF-8?q?J=C3=A9r=C3=B4me=20Pouiller?= Subject: [PATCH v7 13/24] wfx: add hif_tx*.c/hif_tx*.h Date: Mon, 20 Sep 2021 18:11:25 +0200 Message-Id: <20210920161136.2398632-14-Jerome.Pouiller@silabs.com> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210920161136.2398632-1-Jerome.Pouiller@silabs.com> References: <20210920161136.2398632-1-Jerome.Pouiller@silabs.com> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 X-ClientProxiedBy: SA0PR11CA0064.namprd11.prod.outlook.com (2603:10b6:806:d2::9) To SN6PR11MB2718.namprd11.prod.outlook.com (2603:10b6:805:63::18) MIME-Version: 1.0 Received: from pc-42.silabs.com (2a01:e34:ecb5:66a0:9876:e1d7:65be:d294) by SA0PR11CA0064.namprd11.prod.outlook.com (2603:10b6:806:d2::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4523.14 via Frontend Transport; Mon, 20 Sep 2021 16:12:23 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a9e9a57a-6566-40c8-fbcd-08d97c516f60 X-MS-TrafficTypeDiagnostic: SN6PR11MB2557: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:21; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: kEW7pkqDpFgK9wqfkt1rBtnmckSe/noz9WUcPi7EYwOJJ7KOzeW/ISJQsOraMSZNr7+kmVPcV25LhNmZjZzH0n+aX6topMl6FfF/s2kA5KjCYINi9ZKxoHc9OXYyo0ZQ7xMFzaHc53ZhXSvHTw3fkdSUYttaUW1bzW/WmBc7Hn0Fo1HBH548hfh/8PIu3+jtFYenjV6xH2bhHa/hYbSFCc5UiwvRKA41bbfq6mbpf0tENL6V0DF8mrRca5kAWdiKReRfpEBuYg9QdzUfJzMOFUJ5vVumkPbcslJ8gM/mIhRTiRAuLxJKyigs5iLrcTNFD9/I1gAJK6xlIKVI3DT3BIPHmACtNXHUWvcBFXqfjtu36uTI9OMAPcaRN1RD50p1BfZDKGr9vw+XcWWBFQCB8Gmpp2we+E/MsPzqtyVuVCmGyFSvf4CAThp6qhNYohsZ8cG58XcQ7L0ame1/r7AbStQojieHYIb0Qd6kSv/sDWgQqqKwiNJx3GF65jGPnaI7v1ksZkToMt8q/Ov0S06vMbEmhtaZyBTVRvr6/TDR59IAoM3mveCeF3H2XoNQMBCFSiLx3U1VaXD9bSWNdkVykn9/WBdxXWKMK/WqDj7ricoGZ2EOyvDj3wm4v6qsNhQcq9ffEJPwO05AexKKQWYkAQ== 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)(136003)(346002)(366004)(376002)(2906002)(30864003)(1076003)(8936002)(54906003)(38100700002)(86362001)(6486002)(36756003)(66574015)(478600001)(5660300002)(7416002)(6916009)(186003)(66476007)(2616005)(7696005)(8676002)(52116002)(66556008)(66946007)(4326008)(316002)(107886003)(83380400001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: imHCePSTQXDHIDVVv8LXkNJFvzXS7NIofseugW+kW/ZAbUb0hC4Tw2lXM6pOb4HJU8sYCcKBva1SFc7GTdao/MzsufFRg0Zck03wCiXTJ4lPjsO3CkSD7xYRhUrbbcWTOYC1f5J+kS7AEMTb1aEVLwodiV+4InvNszYBl6d8MNfJZRUezX3zAO2tozNDavb3l+ITEtGTZopv5s4c4B30JxGTYvI68tBLfE//1D0aI01iRhzoI0G1m1AQOwOeQj2N6dtaUfIC5VLkuw1iq/APOlgquvWb+wWfyciyBrgxGc/YqMEQ8FyQ+4ecy+Zd/1m4bFnm1uN01egd0wjby4Lo3DFkrNQlhF50s3ai9c2wsVEa2Xd847RqE0SZtvpqFOwAlRrW4iQchezgQCbEtfd9BvRe1khoKBMDSkJ7IaNIvzVjLsJs3Tm0Vp2c6VXIuSppvr6VYimLS0E1J2BZ/7NtMrBe6IC4qCmBGuXpsffDqUs/GJYJEXUzFgiB/fUtmW+58IygzdEJPp4fE8m6Oyq6nE97KD3nYaKMMgOJAvG5IacreeoZA3n4Vokki+DHgk4QUSxvsZhVERdOP2wuZLy5hzGYbISFY3TAXLYbW+N9e17kR7jWPnd6RB0jVqZs90weLIeILmah2+siHv4DLH5FN9FxRAFa5l7Whm3ILpMMH4x6/iwvaMzzYzMu5l2tKPUyzQUlG1y8s9wNjW4UUMjahVYRF11OhPGY9WBajrcYP2NB+ZOBoU4HPyco0VS62BFIa1VCL6mUy+Uha99R7MMZjtTK7+A5wbnwKOqd/A7el6vzPdG9W9XzDOmIy8D/S6kk X-OriginatorOrg: silabs.com X-MS-Exchange-CrossTenant-Network-Message-Id: a9e9a57a-6566-40c8-fbcd-08d97c516f60 X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB2718.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Sep 2021 16:12:25.6205 (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: AK3IpymSuJrKvrrrhzU9sa3HvjdtQ0Ow0iFOOv7YOUFgQET0EPS21HMhh+E0Lxrrp8WB9ystGobGJGClxC67Vg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2557 Precedence: bulk List-ID: X-Mailing-List: linux-mmc@vger.kernel.org RnJvbTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29tPgoKU2ln bmVkLW9mZi1ieTogSsOpcsO0bWUgUG91aWxsZXIgPGplcm9tZS5wb3VpbGxlckBzaWxhYnMuY29t PgotLS0KIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgICAgIHwgNTE0 ICsrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlm X3R4LmggICAgIHwgIDYwICsrKwogZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9oaWZf dHhfbWliLmMgfCAzMjQgKysrKysrKysrKysrCiBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eF9taWIuaCB8ICA0OSArKwogNCBmaWxlcyBjaGFuZ2VkLCA5NDcgaW5zZXJ0aW9u cygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93Zngv aGlmX3R4LmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2ls YWJzL3dmeC9oaWZfdHhfbWliLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaAoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dp cmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMv d2Z4L2hpZl90eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uZDM5 MzY2YzE3MWJhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9oaWZfdHguYwpAQCAtMCwwICsxLDUxNCBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjAtb25seQorLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRoZSBob3N0LXRvLWNo aXAgY29tbWFuZHMgKGFrYSByZXF1ZXN0L2NvbmZpcm1hdGlvbikgb2YgdGhlCisgKiBoYXJkd2Fy ZSBBUEkuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAsIFNpbGljb24gTGFib3JhdG9y aWVzLCBJbmMuCisgKiBDb3B5cmlnaHQgKGMpIDIwMTAsIFNULUVyaWNzc29uCisgKi8KKyNpbmNs dWRlIDxsaW51eC9ldGhlcmRldmljZS5oPgorCisjaW5jbHVkZSAiaGlmX3R4LmgiCisjaW5jbHVk ZSAid2Z4LmgiCisjaW5jbHVkZSAiYmguaCIKKyNpbmNsdWRlICJod2lvLmgiCisjaW5jbHVkZSAi ZGVidWcuaCIKKyNpbmNsdWRlICJzdGEuaCIKKwordm9pZCB3ZnhfaW5pdF9oaWZfY21kKHN0cnVj dCB3ZnhfaGlmX2NtZCAqaGlmX2NtZCkKK3sKKwlpbml0X2NvbXBsZXRpb24oJmhpZl9jbWQtPnJl YWR5KTsKKwlpbml0X2NvbXBsZXRpb24oJmhpZl9jbWQtPmRvbmUpOworCW11dGV4X2luaXQoJmhp Zl9jbWQtPmxvY2spOworfQorCitzdGF0aWMgdm9pZCB3ZnhfZmlsbF9oZWFkZXIoc3RydWN0IGhp Zl9tc2cgKmhpZiwgaW50IGlmX2lkLAorCQkJICAgIHVuc2lnbmVkIGludCBjbWQsIHNpemVfdCBz aXplKQoreworCWlmIChpZl9pZCA9PSAtMSkKKwkJaWZfaWQgPSAyOworCisJV0FSTihjbWQgPiAw eDNmLCAiaW52YWxpZCBoYXJkd2FyZSBjb21tYW5kICUjLjJ4IiwgY21kKTsKKwlXQVJOKHNpemUg PiAweEZGRiwgInJlcXVlc3RlZCBidWZmZXIgaXMgdG9vIGxhcmdlOiAlenUgYnl0ZXMiLCBzaXpl KTsKKwlXQVJOKGlmX2lkID4gMHgzLCAiaW52YWxpZCBpbnRlcmZhY2UgSUQgJWQiLCBpZl9pZCk7 CisKKwloaWYtPmxlbiA9IGNwdV90b19sZTE2KHNpemUgKyA0KTsKKwloaWYtPmlkID0gY21kOwor CWhpZi0+aW50ZXJmYWNlID0gaWZfaWQ7Cit9CisKK3N0YXRpYyB2b2lkICp3ZnhfYWxsb2NfaGlm KHNpemVfdCBib2R5X2xlbiwgc3RydWN0IGhpZl9tc2cgKipoaWYpCit7CisJKmhpZiA9IGt6YWxs b2Moc2l6ZW9mKHN0cnVjdCBoaWZfbXNnKSArIGJvZHlfbGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAo KmhpZikKKwkJcmV0dXJuICgqaGlmKS0+Ym9keTsKKwllbHNlCisJCXJldHVybiBOVUxMOworfQor CitpbnQgd2Z4X2NtZF9zZW5kKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBzdHJ1Y3QgaGlmX21zZyAq cmVxdWVzdCwKKwkJIHZvaWQgKnJlcGx5LCBzaXplX3QgcmVwbHlfbGVuLCBib29sIG5vX3JlcGx5 KQoreworCWNvbnN0IGNoYXIgKm1pYl9uYW1lID0gIiI7CisJY29uc3QgY2hhciAqbWliX3NlcCA9 ICIiOworCWludCBjbWQgPSByZXF1ZXN0LT5pZDsKKwlpbnQgdmlmID0gcmVxdWVzdC0+aW50ZXJm YWNlOworCWludCByZXQ7CisKKwkvKiBEbyBub3Qgd2FpdCBmb3IgYW55IHJlcGx5IGlmIGNoaXAg aXMgZnJvemVuICovCisJaWYgKHdkZXYtPmNoaXBfZnJvemVuKQorCQlyZXR1cm4gLUVUSU1FRE9V VDsKKworCW11dGV4X2xvY2soJndkZXYtPmhpZl9jbWQubG9jayk7CisJV0FSTih3ZGV2LT5oaWZf Y21kLmJ1Zl9zZW5kLCAiZGF0YSBsb2NraW5nIGVycm9yIik7CisKKwkvKiBOb3RlOiBjYWxsIHRv IGNvbXBsZXRlKCkgYmVsb3cgaGFzIGFuIGltcGxpY2l0IG1lbW9yeSBiYXJyaWVyIHRoYXQKKwkg KiBob3BlZnVsbHkgcHJvdGVjdCBidWZfc2VuZAorCSAqLworCXdkZXYtPmhpZl9jbWQuYnVmX3Nl bmQgPSByZXF1ZXN0OworCXdkZXYtPmhpZl9jbWQuYnVmX3JlY3YgPSByZXBseTsKKwl3ZGV2LT5o aWZfY21kLmxlbl9yZWN2ID0gcmVwbHlfbGVuOworCWNvbXBsZXRlKCZ3ZGV2LT5oaWZfY21kLnJl YWR5KTsKKworCXdmeF9iaF9yZXF1ZXN0X3R4KHdkZXYpOworCisJaWYgKG5vX3JlcGx5KSB7CisJ CS8qIENoaXAgd29uJ3QgcmVwbHkuIEdpdmUgZW5vdWdoIHRpbWUgdG8gdGhlIHdxIHRvIHNlbmQg dGhlCisJCSAqIGJ1ZmZlci4KKwkJICovCisJCW1zbGVlcCgxMDApOworCQl3ZGV2LT5oaWZfY21k LmJ1Zl9zZW5kID0gTlVMTDsKKwkJbXV0ZXhfdW5sb2NrKCZ3ZGV2LT5oaWZfY21kLmxvY2spOwor CQlyZXR1cm4gMDsKKwl9CisKKwlpZiAod2Rldi0+cG9sbF9pcnEpCisJCXdmeF9iaF9wb2xsX2ly cSh3ZGV2KTsKKworCXJldCA9IHdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmd2Rldi0+aGlm X2NtZC5kb25lLCAxICogSFopOworCWlmICghcmV0KSB7CisJCWRldl9lcnIod2Rldi0+ZGV2LCAi Y2hpcCBpcyBhYm5vcm1hbGx5IGxvbmcgdG8gYW5zd2VyXG4iKTsKKwkJcmVpbml0X2NvbXBsZXRp b24oJndkZXYtPmhpZl9jbWQucmVhZHkpOworCQlyZXQgPSB3YWl0X2Zvcl9jb21wbGV0aW9uX3Rp bWVvdXQoJndkZXYtPmhpZl9jbWQuZG9uZSwgMyAqIEhaKTsKKwl9CisJaWYgKCFyZXQpIHsKKwkJ ZGV2X2Vycih3ZGV2LT5kZXYsICJjaGlwIGRpZCBub3QgYW5zd2VyXG4iKTsKKwkJd2Z4X3BlbmRp bmdfZHVtcF9vbGRfZnJhbWVzKHdkZXYsIDMwMDApOworCQl3ZGV2LT5jaGlwX2Zyb3plbiA9IHRy dWU7CisJCXJlaW5pdF9jb21wbGV0aW9uKCZ3ZGV2LT5oaWZfY21kLmRvbmUpOworCQlyZXQgPSAt RVRJTUVET1VUOworCX0gZWxzZSB7CisJCXJldCA9IHdkZXYtPmhpZl9jbWQucmV0OworCX0KKwor CXdkZXYtPmhpZl9jbWQuYnVmX3NlbmQgPSBOVUxMOworCW11dGV4X3VubG9jaygmd2Rldi0+aGlm X2NtZC5sb2NrKTsKKworCWlmIChyZXQgJiYKKwkgICAgKGNtZCA9PSBISUZfUkVRX0lEX1JFQURf TUlCIHx8IGNtZCA9PSBISUZfUkVRX0lEX1dSSVRFX01JQikpIHsKKwkJbWliX25hbWUgPSBnZXRf bWliX25hbWUoKCh1MTYgKilyZXF1ZXN0KVsyXSk7CisJCW1pYl9zZXAgPSAiLyI7CisJfQorCWlm IChyZXQgPCAwKQorCQlkZXZfZXJyKHdkZXYtPmRldiwgImhhcmR3YXJlIHJlcXVlc3QgJXMlcyVz ICglIy4yeCkgb24gdmlmICVkIHJldHVybmVkIGVycm9yICVkXG4iLAorCQkJZ2V0X2hpZl9uYW1l KGNtZCksIG1pYl9zZXAsIG1pYl9uYW1lLCBjbWQsIHZpZiwgcmV0KTsKKwlpZiAocmV0ID4gMCkK KwkJZGV2X3dhcm4od2Rldi0+ZGV2LCAiaGFyZHdhcmUgcmVxdWVzdCAlcyVzJXMgKCUjLjJ4KSBv biB2aWYgJWQgcmV0dXJuZWQgc3RhdHVzICVkXG4iLAorCQkJIGdldF9oaWZfbmFtZShjbWQpLCBt aWJfc2VwLCBtaWJfbmFtZSwgY21kLCB2aWYsIHJldCk7CisKKwlyZXR1cm4gcmV0OworfQorCisv KiBUaGlzIGZ1bmN0aW9uIGlzIHNwZWNpYWwuIEFmdGVyIEhJRl9SRVFfSURfU0hVVF9ET1dOLCBj aGlwIHdvbid0IHJlcGx5IHRvIGFueQorICogcmVxdWVzdCBhbnltb3JlLiBPYnZpb3VzbHksIG9u bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIGR1cmluZyBkZXZpY2UgdW5yZWdpc3Rlci4KKyAqLworaW50 IGhpZl9zaHV0ZG93bihzdHJ1Y3Qgd2Z4X2RldiAqd2RldikKK3sKKwlpbnQgcmV0OworCXN0cnVj dCBoaWZfbXNnICpoaWY7CisKKwl3ZnhfYWxsb2NfaGlmKDAsICZoaWYpOworCWlmICghaGlmKQor CQlyZXR1cm4gLUVOT01FTTsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9T SFVUX0RPV04sIDApOworCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5VTEwsIDAsIHRy dWUpOworCWlmICh3ZGV2LT5wZGF0YS5ncGlvX3dha2V1cCkKKwkJZ3Bpb2Rfc2V0X3ZhbHVlKHdk ZXYtPnBkYXRhLmdwaW9fd2FrZXVwLCAwKTsKKwllbHNlCisJCWNvbnRyb2xfcmVnX3dyaXRlKHdk ZXYsIDApOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9jb25maWd1 cmF0aW9uKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCB1OCAqY29uZiwgc2l6ZV90IGxlbikK K3sKKwlpbnQgcmV0OworCXNpemVfdCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBoaWZfcmVxX2Nv bmZpZ3VyYXRpb24pICsgbGVuOworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0IGhpZl9y ZXFfY29uZmlndXJhdGlvbiAqYm9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhpZik7CisK KwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJYm9keS0+bGVuZ3RoID0gY3B1X3RvX2xl MTYobGVuKTsKKwltZW1jcHkoYm9keS0+cGRzX2RhdGEsIGNvbmYsIGxlbik7CisJd2Z4X2ZpbGxf aGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFfSURfQ09ORklHVVJBVElPTiwgYnVmX2xlbik7CisJcmV0 ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7 CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg Ym9vbCByZXNldF9zdGF0KQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlz dHJ1Y3QgaGlmX3JlcV9yZXNldCAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwg JmhpZik7CisKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJYm9keS0+cmVzZXRfc3Rh dCA9IHJlc2V0X3N0YXQ7CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFf SURfUkVTRVQsIHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2 LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisK K2ludCBoaWZfcmVhZF9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsIHUxNiBt aWJfaWQsCisJCSB2b2lkICp2YWwsIHNpemVfdCB2YWxfbGVuKQoreworCWludCByZXQ7CisJc3Ry dWN0IGhpZl9tc2cgKmhpZjsKKwlpbnQgYnVmX2xlbiA9IHNpemVvZihzdHJ1Y3QgaGlmX2NuZl9y ZWFkX21pYikgKyB2YWxfbGVuOworCXN0cnVjdCBoaWZfcmVxX3JlYWRfbWliICpib2R5ID0gd2Z4 X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKwlzdHJ1Y3QgaGlmX2NuZl9yZWFkX21p YiAqcmVwbHkgPSBrbWFsbG9jKGJ1Zl9sZW4sIEdGUF9LRVJORUwpOworCisJaWYgKCFib2R5IHx8 ICFyZXBseSkgeworCQlyZXQgPSAtRU5PTUVNOworCQlnb3RvIG91dDsKKwl9CisJYm9keS0+bWli X2lkID0gY3B1X3RvX2xlMTYobWliX2lkKTsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB2aWZfaWQs IEhJRl9SRVFfSURfUkVBRF9NSUIsIHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2Vu ZCh3ZGV2LCBoaWYsIHJlcGx5LCBidWZfbGVuLCBmYWxzZSk7CisKKwlpZiAoIXJldCAmJiBtaWJf aWQgIT0gbGUxNl90b19jcHUocmVwbHktPm1pYl9pZCkpIHsKKwkJZGV2X3dhcm4od2Rldi0+ZGV2 LCAiJXM6IGNvbmZpcm1hdGlvbiBtaXNtYXRjaCByZXF1ZXN0XG4iLAorCQkJIF9fZnVuY19fKTsK KwkJcmV0ID0gLUVJTzsKKwl9CisJaWYgKHJldCA9PSAtRU5PTUVNKQorCQlkZXZfZXJyKHdkZXYt PmRldiwgImJ1ZmZlciBpcyB0b28gc21hbGwgdG8gcmVjZWl2ZSAlcyAoJXp1IDwgJWQpXG4iLAor CQkJZ2V0X21pYl9uYW1lKG1pYl9pZCksIHZhbF9sZW4sCisJCQlsZTE2X3RvX2NwdShyZXBseS0+ bGVuZ3RoKSk7CisJaWYgKCFyZXQpCisJCW1lbWNweSh2YWwsICZyZXBseS0+bWliX2RhdGEsIGxl MTZfdG9fY3B1KHJlcGx5LT5sZW5ndGgpKTsKKwllbHNlCisJCW1lbXNldCh2YWwsIDB4RkYsIHZh bF9sZW4pOworb3V0OgorCWtmcmVlKGhpZik7CisJa2ZyZWUocmVwbHkpOworCXJldHVybiByZXQ7 Cit9CisKK2ludCBoaWZfd3JpdGVfbWliKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgdmlmX2lk LCB1MTYgbWliX2lkLAorCQkgIHZvaWQgKnZhbCwgc2l6ZV90IHZhbF9sZW4pCit7CisJaW50IHJl dDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCWludCBidWZfbGVuID0gc2l6ZW9mKHN0cnVjdCBo aWZfcmVxX3dyaXRlX21pYikgKyB2YWxfbGVuOworCXN0cnVjdCBoaWZfcmVxX3dyaXRlX21pYiAq Ym9keSA9IHdmeF9hbGxvY19oaWYoYnVmX2xlbiwgJmhpZik7CisKKwlpZiAoIWhpZikKKwkJcmV0 dXJuIC1FTk9NRU07CisJYm9keS0+bWliX2lkID0gY3B1X3RvX2xlMTYobWliX2lkKTsKKwlib2R5 LT5sZW5ndGggPSBjcHVfdG9fbGUxNih2YWxfbGVuKTsKKwltZW1jcHkoJmJvZHktPm1pYl9kYXRh LCB2YWwsIHZhbF9sZW4pOworCXdmeF9maWxsX2hlYWRlcihoaWYsIHZpZl9pZCwgSElGX1JFUV9J RF9XUklURV9NSUIsIGJ1Zl9sZW4pOworCXJldCA9IHdmeF9jbWRfc2VuZCh3ZGV2LCBoaWYsIE5V TEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBoaWZf c2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgc3RydWN0IGNmZzgwMjExX3NjYW5fcmVxdWVzdCAq cmVxLAorCSAgICAgaW50IGNoYW5fc3RhcnRfaWR4LCBpbnQgY2hhbl9udW0pCit7CisJaW50IHJl dCwgaTsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCXNpemVfdCBidWZfbGVuID0KKwkJc2l6ZW9m KHN0cnVjdCBoaWZfcmVxX3N0YXJ0X3NjYW5fYWx0KSArIGNoYW5fbnVtICogc2l6ZW9mKHU4KTsK KwlzdHJ1Y3QgaGlmX3JlcV9zdGFydF9zY2FuX2FsdCAqYm9keSA9IHdmeF9hbGxvY19oaWYoYnVm X2xlbiwgJmhpZik7CisKKwlXQVJOKGNoYW5fbnVtID4gSElGX0FQSV9NQVhfTkJfQ0hBTk5FTFMs ICJpbnZhbGlkIHBhcmFtcyIpOworCVdBUk4ocmVxLT5uX3NzaWRzID4gSElGX0FQSV9NQVhfTkJf U1NJRFMsICJpbnZhbGlkIHBhcmFtcyIpOworCisJaWYgKCFoaWYpCisJCXJldHVybiAtRU5PTUVN OworCWZvciAoaSA9IDA7IGkgPCByZXEtPm5fc3NpZHM7IGkrKykgeworCQltZW1jcHkoYm9keS0+ c3NpZF9kZWZbaV0uc3NpZCwgcmVxLT5zc2lkc1tpXS5zc2lkLAorCQkgICAgICAgSUVFRTgwMjEx X01BWF9TU0lEX0xFTik7CisJCWJvZHktPnNzaWRfZGVmW2ldLnNzaWRfbGVuZ3RoID0KKwkJCWNw dV90b19sZTMyKHJlcS0+c3NpZHNbaV0uc3NpZF9sZW4pOworCX0KKwlib2R5LT5udW1fb2Zfc3Np ZHMgPSBISUZfQVBJX01BWF9OQl9TU0lEUzsKKwlib2R5LT5tYWludGFpbl9jdXJyZW50X2JzcyA9 IDE7CisJYm9keS0+ZGlzYWxsb3dfcHMgPSAxOworCWJvZHktPnR4X3Bvd2VyX2xldmVsID0KKwkJ Y3B1X3RvX2xlMzIocmVxLT5jaGFubmVsc1tjaGFuX3N0YXJ0X2lkeF0tPm1heF9wb3dlcik7CisJ Ym9keS0+bnVtX29mX2NoYW5uZWxzID0gY2hhbl9udW07CisJZm9yIChpID0gMDsgaSA8IGNoYW5f bnVtOyBpKyspCisJCWJvZHktPmNoYW5uZWxfbGlzdFtpXSA9CisJCQlyZXEtPmNoYW5uZWxzW2kg KyBjaGFuX3N0YXJ0X2lkeF0tPmh3X3ZhbHVlOworCWlmIChyZXEtPm5vX2NjaykKKwkJYm9keS0+ bWF4X3RyYW5zbWl0X3JhdGUgPSBBUElfUkFURV9JTkRFWF9HXzZNQlBTOworCWVsc2UKKwkJYm9k eS0+bWF4X3RyYW5zbWl0X3JhdGUgPSBBUElfUkFURV9JTkRFWF9CXzFNQlBTOworCWlmIChyZXEt PmNoYW5uZWxzW2NoYW5fc3RhcnRfaWR4XS0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JUikg eworCQlib2R5LT5taW5fY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMzIoNTApOworCQlib2R5LT5t YXhfY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMzIoMTUwKTsKKwl9IGVsc2UgeworCQlib2R5LT5t aW5fY2hhbm5lbF90aW1lID0gY3B1X3RvX2xlMzIoMTApOworCQlib2R5LT5tYXhfY2hhbm5lbF90 aW1lID0gY3B1X3RvX2xlMzIoNTApOworCQlib2R5LT5udW1fb2ZfcHJvYmVfcmVxdWVzdHMgPSAy OworCQlib2R5LT5wcm9iZV9kZWxheSA9IDEwMDsKKwl9CisKKwl3ZnhfZmlsbF9oZWFkZXIoaGlm LCB3dmlmLT5pZCwgSElGX1JFUV9JRF9TVEFSVF9TQ0FOLCBidWZfbGVuKTsKKwlyZXQgPSB3Znhf Y21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsK KwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX3N0b3Bfc2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJLyogYm9keSBhc3NvY2lh dGVkIHRvIEhJRl9SRVFfSURfU1RPUF9TQ0FOIGlzIGVtcHR5ICovCisJd2Z4X2FsbG9jX2hpZigw LCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwl3ZnhfZmlsbF9oZWFk ZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9TVE9QX1NDQU4sIDApOworCXJldCA9IHdmeF9j bWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOwor CXJldHVybiByZXQ7Cit9CisKK2ludCBoaWZfam9pbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgY29u c3Qgc3RydWN0IGllZWU4MDIxMV9ic3NfY29uZiAqY29uZiwKKwkgICAgIHN0cnVjdCBpZWVlODAy MTFfY2hhbm5lbCAqY2hhbm5lbCwgY29uc3QgdTggKnNzaWQsIGludCBzc2lkbGVuKQoreworCWlu dCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzdHJ1Y3QgaGlmX3JlcV9qb2luICpib2R5 ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCVdBUk5fT04oIWNvbmYt PmJlYWNvbl9pbnQpOworCVdBUk5fT04oIWNvbmYtPmJhc2ljX3JhdGVzKTsKKwlXQVJOX09OKCFj aGFubmVsKTsKKwlXQVJOX09OKHNpemVvZihib2R5LT5zc2lkKSA8IHNzaWRsZW4pOworCVdBUk4o IWNvbmYtPmlic3Nfam9pbmVkICYmICFzc2lkbGVuLCAiam9pbmluZyBhbiB1bmtub3duIEJTUyIp OworCWlmICghaGlmKQorCQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5pbmZyYXN0cnVjdHVyZV9i c3NfbW9kZSA9ICFjb25mLT5pYnNzX2pvaW5lZDsKKwlib2R5LT5zaG9ydF9wcmVhbWJsZSA9IGNv bmYtPnVzZV9zaG9ydF9wcmVhbWJsZTsKKwlib2R5LT5wcm9iZV9mb3Jfam9pbiA9ICEoY2hhbm5l bC0+ZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9OT19JUik7CisJYm9keS0+Y2hhbm5lbF9udW1iZXIg PSBjaGFubmVsLT5od192YWx1ZTsKKwlib2R5LT5iZWFjb25faW50ZXJ2YWwgPSBjcHVfdG9fbGUz Mihjb25mLT5iZWFjb25faW50KTsKKwlib2R5LT5iYXNpY19yYXRlX3NldCA9CisJCWNwdV90b19s ZTMyKHdmeF9yYXRlX21hc2tfdG9faHcod3ZpZi0+d2RldiwgY29uZi0+YmFzaWNfcmF0ZXMpKTsK KwltZW1jcHkoYm9keS0+YnNzaWQsIGNvbmYtPmJzc2lkLCBzaXplb2YoYm9keS0+YnNzaWQpKTsK KwlpZiAoc3NpZCkgeworCQlib2R5LT5zc2lkX2xlbmd0aCA9IGNwdV90b19sZTMyKHNzaWRsZW4p OworCQltZW1jcHkoYm9keS0+c3NpZCwgc3NpZCwgc3NpZGxlbik7CisJfQorCXdmeF9maWxsX2hl YWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX0pPSU4sIHNpemVvZigqYm9keSkpOworCXJl dCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJl ZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBoaWZfc2V0X2Jzc19wYXJhbXMoc3RydWN0 IHdmeF92aWYgKnd2aWYsIGludCBhaWQsIGludCBiZWFjb25fbG9zdF9jb3VudCkKK3sKKwlpbnQg cmV0OworCXN0cnVjdCBoaWZfbXNnICpoaWY7CisJc3RydWN0IGhpZl9yZXFfc2V0X2Jzc19wYXJh bXMgKmJvZHkgPQorCQl3ZnhfYWxsb2NfaGlmKHNpemVvZigqYm9keSksICZoaWYpOworCisJaWYg KCFoaWYpCisJCXJldHVybiAtRU5PTUVNOworCWJvZHktPmFpZCA9IGNwdV90b19sZTE2KGFpZCk7 CisJYm9keS0+YmVhY29uX2xvc3RfY291bnQgPSBiZWFjb25fbG9zdF9jb3VudDsKKwl3ZnhfZmls bF9oZWFkZXIoaGlmLCB3dmlmLT5pZCwgSElGX1JFUV9JRF9TRVRfQlNTX1BBUkFNUywKKwkJCXNp emVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYsIE5VTEws IDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBoaWZfYWRk X2tleShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3Qgc3RydWN0IGhpZl9yZXFfYWRkX2tleSAq YXJnKQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwkvKiBGSVhNRTogb25s eSBzZW5kIG5lY2Vzc2FyeSBiaXRzICovCisJc3RydWN0IGhpZl9yZXFfYWRkX2tleSAqYm9keSA9 IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7CisKKwlpZiAoIWhpZikKKwkJcmV0 dXJuIC1FTk9NRU07CisJLyogRklYTUU6IHN3YXAgYnl0ZXMgYXMgbmVjZXNzYXJ5IGluIGJvZHkg Ki8KKwltZW1jcHkoYm9keSwgYXJnLCBzaXplb2YoKmJvZHkpKTsKKwlpZiAod2Z4X2FwaV9vbGRl cl90aGFuKHdkZXYsIDEsIDUpKQorCQkvKiBMZWdhY3kgZmlybXdhcmVzIGV4cGVjdCB0aGF0IGFk ZF9rZXkgdG8gYmUgc2VudCBvbiByaWdodAorCQkgKiBpbnRlcmZhY2UuCisJCSAqLworCQl3Znhf ZmlsbF9oZWFkZXIoaGlmLCBhcmctPmludF9pZCwgSElGX1JFUV9JRF9BRERfS0VZLAorCQkJCXNp emVvZigqYm9keSkpOworCWVsc2UKKwkJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgLTEsIEhJRl9SRVFf SURfQUREX0tFWSwgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHdkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50 IGhpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaWR4KQoreworCWludCBy ZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzdHJ1Y3QgaGlmX3JlcV9yZW1vdmVfa2V5ICpi b2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAmaGlmKTsKKworCWlmICghaGlmKQor CQlyZXR1cm4gLUVOT01FTTsKKwlib2R5LT5lbnRyeV9pbmRleCA9IGlkeDsKKwl3ZnhfZmlsbF9o ZWFkZXIoaGlmLCAtMSwgSElGX1JFUV9JRF9SRU1PVkVfS0VZLCBzaXplb2YoKmJvZHkpKTsKKwly ZXQgPSB3ZnhfY21kX3NlbmQod2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlm KTsKKwlyZXR1cm4gcmV0OworfQorCitpbnQgaGlmX3NldF9lZGNhX3F1ZXVlX3BhcmFtcyhzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgdTE2IHF1ZXVlLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGllZWU4 MDIxMV90eF9xdWV1ZV9wYXJhbXMgKmFyZykKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNn ICpoaWY7CisJc3RydWN0IGhpZl9yZXFfZWRjYV9xdWV1ZV9wYXJhbXMgKmJvZHkgPSB3ZnhfYWxs b2NfaGlmKHNpemVvZigqYm9keSksCisJCQkJCQkJICAgICAgICZoaWYpOworCisJaWYgKCFib2R5 KQorCQlyZXR1cm4gLUVOT01FTTsKKworCVdBUk5fT04oYXJnLT5haWZzID4gMjU1KTsKKwlpZiAo IWhpZikKKwkJcmV0dXJuIC1FTk9NRU07CisJYm9keS0+YWlmc24gPSBhcmctPmFpZnM7CisJYm9k eS0+Y3dfbWluID0gY3B1X3RvX2xlMTYoYXJnLT5jd19taW4pOworCWJvZHktPmN3X21heCA9IGNw dV90b19sZTE2KGFyZy0+Y3dfbWF4KTsKKwlib2R5LT50eF9vcF9saW1pdCA9IGNwdV90b19sZTE2 KGFyZy0+dHhvcCAqIFVTRUNfUEVSX1RYT1ApOworCWJvZHktPnF1ZXVlX2lkID0gMyAtIHF1ZXVl OworCS8qIEFQSSAyLjAgaGFzIGNoYW5nZWQgcXVldWUgSURzIHZhbHVlcyAqLworCWlmICh3Znhf YXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMiwgMCkgJiYgcXVldWUgPT0gSUVFRTgwMjExX0FD X0JFKQorCQlib2R5LT5xdWV1ZV9pZCA9IEhJRl9RVUVVRV9JRF9CQUNLR1JPVU5EOworCWlmICh3 ZnhfYXBpX29sZGVyX3RoYW4od3ZpZi0+d2RldiwgMiwgMCkgJiYgcXVldWUgPT0gSUVFRTgwMjEx X0FDX0JLKQorCQlib2R5LT5xdWV1ZV9pZCA9IEhJRl9RVUVVRV9JRF9CRVNURUZGT1JUOworCXdm eF9maWxsX2hlYWRlcihoaWYsIHd2aWYtPmlkLCBISUZfUkVRX0lEX0VEQ0FfUVVFVUVfUEFSQU1T LAorCQkJc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhp ZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50 IGhpZl9zZXRfcG0oc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgcHMsIGludCBkeW5hbWljX3Bz X3RpbWVvdXQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGlmX21zZyAqaGlmOworCXN0cnVjdCBo aWZfcmVxX3NldF9wbV9tb2RlICpib2R5ID0gd2Z4X2FsbG9jX2hpZihzaXplb2YoKmJvZHkpLCAm aGlmKTsKKworCWlmICghYm9keSkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlpZiAoIWhpZikKKwkJ cmV0dXJuIC1FTk9NRU07CisJaWYgKHBzKSB7CisJCWJvZHktPmVudGVyX3BzbSA9IDE7CisJCS8q IEZpcm13YXJlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSB0aGFuIDEyOG1zICovCisJCWJvZHktPmZh c3RfcHNtX2lkbGVfcGVyaW9kID0gbWluKGR5bmFtaWNfcHNfdGltZW91dCAqIDIsIDI1NSk7CisJ CWlmIChib2R5LT5mYXN0X3BzbV9pZGxlX3BlcmlvZCkKKwkJCWJvZHktPmZhc3RfcHNtID0gMTsK Kwl9CisJd2Z4X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfU0VUX1BNX01P REUsIHNpemVvZigqYm9keSkpOworCXJldCA9IHdmeF9jbWRfc2VuZCh3dmlmLT53ZGV2LCBoaWYs IE5VTEwsIDAsIGZhbHNlKTsKKwlrZnJlZShoaWYpOworCXJldHVybiByZXQ7Cit9CisKK2ludCBo aWZfc3RhcnQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYnNz X2NvbmYgKmNvbmYsCisJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFubmVsICpjaGFu bmVsKQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsKKwlzdHJ1Y3QgaGlmX3Jl cV9zdGFydCAqYm9keSA9IHdmeF9hbGxvY19oaWYoc2l6ZW9mKCpib2R5KSwgJmhpZik7CisKKwlX QVJOX09OKCFjb25mLT5iZWFjb25faW50KTsKKwlpZiAoIWhpZikKKwkJcmV0dXJuIC1FTk9NRU07 CisJYm9keS0+ZHRpbV9wZXJpb2QgPSBjb25mLT5kdGltX3BlcmlvZDsKKwlib2R5LT5zaG9ydF9w cmVhbWJsZSA9IGNvbmYtPnVzZV9zaG9ydF9wcmVhbWJsZTsKKwlib2R5LT5jaGFubmVsX251bWJl ciA9IGNoYW5uZWwtPmh3X3ZhbHVlOworCWJvZHktPmJlYWNvbl9pbnRlcnZhbCA9IGNwdV90b19s ZTMyKGNvbmYtPmJlYWNvbl9pbnQpOworCWJvZHktPmJhc2ljX3JhdGVfc2V0ID0KKwkJY3B1X3Rv X2xlMzIod2Z4X3JhdGVfbWFza190b19odyh3dmlmLT53ZGV2LCBjb25mLT5iYXNpY19yYXRlcykp OworCWJvZHktPnNzaWRfbGVuZ3RoID0gY29uZi0+c3NpZF9sZW47CisJbWVtY3B5KGJvZHktPnNz aWQsIGNvbmYtPnNzaWQsIGNvbmYtPnNzaWRfbGVuKTsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3 dmlmLT5pZCwgSElGX1JFUV9JRF9TVEFSVCwgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2Nt ZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJ cmV0dXJuIHJldDsKK30KKworaW50IGhpZl9iZWFjb25fdHJhbnNtaXQoc3RydWN0IHdmeF92aWYg Knd2aWYsIGJvb2wgZW5hYmxlKQoreworCWludCByZXQ7CisJc3RydWN0IGhpZl9tc2cgKmhpZjsK KwlzdHJ1Y3QgaGlmX3JlcV9iZWFjb25fdHJhbnNtaXQgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNp emVvZigqYm9keSksCisJCQkJCQkJICAgICAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4g LUVOT01FTTsKKwlib2R5LT5lbmFibGVfYmVhY29uaW5nID0gZW5hYmxlID8gMSA6IDA7CisJd2Z4 X2ZpbGxfaGVhZGVyKGhpZiwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfQkVBQ09OX1RSQU5TTUlULAor CQkJc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2NtZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwg TlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhp Zl9tYXBfbGluayhzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCB1bm1hcCwgdTggKm1hY19hZGRy LCBpbnQgc3RhX2lkLCBib29sIG1mcCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBoaWZfbXNnICpo aWY7CisJc3RydWN0IGhpZl9yZXFfbWFwX2xpbmsgKmJvZHkgPSB3ZnhfYWxsb2NfaGlmKHNpemVv ZigqYm9keSksICZoaWYpOworCisJaWYgKCFoaWYpCisJCXJldHVybiAtRU5PTUVNOworCWlmICht YWNfYWRkcikKKwkJZXRoZXJfYWRkcl9jb3B5KGJvZHktPm1hY19hZGRyLCBtYWNfYWRkcik7CisJ Ym9keS0+bWZwYyA9IG1mcCA/IDEgOiAwOworCWJvZHktPnVubWFwID0gdW5tYXAgPyAxIDogMDsK Kwlib2R5LT5wZWVyX3N0YV9pZCA9IHN0YV9pZDsKKwl3ZnhfZmlsbF9oZWFkZXIoaGlmLCB3dmlm LT5pZCwgSElGX1JFUV9JRF9NQVBfTElOSywgc2l6ZW9mKCpib2R5KSk7CisJcmV0ID0gd2Z4X2Nt ZF9zZW5kKHd2aWYtPndkZXYsIGhpZiwgTlVMTCwgMCwgZmFsc2UpOworCWtmcmVlKGhpZik7CisJ cmV0dXJuIHJldDsKK30KKworaW50IGhpZl91cGRhdGVfaWVfYmVhY29uKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBjb25zdCB1OCAqaWVzLCBzaXplX3QgaWVzX2xlbikKK3sKKwlpbnQgcmV0OworCXN0 cnVjdCBoaWZfbXNnICpoaWY7CisJaW50IGJ1Zl9sZW4gPSBzaXplb2Yoc3RydWN0IGhpZl9yZXFf dXBkYXRlX2llKSArIGllc19sZW47CisJc3RydWN0IGhpZl9yZXFfdXBkYXRlX2llICpib2R5ID0g d2Z4X2FsbG9jX2hpZihidWZfbGVuLCAmaGlmKTsKKworCWlmICghaGlmKQorCQlyZXR1cm4gLUVO T01FTTsKKwlib2R5LT5iZWFjb24gPSAxOworCWJvZHktPm51bV9pZXMgPSBjcHVfdG9fbGUxNigx KTsKKwltZW1jcHkoYm9keS0+aWUsIGllcywgaWVzX2xlbik7CisJd2Z4X2ZpbGxfaGVhZGVyKGhp Ziwgd3ZpZi0+aWQsIEhJRl9SRVFfSURfVVBEQVRFX0lFLCBidWZfbGVuKTsKKwlyZXQgPSB3Znhf Y21kX3NlbmQod3ZpZi0+d2RldiwgaGlmLCBOVUxMLCAwLCBmYWxzZSk7CisJa2ZyZWUoaGlmKTsK KwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJz L3dmeC9oaWZfdHguaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvaGlmX3R4LmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5lNTdlYWJkY2ZhNzcKLS0t IC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eC5o CkBAIC0wLDAgKzEsNjAgQEAKKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9u bHkgKi8KKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9zdC10by1jaGlwIGNvbW1hbmRz IChha2EgcmVxdWVzdC9jb25maXJtYXRpb24pIG9mIHRoZQorICogaGFyZHdhcmUgQVBJLgorICoK KyAqIENvcHlyaWdodCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgor ICogQ29weXJpZ2h0IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICogQ29weXJpZ2h0IChDKSAyMDEw LCBTVC1Fcmljc3NvbiBTQQorICovCisjaWZuZGVmIFdGWF9ISUZfVFhfSAorI2RlZmluZSBXRlhf SElGX1RYX0gKKworc3RydWN0IGllZWU4MDIxMV9jaGFubmVsOworc3RydWN0IGllZWU4MDIxMV9i c3NfY29uZjsKK3N0cnVjdCBpZWVlODAyMTFfdHhfcXVldWVfcGFyYW1zOworc3RydWN0IGNmZzgw MjExX3NjYW5fcmVxdWVzdDsKK3N0cnVjdCBoaWZfcmVxX2FkZF9rZXk7CitzdHJ1Y3Qgd2Z4X2Rl djsKK3N0cnVjdCB3ZnhfdmlmOworCitzdHJ1Y3Qgd2Z4X2hpZl9jbWQgeworCXN0cnVjdCBtdXRl eCAgICAgIGxvY2s7CisJc3RydWN0IGNvbXBsZXRpb24gcmVhZHk7CisJc3RydWN0IGNvbXBsZXRp b24gZG9uZTsKKwlzdHJ1Y3QgaGlmX21zZyAgICAqYnVmX3NlbmQ7CisJdm9pZCAgICAgICAgICAg ICAgKmJ1Zl9yZWN2OworCXNpemVfdCAgICAgICAgICAgIGxlbl9yZWN2OworCWludCAgICAgICAg ICAgICAgIHJldDsKK307CisKK3ZvaWQgd2Z4X2luaXRfaGlmX2NtZChzdHJ1Y3Qgd2Z4X2hpZl9j bWQgKndmeF9oaWZfY21kKTsKK2ludCB3ZnhfY21kX3NlbmQoc3RydWN0IHdmeF9kZXYgKndkZXYs IHN0cnVjdCBoaWZfbXNnICpyZXF1ZXN0LAorCQkgdm9pZCAqcmVwbHksIHNpemVfdCByZXBseV9s ZW4sIGJvb2wgYXN5bmMpOworCitpbnQgaGlmX3NodXRkb3duKHN0cnVjdCB3ZnhfZGV2ICp3ZGV2 KTsKK2ludCBoaWZfY29uZmlndXJhdGlvbihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgY29uc3QgdTgg KmNvbmYsIHNpemVfdCBsZW4pOworaW50IGhpZl9yZXNldChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwg Ym9vbCByZXNldF9zdGF0KTsKK2ludCBoaWZfcmVhZF9taWIoc3RydWN0IHdmeF9kZXYgKndkZXYs IGludCB2aWZfaWQsIHUxNiBtaWJfaWQsCisJCSB2b2lkICpidWYsIHNpemVfdCBidWZfc2l6ZSk7 CitpbnQgaGlmX3dyaXRlX21pYihzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgaW50IHZpZl9pZCwgdTE2 IG1pYl9pZCwKKwkJICB2b2lkICpidWYsIHNpemVfdCBidWZfc2l6ZSk7CitpbnQgaGlmX3NjYW4o c3RydWN0IHdmeF92aWYgKnd2aWYsIHN0cnVjdCBjZmc4MDIxMV9zY2FuX3JlcXVlc3QgKnJlcTgw MjExLAorCSAgICAgaW50IGNoYW5fc3RhcnQsIGludCBjaGFuX251bSk7CitpbnQgaGlmX3N0b3Bf c2NhbihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZik7CitpbnQgaGlmX2pvaW4oc3RydWN0IHdmeF92aWYg Knd2aWYsIGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfYnNzX2NvbmYgKmNvbmYsCisJICAgICBzdHJ1 Y3QgaWVlZTgwMjExX2NoYW5uZWwgKmNoYW5uZWwsIGNvbnN0IHU4ICpzc2lkLCBpbnQgc3NpZGxl bik7CitpbnQgaGlmX3NldF9wbShzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgYm9vbCBwcywgaW50IGR5 bmFtaWNfcHNfdGltZW91dCk7CitpbnQgaGlmX3NldF9ic3NfcGFyYW1zKHN0cnVjdCB3Znhfdmlm ICp3dmlmLCBpbnQgYWlkLCBpbnQgYmVhY29uX2xvc3RfY291bnQpOworaW50IGhpZl9hZGRfa2V5 KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBjb25zdCBzdHJ1Y3QgaGlmX3JlcV9hZGRfa2V5ICphcmcp OworaW50IGhpZl9yZW1vdmVfa2V5KHN0cnVjdCB3ZnhfZGV2ICp3ZGV2LCBpbnQgaWR4KTsKK2lu dCBoaWZfc2V0X2VkY2FfcXVldWVfcGFyYW1zKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCB1MTYgcXVl dWUsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWVlZTgwMjExX3R4X3F1ZXVlX3BhcmFtcyAqYXJn KTsKK2ludCBoaWZfc3RhcnQoc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHN0cnVjdCBpZWVl ODAyMTFfYnNzX2NvbmYgKmNvbmYsCisJICAgICAgY29uc3Qgc3RydWN0IGllZWU4MDIxMV9jaGFu bmVsICpjaGFubmVsKTsKK2ludCBoaWZfYmVhY29uX3RyYW5zbWl0KHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBib29sIGVuYWJsZSk7CitpbnQgaGlmX21hcF9saW5rKHN0cnVjdCB3ZnhfdmlmICp3dmlm LAorCQkgYm9vbCB1bm1hcCwgdTggKm1hY19hZGRyLCBpbnQgc3RhX2lkLCBib29sIG1mcCk7Citp bnQgaGlmX3VwZGF0ZV9pZV9iZWFjb24oc3RydWN0IHdmeF92aWYgKnd2aWYsIGNvbnN0IHU4ICpp ZXMsIHNpemVfdCBpZXNfbGVuKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93 aXJlbGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3Np bGFicy93ZngvaGlmX3R4X21pYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwMC4uOTdlOTYxZTZiY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxl c3Mvc2lsYWJzL3dmeC9oaWZfdHhfbWliLmMKQEAgLTAsMCArMSwzMjQgQEAKKy8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBJbXBsZW1lbnRhdGlvbiBvZiB0 aGUgaG9zdC10by1jaGlwIE1JQnMgb2YgdGhlIGhhcmR3YXJlIEFQSS4KKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMTctMjAyMCwgU2lsaWNvbiBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIENvcHlyaWdo dCAoYykgMjAxMCwgU1QtRXJpY3Nzb24KKyAqIENvcHlyaWdodCAoQykgMjAxMCwgU1QtRXJpY3Nz b24gU0EKKyAqLworCisjaW5jbHVkZSA8bGludXgvZXRoZXJkZXZpY2UuaD4KKworI2luY2x1ZGUg IndmeC5oIgorI2luY2x1ZGUgImhpZl90eC5oIgorI2luY2x1ZGUgImhpZl90eF9taWIuaCIKKyNp bmNsdWRlICJoaWZfYXBpX21pYi5oIgorCitpbnQgaGlmX3NldF9vdXRwdXRfcG93ZXIoc3RydWN0 IHdmeF92aWYgKnd2aWYsIGludCB2YWwpCit7CisJc3RydWN0IGhpZl9taWJfY3VycmVudF90eF9w b3dlcl9sZXZlbCBhcmcgPSB7CisJCS5wb3dlcl9sZXZlbCA9IGNwdV90b19sZTMyKHZhbCAqIDEw KSwKKwl9OworCisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJ CQkgICAgIEhJRl9NSUJfSURfQ1VSUkVOVF9UWF9QT1dFUl9MRVZFTCwKKwkJCSAgICAgJmFyZywg c2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlmX3NldF9iZWFjb25fd2FrZXVwX3BlcmlvZChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQkgdW5zaWduZWQgaW50IGR0aW1faW50ZXJ2YWwsCisJCQkJ IHVuc2lnbmVkIGludCBsaXN0ZW5faW50ZXJ2YWwpCit7CisJc3RydWN0IGhpZl9taWJfYmVhY29u X3dha2VfdXBfcGVyaW9kIGFyZyA9IHsKKwkJLndha2V1cF9wZXJpb2RfbWluID0gZHRpbV9pbnRl cnZhbCwKKwkJLnJlY2VpdmVfZHRpbSA9IDAsCisJCS53YWtldXBfcGVyaW9kX21heCA9IGxpc3Rl bl9pbnRlcnZhbCwKKwl9OworCisJaWYgKGR0aW1faW50ZXJ2YWwgPiAweEZGIHx8IGxpc3Rlbl9p bnRlcnZhbCA+IDB4RkZGRikKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGhpZl93cml0ZV9t aWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAgIEhJRl9NSUJfSURfQkVBQ09OX1dBS0VV UF9QRVJJT0QsCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9zZXRf cmNwaV9yc3NpX3RocmVzaG9sZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwKKwkJCQlpbnQgcnNzaV90 aG9sZCwgaW50IHJzc2lfaHlzdCkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9yY3BpX3Jzc2lfdGhyZXNo b2xkIGFyZyA9IHsKKwkJLnJvbGxpbmdfYXZlcmFnZV9jb3VudCA9IDgsCisJCS5kZXRlY3Rpb24g PSAxLAorCX07CisKKwlpZiAoIXJzc2lfdGhvbGQgJiYgIXJzc2lfaHlzdCkgeworCQlhcmcudXBw ZXJ0aHJlc2ggPSAxOworCQlhcmcubG93ZXJ0aHJlc2ggPSAxOworCX0gZWxzZSB7CisJCWFyZy51 cHBlcl90aHJlc2hvbGQgPSByc3NpX3Rob2xkICsgcnNzaV9oeXN0OworCQlhcmcudXBwZXJfdGhy ZXNob2xkID0gKGFyZy51cHBlcl90aHJlc2hvbGQgKyAxMTApICogMjsKKwkJYXJnLmxvd2VyX3Ro cmVzaG9sZCA9IHJzc2lfdGhvbGQ7CisJCWFyZy5sb3dlcl90aHJlc2hvbGQgPSAoYXJnLmxvd2Vy X3RocmVzaG9sZCArIDExMCkgKiAyOworCX0KKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYt PndkZXYsIHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lEX1JDUElfUlNTSV9USFJFU0hPTEQs ICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9nZXRfY291bnRlcnNfdGFibGUoc3Ry dWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsCisJCQkgICBzdHJ1Y3QgaGlmX21pYl9leHRl bmRlZF9jb3VudF90YWJsZSAqYXJnKQoreworCWlmICh3ZnhfYXBpX29sZGVyX3RoYW4od2Rldiwg MSwgMykpIHsKKwkJLyogZXh0ZW5kZWRfY291bnRfdGFibGUgaXMgd2lkZXIgdGhhbiBjb3VudF90 YWJsZSAqLworCQltZW1zZXQoYXJnLCAweEZGLCBzaXplb2YoKmFyZykpOworCQlyZXR1cm4gaGlm X3JlYWRfbWliKHdkZXYsIHZpZl9pZCwgSElGX01JQl9JRF9DT1VOVEVSU19UQUJMRSwKKwkJCQkg ICAgYXJnLCBzaXplb2Yoc3RydWN0IGhpZl9taWJfY291bnRfdGFibGUpKTsKKwl9IGVsc2Ugewor CQlyZXR1cm4gaGlmX3JlYWRfbWliKHdkZXYsIHZpZl9pZCwKKwkJCQkgICAgSElGX01JQl9JRF9F WFRFTkRFRF9DT1VOVEVSU19UQUJMRSwgYXJnLAorCQkJCSAgICBzaXplb2Yoc3RydWN0IGhpZl9t aWJfZXh0ZW5kZWRfY291bnRfdGFibGUpKTsKKwl9Cit9CisKK2ludCBoaWZfc2V0X21hY2FkZHIo c3RydWN0IHdmeF92aWYgKnd2aWYsIHU4ICptYWMpCit7CisJc3RydWN0IGhpZl9taWJfbWFjX2Fk ZHJlc3MgYXJnID0geyB9OworCisJaWYgKG1hYykKKwkJZXRoZXJfYWRkcl9jb3B5KGFyZy5tYWNf YWRkciwgbWFjKTsKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwg SElGX01JQl9JRF9ET1QxMV9NQUNfQUREUkVTUywKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykp OworfQorCitpbnQgaGlmX3NldF9yeF9maWx0ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCSAg ICAgIGJvb2wgZmlsdGVyX2Jzc2lkLCBib29sIGZpbHRlcl9wcmJyZXEpCit7CisJc3RydWN0IGhp Zl9taWJfcnhfZmlsdGVyIGFyZyA9IHsgfTsKKworCWlmIChmaWx0ZXJfYnNzaWQpCisJCWFyZy5i c3NpZF9maWx0ZXIgPSAxOworCWlmICghZmlsdGVyX3ByYnJlcSkKKwkJYXJnLmZ3ZF9wcm9iZV9y ZXEgPSAxOworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZf TUlCX0lEX1JYX0ZJTFRFUiwKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQg aGlmX3NldF9iZWFjb25fZmlsdGVyX3RhYmxlKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdGJs X2xlbiwKKwkJCQljb25zdCBzdHJ1Y3QgaGlmX2llX3RhYmxlX2VudHJ5ICp0YmwpCit7CisJaW50 IHJldDsKKwlzdHJ1Y3QgaGlmX21pYl9iY25fZmlsdGVyX3RhYmxlICphcmc7CisJaW50IGJ1Zl9s ZW4gPSBzdHJ1Y3Rfc2l6ZShhcmcsIGllX3RhYmxlLCB0YmxfbGVuKTsKKworCWFyZyA9IGt6YWxs b2MoYnVmX2xlbiwgR0ZQX0tFUk5FTCk7CisJaWYgKCFhcmcpCisJCXJldHVybiAtRU5PTUVNOwor CWFyZy0+bnVtX29mX2luZm9fZWxtdHMgPSBjcHVfdG9fbGUzMih0YmxfbGVuKTsKKwltZW1jcHko YXJnLT5pZV90YWJsZSwgdGJsLCBmbGV4X2FycmF5X3NpemUoYXJnLCBpZV90YWJsZSwgdGJsX2xl bikpOworCXJldCA9IGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+aWQsCisJCQkgICAg SElGX01JQl9JRF9CRUFDT05fRklMVEVSX1RBQkxFLCBhcmcsIGJ1Zl9sZW4pOworCWtmcmVlKGFy Zyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9iZWFjb25fZmlsdGVyX2NvbnRyb2woc3Ry dWN0IHdmeF92aWYgKnd2aWYsCisJCQkgICAgICBpbnQgZW5hYmxlLCBpbnQgYmVhY29uX2NvdW50 KQoreworCXN0cnVjdCBoaWZfbWliX2Jjbl9maWx0ZXJfZW5hYmxlIGFyZyA9IHsKKwkJLmVuYWJs ZSA9IGNwdV90b19sZTMyKGVuYWJsZSksCisJCS5iY25fY291bnQgPSBjcHVfdG9fbGUzMihiZWFj b25fY291bnQpLAorCX07CisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3ZpZi0+ aWQsCisJCQkgICAgIEhJRl9NSUJfSURfQkVBQ09OX0ZJTFRFUl9FTkFCTEUsCisJCQkgICAgICZh cmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9zZXRfb3BlcmF0aW9uYWxfbW9kZShzdHJ1 Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBoaWZfb3BfcG93ZXJfbW9kZSBtb2RlKQoreworCXN0cnVj dCBoaWZfbWliX2dsX29wZXJhdGlvbmFsX3Bvd2VyX21vZGUgYXJnID0geworCQkucG93ZXJfbW9k ZSA9IG1vZGUsCisJCS53dXBfaW5kX2FjdGl2YXRpb24gPSAxLAorCX07CisKKwlyZXR1cm4gaGlm X3dyaXRlX21pYih3ZGV2LCAtMSwgSElGX01JQl9JRF9HTF9PUEVSQVRJT05BTF9QT1dFUl9NT0RF LAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfc2V0X3RlbXBsYXRl X2ZyYW1lKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAg dTggZnJhbWVfdHlwZSwgaW50IGluaXRfcmF0ZSkKK3sKKwlzdHJ1Y3QgaGlmX21pYl90ZW1wbGF0 ZV9mcmFtZSAqYXJnOworCisJV0FSTihza2ItPmxlbiA+IEhJRl9BUElfTUFYX1RFTVBMQVRFX0ZS QU1FX1NJWkUsICJmcmFtZSBpcyB0b28gYmlnIik7CisJc2tiX3B1c2goc2tiLCA0KTsKKwlhcmcg PSAoc3RydWN0IGhpZl9taWJfdGVtcGxhdGVfZnJhbWUgKilza2ItPmRhdGE7CisJc2tiX3B1bGwo c2tiLCA0KTsKKwlhcmctPmluaXRfcmF0ZSA9IGluaXRfcmF0ZTsKKwlhcmctPmZyYW1lX3R5cGUg PSBmcmFtZV90eXBlOworCWFyZy0+ZnJhbWVfbGVuZ3RoID0gY3B1X3RvX2xlMTYoc2tiLT5sZW4p OworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlkLCBISUZfTUlCX0lE X1RFTVBMQVRFX0ZSQU1FLAorCQkJICAgICBhcmcsIHNpemVvZigqYXJnKSArIHNrYi0+bGVuKTsK K30KKworaW50IGhpZl9zZXRfbWZwKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGNhcGFibGUs IGJvb2wgcmVxdWlyZWQpCit7CisJc3RydWN0IGhpZl9taWJfcHJvdGVjdGVkX21nbXRfcG9saWN5 IGFyZyA9IHsgfTsKKworCVdBUk4ocmVxdWlyZWQgJiYgIWNhcGFibGUsICJpbmNvaGVyZW50IGFy Z3VtZW50cyIpOworCWlmIChjYXBhYmxlKSB7CisJCWFyZy5wbWZfZW5hYmxlID0gMTsKKwkJYXJn Lmhvc3RfZW5jX2F1dGhfZnJhbWVzID0gMTsKKwl9CisJaWYgKCFyZXF1aXJlZCkKKwkJYXJnLnVu cG1mX2FsbG93ZWQgPSAxOworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYt PmlkLAorCQkJICAgICBISUZfTUlCX0lEX1BST1RFQ1RFRF9NR01UX1BPTElDWSwKKwkJCSAgICAg JmFyZywgc2l6ZW9mKGFyZykpOworfQorCitpbnQgaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHN0 cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJICAgICB1OCB0eF90aWRfcG9saWN5LCB1OCByeF90aWRf cG9saWN5KQoreworCXN0cnVjdCBoaWZfbWliX2Jsb2NrX2Fja19wb2xpY3kgYXJnID0geworCQku YmxvY2tfYWNrX3R4X3RpZF9wb2xpY3kgPSB0eF90aWRfcG9saWN5LAorCQkuYmxvY2tfYWNrX3J4 X3RpZF9wb2xpY3kgPSByeF90aWRfcG9saWN5LAorCX07CisKKwlyZXR1cm4gaGlmX3dyaXRlX21p Yih3dmlmLT53ZGV2LCB3dmlmLT5pZCwgSElGX01JQl9JRF9CTE9DS19BQ0tfUE9MSUNZLAorCQkJ ICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfc2V0X2Fzc29jaWF0aW9uX21v ZGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCBhbXBkdV9kZW5zaXR5LAorCQkJICAgICBib29s IGdyZWVuZmllbGQsIGJvb2wgc2hvcnRfcHJlYW1ibGUpCit7CisJc3RydWN0IGhpZl9taWJfc2V0 X2Fzc29jaWF0aW9uX21vZGUgYXJnID0geworCQkucHJlYW1idHlwZV91c2UgPSAxLAorCQkubW9k ZSA9IDEsCisJCS5zcGFjaW5nID0gMSwKKwkJLnNob3J0X3ByZWFtYmxlID0gc2hvcnRfcHJlYW1i bGUsCisJCS5ncmVlbmZpZWxkID0gZ3JlZW5maWVsZCwKKwkJLm1wZHVfc3RhcnRfc3BhY2luZyA9 IGFtcGR1X2RlbnNpdHksCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYs IHd2aWYtPmlkLAorCQkJICAgICBISUZfTUlCX0lEX1NFVF9BU1NPQ0lBVElPTl9NT0RFLCAmYXJn LCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5KHN0 cnVjdCB3ZnhfdmlmICp3dmlmLAorCQkJCSBpbnQgcG9saWN5X2luZGV4LCB1OCAqcmF0ZXMpCit7 CisJc3RydWN0IGhpZl9taWJfc2V0X3R4X3JhdGVfcmV0cnlfcG9saWN5ICphcmc7CisJc2l6ZV90 IHNpemUgPSBzdHJ1Y3Rfc2l6ZShhcmcsIHR4X3JhdGVfcmV0cnlfcG9saWN5LCAxKTsKKwlpbnQg cmV0OworCisJYXJnID0ga3phbGxvYyhzaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWFyZykKKwkJ cmV0dXJuIC1FTk9NRU07CisJYXJnLT5udW1fdHhfcmF0ZV9wb2xpY2llcyA9IDE7CisJYXJnLT50 eF9yYXRlX3JldHJ5X3BvbGljeVswXS5wb2xpY3lfaW5kZXggPSBwb2xpY3lfaW5kZXg7CisJYXJn LT50eF9yYXRlX3JldHJ5X3BvbGljeVswXS5zaG9ydF9yZXRyeV9jb3VudCA9IDI1NTsKKwlhcmct PnR4X3JhdGVfcmV0cnlfcG9saWN5WzBdLmxvbmdfcmV0cnlfY291bnQgPSAyNTU7CisJYXJnLT50 eF9yYXRlX3JldHJ5X3BvbGljeVswXS5maXJzdF9yYXRlX3NlbCA9IDE7CisJYXJnLT50eF9yYXRl X3JldHJ5X3BvbGljeVswXS50ZXJtaW5hdGUgPSAxOworCWFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xp Y3lbMF0uY291bnRfaW5pdCA9IDE7CisJbWVtY3B5KCZhcmctPnR4X3JhdGVfcmV0cnlfcG9saWN5 WzBdLnJhdGVzLCByYXRlcywKKwkgICAgICAgc2l6ZW9mKGFyZy0+dHhfcmF0ZV9yZXRyeV9wb2xp Y3lbMF0ucmF0ZXMpKTsKKwlyZXQgPSBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlk LAorCQkJICAgIEhJRl9NSUJfSURfU0VUX1RYX1JBVEVfUkVUUllfUE9MSUNZLCBhcmcsIHNpemUp OworCWtmcmVlKGFyZyk7CisJcmV0dXJuIHJldDsKK30KKworaW50IGhpZl9rZWVwX2FsaXZlX3Bl cmlvZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHBlcmlvZCkKK3sKKwlzdHJ1Y3QgaGlmX21p Yl9rZWVwX2FsaXZlX3BlcmlvZCBhcmcgPSB7CisJCS5rZWVwX2FsaXZlX3BlcmlvZCA9IGNwdV90 b19sZTE2KHBlcmlvZCksCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYs IHd2aWYtPmlkLCBISUZfTUlCX0lEX0tFRVBfQUxJVkVfUEVSSU9ELAorCQkJICAgICAmYXJnLCBz aXplb2YoYXJnKSk7Cit9OworCitpbnQgaGlmX3NldF9hcnBfaXB2NF9maWx0ZXIoc3RydWN0IHdm eF92aWYgKnd2aWYsIGludCBpZHgsIF9fYmUzMiAqYWRkcikKK3sKKwlzdHJ1Y3QgaGlmX21pYl9h cnBfaXBfYWRkcl90YWJsZSBhcmcgPSB7CisJCS5jb25kaXRpb25faWR4ID0gaWR4LAorCQkuYXJw X2VuYWJsZSA9IEhJRl9BUlBfTlNfRklMVEVSSU5HX0RJU0FCTEUsCisJfTsKKworCWlmIChhZGRy KSB7CisJCS8qIENhdXRpb246IHR5cGUgb2YgYWRkciBpcyBfX2JlMzIgKi8KKwkJbWVtY3B5KGFy Zy5pcHY0X2FkZHJlc3MsIGFkZHIsIHNpemVvZihhcmcuaXB2NF9hZGRyZXNzKSk7CisJCWFyZy5h cnBfZW5hYmxlID0gSElGX0FSUF9OU19GSUxURVJJTkdfRU5BQkxFOworCX0KKwlyZXR1cm4gaGlm X3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElGX01JQl9JRF9BUlBf SVBfQUREUkVTU0VTX1RBQkxFLAorCQkJICAgICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2lu dCBoaWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0IHdmeF9kZXYgKndkZXYsIGJvb2wgZW5hYmxl KQoreworCXN0cnVjdCBoaWZfbWliX2dsX3NldF9tdWx0aV9tc2cgYXJnID0geworCQkuZW5hYmxl X211bHRpX3R4X2NvbmYgPSBlbmFibGUsCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHdk ZXYsIC0xLCBISUZfTUlCX0lEX0dMX1NFVF9NVUxUSV9NU0csCisJCQkgICAgICZhcmcsIHNpemVv ZihhcmcpKTsKK30KKworaW50IGhpZl9zZXRfdWFwc2RfaW5mbyhzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwgdW5zaWduZWQgbG9uZyB2YWwpCit7CisJc3RydWN0IGhpZl9taWJfc2V0X3VhcHNkX2luZm9y bWF0aW9uIGFyZyA9IHsgfTsKKworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX1ZPKSkKKwkJ YXJnLnRyaWdfdm9pY2UgPSAxOworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX1ZJKSkKKwkJ YXJnLnRyaWdfdmlkZW8gPSAxOworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX0JFKSkKKwkJ YXJnLnRyaWdfYmUgPSAxOworCWlmICh2YWwgJiBCSVQoSUVFRTgwMjExX0FDX0JLKSkKKwkJYXJn LnRyaWdfYmNrZ3JuZCA9IDE7CisJcmV0dXJuIGhpZl93cml0ZV9taWIod3ZpZi0+d2Rldiwgd3Zp Zi0+aWQsCisJCQkgICAgIEhJRl9NSUJfSURfU0VUX1VBUFNEX0lORk9STUFUSU9OLAorCQkJICAg ICAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CisKK2ludCBoaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHN0 cnVjdCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSkKK3sKKwlzdHJ1Y3QgaGlmX21pYl9ub25f ZXJwX3Byb3RlY3Rpb24gYXJnID0geworCQkudXNlX2N0c190b19zZWxmID0gZW5hYmxlLAorCX07 CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAg SElGX01JQl9JRF9OT05fRVJQX1BST1RFQ1RJT04sICZhcmcsIHNpemVvZihhcmcpKTsKK30KKwor aW50IGhpZl9zbG90X3RpbWUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpCit7CisJc3Ry dWN0IGhpZl9taWJfc2xvdF90aW1lIGFyZyA9IHsKKwkJLnNsb3RfdGltZSA9IGNwdV90b19sZTMy KHZhbCksCisJfTsKKworCXJldHVybiBoaWZfd3JpdGVfbWliKHd2aWYtPndkZXYsIHd2aWYtPmlk LCBISUZfTUlCX0lEX1NMT1RfVElNRSwKKwkJCSAgICAgJmFyZywgc2l6ZW9mKGFyZykpOworfQor CitpbnQgaGlmX3dlcF9kZWZhdWx0X2tleV9pZChzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZh bCkKK3sKKwlzdHJ1Y3QgaGlmX21pYl93ZXBfZGVmYXVsdF9rZXlfaWQgYXJnID0geworCQkud2Vw X2RlZmF1bHRfa2V5X2lkID0gdmFsLAorCX07CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3dmlm LT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElGX01JQl9JRF9ET1QxMV9XRVBfREVGQVVMVF9L RVlfSUQsCisJCQkgICAgICZhcmcsIHNpemVvZihhcmcpKTsKK30KKworaW50IGhpZl9ydHNfdGhy ZXNob2xkKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgdmFsKQoreworCXN0cnVjdCBoaWZfbWli X2RvdDExX3J0c190aHJlc2hvbGQgYXJnID0geworCQkudGhyZXNob2xkID0gY3B1X3RvX2xlMzIo dmFsID49IDAgPyB2YWwgOiAweEZGRkYpLAorCX07CisKKwlyZXR1cm4gaGlmX3dyaXRlX21pYih3 dmlmLT53ZGV2LCB3dmlmLT5pZCwKKwkJCSAgICAgSElGX01JQl9JRF9ET1QxMV9SVFNfVEhSRVNI T0xELCAmYXJnLCBzaXplb2YoYXJnKSk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJl bGVzcy9zaWxhYnMvd2Z4L2hpZl90eF9taWIuaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFi cy93ZngvaGlmX3R4X21pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw MC4uMmEzYjg0ODY4ZWU0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3Mv c2lsYWJzL3dmeC9oaWZfdHhfbWliLmgKQEAgLTAsMCArMSw0OSBAQAorLyogU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIEltcGxlbWVudGF0aW9uIG9mIHRo ZSBob3N0LXRvLWNoaXAgTUlCcyBvZiB0aGUgaGFyZHdhcmUgQVBJLgorICoKKyAqIENvcHlyaWdo dCAoYykgMjAxNy0yMDIwLCBTaWxpY29uIExhYm9yYXRvcmllcywgSW5jLgorICogQ29weXJpZ2h0 IChjKSAyMDEwLCBTVC1Fcmljc3NvbgorICogQ29weXJpZ2h0IChDKSAyMDEwLCBTVC1Fcmljc3Nv biBTQQorICovCisjaWZuZGVmIFdGWF9ISUZfVFhfTUlCX0gKKyNkZWZpbmUgV0ZYX0hJRl9UWF9N SUJfSAorCitzdHJ1Y3Qgd2Z4X3ZpZjsKK3N0cnVjdCBza19idWZmOworCitpbnQgaGlmX3NldF9v dXRwdXRfcG93ZXIoc3RydWN0IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOworaW50IGhpZl9zZXRf YmVhY29uX3dha2V1cF9wZXJpb2Qoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJCQkJIHVuc2lnbmVk IGludCBkdGltX2ludGVydmFsLAorCQkJCSB1bnNpZ25lZCBpbnQgbGlzdGVuX2ludGVydmFsKTsK K2ludCBoaWZfc2V0X3JjcGlfcnNzaV90aHJlc2hvbGQoc3RydWN0IHdmeF92aWYgKnd2aWYsCisJ CQkJaW50IHJzc2lfdGhvbGQsIGludCByc3NpX2h5c3QpOworaW50IGhpZl9nZXRfY291bnRlcnNf dGFibGUoc3RydWN0IHdmeF9kZXYgKndkZXYsIGludCB2aWZfaWQsCisJCQkgICBzdHJ1Y3QgaGlm X21pYl9leHRlbmRlZF9jb3VudF90YWJsZSAqYXJnKTsKK2ludCBoaWZfc2V0X21hY2FkZHIoc3Ry dWN0IHdmeF92aWYgKnd2aWYsIHU4ICptYWMpOworaW50IGhpZl9zZXRfcnhfZmlsdGVyKHN0cnVj dCB3ZnhfdmlmICp3dmlmLAorCQkgICAgICBib29sIGZpbHRlcl9ic3NpZCwgYm9vbCBmd2RfcHJv YmVfcmVxKTsKK2ludCBoaWZfc2V0X2JlYWNvbl9maWx0ZXJfdGFibGUoc3RydWN0IHdmeF92aWYg Knd2aWYsIGludCB0YmxfbGVuLAorCQkJCWNvbnN0IHN0cnVjdCBoaWZfaWVfdGFibGVfZW50cnkg KnRibCk7CitpbnQgaGlmX2JlYWNvbl9maWx0ZXJfY29udHJvbChzdHJ1Y3Qgd2Z4X3ZpZiAqd3Zp ZiwKKwkJCSAgICAgIGludCBlbmFibGUsIGludCBiZWFjb25fY291bnQpOworaW50IGhpZl9zZXRf b3BlcmF0aW9uYWxfbW9kZShzdHJ1Y3Qgd2Z4X2RldiAqd2RldiwgZW51bSBoaWZfb3BfcG93ZXJf bW9kZSBtb2RlKTsKK2ludCBoaWZfc2V0X3RlbXBsYXRlX2ZyYW1lKHN0cnVjdCB3ZnhfdmlmICp3 dmlmLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAorCQkJICAgdTggZnJhbWVfdHlwZSwgaW50IGluaXRf cmF0ZSk7CitpbnQgaGlmX3NldF9tZnAoc3RydWN0IHdmeF92aWYgKnd2aWYsIGJvb2wgY2FwYWJs ZSwgYm9vbCByZXF1aXJlZCk7CitpbnQgaGlmX3NldF9ibG9ja19hY2tfcG9saWN5KHN0cnVjdCB3 ZnhfdmlmICp3dmlmLAorCQkJICAgICB1OCB0eF90aWRfcG9saWN5LCB1OCByeF90aWRfcG9saWN5 KTsKK2ludCBoaWZfc2V0X2Fzc29jaWF0aW9uX21vZGUoc3RydWN0IHdmeF92aWYgKnd2aWYsIGlu dCBhbXBkdV9kZW5zaXR5LAorCQkJICAgICBib29sIGdyZWVuZmllbGQsIGJvb2wgc2hvcnRfcHJl YW1ibGUpOworaW50IGhpZl9zZXRfdHhfcmF0ZV9yZXRyeV9wb2xpY3koc3RydWN0IHdmeF92aWYg Knd2aWYsCisJCQkJIGludCBwb2xpY3lfaW5kZXgsIHU4ICpyYXRlcyk7CitpbnQgaGlmX2tlZXBf YWxpdmVfcGVyaW9kKHN0cnVjdCB3ZnhfdmlmICp3dmlmLCBpbnQgcGVyaW9kKTsKK2ludCBoaWZf c2V0X2FycF9pcHY0X2ZpbHRlcihzdHJ1Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IGlkeCwgX19iZTMy ICphZGRyKTsKK2ludCBoaWZfdXNlX211bHRpX3R4X2NvbmYoc3RydWN0IHdmeF9kZXYgKndkZXYs IGJvb2wgZW5hYmxlKTsKK2ludCBoaWZfc2V0X3VhcHNkX2luZm8oc3RydWN0IHdmeF92aWYgKnd2 aWYsIHVuc2lnbmVkIGxvbmcgdmFsKTsKK2ludCBoaWZfZXJwX3VzZV9wcm90ZWN0aW9uKHN0cnVj dCB3ZnhfdmlmICp3dmlmLCBib29sIGVuYWJsZSk7CitpbnQgaGlmX3Nsb3RfdGltZShzdHJ1Y3Qg d2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7CitpbnQgaGlmX3dlcF9kZWZhdWx0X2tleV9pZChzdHJ1 Y3Qgd2Z4X3ZpZiAqd3ZpZiwgaW50IHZhbCk7CitpbnQgaGlmX3J0c190aHJlc2hvbGQoc3RydWN0 IHdmeF92aWYgKnd2aWYsIGludCB2YWwpOworCisjZW5kaWYKLS0gCjIuMzMuMAoK