From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from EUR05-DB8-obe.outbound.protection.outlook.com (mail-db8eur05on2052.outbound.protection.outlook.com [40.107.20.52]) by sourceware.org (Postfix) with ESMTPS id 114B93861848 for ; Mon, 6 Nov 2023 11:21:17 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 114B93861848 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=arm.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=arm.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 114B93861848 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=40.107.20.52 ARC-Seal: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699269683; cv=pass; b=rDca4pE/OLahUbgRfoOuVBhq/ZB89z1tHDr4bnEF3/q06fUV0aQIYcXDBOKjNyHGreZ1esvv03IJgi84oo4UD9VfnMzMa2v6zt8oACPY2QBVX2L8y6S/kAsNK2WynmJKee6ROGilGKLKIy8huz97a8HlD3ri9n5kZZXqHnYkd8A= ARC-Message-Signature: i=3; a=rsa-sha256; d=sourceware.org; s=key; t=1699269683; c=relaxed/simple; bh=56XhC9hZrId6Q76ntg9FwAcIw7v5ZnhAj2YG+kysR8s=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:To:From:Subject: MIME-Version; b=I7oTdtHjTAR+ZZ6GiJPUZf7DEXXp+e0FzrhiexeeQnDZimEpQc6sIgQyEumGc1rLGwGHU+D6DK8v0mAa9U18G/eEARPUv5xvjyNqrW0t5WPw5NTlH0t6LhwpQyuEoOADqe2wL/GBsucIOwedg3xk6ccfy/axP7E4ROw2GRFUkFA= ARC-Authentication-Results: i=3; server2.sourceware.org ARC-Seal: i=2; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=pass; b=RB+mhQBwrJ+E2sTtKpbAVk9oxJszg1HdFhEkzbbnPOj/fTJdtV6MY5iixEXLbwk9JtqYSk1v7gJzb2CxRqP51lXa14isSb2epX00efhJAGxuAd18U0GMxKXuLzz04wKqn6lr549yTrmsmOwjk5MSesce08qpojrCz7vZ3tX0saw80VfPc1e1RVCRSj7Tz3erLivwbCJkhTH+3dA6KQRKsI3L9UHDZk2Nb5w2i9rh1PqcXdDRmID1I2KdPWBP7LlEEgI3YJKUP74DmG5zmbp0y0lWjDbclQaTGKAXHtnt3LRr0mnWHuO1qM1E2xTemvhhMuBcko7KCKX8hUwM/cTntw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=56XhC9hZrId6Q76ntg9FwAcIw7v5ZnhAj2YG+kysR8s=; b=G5zjSPmwo0ESdoFwBypS1XxksbAZuLVG4/WBEHThAeAUbQ6rO/XTrSh8FeRhjf58w8lkWVJ6RO4cqkQcdrElCezOeY3tJf79F7JO53GfQeklGECwhDsm2zU2pLSqkjcdxTKSer8gAZjZxNGITTuQb7t6koTCewCpU0xuBETwPLXJ9SficXIJF5j7lkUErUK+cXNYnuXG9CSiTPlxl9wW3Cr5vQyJcnDSoDG3BvDzMUYi1Ku6UrHAq1ulLlfuStqDfBO9SsY2f7/2I8d+pktIAKa/wJaMSSBPHmEpJucBRUjx4wlI3yZd8BNnBzL6RXHZtz1KR2IY+L9lWvIxKCrlfw== ARC-Authentication-Results: i=2; mx.microsoft.com 1; spf=pass (sender ip is 63.35.35.123) smtp.rcpttodomain=gcc.gnu.org smtp.mailfrom=arm.com; dmarc=pass (p=none sp=none pct=100) action=none header.from=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com; arc=pass (0 oda=1 ltdi=1 spf=[1,1,smtp.mailfrom=arm.com] dkim=[1,1,header.d=arm.com] dmarc=[1,1,header.from=arm.com]) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=56XhC9hZrId6Q76ntg9FwAcIw7v5ZnhAj2YG+kysR8s=; b=1OFrIpO/K1DvqnkYda2ijqlJLiMPyUX0+cMcxmr/9v8gsSh0mivZaUHw3/br8drf7wD+O4zQ+NHvATObiVWsau21oII/g1n0Vr9Gycd3kn2eir5mJr8uSZqc15yUMCMkg33snw3ragMqJX/4ygKL/oT1ZcnRTaajDhXSHoHnT5k= Received: from AM0PR02CA0091.eurprd02.prod.outlook.com (2603:10a6:208:154::32) by AS8PR08MB9220.eurprd08.prod.outlook.com (2603:10a6:20b:5a3::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Mon, 6 Nov 2023 11:21:14 +0000 Received: from AM3PEPF0000A795.eurprd04.prod.outlook.com (2603:10a6:208:154:cafe::98) by AM0PR02CA0091.outlook.office365.com (2603:10a6:208:154::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28 via Frontend Transport; Mon, 6 Nov 2023 11:21:14 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 63.35.35.123) smtp.mailfrom=arm.com; dkim=pass (signature was verified) header.d=armh.onmicrosoft.com;dmarc=pass action=none header.from=arm.com; Received-SPF: Pass (protection.outlook.com: domain of arm.com designates 63.35.35.123 as permitted sender) receiver=protection.outlook.com; client-ip=63.35.35.123; helo=64aa7808-outbound-1.mta.getcheckrecipient.com; pr=C Received: from 64aa7808-outbound-1.mta.getcheckrecipient.com (63.35.35.123) by AM3PEPF0000A795.mail.protection.outlook.com (10.167.16.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6977.16 via Frontend Transport; Mon, 6 Nov 2023 11:21:14 +0000 Received: ("Tessian outbound 26ee1d40577c:v228"); Mon, 06 Nov 2023 11:21:14 +0000 X-CheckRecipientChecked: true X-CR-MTA-CID: 019505ce391248cb X-CR-MTA-TID: 64aa7808 Received: from 8dc17e344f3a.2 by 64aa7808-outbound-1.mta.getcheckrecipient.com id F0A0C8BA-1440-4B32-9958-D2CB14A96C13.1; Mon, 06 Nov 2023 11:20:11 +0000 Received: from EUR01-DB5-obe.outbound.protection.outlook.com by 64aa7808-outbound-1.mta.getcheckrecipient.com with ESMTPS id 8dc17e344f3a.2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384); Mon, 06 Nov 2023 11:20:11 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=VctDKSffH4Ze3tAS5cGNKTUWR9u2L1geuxj15NlZ7Twom6pNmq3XWguKj1FwCpWYnVHUt0ID+795tXYKzPbM8eU5BwIzUAli3iH2P4bBn+2+K29fZCjODJMY9A6F5qwGiNfmJGY9FJaAnmhusQQMrujATEvQ9WF7jum7uo4Xaj/Zp/9o6raaZs+BGjL6HNGbkJ8ixhtPWUZ0+HxE+ObPLBKH4hDJhleU7RFifb7RS6yH6+WW8pCta3r/DYPZ896yUoJT0WHrtacjCJqL2/t9XnlIpR1ZB6AelPXfSLAR8MQpXeLkj7Nuw/AvB6OII6zyXsbu5e+mAy6za1jeJfZYAg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=56XhC9hZrId6Q76ntg9FwAcIw7v5ZnhAj2YG+kysR8s=; b=SWCB77O4XNcLOQ0VYndn1Sen7/fMM4YJ7edmIuDopy+eJRIkOAO6jWNSxtFy4d5C/oKAMKEWEbGISIVLwV2uXpxycZ8gXg2nM51N2POzAK3iY/e51HXQKAkRNVI4GInFyUxr8fEUUBZxT17IMRIwNh8/04U47YI7uVAKtUgOSJQMfp522i9+phjr8G7KKrIbW6mjXyOz9WKLNf/tCu5/mKrYCloEHMTAUvUwdjgIaGPN0aKAx8rOOfgt1Kls6k78ScxEXJIVb0kL4H627D9sTZMyWqbw6H9EHdg8sG0tvfEEyPca5QcMWxZm3KjQ1spi+HG5k2+8lDwm2e0c35Ustw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=arm.com; dmarc=pass action=none header.from=arm.com; dkim=pass header.d=arm.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector2-armh-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=56XhC9hZrId6Q76ntg9FwAcIw7v5ZnhAj2YG+kysR8s=; b=1OFrIpO/K1DvqnkYda2ijqlJLiMPyUX0+cMcxmr/9v8gsSh0mivZaUHw3/br8drf7wD+O4zQ+NHvATObiVWsau21oII/g1n0Vr9Gycd3kn2eir5mJr8uSZqc15yUMCMkg33snw3ragMqJX/4ygKL/oT1ZcnRTaajDhXSHoHnT5k= Authentication-Results-Original: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; Received: from DB9PR08MB6507.eurprd08.prod.outlook.com (2603:10a6:10:25a::6) by AS2PR08MB9425.eurprd08.prod.outlook.com (2603:10a6:20b:5eb::9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6954.28; Mon, 6 Nov 2023 11:20:09 +0000 Received: from DB9PR08MB6507.eurprd08.prod.outlook.com ([fe80::6118:948d:f205:3182]) by DB9PR08MB6507.eurprd08.prod.outlook.com ([fe80::6118:948d:f205:3182%4]) with mapi id 15.20.6954.028; Mon, 6 Nov 2023 11:20:09 +0000 Content-Type: multipart/mixed; boundary="------------nIo9MbJdT79IoCMlYca73OyB" Message-ID: <21f686aa-3fc1-4098-9888-0b5c6c95eae6@arm.com> Date: Mon, 6 Nov 2023 11:20:06 +0000 User-Agent: Mozilla Thunderbird Content-Language: en-US To: "gcc-patches@gcc.gnu.org" Cc: Kyrylo Tkachov , Richard Earnshaw , richard.sandiford@arm.com, ramana.gcc@gmail.com From: Stamatis Markianos-Wright Subject: [PATCH 2/2] arm: Add support for MVE Tail-Predicated Low Overhead Loops X-ClientProxiedBy: LO2P265CA0435.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:e::15) To DB9PR08MB6507.eurprd08.prod.outlook.com (2603:10a6:10:25a::6) MIME-Version: 1.0 X-MS-TrafficTypeDiagnostic: DB9PR08MB6507:EE_|AS2PR08MB9425:EE_|AM3PEPF0000A795:EE_|AS8PR08MB9220:EE_ X-MS-Office365-Filtering-Correlation-Id: 17c4dcf6-7514-4aeb-106b-08dbdeba7ce9 x-checkrecipientrouted: true NoDisclaimer: true X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Untrusted: BCL:0; X-Microsoft-Antispam-Message-Info-Original: cJT7cM6usl5Ox5IH/okawW2PjWlV1/5cUnq+B9mIZsX01ZWIyJsl5SK1LnnAfweWvmihNWXqyFAALPI32h2nVlG0nHWLfLb2HPHy7No92Dk3+k3ZvG2zF+75Hke3E40W+imc9PzTY8sIXroDCK8jNBks5ceRUrvsI1BrpEGAohxuW01rJynILJcagemSBZoTDbxRG7YkpUzmeO48o+IyR/vsQrPadrTVtq2Y3TyDbb/Smomh5bysaDOOAq/GIjWyQeWhpCAOLdyE6GYWy4fnCk7dr31crWLP6k7TncYKbkkIUzjeV5OwISHeeUx7NAfCvRzBCf3Z5ny+BmJy/FVqINzQJ6BMRiTWcWJ6s9D8GILjF5Rb8C1kfWrtTM9Jk4UNBg4ZTKht030bDZub3vdanrOyImymn2aSxDZLktD9Rbaex5MvyeH2+NsPoiDt4tuUeGRWOV3UJGAroCzxsK+ixrOWCrnc03ks2Qa4HIbXd/uKzFJle4zntg7nKQrp3+bosa01zkozmxs/n80lYr6mzxy0GdiUbMjcGeAfdHVva37WjTt9MkPZJHam372nHuBIGYvziM5MTePDdnNrnpbTT+xVTcWu/QJ6jykUvXMlqk1XYrp5prPQv9D8jcMk6bUUFgusCztxLMR25kQYiGaNMiYLkx+pC0aWQpy/MCYxwcDatb9/FSLBO4yTQq1CG6R8 X-Forefront-Antispam-Report-Untrusted: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DB9PR08MB6507.eurprd08.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(346002)(136003)(39860400002)(396003)(366004)(376002)(230922051799003)(1800799009)(64100799003)(451199024)(186009)(2616005)(6512007)(26005)(6486002)(478600001)(966005)(5660300002)(31696002)(8936002)(4326008)(36756003)(8676002)(41300700001)(86362001)(2906002)(235185007)(66556008)(66476007)(6916009)(54906003)(66946007)(316002)(6666004)(33964004)(6506007)(38100700002)(31686004)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS2PR08MB9425 Original-Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=arm.com; X-EOPAttributedMessage: 0 X-MS-Exchange-Transport-CrossTenantHeadersStripped: AM3PEPF0000A795.eurprd04.prod.outlook.com X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id-Prvs: 5eb892ac-ac5b-4d1d-9426-08dbdeba55f5 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ORHv2GhgCLf3jY4yxdknLogVI8QCOh9uujh7KVlNZSPYSV/jjgqngKBfmy4tQZIzCAizn1qlZrlYpmEMnkg7pMnbJHjFrQrgNi0GAFObID6bj4mcc99Xa9xEreuAwXpTLuV3fRTp0K67cawnxHYWjMLJbf63AJsCrEOvVYhEfjKFhFTfPbVY4kT8irGQM8W97OPMB0Ng8Ojb9t2ZAsnXDFBAp9MApG1Tm3GGAhgnCkOA5/evQyXHQ6lpDiDvAIZOwGADIEupTuYiXh0dT88JORnF8rnZgrhb7BgCFTjtUu3AHx8OOxiVVc9pBBXkBosunihnNE1j/b/fyRID3Rf4/+Kks+fop8Lv5LhdjZ4Y3JdtXkeHHTIY853/77US6Gnz82PLFskfse3fSpBl4jnAenPSkUSQaBdm+ECSf28q8GJZyeMBgtBFKInBLqR3M8xod1qOWtOkEUEob171+XOCERw3M5TGS76D4RqqYBO+B/tn7LZuTi5W22w2OO+rSFiEPZRWANhkA5cw3YY/OHktMyESprFFKNsORgs+CNSID05ANV6EMHc6undT8ICTxQrPkSy00LPzqZySyY60aQ8PFJRIOpx8vEaGS4Bh0iJ9hszhH3S3AMdxbfGf5sqXMe++1gAZHKRaVO+VXu5hEixM4DXToXIMeIl0ebLcAmbNnkeXL/SQh00a6ewD19kbRP+al4qCBZDiZUzPObj3FrOCT84BCfsSSKeskF/1BSXVm8M3zUwRF9RdxgQHU1rA+ShwwuIjhcn34kF+DcCATUaGmSm1AyI/vuRT1YGtk4hduZKLmG4zQTBI1BwNRjGGjSY+ X-Forefront-Antispam-Report: CIP:63.35.35.123;CTRY:IE;LANG:en;SCL:1;SRV:;IPV:CAL;SFV:NSPM;H:64aa7808-outbound-1.mta.getcheckrecipient.com;PTR:ec2-63-35-35-123.eu-west-1.compute.amazonaws.com;CAT:NONE;SFS:(13230031)(4636009)(376002)(346002)(136003)(396003)(39860400002)(230922051799003)(64100799003)(1800799009)(186009)(451199024)(82310400011)(46966006)(36840700001)(40470700004)(40460700003)(40480700001)(36756003)(4326008)(336012)(8936002)(8676002)(316002)(26005)(70206006)(70586007)(54906003)(6916009)(235185007)(5660300002)(36860700001)(2906002)(47076005)(41300700001)(478600001)(6512007)(966005)(6486002)(2616005)(33964004)(6666004)(6506007)(107886003)(31686004)(82740400003)(31696002)(86362001)(356005)(81166007)(43740500002);DIR:OUT;SFP:1101; X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Nov 2023 11:21:14.3364 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 17c4dcf6-7514-4aeb-106b-08dbdeba7ce9 X-MS-Exchange-CrossTenant-Id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=f34e5979-57d9-4aaa-ad4d-b122a662184d;Ip=[63.35.35.123];Helo=[64aa7808-outbound-1.mta.getcheckrecipient.com] X-MS-Exchange-CrossTenant-AuthSource: AM3PEPF0000A795.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: AS8PR08MB9220 X-Spam-Status: No, score=-12.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,FORGED_SPF_HELO,GIT_PATCH_0,KAM_DMARC_NONE,KAM_SHORT,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP,T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --------------nIo9MbJdT79IoCMlYca73OyB Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Patch has already been mostly approved at: https://gcc.gnu.org/pipermail/gcc-patches/2023-September/630326.html https://gcc.gnu.org/pipermail/gcc-patches/2023-October/634139.html ... But this latest revision includes: * Changes based on the review from Richard Sandiford (thank you!) * A rebase to latest trunk So I'm hoping this is good to go in as-is :) --------------nIo9MbJdT79IoCMlYca73OyB Content-Type: text/x-patch; charset=UTF-8; name="2.patch" Content-Disposition: attachment; filename="2.patch" Content-Transfer-Encoding: base64 Y29tbWl0IDFlYjdiOGM4NGQ4Njg3ZTQ5M2I2NTQwNmNhN2Q0ZmU0Y2RiMDhlNTkKQXV0aG9yOiBT dGFtIE1hcmtpYW5vcy1XcmlnaHQgPHN0YW0ubWFya2lhbm9zLXdyaWdodEBhcm0uY29tPgpEYXRl OiAgIFR1ZSBPY3QgMTggMTc6NDI6NTYgMjAyMiArMDEwMAoKICAgIGFybTogQWRkIHN1cHBvcnQg Zm9yIE1WRSBUYWlsLVByZWRpY2F0ZWQgTG93IE92ZXJoZWFkIExvb3BzCiAgICAKICAgIFRoaXMg aXMgdGhlIDIvMiBwYXRjaCB0aGF0IGNvbnRhaW5zIHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgbmVl ZGVkCiAgICBmb3IgTVZFIFRhaWwgUHJlZGljYXRlZCBMb3cgT3ZlcmhlYWQgTG9vcHMuICBTZWUg bXkgcHJldmlvdXMgZW1haWwKICAgIGZvciBhIGdlbmVyYWwgaW50cm9kdWN0aW9uIG9mIE1WRSBM T0xzLgogICAgCiAgICBUaGlzIHN1cHBvcnQgaXMgYWRkZWQgdGhyb3VnaCB0aGUgYWxyZWFkeSBl eGlzdGluZyBsb29wLWRvbG9vcAogICAgbWVjaGFuaXNtcyB0aGF0IGFyZSB1c2VkIGZvciBub24t TVZFIGRscy9sZSBsb29waW5nLgogICAgCiAgICBNaWQtZW5kIGNoYW5nZXMgYXJlOgogICAgCiAg ICAxKSBSZWxheCB0aGUgbG9vcC1kb2xvb3AgbWVjaGFuaXNtIGluIHRoZSBtaWQtZW5kIHRvIGFs bG93IGZvcgogICAgICAgZGVjcmVtZW50IG51bWJlcnMgb3RoZXIgdGhhdCAtMSBhbmQgZm9yIGBj b3VudGAgdG8gYmUgYW4KICAgICAgIHJ0eCBjb250YWluaW5nIGEgc2ltcGxlIFJFRyAod2hpY2gg aW4gdGhpcyBjYXNlIHdpbGwgY29udGFpbgogICAgICAgdGhlIG51bWJlciBvZiBlbGVtZW50cyB0 byBiZSBwcm9jZXNzZWQpLCByYXRoZXIKICAgICAgIHRoYW4gYW4gZXhwcmVzc2lvbiBmb3IgY2Fs Y3VsYXRpbmcgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zLgogICAgMikgQWRkZWQgYSBuZXcgZGYg dXRpbGl0eSBmdW5jdGlvbjogYGRmX2JiX3JlZ25vX29ubHlfZGVmX2ZpbmRgIHRoYXQKICAgICAg IHdpbGwgcmV0dXJuIHRoZSBERUYgb2YgYSBSRUcgaWYgaXQgaXMgREVGLWVkIG9ubHkgb25jZSB3 aXRoaW4gdGhlCiAgICAgICBiYXNpYyBibG9jay4KICAgIAogICAgQW5kIG1hbnkgdGhpbmdzIGlu IHRoZSBiYWNrZW5kIHRvIGltcGxlbWVudCB0aGUgYWJvdmUgb3B0aW1pc2F0aW9uOgogICAgCiAg ICAzKSAgSW1wbGVtZW50IHRoZSBgYXJtX3ByZWRpY3RfZG9sb29wX3BgIHRhcmdldCBob29rIHRv IGluc3RydWN0IHRoZQogICAgICAgIG1pZC1lbmQgYWJvdXQgTG93IE92ZXJoZWFkIExvb3BzIChN VkUgb3Igbm90KSwgYXMgd2VsbCBhcwogICAgICAgIGBhcm1fbG9vcF91bnJvbGxfYWRqdXN0YCB3 aGljaCB3aWxsIHByZXZlbnQgdW5yb2xsaW5nIG9mIGFueSBsb29wcwogICAgICAgIHRoYXQgYXJl IHZhbGlkIGZvciBiZWNvbWluZyBNVkUgVGFpbF9QcmVkaWNhdGVkIExvdyBPdmVyaGVhZCBMb29w cwogICAgICAgICh1bnJvbGxpbmcgY2FuIHRyYW5zZm9ybSBhIGxvb3AgaW4gd2F5cyB0aGF0IGlu dmFsaWRhdGUgdGhlIGRsc3RwLwogICAgICAgIGxldHAgdHJhbmZvcm1hdGlvbiBsb2dpYyBhbmQg dGhlIGJlbmVmaXQgb2YgdGhlIGRsc3RwL2xldHAgbG9vcAogICAgICAgIHdvdWxkIGJlIGNvbnNp ZGVyYWJseSBoaWdoZXIgdGhhbiB0aGF0IG9mIHVucm9sbGluZykKICAgIDQpICBBcHByb3ByaWF0 ZSBjaGFuZ2VzIHRvIHRoZSBkZWZpbmVfZXhwYW5kIG9mIGRvbG9vcF9lbmQsIG5ldwogICAgICAg IHBhdHRlcm5zIGZvciBkbHN0cCBhbmQgbGV0cCwgbmV3IGl0ZXJhdG9ycywgIHVuc3BlY3MsIGV0 Yy4KICAgIDUpIGBhcm1fbXZlX2xvb3BfdmFsaWRfZm9yX2Rsc3RwYCBhbmQgYSBudW1iZXIgb2Yg Y2hlY2tpbmcgZnVuY3Rpb25zOgogICAgICAgKiBgYXJtX212ZV9kbHN0cF9jaGVja19kZWNfY291 bnRlcmAKICAgICAgICogYGFybV9tdmVfZGxzdHBfY2hlY2tfaW5jX2NvdW50ZXJgCiAgICAgICAq IGBhcm1fbXZlX2NoZWNrX3JlZ19vcmlnaW5faXNfbnVtX2VsZW1zYAogICAgICAgKiBgYXJtX212 ZV9jaGVja19kZl9jaGFpbl9iYWNrX2Zvcl9pbXBsaWNfcHJlZGljYAogICAgICAgKiBgYXJtX212 ZV9jaGVja19kZl9jaGFpbl9md2RfZm9yX2ltcGxpY19wcmVkaWNfaW1wYWN0YAogICAgICAgVGhp cyBhbGwsIGluIHNtb2Ugd2F5IG9yIGFub3RoZXIsIGFyZSBydW5uaW5nIGNoZWNrcyBvbiB0aGUg bG9vcAogICAgICAgc3RydWN0dXJlIGluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGUgbG9vcCBp cyB2YWxpZCBmb3IgZGxzdHAvbGV0cAogICAgICAgdHJhbnNmb3JtYXRpb24uCiAgICA2KSBgYXJt X2F0dGVtcHRfZGxzdHBfdHJhbnNmb3JtYDogKGNhbGxlZCBmcm9tIHRoZSBkZWZpbmVfZXhwYW5k IG9mCiAgICAgICAgZG9sb29wX2VuZCkgdGhpcyBmdW5jdGlvbiByZS1jaGVja3MgZm9yIHRoZSBs b29wJ3Mgc3VpdGFiaWxpdHkgZm9yCiAgICAgICAgZGxzdHAvbGV0cCB0cmFuc2Zvcm1hdGlvbiBh bmQgdGhlbiBpbXBsZW1lbnRzIGl0LCBpZiBwb3NzaWJsZS4KICAgIDcpIFZhcmlvdXMgdXRpbGl0 eSBmdW5jdGlvbnM6CiAgICAgICAqYGFybV9tdmVfZ2V0X3ZjdHBfbGFuZXNgIHRvIG1hcAogICAg ICAgZnJvbSB2Y3RwIHVuc3BlY3MgdG8gbnVtYmVyIG9mIGxhbmVzLCBhbmQgYGFybV9nZXRfcmVx dWlyZWRfdnByX3JlZ2AKICAgICAgIHRvIGNoZWNrIGFuIGluc24gdG8gc2VlIGlmIGl0IHJlcXVp cmVzIHRoZSBWUFIgb3Igbm90LgogICAgICAgKiBgYXJtX212ZV9nZXRfbG9vcF92Y3RwYAogICAg ICAgKiBgYXJtX212ZV9nZXRfdmN0cF9sYW5lc2AKICAgICAgICogYGFybV9lbWl0X212ZV91bnBy ZWRpY2F0ZWRfaW5zbl90b19zZXFgCiAgICAgICAqIGBhcm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWdg CiAgICAgICAqIGBhcm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWdfcGFyYW1gCiAgICAgICAqIGBhcm1f Z2V0X3JlcXVpcmVkX3Zwcl9yZWdfcmV0X3ZhbGAKICAgICAgICogYGFybV9tdmVfaXNfYWNyb3Nz X3ZlY3Rvcl9pbnNuYAogICAgICAgKiBgYXJtX2lzX212ZV9sb2FkX3N0b3JlX2luc25gCiAgICAg ICAqIGBhcm1fbXZlX3ZlY19pbnNuX2lzX3ByZWRpY2F0ZWRfd2l0aF90aGlzX3ByZWRpY2F0ZWAK ICAgICAgICogYGFybV9tdmVfdmVjX2luc25faXNfdW5wcmVkaWNhdGVkX29yX3VzZXNfb3RoZXJf cHJlZGljYXRlYAogICAgCiAgICBObyByZWdyZXNzaW9ucyBvbiBhcm0tbm9uZS1lYWJpIHdpdGgg dmFyaW91cyB0YXJnZXRzIGFuZCBvbgogICAgYWFyY2g2NC1ub25lLWVsZi4gVGhvdWdodHMgb24g Z2V0dGluZyB0aGlzIGludG8gdHJ1bms/CiAgICAKICAgIFRoYW5rIHlvdSwKICAgIFN0YW0gTWFy a2lhbm9zLVdyaWdodAogICAgCiAgICBnY2MvQ2hhbmdlTG9nOgogICAgCiAgICAgICAgICAgICog Y29uZmlnL2FybS9hcm0tcHJvdG9zLmggKGFybV90YXJnZXRfaW5zbl9va19mb3JfbG9iKTogUmVu YW1lIHRvLi4uCiAgICAgICAgICAgIChhcm1fdGFyZ2V0X2JiX29rX2Zvcl9sb2IpOiAuLi50aGlz CiAgICAgICAgICAgIChhcm1fYXR0ZW1wdF9kbHN0cF90cmFuc2Zvcm0pOiBOZXcuCiAgICAgICAg ICAgICogY29uZmlnL2FybS9hcm0uY2MgKFRBUkdFVF9MT09QX1VOUk9MTF9BREpVU1QpOiBOZXcu CiAgICAgICAgICAgIChUQVJHRVRfUFJFRElDVF9ET0xPT1BfUCk6IE5ldy4KICAgICAgICAgICAg KGFybV9ibG9ja19zZXRfdmVjdCk6CiAgICAgICAgICAgIChhcm1fdGFyZ2V0X2luc25fb2tfZm9y X2xvYik6IFJlbmFtZSBmcm9tIGFybV90YXJnZXRfaW5zbl9va19mb3JfbG9iLgogICAgICAgICAg ICAoYXJtX3RhcmdldF9iYl9va19mb3JfbG9iKTogTmV3LgogICAgICAgICAgICAoYXJtX212ZV9n ZXRfdmN0cF9sYW5lcyk6IE5ldy4KICAgICAgICAgICAgKGFybV9nZXRfcmVxdWlyZWRfdnByX3Jl Zyk6IE5ldy4KICAgICAgICAgICAgKGFybV9nZXRfcmVxdWlyZWRfdnByX3JlZ19wYXJhbSk6IE5l dy4KICAgICAgICAgICAgKGFybV9nZXRfcmVxdWlyZWRfdnByX3JlZ19yZXRfdmFsKTogTmV3Lgog ICAgICAgICAgICAoYXJtX212ZV9nZXRfbG9vcF92Y3RwKTogTmV3LgogICAgICAgICAgICAoYXJt X212ZV92ZWNfaW5zbl9pc191bnByZWRpY2F0ZWRfb3JfdXNlc19vdGhlcl9wcmVkaWNhdGUpOiBO ZXcuCiAgICAgICAgICAgIChhcm1fbXZlX3ZlY19pbnNuX2lzX3ByZWRpY2F0ZWRfd2l0aF90aGlz X3ByZWRpY2F0ZSk6IE5ldy4KICAgICAgICAgICAgKGFybV9tdmVfY2hlY2tfZGZfY2hhaW5fYmFj a19mb3JfaW1wbGljX3ByZWRpYyk6IE5ldy4KICAgICAgICAgICAgKGFybV9tdmVfY2hlY2tfZGZf Y2hhaW5fZndkX2Zvcl9pbXBsaWNfcHJlZGljX2ltcGFjdCk6IE5ldy4KICAgICAgICAgICAgKGFy bV9tdmVfY2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxlbXMpOiBOZXcuCiAgICAgICAgICAgIChh cm1fbXZlX2Rsc3RwX2NoZWNrX2luY19jb3VudGVyKTogTmV3LgogICAgICAgICAgICAoYXJtX212 ZV9kbHN0cF9jaGVja19kZWNfY291bnRlcik6IE5ldy4KICAgICAgICAgICAgKGFybV9tdmVfbG9v cF92YWxpZF9mb3JfZGxzdHApOiBOZXcuCiAgICAgICAgICAgIChhcm1fbXZlX2lzX2Fjcm9zc192 ZWN0b3JfaW5zbik6IE5ldy4KICAgICAgICAgICAgKGFybV9pc19tdmVfbG9hZF9zdG9yZV9pbnNu KTogTmV3LgogICAgICAgICAgICAoYXJtX3ByZWRpY3RfZG9sb29wX3ApOiBOZXcuCiAgICAgICAg ICAgIChhcm1fbG9vcF91bnJvbGxfYWRqdXN0KTogTmV3LgogICAgICAgICAgICAoYXJtX2VtaXRf bXZlX3VucHJlZGljYXRlZF9pbnNuX3RvX3NlcSk6IE5ldy4KICAgICAgICAgICAgKGFybV9hdHRl bXB0X2Rsc3RwX3RyYW5zZm9ybSk6IE5ldy4KICAgICAgICAgICAgKiBjb25maWcvYXJtL2l0ZXJh dG9ycy5tZCAoRExTVFApOiBOZXcuCiAgICAgICAgICAgIChtb2RlMSk6IEFkZCBETFNUUCBtYXBw aW5ncy4KICAgICAgICAgICAgKiBjb25maWcvYXJtL212ZS5tZCAoKnByZWRpY2F0ZWRfZG9sb29w X2VuZF9pbnRlcm5hbCk6IE5ldy4KICAgICAgICAgICAgKGRsc3RwPG1vZGUxPl9pbnNuKTogTmV3 LgogICAgICAgICAgICAqIGNvbmZpZy9hcm0vdGh1bWIyLm1kIChkb2xvb3BfZW5kKTogVXBkYXRl IGZvciBNVkUgTE9Mcy4KICAgICAgICAgICAgKiBjb25maWcvYXJtL3Vuc3BlY3MubWQ6IE5ldyB1 bnNwZWNzLgogICAgICAgICAgICAqIGRmLWNvcmUuY2MgKGRmX2JiX3JlZ25vX29ubHlfZGVmX2Zp bmQpOiBOZXcuCiAgICAgICAgICAgICogZGYuaCAoZGZfYmJfcmVnbm9fb25seV9kZWZfZmluZCk6 IE5ldy4KICAgICAgICAgICAgKiBsb29wLWRvbG9vcC5jYyAoZG9sb29wX2NvbmRpdGlvbl9nZXQp OiBSZWxheCBjb25kaXRpb25zLgogICAgICAgICAgICAoZG9sb29wX29wdGltaXplKTogQWRkIHN1 cHBvcnQgZm9yIGVsZW1lbnR3aXNlIExvTHMuCiAgICAKICAgIGdjYy90ZXN0c3VpdGUvQ2hhbmdl TG9nOgogICAgCiAgICAgICAgICAgICogZ2NjLnRhcmdldC9hcm0vbG9iLmg6IFVwZGF0ZSBmcmFt ZXdvcmsuCiAgICAgICAgICAgICogZ2NjLnRhcmdldC9hcm0vbG9iMS5jOiBMaWtld2lzZS4KICAg ICAgICAgICAgKiBnY2MudGFyZ2V0L2FybS9sb2I2LmM6IExpa2V3aXNlLgogICAgICAgICAgICAq IGdjYy50YXJnZXQvYXJtL212ZS9kbHN0cC1jb21waWxlLWFzbS5jOiBOZXcgdGVzdC4KICAgICAg ICAgICAgKiBnY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50MTZ4OC5jOiBOZXcgdGVzdC4KICAg ICAgICAgICAgKiBnY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50MzJ4NC5jOiBOZXcgdGVzdC4K ICAgICAgICAgICAgKiBnY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50NjR4Mi5jOiBOZXcgdGVz dC4KICAgICAgICAgICAgKiBnY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50OHgxNi5jOiBOZXcg dGVzdC4KICAgICAgICAgICAgKiBnY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW52YWxpZC1hc20u YzogTmV3IHRlc3QuCgpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vYXJtLXByb3Rvcy5oIGIv Z2NjL2NvbmZpZy9hcm0vYXJtLXByb3Rvcy5oCmluZGV4IDJmNWNhNzllZDhkLi40ZjE2NGM1NDc0 MCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJtLXByb3Rvcy5oCisrKyBiL2djYy9jb25m aWcvYXJtL2FybS1wcm90b3MuaApAQCAtNjUsOCArNjUsOCBAQCBleHRlcm4gdm9pZCBhcm1fZW1p dF9zcGVjdWxhdGlvbl9iYXJyaWVyX2Z1bmN0aW9uICh2b2lkKTsKIGV4dGVybiB2b2lkIGFybV9k ZWNvbXBvc2VfZGlfYmlub3AgKHJ0eCwgcnR4LCBydHggKiwgcnR4ICosIHJ0eCAqLCBydHggKik7 CiBleHRlcm4gYm9vbCBhcm1fcV9iaXRfYWNjZXNzICh2b2lkKTsKIGV4dGVybiBib29sIGFybV9n ZV9iaXRzX2FjY2VzcyAodm9pZCk7Ci1leHRlcm4gYm9vbCBhcm1fdGFyZ2V0X2luc25fb2tfZm9y X2xvYiAocnR4KTsKLQorZXh0ZXJuIGJvb2wgYXJtX3RhcmdldF9iYl9va19mb3JfbG9iIChiYXNp Y19ibG9jayk7CitleHRlcm4gcnR4IGFybV9hdHRlbXB0X2Rsc3RwX3RyYW5zZm9ybSAocnR4KTsK ICNpZmRlZiBSVFhfQ09ERQogZW51bSByZWdfY2xhc3MKIGFybV9tb2RlX2Jhc2VfcmVnX2NsYXNz IChtYWNoaW5lX21vZGUpOwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmNjIGIvZ2Nj L2NvbmZpZy9hcm0vYXJtLmNjCmluZGV4IDYyMGVmN2JmYjJmLi5kZWYyZjBkNmE1OCAxMDA2NDQK LS0tIGEvZ2NjL2NvbmZpZy9hcm0vYXJtLmNjCisrKyBiL2djYy9jb25maWcvYXJtL2FybS5jYwpA QCAtNjU5LDYgKzY1OSwxMiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9zcGVjIGFy bV9hdHRyaWJ1dGVfdGFibGVbXSA9CiAjdW5kZWYgVEFSR0VUX0hBVkVfQ09ORElUSU9OQUxfRVhF Q1VUSU9OCiAjZGVmaW5lIFRBUkdFVF9IQVZFX0NPTkRJVElPTkFMX0VYRUNVVElPTiBhcm1faGF2 ZV9jb25kaXRpb25hbF9leGVjdXRpb24KIAorI3VuZGVmIFRBUkdFVF9MT09QX1VOUk9MTF9BREpV U1QKKyNkZWZpbmUgVEFSR0VUX0xPT1BfVU5ST0xMX0FESlVTVCBhcm1fbG9vcF91bnJvbGxfYWRq dXN0CisKKyN1bmRlZiBUQVJHRVRfUFJFRElDVF9ET0xPT1BfUAorI2RlZmluZSBUQVJHRVRfUFJF RElDVF9ET0xPT1BfUCBhcm1fcHJlZGljdF9kb2xvb3BfcAorCiAjdW5kZWYgVEFSR0VUX0xFR0lU SU1BVEVfQ09OU1RBTlRfUAogI2RlZmluZSBUQVJHRVRfTEVHSVRJTUFURV9DT05TVEFOVF9QIGFy bV9sZWdpdGltYXRlX2NvbnN0YW50X3AKIApAQCAtMzQ0NzIsMTkgKzM0NDc4LDExMDMgQEAgYXJt X2ludmFsaWRfd2l0aGluX2RvbG9vcCAoY29uc3QgcnR4X2luc24gKmluc24pCiB9CiAKIGJvb2wK LWFybV90YXJnZXRfaW5zbl9va19mb3JfbG9iIChydHggaW5zbikKK2FybV90YXJnZXRfYmJfb2tf Zm9yX2xvYiAoYmFzaWNfYmxvY2sgYmIpCiB7Ci0gIGJhc2ljX2Jsb2NrIGJiID0gQkxPQ0tfRk9S X0lOU04gKGluc24pOwogICAvKiBNYWtlIHN1cmUgdGhlIGJhc2ljIGJsb2NrIG9mIHRoZSB0YXJn ZXQgaW5zbiBpcyBhIHNpbXBsZSBsYXRjaAogICAgICBoYXZpbmcgYXMgc2luZ2xlIHByZWRlY2Vz c29yIGFuZCBzdWNjZXNzb3IgdGhlIGJvZHkgb2YgdGhlIGxvb3AKICAgICAgaXRzZWxmLiAgT25s eSBzaW1wbGUgbG9vcHMgd2l0aCBhIHNpbmdsZSBiYXNpYyBibG9jayBhcyBib2R5IGFyZQogICAg ICBzdXBwb3J0ZWQgZm9yICdsb3cgb3ZlciBoZWFkIGxvb3AnIG1ha2luZyBzdXJlIHRoYXQgTEUg dGFyZ2V0IGlzCiAgICAgIGFib3ZlIExFIGl0c2VsZiBpbiB0aGUgZ2VuZXJhdGVkIGNvZGUuICAq LwotCiAgIHJldHVybiBzaW5nbGVfc3VjY19wIChiYikKLSAgICAmJiBzaW5nbGVfcHJlZF9wIChi YikKLSAgICAmJiBzaW5nbGVfc3VjY19lZGdlIChiYiktPmRlc3QgPT0gc2luZ2xlX3ByZWRfZWRn ZSAoYmIpLT5zcmMKLSAgICAmJiBjb250YWluc19ub19hY3RpdmVfaW5zbl9wIChiYik7CisJICYm IHNpbmdsZV9wcmVkX3AgKGJiKQorCSAmJiBzaW5nbGVfc3VjY19lZGdlIChiYiktPmRlc3QgPT0g c2luZ2xlX3ByZWRfZWRnZSAoYmIpLT5zcmM7Cit9CisKKy8qIFV0aWxpdHkgZnVjdGlvbjogR2l2 ZW4gYSBWQ1RQIG9yIGEgVkNUUF9NIGluc24sIHJldHVybiB0aGUgbnVtYmVyIG9mIE1WRQorICAg bGFuZXMgYmFzZWQgb24gdGhlIG1hY2hpbmUgbW9kZSBiZWluZyB1c2VkLiAgKi8KKworc3RhdGlj IGludAorYXJtX212ZV9nZXRfdmN0cF9sYW5lcyAocnR4IHgpCit7CisgIGlmIChHRVRfQ09ERSAo eCkgPT0gU0VUICYmIEdFVF9DT0RFIChYRVhQICh4LCAxKSkgPT0gVU5TUEVDCisgICAgICAmJiAo WElOVCAoWEVYUCAoeCwgMSksIDEpID09IFZDVFAgfHwgWElOVCAoWEVYUCAoeCwgMSksIDEpID09 IFZDVFBfTSkpCisgICAgeworICAgICAgbWFjaGluZV9tb2RlIG1vZGUgPSBHRVRfTU9ERSAoWEVY UCAoeCwgMSkpOworICAgICAgcmV0dXJuIChWRUNUT1JfTU9ERV9QIChtb2RlKSAmJiBWQUxJRF9N VkVfUFJFRF9NT0RFIChtb2RlKSkKKwkgICAgID8gR0VUX01PREVfTlVOSVRTIChtb2RlKSA6IDA7 CisgICAgfQorICByZXR1cm4gMDsKK30KKworLyogQ2hlY2sgaWYgSU5TTiByZXF1aXJlcyB0aGUg dXNlIG9mIHRoZSBWUFIgcmVnLCBpZiBpdCBkb2VzLCByZXR1cm4gdGhlCisgICBzdWItcnR4IG9m IHRoZSBWUFIgcmVnLiAgVGhlIFRZUEUgYXJndW1lbnQgY29udHJvbHMgd2hldGhlcgorICAgdGhp cyBmdW5jdGlvbiBzaG91bGQ6CisgICAqIEZvciBUWVBFID09IDAsIGNoZWNrIGFsbCBvcGVyYW5k cywgaW5jbHVkaW5nIHRoZSBPVVQgb3BlcmFuZHMsCisgICAgIGFuZCByZXR1cm4gdGhlIGZpcnN0 IG9jY3VycmVuY2Ugb2YgdGhlIFZQUiByZWcuCisgICAqIEZvciBUWVBFID09IDEsIG9ubHkgY2hl Y2sgdGhlIGlucHV0IG9wZXJhbmRzLgorICAgKiBGb3IgVFlQRSA9PSAyLCBvbmx5IGNoZWNrIHRo ZSBvdXRwdXQgb3BlcmFuZHMuCisgICAoSU5PVVQgb3BlcmFuZHMgYXJlIGNvbnNpZGVyZWQgYm90 aCBhcyBpbnB1dCBhbmQgb3V0cHV0IG9wZXJhbmRzKQorKi8KK3N0YXRpYyBydHgKK2FybV9nZXRf cmVxdWlyZWRfdnByX3JlZyAocnR4X2luc24gKmluc24sIHVuc2lnbmVkIGludCB0eXBlID0gMCkK K3sKKyAgZ2NjX2Fzc2VydCAodHlwZSA8IDMpOworICBpZiAoIU5PTkpVTVBfSU5TTl9QIChpbnNu KSkKKyAgICByZXR1cm4gTlVMTF9SVFg7CisKKyAgYm9vbCByZXF1aXJlc192cHI7CisgIGV4dHJh Y3RfY29uc3RyYWluX2luc24gKGluc24pOworICBpbnQgbl9vcGVyYW5kcyA9IHJlY29nX2RhdGEu bl9vcGVyYW5kczsKKyAgaWYgKHJlY29nX2RhdGEubl9hbHRlcm5hdGl2ZXMgPT0gMCkKKyAgICBy ZXR1cm4gTlVMTF9SVFg7CisKKyAgLyogRmlsbCBpbiByZWNvZ19vcF9hbHQgd2l0aCBpbmZvcm1h dGlvbiBhYm91dCB0aGUgY29uc3RyYWludHMgb2YKKyAgICAgdGhpcyBpbnNuLiAgKi8KKyAgcHJl cHJvY2Vzc19jb25zdHJhaW50cyAoaW5zbik7CisKKyAgZm9yIChpbnQgb3AgPSAwOyBvcCA8IG5f b3BlcmFuZHM7IG9wKyspCisgICAgeworICAgICAgcmVxdWlyZXNfdnByID0gdHJ1ZTsKKyAgICAg IGlmICh0eXBlID09IDEgJiYgcmVjb2dfZGF0YS5vcGVyYW5kX3R5cGVbb3BdID09IE9QX09VVCkK Kwljb250aW51ZTsKKyAgICAgIGVsc2UgaWYgKHR5cGUgPT0gMiAmJiByZWNvZ19kYXRhLm9wZXJh bmRfdHlwZVtvcF0gPT0gT1BfSU4pCisJY29udGludWU7CisKKyAgICAgIC8qIEl0ZXJhdGUgdGhy b3VnaCBhbHRlcm5hdGl2ZXMgb2Ygb3BlcmFuZCAib3AiIGluIHJlY29nX29wX2FsdCBhbmQKKwkg aWRlbnRpZnkgaWYgdGhlIG9wZXJhbmQgaXMgcmVxdWlyZWQgdG8gYmUgdGhlIFZQUi4gICovCisg ICAgICBmb3IgKGludCBhbHQgPSAwOyBhbHQgPCByZWNvZ19kYXRhLm5fYWx0ZXJuYXRpdmVzOyBh bHQrKykKKwl7CisJICBjb25zdCBvcGVyYW5kX2FsdGVybmF0aXZlICpvcF9hbHQKKwkgICAgICA9 ICZyZWNvZ19vcF9hbHRbYWx0ICogbl9vcGVyYW5kc107CisJICAvKiBGZXRjaCB0aGUgcmVnX2Ns YXNzIGZvciBlYWNoIGVudHJ5IGFuZCBjaGVjayBpdCBhZ2FpbnN0IHRoZQorCSAgICAgVlBSX1JF RyByZWdfY2xhc3MuICAqLworCSAgaWYgKGFsdGVybmF0aXZlX2NsYXNzIChvcF9hbHQsIG9wKSAh PSBWUFJfUkVHKQorCSAgICByZXF1aXJlc192cHIgPSBmYWxzZTsKKwl9CisgICAgICAvKiBJZiBh bGwgYWx0ZXJuYXRpdmVzIG9mIHRoZSBpbnNuIHJlcXVpcmUgdGhlIFZQUiByZWcgZm9yIHRoaXMg b3BlcmFuZCwKKwkgaXQgbWVhbnMgdGhhdCBlaXRoZXIgdGhpcyBpcyBWUFItZ2VuZXJhdGluZyBp bnN0cnVjdGlvbiwgbGlrZSBhIHZjdHAsCisJIHZjbXAsIGV0Yy4sIG9yIGl0IGlzIGEgVlBULXBy ZWRpY2F0ZWQgaW5zcnVjdGlvbi4gIFJldHVybiB0aGUgc3VicnR4CisJIG9mIHRoZSBWUFIgcmVn IG9wZXJhbmQuICAqLworICAgICAgaWYgKHJlcXVpcmVzX3ZwcikKKwlyZXR1cm4gcmVjb2dfZGF0 YS5vcGVyYW5kW29wXTsKKyAgICB9CisgIHJldHVybiBOVUxMX1JUWDsKK30KKworLyogV3JhcHBl ciBmdW5jdGlvbiBvZiBhcm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWcgd2l0aCBUWVBFID09IDEsIHNv IHJldHVybgorICAgc29tZXRoaW5nIG9ubHkgaWYgdGhlIFZQUiByZWcgaXMgYW4gaW5wdXQgb3Bl cmFuZCB0byB0aGUgaW5zbi4gICovCisKK3N0YXRpYyBydHgKK2FybV9nZXRfcmVxdWlyZWRfdnBy X3JlZ19wYXJhbSAocnR4X2luc24gKmluc24pCit7CisgIHJldHVybiBhcm1fZ2V0X3JlcXVpcmVk X3Zwcl9yZWcgKGluc24sIDEpOworfQorCisvKiBXcmFwcGVyIGZ1bmN0aW9uIG9mIGFybV9nZXRf cmVxdWlyZWRfdnByX3JlZyB3aXRoIFRZUEUgPT0gMiwgc28gcmV0dXJuCisgICBzb21ldGhpbmcg b25seSBpZiB0aGUgVlBSIHJlZyBpcyB0aGUgcmV0dXJuIHZhbHVlLCBhbiBvdXRwdXQgb2YsIG9y IGlzCisgICBjbG9iYmVyZWQgYnkgdGhlIGluc24uICAqLworCitzdGF0aWMgcnR4Cithcm1fZ2V0 X3JlcXVpcmVkX3Zwcl9yZWdfcmV0X3ZhbCAocnR4X2luc24gKmluc24pCit7CisgIHJldHVybiBh cm1fZ2V0X3JlcXVpcmVkX3Zwcl9yZWcgKGluc24sIDIpOworfQorCisvKiBTY2FuIHRoZSBiYXNp YyBibG9jayBvZiBhIGxvb3AgYm9keSBmb3IgYSB2Y3RwIGluc3RydWN0aW9uLiAgSWYgdGhlcmUg aXMKKyAgIGF0IGxlYXN0IHZjdHAgaW5zdHJ1Y3Rpb24sIHJldHVybiB0aGUgZmlyc3QgcnR4X2lu c24gKi4gICovCisKK3N0YXRpYyBydHhfaW5zbiAqCithcm1fbXZlX2dldF9sb29wX3ZjdHAgKGJh c2ljX2Jsb2NrIGJiKQoreworICBydHhfaW5zbiAqaW5zbiA9IEJCX0hFQUQgKGJiKTsKKworICAv KiBOb3cgc2NhbiB0aHJvdWdoIGFsbCB0aGUgaW5zdHJ1Y3Rpb24gcGF0dGVybnMgYW5kIHBpY2sg b3V0IHRoZSBWQ1RQCisgICAgIGluc3RydWN0aW9uLiAgV2UgcmVxdWlyZSBhcm1fZ2V0X3JlcXVp cmVkX3Zwcl9yZWdfcGFyYW0gdG8gYmUgZmFsc2UKKyAgICAgdG8gbWFrZSBzdXJlIHdlIHBpY2sg dXAgYSBWQ1RQLCByYXRoZXIgdGhhbiBhIFZDVFBfTS4gICovCisgIEZPUl9CQl9JTlNOUyAoYmIs IGluc24pCisgICAgaWYgKE5PTkRFQlVHX0lOU05fUCAoaW5zbikpCisgICAgICBpZiAoYXJtX2dl dF9yZXF1aXJlZF92cHJfcmVnX3JldF92YWwgKGluc24pCisJICAmJiAoYXJtX212ZV9nZXRfdmN0 cF9sYW5lcyAoUEFUVEVSTiAoaW5zbikpICE9IDApCisJICAmJiAhYXJtX2dldF9yZXF1aXJlZF92 cHJfcmVnX3BhcmFtIChpbnNuKSkKKwlyZXR1cm4gaW5zbjsKKyAgcmV0dXJuIE5VTEw7Cit9CisK Ky8qIFJldHVybiB0cnVlIGlmIElOU04gaXMgYSBNVkUgaW5zdHJ1Y3Rpb24gdGhhdCBpcyBWUFQt cHJlZGljYWJsZSwgYnV0IGluCisgICBpdHMgdW5wcmVkaWNhdGVkIGZvcm0sIG9yIGlmIGl0IGlz IHByZWRpY2F0ZWQsIGJ1dCBvbiBhIHByZWRpY2F0ZSBvdGhlcgorICAgdGhhbiBWUFJfUkVHLiAg Ki8KKworc3RhdGljIGJvb2wKK2FybV9tdmVfdmVjX2luc25faXNfdW5wcmVkaWNhdGVkX29yX3Vz ZXNfb3RoZXJfcHJlZGljYXRlIChydHhfaW5zbiAqaW5zbiwKKwkJCQkJCQkgIHJ0eCB2cHJfcmVn KQoreworICBydHggaW5zbl92cHJfcmVnX29wZXJhbmQ7CisgIGlmIChNVkVfVlBUX1VOUFJFRElD QVRFRF9JTlNOX1AgKGluc24pCisgICAgICB8fCAoTVZFX1ZQVF9QUkVESUNBVEVEX0lOU05fUCAo aW5zbikKKwkgICYmIChpbnNuX3Zwcl9yZWdfb3BlcmFuZCA9IGFybV9nZXRfcmVxdWlyZWRfdnBy X3JlZ19wYXJhbSAoaW5zbikpCisJICAmJiAhcnR4X2VxdWFsX3AgKHZwcl9yZWcsIGluc25fdnBy X3JlZ19vcGVyYW5kKSkpCisgICAgcmV0dXJuIHRydWU7CisgIGVsc2UKKyAgICByZXR1cm4gZmFs c2U7Cit9CisKKy8qIFJldHVybiB0cnVlIGlmIElOU04gaXMgYSBNVkUgaW5zdHJ1Y3Rpb24gdGhh dCBpcyBWUFQtcHJlZGljYWJsZSBhbmQgaXMKKyAgIHByZWRpY2F0ZWQgb24gVlBSX1JFRy4gICov CisKK3N0YXRpYyBib29sCithcm1fbXZlX3ZlY19pbnNuX2lzX3ByZWRpY2F0ZWRfd2l0aF90aGlz X3ByZWRpY2F0ZSAocnR4X2luc24gKmluc24sCisJCQkJCQkgICAgcnR4IHZwcl9yZWcpCit7Cisg IHJ0eCBpbnNuX3Zwcl9yZWdfb3BlcmFuZDsKKyAgaWYgKE1WRV9WUFRfUFJFRElDQVRFRF9JTlNO X1AgKGluc24pCisgICAgICAmJiAoaW5zbl92cHJfcmVnX29wZXJhbmQgPSBhcm1fZ2V0X3JlcXVp cmVkX3Zwcl9yZWdfcGFyYW0gKGluc24pKQorICAgICAgJiYgcnR4X2VxdWFsX3AgKHZwcl9yZWcs IGluc25fdnByX3JlZ19vcGVyYW5kKSkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgZWxzZQorICAgIHJl dHVybiBmYWxzZTsKK30KKworLyogVXRpbGl0eSBmdW5jdGlvbiB0byBpZGVudGlmeSBpZiBJTlNO IGlzIGFuIE1WRSBpbnN0cnVjdGlvbiB0aGF0IHBlcmZvcm1zCisgICBzb21lIGFjcm9zcy12ZWN0 b3Igb3BlcmF0aW9uIChhbmQgYXMgYSByZXN1bHQgZG9lcyBub3QgYWxpZ24gd2l0aCBub3JtYWwK KyAgIGxhbmUgcHJlZGljYXRpb24gcnVsZXMpLiAgQWxsIHN1Y2ggaW5zdHJ1Y3Rpb25zIGdpdmUg b25lIG9ubHkgc2NhbGFyCisgICBvdXRwdXQsIGV4Y2VwdCBmb3IgdnNobGNxIHdoaWNoIGdpdmVz IGEgUEFSQUxMRUwgb2YgYSB2ZWN0b3IgYW5kIGEgc2NhbGFyCisgICAob25lIHZlY3RvciByZXN1 bHQgYW5kIG9uZSBjYXJyeSBvdXRwdXQpLiAgKi8KKworc3RhdGljIGJvb2wKK2FybV9pc19tdmVf YWNyb3NzX3ZlY3Rvcl9pbnNuIChydHhfaW5zbiogaW5zbikKK3sKKyAgZGZfcmVmIGluc25fZGVm cyA9IE5VTEw7CisgIGlmICghTVZFX1ZQVF9QUkVESUNBQkxFX0lOU05fUCAoaW5zbikpCisgICAg cmV0dXJuIGZhbHNlOworCisgIGJvb2wgaXNfYWNyb3NzX3ZlY3RvciA9IGZhbHNlOworICBGT1Jf RUFDSF9JTlNOX0RFRiAoaW5zbl9kZWZzLCBpbnNuKQorICAgIGlmICghVkFMSURfTVZFX01PREUg KEdFVF9NT0RFIChERl9SRUZfUkVHIChpbnNuX2RlZnMpKSkKKwkmJiAhYXJtX2dldF9yZXF1aXJl ZF92cHJfcmVnX3JldF92YWwgKGluc24pKQorICAgICAgaXNfYWNyb3NzX3ZlY3RvciA9IHRydWU7 CisKKyAgcmV0dXJuIGlzX2Fjcm9zc192ZWN0b3I7Cit9CisKKy8qIFV0aWxpdHkgZnVuY3Rpb24g dG8gaWRlbnRpZnkgaWYgSU5TTiBpcyBhbiBNVkUgbG9hZCBvciBzdG9yZSBpbnN0cnVjdGlvbi4K KyAgICogRm9yIFRZUEUgPT0gMCwgY2hlY2sgYWxsIG9wZXJhbmRzLiAgSWYgdGhlIGZ1bmN0aW9u IHJldHVybnMgdHJ1ZSwKKyAgICAgSU5TTiBpcyBhIGxvYWQgb3IgYSBzdG9yZSBpbnNuLgorICAg KiBGb3IgVFlQRSA9PSAxLCBvbmx5IGNoZWNrIHRoZSBpbnB1dCBvcGVyYW5kcy4gIElmIHRoZSBm dW5jdGlvbiByZXR1cm5zCisgICAgIHRydWUsIElOU04gaXMgYSBsb2FkIGluc24uCisgICAqIEZv ciBUWVBFID09IDIsIG9ubHkgY2hlY2sgdGhlIG91dHB1dCBvcGVyYW5kcy4gIElmIHRoZSBmdW5j dGlvbiByZXR1cm5zCisgICAgIHRydWUsIElOU04gaXMgYSBzdG9yZSBpbnNuLiAgKi8KKworc3Rh dGljIGJvb2wKK2FybV9pc19tdmVfbG9hZF9zdG9yZV9pbnNuIChydHhfaW5zbiogaW5zbiwgaW50 IHR5cGUgPSAwKQoreworICBpbnQgbl9vcGVyYW5kcyA9IHJlY29nX2RhdGEubl9vcGVyYW5kczsK KyAgZXh0cmFjdF9pbnNuIChpbnNuKTsKKworICBmb3IgKGludCBvcCA9IDA7IG9wIDwgbl9vcGVy YW5kczsgb3ArKykKKyAgICB7CisgICAgICBpZiAodHlwZSA9PSAxICYmIHJlY29nX2RhdGEub3Bl cmFuZF90eXBlW29wXSA9PSBPUF9PVVQpCisJY29udGludWU7CisgICAgICBlbHNlIGlmICh0eXBl ID09IDIgJiYgcmVjb2dfZGF0YS5vcGVyYW5kX3R5cGVbb3BdID09IE9QX0lOKQorCWNvbnRpbnVl OworICAgICAgaWYgKG12ZV9tZW1vcnlfb3BlcmFuZCAocmVjb2dfZGF0YS5vcGVyYW5kW29wXSwK KwkJCSAgICAgIEdFVF9NT0RFIChyZWNvZ19kYXRhLm9wZXJhbmRbb3BdKSkpCisgICAgICByZXR1 cm4gdHJ1ZTsKKyAgICB9CisgIHJldHVybiBmYWxzZTsKK30KKworLyogV2hlbiB0cmFuc2Zvcm1p bmcgYW4gTVZFIGludHJpbnNpYyBsb29wIGludG8gYW4gTVZFIFRhaWwgUHJlZGljYXRlZCBMb3cK KyAgIE92ZXJoZWFkIExvb3AsIHRoZXJlIGFyZSBhIG51bWJlciBvZiBpbnN0cnVjdGlvbnMgdGhh dCwgaWYgaW4gdGhlaXIKKyAgIHVucHJlZGljYXRlZCBmb3JtLCBhY3QgYWNyb3NzIHZlY3RvciBs YW5lcywgYnV0IGFyZSBzdGlsbCBzYWZlIHRvIGluY2x1ZGUKKyAgIHdpdGhpbiB0aGUgbG9vcCwg ZGVzcGl0ZSB0aGUgaW1wbGljaXQgcHJlZGljYXRpb24gYWRkZWQgdG8gdGhlIHZlY3RvciBsYW5l cy4KKyAgIFRoaXMgbGlzdCBoYXMgYmVlbiBjb21waWxlZCBieSBjYXJlZnVsbHkgYW5hbHl6aW5n IHRoZSBpbnN0cnVjdGlvbgorICAgcHNldWRvY29kZSBpbiB0aGUgQXJtLUFSTS4KKyAgIEFsbCBv dGhlciBhY3Jvc3MtdmVjdG9yIGluc3RydWN0aW9ucyBhcmVuJ3QgYWxsb3dlZCwgYmVjYXVzZSB0 aGUgYWRkaXRpb24KKyAgIG9mIGltcGxpY2l0IHByZWRpY2F0aW9uIGNvdWxkIGluZmx1bmNlIHRo ZSByZXN1bHQgb2YgdGhlIG9wZXJhdGlvbi4KKyAgIEFueSBuZXcgYWNyb3NzLXZlY3RvciBpbnN0 cnVjdGlvbnMgdG8gdGhlIE1WRSBJU0Egd2lsbCBoYXZlIHRvIGFzc2Vzc2VkIGZvcgorICAgaW5j bHVzaW9uIHRvIHRoaXMgbGlzdC4gICovCisKK3N0YXRpYyBib29sCithcm1fbXZlX2lzX2FsbG93 ZWRfdW5wcmVkaWNfYWNyb3NzX3ZlY3Rvcl9pbnNuIChydHhfaW5zbiogaW5zbikKK3sKKyAgZ2Nj X2Fzc2VydCAoTVZFX1ZQVF9VTlBSRURJQ0FURURfSU5TTl9QIChpbnNuKQorCSAgICAgICYmIGFy bV9pc19tdmVfYWNyb3NzX3ZlY3Rvcl9pbnNuIChpbnNuKSk7CisgIHJ0eCBpbnNuX3BhdHRlcm4g PSBQQVRURVJOIChpbnNuKTsKKyAgaWYgKEdFVF9DT0RFIChpbnNuX3BhdHRlcm4pID09IFNFVAor ICAgICAgJiYgR0VUX0NPREUgKFhFWFAgKGluc25fcGF0dGVybiwgMSkpID09IFVOU1BFQworICAg ICAgJiYgKFhJTlQgKFhFWFAgKGluc25fcGF0dGVybiwgMSksIDEpID09IFZBRERWUV9VCisJICB8 fCBYSU5UIChYRVhQIChpbnNuX3BhdHRlcm4sIDEpLCAxKSA9PSBWQUREVlFfUworCSAgfHwgWElO VCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAxKSwgMSkgPT0gVkFERFZBUV9VCisJICB8fCBYSU5UIChY RVhQIChpbnNuX3BhdHRlcm4sIDEpLCAxKSA9PSBWQUREVkFRX1MKKwkgIHx8IFhJTlQgKFhFWFAg KGluc25fcGF0dGVybiwgMSksIDEpID09IFZNTEFEQVZRX1UKKwkgIHx8IFhJTlQgKFhFWFAgKGlu c25fcGF0dGVybiwgMSksIDEpID09IFZNTEFEQVZRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25f cGF0dGVybiwgMSksIDEpID09IFZNTEFEQVZYUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3Bh dHRlcm4sIDEpLCAxKSA9PSBWTUxBREFWQVFfVQorCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0 ZXJuLCAxKSwgMSkgPT0gVk1MQURBVkFRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVy biwgMSksIDEpID09IFZNTEFEQVZBWFFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJu LCAxKSwgMSkgPT0gVkFCQVZRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVybiwgMSks IDEpID09IFZBQkFWUV9VCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRlcm4sIDEpLCAxKSA9 PSBWQURETFZRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVybiwgMSksIDEpID09IFZB RERMVlFfVQorCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAxKSwgMSkgPT0gVkFERExW QVFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAxKSwgMSkgPT0gVkFERExWQVFf VQorCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAxKSwgMSkgPT0gVkFERFZBUV9TCisJ ICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRlcm4sIDEpLCAxKSA9PSBWQUREVkFRX1UKKwkgIHx8 IFhJTlQgKFhFWFAgKGluc25fcGF0dGVybiwgMSksIDEpID09IFZNQVhWUV9VCisJICB8fCBYSU5U IChYRVhQIChpbnNuX3BhdHRlcm4sIDEpLCAxKSA9PSBWTUFYQVZRX1MKKwkgIHx8IFhJTlQgKFhF WFAgKGluc25fcGF0dGVybiwgMSksIDEpID09IFZNTEFMREFWUV9VCisJICB8fCBYSU5UIChYRVhQ IChpbnNuX3BhdHRlcm4sIDEpLCAxKSA9PSBWTUxBTERBVlhRX1UKKwkgIHx8IFhJTlQgKFhFWFAg KGluc25fcGF0dGVybiwgMSksIDEpID09IFZNTEFMREFWWFFfUworCSAgfHwgWElOVCAoWEVYUCAo aW5zbl9wYXR0ZXJuLCAxKSwgMSkgPT0gVk1MQUxEQVZRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGlu c25fcGF0dGVybiwgMSksIDEpID09IFZNTEFMREFWQVFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5z bl9wYXR0ZXJuLCAxKSwgMSkgPT0gVk1MQUxEQVZBUV9VCisJICB8fCBYSU5UIChYRVhQIChpbnNu X3BhdHRlcm4sIDEpLCAxKSA9PSBWTUxBTERBVkFYUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNu X3BhdHRlcm4sIDEpLCAxKSA9PSBWTUxBTERBVkFYUV9VCisJICB8fCBYSU5UIChYRVhQIChpbnNu X3BhdHRlcm4sIDEpLCAxKSA9PSBWTUxTREFWUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3Bh dHRlcm4sIDEpLCAxKSA9PSBWTUxTREFWWFFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0 ZXJuLCAxKSwgMSkgPT0gVk1MU0RBVkFYUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRl cm4sIDEpLCAxKSA9PSBWTUxTREFWQVFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJu LCAxKSwgMSkgPT0gVk1MU0xEQVZRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVybiwg MSksIDEpID09IFZNTFNMREFWWFFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAx KSwgMSkgPT0gVk1MU0xEQVZBUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRlcm4sIDEp LCAxKSA9PSBWTUxTTERBVkFYUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRlcm4sIDEp LCAxKSA9PSBWUk1MQUxEQVZIWFFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAx KSwgMSkgPT0gVlJNTEFMREFWSFFfVQorCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAx KSwgMSkgPT0gVlJNTEFMREFWSFFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0ZXJuLCAx KSwgMSkgPT0gVlJNTEFMREFWSEFRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVybiwg MSksIDEpID09IFZSTUxBTERBVkhBUV9VCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRlcm4s IDEpLCAxKSA9PSBWUk1MQUxEQVZIQVhRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVy biwgMSksIDEpID09IFZSTUxTTERBVkhRX1MKKwkgIHx8IFhJTlQgKFhFWFAgKGluc25fcGF0dGVy biwgMSksIDEpID09IFZSTUxTTERBVkhYUV9TCisJICB8fCBYSU5UIChYRVhQIChpbnNuX3BhdHRl cm4sIDEpLCAxKSA9PSBWUk1MU0xEQVZIQVFfUworCSAgfHwgWElOVCAoWEVYUCAoaW5zbl9wYXR0 ZXJuLCAxKSwgMSkgPT0gVlJNTFNMREFWSEFYUV9TKSkKKyAgICByZXR1cm4gdHJ1ZTsKKyAgcmV0 dXJuIGZhbHNlOworfQorCisvKiBSZWN1cnNpdmVseSBzY2FuIHRocm91Z2ggdGhlIERGIGNoYWlu IGJhY2t3YXJkcyB3aXRoaW4gdGhlIGJhc2ljIGJsb2NrIGFuZAorICAgZGV0ZXJtaW5lIGlmIGFu eSBvZiB0aGUgVVNFcyBvZiB0aGUgb3JpZ2luYWwgaW5zbiAob3IgdGhlIFVTRXMgb2YgdGhlIGlu c25zCisgICB3aGVyZSB0aHkgd2VyZSBERUYtZWQsIGV0Yy4sIHJlY3Vyc2l2ZWx5KSB3ZXJlIGFm ZmVjdGVkIGJ5IGltcGxpY2l0IFZQVAorICAgcHJlZGljYXRpb24gb2YgYW4gTVZFX1ZQVF9VTlBS RURJQ0FURURfSU5TTl9QIGluIGEgZGxzdHAvbGV0cCBsb29wLgorICAgVGhpcyBmdW5jdGlvbiBy ZXR1cm5zIHRydWUgaWYgdGhlIGluc24gaXMgYWZmZWN0ZWQgaW1wbGljaXQgcHJlZGljYXRpb24K KyAgIGFuZCBmYWxzZSBvdGhlcndpc2UuCisgICBIYXZpbmcgc3VjaCBpbXBsaWNpdCBwcmVkaWNh dGlvbiBvbiBhbiB1bnByZWRpY2F0ZWQgaW5zbiB3b3VsZG4ndCBpbiBpdHNlbGYKKyAgIGJsb2Nr IHRhaWwgcHJlZGljYXRpb24sIGJlY2F1c2UgdGhlIG91dHB1dCBvZiB0aGF0IGluc24gbWlnaHQg dGhlbiBiZSB1c2VkCisgICBpbiBhIGNvcnJlY3RseSBwcmVkaWNhdGVkIHN0b3JlIGluc24sIHdo ZXJlIHRoZSBkaXNhYmxlZCBsYW5lcyB3aWxsIGJlCisgICBpZ25vcmVkLiAgVG8gdmVyaWZ5IHRo aXMgd2UgbGF0ZXIgY2FsbDoKKyAgIGBhcm1fbXZlX2NoZWNrX2RmX2NoYWluX2Z3ZF9mb3JfaW1w bGljX3ByZWRpY19pbXBhY3RgLCB3aGljaCB3aWxsIGNoZWNrIHRoZQorICAgREYgY2hhaW5zIGZv cndhcmQgdG8gc2VlIGlmIGFueSBpbXBsaWNpdGx5LXByZWRpY2F0ZWQgb3BlcmFuZCBnZXRzIHVz ZWQgaW4KKyAgIGFuIGltcHJvcGVyIHdheS4gICovCisKK3N0YXRpYyBib29sCithcm1fbXZlX2No ZWNrX2RmX2NoYWluX2JhY2tfZm9yX2ltcGxpY19wcmVkaWMKKyAgKGhhc2hfbWFwIDxydHhfaW5z biAqLCBib29sPiAqc2FmZV9pbnNuX21hcCwgcnR4X2luc24gKmluc25faW4sCisgICBydHggdmN0 cF92cHJfZ2VuZXJhdGVkKQoreworCisgIGF1dG9fdmVjPHJ0eF9pbnNuICo+IHdvcmtsaXN0Owor ICB3b3JrbGlzdC5zYWZlX3B1c2ggKGluc25faW4pOworCisgIGJvb2wgKnRlbXAgPSBOVUxMOwor CisgIHdoaWxlICh3b3JrbGlzdC5sZW5ndGggKCkgPiAwKQorICAgIHsKKyAgICAgIHJ0eF9pbnNu ICppbnNuID0gd29ya2xpc3QucG9wICgpOworCisgICAgICBpZiAoKHRlbXAgPSBzYWZlX2luc25f bWFwLT5nZXQgKGluc24pKSkKKwlyZXR1cm4gKnRlbXA7CisKKyAgICAgIGJhc2ljX2Jsb2NrIGJv ZHkgPSBCTE9DS19GT1JfSU5TTiAoaW5zbik7CisKKyAgICAgIC8qIFRoZSBjaXJjdW1zdGFuY2Vz IHVuZGVyIHdoaWNoIGFuIGluc3RydWN0aW9uIGlzIGFmZmVjdGVkIGJ5ICJpbXBsaWNpdAorCSBw cmVkaWNhdGlvbiIgYXJlIGFzIGZvbGxvd3M6CisJICAqIEl0IGlzIGFuIFVOUFJFRElDQVRFRF9J TlNOX1A6CisJICAgICogVGhhdCBsb2Fkcy9zdG9yZXMgZnJvbS90byBtZW1vcnkuCisJICAgICog V2hlcmUgYW55IG9uZSBvZiBpdHMgb3BlcmFuZHMgaXMgYW4gTVZFIHZlY3RvciBmcm9tIG91dHNp ZGUgdGhlCisJICAgICAgbG9vcCBib2R5IGJiLgorCSBPcjoKKwkgICogQW55IG9mIGl0J3Mgb3Bl cmFuZHMsIHJlY3Vyc2l2ZWx5IGJhY2t3YXJkcywgYXJlIGFmZmVjdGVkLiAgKi8KKyAgICAgIGlm IChNVkVfVlBUX1VOUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisJICAmJiAoYXJtX2lzX212ZV9s b2FkX3N0b3JlX2luc24gKGluc24pCisJICAgICAgfHwgKGFybV9pc19tdmVfYWNyb3NzX3ZlY3Rv cl9pbnNuIChpbnNuKQorCQkgICYmICFhcm1fbXZlX2lzX2FsbG93ZWRfdW5wcmVkaWNfYWNyb3Nz X3ZlY3Rvcl9pbnNuIChpbnNuKSkpKQorCXsKKwkgIHNhZmVfaW5zbl9tYXAtPnB1dCAoaW5zbiwg dHJ1ZSk7CisJICByZXR1cm4gdHJ1ZTsKKwl9CisKKyAgICAgIGRmX3JlZiBpbnNuX3VzZXMgPSBO VUxMOworICAgICAgRk9SX0VBQ0hfSU5TTl9VU0UgKGluc25fdXNlcywgaW5zbikKKyAgICAgIHsK KwkvKiBJZiB0aGUgb3BlcmFuZCBpcyBpbiB0aGUgaW5wdXQgcmVnIHNldCB0byB0aGUgdGhlIGJh c2ljIGJsb2NrLAorCSAgIChpLmUuIGl0IGhhcyBjb21lIGZyb20gb3V0c2lkZSB0aGUgbG9vcCEp LCBjb25zaWRlciBpdCB1bnNhZmUgaWY6CisJICAgICAqIEl0J3MgYmVpbmcgdXNlZCBpbiBhbiB1 bnByZWRpY2F0ZWQgaW5zbi4KKwkgICAgICogSXQgaXMgYSBwcmVkaWNhYmxlIE1WRSB2ZWN0b3Iu ICAqLworCWlmIChNVkVfVlBUX1VOUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisJICAgICYmIFZB TElEX01WRV9NT0RFIChHRVRfTU9ERSAoREZfUkVGX1JFRyAoaW5zbl91c2VzKSkpCisJICAgICYm IFJFR05PX1JFR19TRVRfUCAoREZfTFJfSU4gKGJvZHkpLCBERl9SRUZfUkVHTk8gKGluc25fdXNl cykpKQorCSAgeworCSAgICBzYWZlX2luc25fbWFwLT5wdXQgKGluc24sIHRydWUpOworCSAgICBy ZXR1cm4gdHJ1ZTsKKwkgIH0KKworCS8qIFNjYW4gYmFja3dhcmRzIGZyb20gdGhlIGN1cnJlbnQg SU5TTiB0aHJvdWdoIHRoZSBpbnN0cnVjdGlvbiBjaGFpbgorCSAgIHVudGlsIHRoZSBzdGFydCBv ZiB0aGUgYmFzaWMgYmxvY2suICAqLworCWZvciAocnR4X2luc24gKnByZXZfaW5zbiA9IFBSRVZf SU5TTiAoaW5zbik7CisJICAgICBwcmV2X2luc24gJiYgcHJldl9pbnNuICE9IFBSRVZfSU5TTiAo QkJfSEVBRCAoYm9keSkpOworCSAgICAgcHJldl9pbnNuID0gUFJFVl9JTlNOIChwcmV2X2luc24p KQorCSAgeworCSAgICAvKiBJZiBhIHByZXZpb3VzIGluc24gZGVmaW5lcyBhIHJlZ2lzdGVyIHRo YXQgSU5TTiB1c2VzLCB0aGVuCisJICAgICAgIHJlY3Vyc2UgaW4gb3JkZXIgdG8gY2hlY2sgdGhh dCBpbnNuJ3MgVVNFcy4gSWYgYW55IG9mIHRoZXNlCisJICAgICAgIGluc25zIHJldHVybiB0cnVl IGFzIE1WRV9WUFRfVU5QUkVESUNBVEVEX0lOU05fUHMsIHRoZW4gdGhlCisJICAgICAgIHdob2xl IGNoYWluIGlzIGFmZmVjdGVkIGJ5IHRoZSBjaGFuZ2UgaW4gYmVoYXZpb3VyIGZyb20gYmVpbmcK KwkgICAgICAgcGxhY2VkIGluIGRsc3RwL2xldHAgbG9vcC4gICovCisJICAgIGRmX3JlZiBwcmV2 X2luc25fZGVmcyA9IE5VTEw7CisJICAgIEZPUl9FQUNIX0lOU05fREVGIChwcmV2X2luc25fZGVm cywgcHJldl9pbnNuKQorCSAgICB7CisJICAgICAgaWYgKERGX1JFRl9SRUdOTyAoaW5zbl91c2Vz KSA9PSBERl9SRUZfUkVHTk8gKHByZXZfaW5zbl9kZWZzKQorCQkgICYmICFhcm1fbXZlX3ZlY19p bnNuX2lzX3ByZWRpY2F0ZWRfd2l0aF90aGlzX3ByZWRpY2F0ZQorCQkgICAgICAgKGluc24sIHZj dHBfdnByX2dlbmVyYXRlZCkpCisJCXdvcmtsaXN0LnNhZmVfcHVzaCAocHJldl9pbnNuKTsKKwkg ICAgfQorCSAgfQorICAgICAgfQorICAgIH0KKyAgc2FmZV9pbnNuX21hcC0+cHV0IChpbnNuLCBm YWxzZSk7CisgIHJldHVybiBmYWxzZTsKK30KKworLyogSWYgd2UgaGF2ZSBpZGVudGlmaWVkIHRo YXQgdGhlIGN1cnJlbnQgREVGIHdpbGwgYmUgbW9kaWZpZWQKKyAgIGJ5IHN1Y2ggaW1wbGljaXQg cHJlZGljYXRpb24sIHNjYW4gdGhyb3VnaCBhbGwgdGhlCisgICBpbnNucyB0aGF0IFVTRSBpdCBh bmQgYmFpbCBvdXQgaWYgYW55IG9uZSBpcyBvdXRzaWRlIHRoZQorICAgY3VycmVudCBiYXNpYyBi bG9jayAoaS5lLiB0aGUgcmVnIGlzIGxpdmUgYWZ0ZXIgdGhlIGxvb3ApCisgICBvciBpZiBhbnkg YXJlIHN0b3JlIGluc25zIHRoYXQgYXJlIHVucHJlZGljYXRlZCBvciB1c2luZyBhCisgICBwcmVk aWNhdGUgb3RoZXIgdGhhbiB0aGUgbG9vcCBWUFIuCisgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMg dHJ1ZSBpZiB0aGUgaW5zbiBpcyBub3Qgc3VpdGFibGUgZm9yCisgICBpbXBsaWNpdCBwcmVkaWNh dGlvbiBhbmQgZmFsc2Ugb3RoZXJ3aXNlLiovCisKK3N0YXRpYyBib29sCithcm1fbXZlX2NoZWNr X2RmX2NoYWluX2Z3ZF9mb3JfaW1wbGljX3ByZWRpY19pbXBhY3QgKHJ0eF9pbnNuICppbnNuLAor CQkJCQkJICAgICBydHggdmN0cF92cHJfZ2VuZXJhdGVkKQoreworCisgIC8qIElmIHRoaXMgaW5z biBpcyBpbmRlZWQgYW4gdW5wcmVkaWNhdGVkIHN0b3JlIHRvIG1lbW9yeSwgYmFpbCBvdXQuICAq LworICBpZiAoYXJtX212ZV92ZWNfaW5zbl9pc191bnByZWRpY2F0ZWRfb3JfdXNlc19vdGhlcl9w cmVkaWNhdGUKKwkoaW5zbiwgdmN0cF92cHJfZ2VuZXJhdGVkKQorICAgICAgJiYgKGFybV9pc19t dmVfbG9hZF9zdG9yZV9pbnNuIChpbnNuLCAyKQorCSAgfHwgYXJtX2lzX212ZV9hY3Jvc3NfdmVj dG9yX2luc24gKGluc24pKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICAvKiBOZXh0LCBzY2FuIGZv cndhcmQgdG8gdGhlIHZhcmlvdXMgVVNFcyBvZiB0aGUgREVGcyBpbiB0aGlzIGluc24uICAqLwor ICBkZl9yZWYgaW5zbl9kZWYgPSBOVUxMOworICBGT1JfRUFDSF9JTlNOX0RFRiAoaW5zbl9kZWYs IGluc24pCisgICAgeworICAgICAgZm9yIChkZl9yZWYgdXNlID0gREZfUkVHX1VTRV9DSEFJTiAo REZfUkVGX1JFR05PIChpbnNuX2RlZikpOyB1c2U7CisJICAgdXNlID0gREZfUkVGX05FWFRfUkVH ICh1c2UpKQorCXsKKwkgIHJ0eF9pbnNuICpuZXh0X3VzZV9pbnNuID0gREZfUkVGX0lOU04gKHVz ZSk7CisJICBpZiAobmV4dF91c2VfaW5zbiAhPSBpbnNuCisJICAgICAgJiYgTk9OREVCVUdfSU5T Tl9QIChuZXh0X3VzZV9pbnNuKSkKKwkgICAgeworCSAgICAgIC8qIElmIHRoZSBVU0UgaXMgb3V0 c2lkZSB0aGUgbG9vcCBib2R5IGJiLCBvciBpdCBpcyBpbnNpZGUsIGJ1dAorCQkgaXMgYW4gZGlm ZmVyZW50bHktcHJlZGljYXRlZCBzdG9yZSB0byBtZW1vcnkgb3IgaXQgaXMgYW55CisJCSBhY3Jv c3MtdmVjdG9yIGluc3RydWN0aW9uLiAgKi8KKwkgICAgICBpZiAoQkxPQ0tfRk9SX0lOU04gKGlu c24pICE9IEJMT0NLX0ZPUl9JTlNOIChuZXh0X3VzZV9pbnNuKQorCQkgIHx8IChhcm1fbXZlX3Zl Y19pbnNuX2lzX3VucHJlZGljYXRlZF9vcl91c2VzX290aGVyX3ByZWRpY2F0ZQorCQkgICAgICAg KG5leHRfdXNlX2luc24sIHZjdHBfdnByX2dlbmVyYXRlZCkKKwkJICAgICAmJiAoYXJtX2lzX212 ZV9sb2FkX3N0b3JlX2luc24gKG5leHRfdXNlX2luc24sIDIpCisJCQkgfHwgYXJtX2lzX212ZV9h Y3Jvc3NfdmVjdG9yX2luc24gKG5leHRfdXNlX2luc24pKSkpCisJCXJldHVybiB0cnVlOworCSAg ICB9CisJfQorICAgIH0KKyAgcmV0dXJuIGZhbHNlOworfQorCisvKiBIZWxwZXIgZnVuY3Rpb24g dG8gYGFybV9tdmVfZGxzdHBfY2hlY2tfaW5jX2NvdW50ZXJgIGFuZCB0bworICAgYGFybV9tdmVf ZGxzdHBfY2hlY2tfZGVjX2NvdW50ZXJgLiAgSW4gdGhlIHNpdHVhdGlvbnMgd2hlcmUgdGhlIGxv b3AgY291bnRlcgorICAgaXMgaW5jcmVtZW50aW5nIGJ5IDEgb3IgZGVjcmVtZW50aW5nIGJ5IDEg aW4gZWFjaCBpdGVyYXRpb24sIGVuc3VyZSB0aGF0IHRoZQorICAgdGFyZ2V0IHZhbHVlIG9yIHRo ZSBpbml0aWFsaXNhdGlvbiB2YWx1ZSwgcmVzcGVjdGl2ZWx5LCB3YXMgYSBjYWxjdWxhdGlvbgor ICAgb2YgdGhlIG51bWJlciBvZiBpdGVyYXRpb25zIG9mIHRoZSBsb29wLCB3aGljaCBpcyBleHBl Y3RlZCB0byBiZSBhbiBBU0hJRlRSVAorICAgYnkgVkNUUF9TVEVQLiAgKi8KKworc3RhdGljIGJv b2wKK2FybV9tdmVfY2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxlbXMgKGJhc2ljX2Jsb2NrIGJv ZHksIHJ0eCByZWcsIHJ0eCB2Y3RwX3N0ZXApCit7CisgIC8qIE9rLCB3ZSBub3cga25vdyB0aGUg bG9vcCBzdGFydHMgZnJvbSB6ZXJvIGFuZCBpbmNyZW1lbnRzIGJ5IG9uZS4KKyAgICAgTm93IGp1 c3Qgc2hvdyB0aGF0IHRoZSBtYXggdmFsdWUgb2YgdGhlIGNvdW50ZXIgY2FtZSBmcm9tIGFuCisg ICAgIGFwcHJvcHJpYXRlIEFTSElGUlQgZXhwciBvZiB0aGUgY29ycmVjdCBhbW91bnQuICAqLwor ICBiYXNpY19ibG9jayBwcmVfbG9vcF9iYiA9IGJvZHktPnByZXZfYmI7CisgIHdoaWxlIChwcmVf bG9vcF9iYiAmJiBCQl9FTkQgKHByZV9sb29wX2JiKQorCSAmJiAhZGZfYmJfcmVnbm9fb25seV9k ZWZfZmluZCAocHJlX2xvb3BfYmIsIFJFR05PIChyZWcpKSkKKyAgICBwcmVfbG9vcF9iYiA9IHBy ZV9sb29wX2JiLT5wcmV2X2JiOworCisgIGRmX3JlZiBjb3VudGVyX21heF9sYXN0X2RlZiA9IGRm X2JiX3JlZ25vX29ubHlfZGVmX2ZpbmQgKHByZV9sb29wX2JiLCBSRUdOTyAocmVnKSk7CisgIHJ0 eCBjb3VudGVyX21heF9sYXN0X3NldDsKKyAgaWYgKGNvdW50ZXJfbWF4X2xhc3RfZGVmKQorICAg IGNvdW50ZXJfbWF4X2xhc3Rfc2V0ID0gUEFUVEVSTiAoREZfUkVGX0lOU04gKGNvdW50ZXJfbWF4 X2xhc3RfZGVmKSk7CisgIGVsc2UKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyogSWYgd2UgZW5j b3VudGVyIGEgc2ltcGxlIFNFVCBmcm9tIGEgUkVHLCBmb2xsb3cgaXQgdGhyb3VnaC4gICovCisg IGlmIChHRVRfQ09ERSAoY291bnRlcl9tYXhfbGFzdF9zZXQpID09IFNFVAorICAgICAgJiYgUkVH X1AgKFhFWFAgKGNvdW50ZXJfbWF4X2xhc3Rfc2V0LCAxKSkpCisgICAgcmV0dXJuIGFybV9tdmVf Y2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxlbXMKKwkgICAgIChwcmVfbG9vcF9iYi0+bmV4dF9i YiwgWEVYUCAoY291bnRlcl9tYXhfbGFzdF9zZXQsIDEpLCB2Y3RwX3N0ZXApOworCisgIC8qIElm IHdlIGVuY291bnRlciBhIFNFVCBmcm9tIGFuIElGX1RIRU5fRUxTRSB3aGVyZSBvbmUgb2YgdGhl IG9wZXJhbmRzIGlzIGEKKyAgICAgY29uc3RhbnQgYW5kIHRoZSBvdGhlciBpcyBhIFJFRywgZm9s bG93IHRocm91Z2ggdG8gdGhhdCBSRUcuICAqLworICBpZiAoR0VUX0NPREUgKGNvdW50ZXJfbWF4 X2xhc3Rfc2V0KSA9PSBTRVQKKyAgICAgICYmIEdFVF9DT0RFIChYRVhQIChjb3VudGVyX21heF9s YXN0X3NldCwgMSkpID09IElGX1RIRU5fRUxTRQorICAgICAgJiYgUkVHX1AgKFhFWFAgKFhFWFAg KGNvdW50ZXJfbWF4X2xhc3Rfc2V0LCAxKSwgMSkpCisgICAgICAmJiBDT05TVF9JTlRfUCAoWEVY UCAoWEVYUCAoY291bnRlcl9tYXhfbGFzdF9zZXQsIDEpLCAyKSkpCisgICAgcmV0dXJuIGFybV9t dmVfY2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxlbXMKKwkgICAgIChwcmVfbG9vcF9iYi0+bmV4 dF9iYiwgWEVYUCAoWEVYUCAoY291bnRlcl9tYXhfbGFzdF9zZXQsIDEpLCAxKSwgdmN0cF9zdGVw KTsKKworICBpZiAoR0VUX0NPREUgKFhFWFAgKGNvdW50ZXJfbWF4X2xhc3Rfc2V0LCAxKSkgPT0g QVNISUZUUlQKKyAgICAgICYmIENPTlNUX0lOVF9QIChYRVhQIChYRVhQIChjb3VudGVyX21heF9s YXN0X3NldCwgMSksIDEpKQorICAgICAgJiYgKCgxIDw8IElOVFZBTCAoWEVYUCAoWEVYUCAoY291 bnRlcl9tYXhfbGFzdF9zZXQsIDEpLCAxKSkpCisJICAgPT0gYWJzIChJTlRWQUwgKHZjdHBfc3Rl cCkpKSkKKyAgICByZXR1cm4gdHJ1ZTsKKworICByZXR1cm4gZmFsc2U7Cit9CisKKy8qIElmIHdl IGhhdmUgaWRlbnRpZmllZCB0aGUgbG9vcCB0byBoYXZlIGFuIGluY3JlbWVudGluZyBjb3VudGVy LCB3ZSBuZWVkIHRvCisgICBtYWtlIHN1cmUgdGhhdCBpdCBpbmNyZW1lbnRzIGJ5IDEgYW5kIHRo YXQgdGhlIGxvb3AgaXMgc3RydWN0dXJlZCBjb3JyZWN0bHk6CisgICAgKiBUaGUgY291bnRlciBz dGFydHMgZnJvbSAwCisgICAgKiBUaGUgY291bnRlciB0ZXJtaW5hdGVzIGF0IChudW1fb2ZfZWxl bSArIG51bV9vZl9sYW5lcyAtIDEpIC8gbnVtX29mX2xhbmVzCisgICAgKiBUaGUgdmN0cCBpbnNu IHVzZXMgYSByZWcgdGhhdCBkZWNyZW1lbnRzIGFwcHJvcHJpYXRlbHkgaW4gZWFjaCBpdGVyYXRp b24uCisqLworCitzdGF0aWMgcnR4X2luc24qCithcm1fbXZlX2Rsc3RwX2NoZWNrX2luY19jb3Vu dGVyIChiYXNpY19ibG9jayBib2R5LCBydHhfaW5zbiogdmN0cF9pbnNuLAorCQkJCSBydHggY29u ZGNvbnN0LCBydHggY29uZGNvdW50KQoreworICBydHggdmN0cF9yZWcgPSBYVkVDRVhQIChYRVhQ IChQQVRURVJOICh2Y3RwX2luc24pLCAxKSwgMCwgMCk7CisgIC8qIFRoZSBsb29wIGxhdGNoIGhh cyB0byBiZSBlbXB0eS4gIFdoZW4gY29tcGlsaW5nIGFsbCB0aGUga25vd24gTVZFIExvTHMgaW4K KyAgICAgdXNlciBhcHBsaWNhdGlvbnMsIG5vbmUgb2YgdGhvc2Ugd2l0aCBpbmNyZW1lbnRpbmcg Y291bnRlcnMgaGFkIGFueSByZWFsCisgICAgIGluc25zIGluIHRoZSBsb29wIGxhdGNoLiAgQXMg c3VjaCwgdGhpcyBmdW5jdGlvbiBoYXMgb25seSBiZWVuIHRlc3RlZCB3aXRoCisgICAgIGFuIGVt cHR5IGxhdGNoIGFuZCBtYXkgbWlzYmVoYXZlIG9yIElDRSBpZiB3ZSBzb21laG93IGdldCBoZXJl IHdpdGggYW4KKyAgICAgaW5jcmVtZW50IGluIHRoZSBsYXRjaCwgc28sIGZvciBjb3JyZWN0bmVz cywgZXJyb3Igb3V0IGVhcmx5LiAgKi8KKyAgaWYgKCFlbXB0eV9ibG9ja19wIChib2R5LT5sb29w X2ZhdGhlci0+bGF0Y2gpKQorICAgIHJldHVybiBOVUxMOworCisgIGNsYXNzIHJ0eF9pdiB2Y3Rw X3JlZ19pdjsKKyAgLyogRm9yIGxvb3BzIG9mIHR5cGUgQikgdGhlIGxvb3AgY291bnRlciBpcyBp bmRlcGVuZGVudCBvZiB0aGUgZGVjcmVtZW50CisgICAgIG9mIHRoZSByZWcgdXNlZCBpbiB0aGUg dmN0cF9pbnNuLiBTbyBydW4gaXYgYW5hbHlzaXMgb24gdGhhdCByZWcuICBUaGlzCisgICAgIGhh cyB0byBzdWNjZWVkIGZvciBzdWNoIGxvb3BzIHRvIGJlIHN1cHBvcnRlZC4gICovCisgIGlmICgh aXZfYW5hbHl6ZSAodmN0cF9pbnNuLCBhc19hPHNjYWxhcl9pbnRfbW9kZT4gKEdFVF9NT0RFICh2 Y3RwX3JlZykpLAorICAgICAgdmN0cF9yZWcsICZ2Y3RwX3JlZ19pdikpCisgICAgcmV0dXJuIE5V TEw7CisKKyAgLyogRXh0cmFjdCB0aGUgZGVjcmVtZW50bnVtIG9mIHRoZSB2Y3RwIHJlZyBmcm9t IHRoZSBpdi4gICovCisgIGludCBkZWNyZW1lbnRudW0gPSBhYnMgKElOVFZBTCAodmN0cF9yZWdf aXYuc3RlcCkpOworCisgIC8qIEZpbmQgd2hlcmUgYm90aCBvZiB0aG9zZSBhcmUgbW9kaWZpZWQg aW4gdGhlIGxvb3AgYm9keSBiYi4gICovCisgIGRmX3JlZiBjb25kY291bnRfcmVnX3NldF9kZiA9 IGRmX2JiX3JlZ25vX29ubHlfZGVmX2ZpbmQgKGJvZHksIFJFR05PIChjb25kY291bnQpKTsKKyAg ZGZfcmVmIHZjdHBfcmVnX3NldF9kZiA9IGRmX2JiX3JlZ25vX29ubHlfZGVmX2ZpbmQgKGJvZHks IFJFR05PICh2Y3RwX3JlZykpOworICBpZiAoIWNvbmRjb3VudF9yZWdfc2V0X2RmIHx8ICF2Y3Rw X3JlZ19zZXRfZGYpCisgICAgcmV0dXJuIE5VTEw7CisgIHJ0eCBjb25kY291bnRfcmVnX3NldCA9 IFBBVFRFUk4gKERGX1JFRl9JTlNOIChjb25kY291bnRfcmVnX3NldF9kZikpOworICBydHhfaW5z biogdmN0cF9yZWdfc2V0ID0gREZfUkVGX0lOU04gKHZjdHBfcmVnX3NldF9kZik7CisgIC8qIEVu c3VyZSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSB2Y3RwIHJlZyBmcm9tIGRmIGlzIGNvbnNpc3Rl bnQgd2l0aAorICAgICB0aGUgaXYgYW5kIHRoZSBudW1iZXIgb2YgbGFuZXMgb24gdGhlIHZjdHAg aW5zbi4gICovCisgIGlmICghKEdFVF9DT0RFIChYRVhQIChQQVRURVJOICh2Y3RwX3JlZ19zZXQp LCAxKSkgPT0gUExVUworICAgICAgJiYgUkVHTk8gKFhFWFAgKFBBVFRFUk4gKHZjdHBfcmVnX3Nl dCksIDApKQorCSAgPT0gUkVHTk8gKFhFWFAgKFhFWFAgKFBBVFRFUk4gKHZjdHBfcmVnX3NldCks IDEpLCAwKSkpKQorICAgIHJldHVybiBOVUxMOworICBpZiAoZGVjcmVtZW50bnVtICE9IGFicyAo SU5UVkFMIChYRVhQIChYRVhQIChQQVRURVJOICh2Y3RwX3JlZ19zZXQpLCAxKSwgMSkpKQorICAg ICAgfHwgZGVjcmVtZW50bnVtICE9IGFybV9tdmVfZ2V0X3ZjdHBfbGFuZXMgKFBBVFRFUk4gKHZj dHBfaW5zbikpKQorICAgIHJldHVybiBOVUxMOworCisgIGlmIChSRUdfUCAoY29uZGNvdW50KSAm JiBSRUdfUCAoY29uZGNvbnN0KSkKKyAgICB7CisgICAgICAvKiBGaXJzdCB3ZSBuZWVkIHRvIHBy b3ZlIHRoYXQgdGhlIGxvb3AgaXMgZ29pbmcgMC4uY29uZGNvbnN0IHdpdGggYW4KKwkgaW5jIG9m IDEgaW4gZWFjaCBpdGVyYXRpb24uICAqLworICAgICAgaWYgKEdFVF9DT0RFIChYRVhQIChjb25k Y291bnRfcmVnX3NldCwgMSkpID09IFBMVVMKKwkgICYmIENPTlNUX0lOVF9QIChYRVhQIChYRVhQ IChjb25kY291bnRfcmVnX3NldCwgMSksIDEpKQorCSAgJiYgSU5UVkFMIChYRVhQIChYRVhQIChj b25kY291bnRfcmVnX3NldCwgMSksIDEpKSA9PSAxKQorCXsKKwkgICAgcnR4IGNvdW50ZXJfcmVn ID0gWEVYUCAoY29uZGNvdW50X3JlZ19zZXQsIDApOworCSAgICAvKiBDaGVjayB0aGF0IHRoZSBj b3VudGVyIGRpZCBpbmRlZWQgc3RhcnQgZnJvbSB6ZXJvLiAgKi8KKwkgICAgZGZfcmVmIHRoaXNf c2V0ID0gREZfUkVHX0RFRl9DSEFJTiAoUkVHTk8gKGNvdW50ZXJfcmVnKSk7CisJICAgIGlmICgh dGhpc19zZXQpCisJICAgICAgcmV0dXJuIE5VTEw7CisJICAgIGRmX3JlZiBsYXN0X3NldCA9IERG X1JFRl9ORVhUX1JFRyAodGhpc19zZXQpOworCSAgICBpZiAoIWxhc3Rfc2V0KQorCSAgICAgIHJl dHVybiBOVUxMOworCSAgICBydHhfaW5zbiogbGFzdF9zZXRfaW5zbiA9IERGX1JFRl9JTlNOIChs YXN0X3NldCk7CisJICAgIGlmICghc2luZ2xlX3NldCAobGFzdF9zZXRfaW5zbikpCisJICAgICAg cmV0dXJuIE5VTEw7CisJICAgIHJ0eCBjb3VudGVyX29yaWdfc2V0OworCSAgICBjb3VudGVyX29y aWdfc2V0ID0gWEVYUCAoUEFUVEVSTiAobGFzdF9zZXRfaW5zbiksIDEpOworCSAgICBpZiAoIUNP TlNUX0lOVF9QIChjb3VudGVyX29yaWdfc2V0KQorCQl8fCAoSU5UVkFMIChjb3VudGVyX29yaWdf c2V0KSAhPSAwKSkKKwkgICAgICByZXR1cm4gTlVMTDsKKwkgICAgLyogQW5kIGZpbmFsbHkgY2hl Y2sgdGhhdCB0aGUgdGFyZ2V0IHZhbHVlIG9mIHRoZSBjb3VudGVyLAorCSAgICAgICBjb25kY29u c3QsIGlzIG9mIHRoZSBjb3JyZWN0IHNoYXBlLiAgKi8KKwkgICAgaWYgKCFhcm1fbXZlX2NoZWNr X3JlZ19vcmlnaW5faXNfbnVtX2VsZW1zIChib2R5LCBjb25kY29uc3QsCisJCQkJCQkJdmN0cF9y ZWdfaXYuc3RlcCkpCisJICAgICAgcmV0dXJuIE5VTEw7CisJfQorICAgICAgZWxzZQorCXJldHVy biBOVUxMOworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEV2ZXJ5dGhp bmcgbG9va3MgdmFsaWQuICAqLworICByZXR1cm4gdmN0cF9pbnNuOworfQorCisvKiBIZWxwZXIg ZnVuY3Rpb24gdG8gYGFybV9tdmVfbG9vcF92YWxpZF9mb3JfZGxzdHBgLiAgSW4gdGhlIGNhc2Ug b2YgYQorICAgY291bnRlciB0aGF0IGlzIGRlY3JlbWVudGluZywgZW5zdXJlIHRoYXQgaXQgaXMg ZGVjcmVtZW50aW5nIGJ5IHRoZQorICAgcmlnaHQgYW1vdW50IGluIGVhY2ggaXRlcmF0aW9uIGFu ZCB0aGF0IHRoZSB0YXJnZXQgY29uZGl0aW9uIGlzIHdoYXQKKyAgIHdlIGV4cGVjdC4gICovCisK K3N0YXRpYyBydHhfaW5zbioKK2FybV9tdmVfZGxzdHBfY2hlY2tfZGVjX2NvdW50ZXIgKGJhc2lj X2Jsb2NrIGJvZHksIHJ0eF9pbnNuKiB2Y3RwX2luc24sCisJCQkJIHJ0eCBjb25kY29uc3QsIHJ0 eCBjb25kY291bnQpCit7CisgIHJ0eCB2Y3RwX3JlZyA9IFhWRUNFWFAgKFhFWFAgKFBBVFRFUk4g KHZjdHBfaW5zbiksIDEpLCAwLCAwKTsKKyAgY2xhc3MgcnR4X2l2IHZjdHBfcmVnX2l2OworICBp bnQgZGVjcmVtZW50bnVtOworICAvKiBGb3IgZGVjcmVtZW50aW5nIGxvb3BzIG9mIHR5cGUgQSks IHRoZSBjb3VudGVyIGlzIHVzdWFsbHkgcHJlc2VudCBpbiB0aGUKKyAgICAgbG9vcCBsYXRjaC4g IEhlcmUgd2Ugc2ltcGx5IG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBjb3VudGVyIGlzIHRoZSBz YW1lCisgICAgIHJlZyB0aGF0IGlzIGFsc28gdXNlZCBpbiB0aGUgdmN0cF9pbnNuIGFuZCB0aGF0 IGl0IGlzIG5vdCBvdGhlcndpc2UKKyAgICAgbW9kaWZpZWQuICAqLworICBydHhfaW5zbiAqZGVj X2luc24gPSBCQl9FTkQgKGJvZHktPmxvb3BfZmF0aGVyLT5sYXRjaCk7CisgIC8qIElmIG5vdCBp biB0aGUgbG9vcCBsYXRjaCwgdHJ5IHRvIGZpbmQgdGhlIGRlY3JlbWVudCBpbiB0aGUgbG9vcCBi b2R5LiAgKi8KKyAgaWYgKCFOT05ERUJVR19JTlNOX1AgKGRlY19pbnNuKSkKKyAgeworICAgIGRm X3JlZiB0ZW1wID0gZGZfYmJfcmVnbm9fb25seV9kZWZfZmluZCAoYm9keSwgUkVHTk8gKGNvbmRj b3VudCkpOworICAgIC8qIElmIHdlIGhhdmVuJ3QgYmVlbiBhYmxlIHRvIGZpbmQgdGhlIGRlY3Jl bWVudCwgYmFpbCBvdXQuICAqLworICAgIGlmICghdGVtcCkKKyAgICAgIHJldHVybiBOVUxMOwor ICAgIGRlY19pbnNuID0gREZfUkVGX0lOU04gKHRlbXApOworICB9CisKKyAgLyogTmV4dCwgZW5z dXJlIHRoYXQgaXQgaXMgYSBQTFVTIG9mIHRoZSBmb3JtOgorICAgICAoc2V0IChyZWcgYSkgKHBs dXMgKHJlZyBhKSAoY29uc3RfaW50KSkpCisgICAgIHdoZXJlIChyZWcgYSkgaXMgdGhlIHNhbWUg YXMgY29uZGNvdW50LiAgKi8KKyAgaWYgKEdFVF9DT0RFIChYRVhQIChQQVRURVJOIChkZWNfaW5z biksIDEpKSA9PSBQTFVTCisgICAgICAmJiBSRUdOTyAoWEVYUCAoUEFUVEVSTiAoZGVjX2luc24p LCAwKSkKKwkgID09IFJFR05PIChYRVhQIChYRVhQIChQQVRURVJOIChkZWNfaW5zbiksIDEpLCAw KSkKKyAgICAgICYmIFJFR05PIChYRVhQIChQQVRURVJOIChkZWNfaW5zbiksIDApKSA9PSBSRUdO TyAoY29uZGNvdW50KSkKKyAgICBkZWNyZW1lbnRudW0gPSBhYnMgKElOVFZBTCAoWEVYUCAoWEVY UCAoUEFUVEVSTiAoZGVjX2luc24pLCAxKSwgMSkpKTsKKyAgZWxzZQorICAgIHJldHVybiBOVUxM OworCisgIC8qIE9rLCBzbyB3ZSBub3cga25vdyB0aGUgbG9vcCBkZWNyZW1lbnQuICBJZiBpdCBp cyBhIDEsIHRoZW4gd2UgbmVlZCB0bworICAgICBsb29rIGF0IHRoZSBsb29wIHZjdHBfcmVnIGFu ZCB2ZXJpZnkgdGhhdCBpdCBhbHNvIGRlY3JlbWVudHMgY29ycmVjdGx5LgorICAgICBUaGVuLCB3 ZSBuZWVkIHRvIGVzdGFibGlzaCB0aGF0IHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUgbG9vcCBk ZWNyZW1lbnQKKyAgICAgb3JpZ2luYXRlcyBmcm9tIHRoZSBzdGFydGluZyB2YWx1ZSBvZiB0aGUg dmN0cCBkZWNyZW1lbnQuICAqLworICBpZiAoZGVjcmVtZW50bnVtID09IDEpCisgICAgeworICAg ICAgY2xhc3MgcnR4X2l2IHZjdHBfcmVnX2l2OworICAgICAgLyogVGhlIGxvb3AgY291bnRlciBp cyBmb3VuZCB0byBiZSBpbmRlcGVuZGVudCBvZiB0aGUgZGVjcmVtZW50CisJIG9mIHRoZSByZWcg dXNlZCBpbiB0aGUgdmN0cF9pbnNuLCBhZ2Fpbi4gIEVuc3VyZSB0aGF0IElWIGFuYWx5c2lzCisJ IHN1Y2NlZWRzIGFuZCBjaGVjayB0aGUgc3RlcC4gICovCisgICAgICBpZiAoIWl2X2FuYWx5emUg KHZjdHBfaW5zbiwgYXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAodmN0cF9yZWcpKSwK KwkJICAgICAgIHZjdHBfcmVnLCAmdmN0cF9yZWdfaXYpKQorCXJldHVybiBOVUxMOworICAgICAg LyogRW5zdXJlIGl0IG1hdGNoZXMgdGhlIG51bWJlciBvZiBsYW5lcyBvZiB0aGUgdmN0cCBpbnN0 cnVjdGlvbi4gICovCisgICAgICBpZiAoYWJzIChJTlRWQUwgKHZjdHBfcmVnX2l2LnN0ZXApKQor CSAgIT0gYXJtX212ZV9nZXRfdmN0cF9sYW5lcyAoUEFUVEVSTiAodmN0cF9pbnNuKSkpCisJcmV0 dXJuIE5VTEw7CisgICAgICBpZiAoIWFybV9tdmVfY2hlY2tfcmVnX29yaWdpbl9pc19udW1fZWxl bXMgKGJvZHksIGNvbmRjb3VudCwgdmN0cF9yZWdfaXYuc3RlcCkpCisJcmV0dXJuIE5VTEw7Cisg ICAgfQorICAvKiBJZiB0aGUgZGVjcmVtZW50cyBhcmUgdGhlIHNhbWUsIHRoZW4gdGhlIHNpdHVh dGlvbiBpcyBzaW1wbGU6IGVpdGhlciB0aGV5CisgICAgIGFyZSBhbHNvIHRoZSBzYW1lIHJlZywg d2hpY2ggaXMgc2FmZSwgb3IgdGhleSBhcmUgZGlmZmVyZW50IHJlZ2lzdGVycywgaW4KKyAgICAg d2hpY2ggY2FzZSBtYWtzZSBzdXJlIHRoYXQgdGhlcmUgaXMgYSBvbmx5IHNpbXBsZSBTRVQgZnJv bSBvbmUgdG8gdGhlCisgICAgIG90aGVyIGluc2lkZSB0aGUgbG9vcC4qLworICBlbHNlIGlmIChk ZWNyZW1lbnRudW0gPT0gYXJtX212ZV9nZXRfdmN0cF9sYW5lcyAoUEFUVEVSTiAodmN0cF9pbnNu KSkpCisgICAgeworICAgICAgaWYgKFJFR05PIChjb25kY291bnQpICE9IFJFR05PICh2Y3RwX3Jl ZykpCisJeworCSAgLyogSXQgd2Fzbid0IHRoZSBzYW1lIHJlZywgYnV0IGl0IGNvdWxkIGJlIGJl aGlsZCBhCisJICAgICAoc2V0ICh2Y3RwX3JlZykgKGNvbmRjb3VudCkpLCBzbyBpbnN0ZWFkIGZp bmQgd2hlcmUKKwkgICAgIHRoZSBWQ1RQIGluc24gaXMgREVGJ2QgaW5zaWRlIHRoZSBsb29wLiAg Ki8KKwkgIHJ0eCB2Y3RwX3JlZ19zZXQgPQorCQlQQVRURVJOIChERl9SRUZfSU5TTiAoZGZfYmJf cmVnbm9fb25seV9kZWZfZmluZAorCQkJCQkoYm9keSwgUkVHTk8gKHZjdHBfcmVnKSkpKTsKKwkg IC8qIFRoaXMgbXVzdCBqdXN0IGJlIGEgc2ltcGxlIFNFVCBmcm9tIHRoZSBjb25kY291bnQuICAq LworCSAgaWYgKEdFVF9DT0RFICh2Y3RwX3JlZ19zZXQpICE9IFNFVCB8fCAhUkVHX1AgKFhFWFAg KHZjdHBfcmVnX3NldCwgMSkpCisJICAgICAgfHwgUkVHTk8gKFhFWFAgKHZjdHBfcmVnX3NldCwg MSkpICE9IFJFR05PIChjb25kY291bnQpKQorCSAgICByZXR1cm4gTlVMTDsKKwl9CisgICAgfQor ICBlbHNlCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogV2Ugbm93IG9ubHkgbmVlZCB0byBmaW5k IG91dCB0aGF0IHRoZSBsb29wIHRlcm1pbmF0ZXMgd2l0aCBhIExFCisgICAgIHplcm8gY29uZGl0 aW9uLiAgSWYgY29uZGNvbnN0IGlzIGEgY29uc3RfaW50LCB0aGVuIHRoaXMgaXMgZWFzeS4KKyAg ICAgSWYgaXRzIGEgUkVHLCBsb29rIGF0IHRoZSBsYXN0IGNvbmRpdGlvbitqdW1wIGluIGEgYmIg YmVmb3JlCisgICAgIHRoZSBsb29wLCBiZWNhdXNlIHRoYXQgdXN1YWxseSB3aWxsIGhhdmUgYSBi cmFuY2gganVtcGluZyBvdmVyCisgICAgIHRoZSBsb29wIGJvZHkuICAqLworICBpZiAoQ09OU1Rf SU5UX1AgKGNvbmRjb25zdCkKKyAgICAgICYmICEoSU5UVkFMIChjb25kY29uc3QpID09IDAgJiYg SlVNUF9QIChCQl9FTkQgKGJvZHkpKQorCSAgICYmIEdFVF9DT0RFIChYRVhQIChQQVRURVJOIChC Ql9FTkQgKGJvZHkpKSwgMSkpID09IElGX1RIRU5fRUxTRQorCSAgICYmIChHRVRfQ09ERSAoWEVY UCAoWEVYUCAoUEFUVEVSTiAoQkJfRU5EIChib2R5KSksIDEpLCAwKSkgPT0gTkUKKwkgICAgICAg fHxHRVRfQ09ERSAoWEVYUCAoWEVYUCAoUEFUVEVSTiAoQkJfRU5EIChib2R5KSksIDEpLCAwKSkg PT0gR1QpKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgZWxzZSBpZiAoUkVHX1AgKGNvbmRjb25zdCkp CisgICAgeworICAgICAgYmFzaWNfYmxvY2sgcHJlX2xvb3BfYmIgPSBib2R5OworICAgICAgd2hp bGUgKHByZV9sb29wX2JiLT5wcmV2X2JiICYmIEJCX0VORCAocHJlX2xvb3BfYmItPnByZXZfYmIp CisJICAgICAmJiAhSlVNUF9QIChCQl9FTkQgKHByZV9sb29wX2JiLT5wcmV2X2JiKSkpCisJcHJl X2xvb3BfYmIgPSBwcmVfbG9vcF9iYi0+cHJldl9iYjsKKyAgICAgIGlmIChwcmVfbG9vcF9iYiAm JiBCQl9FTkQgKHByZV9sb29wX2JiKSkKKwlwcmVfbG9vcF9iYiA9IHByZV9sb29wX2JiLT5wcmV2 X2JiOworICAgICAgZWxzZQorCXJldHVybiBOVUxMOworICAgICAgcnR4IGluaXRpYWxfY29tcGFy ZSA9IE5VTExfUlRYOworICAgICAgaWYgKCEocHJldl9ub25ub3RlX25vbmRlYnVnX2luc25fYmIg KEJCX0VORCAocHJlX2xvb3BfYmIpKQorCSAgICAmJiBJTlNOX1AgKHByZXZfbm9ubm90ZV9ub25k ZWJ1Z19pbnNuX2JiIChCQl9FTkQgKHByZV9sb29wX2JiKSkpKSkKKwlyZXR1cm4gTlVMTDsKKyAg ICAgIGVsc2UKKwlpbml0aWFsX2NvbXBhcmUKKwkgICAgPSBQQVRURVJOIChwcmV2X25vbm5vdGVf bm9uZGVidWdfaW5zbl9iYiAoQkJfRU5EIChwcmVfbG9vcF9iYikpKTsKKyAgICAgIGlmICghKGlu aXRpYWxfY29tcGFyZSAmJiBHRVRfQ09ERSAoaW5pdGlhbF9jb21wYXJlKSA9PSBTRVQKKwkgICAg JiYgY2NfcmVnaXN0ZXIgKFhFWFAgKGluaXRpYWxfY29tcGFyZSwgMCksIFZPSURtb2RlKQorCSAg ICAmJiBHRVRfQ09ERSAoWEVYUCAoaW5pdGlhbF9jb21wYXJlLCAxKSkgPT0gQ09NUEFSRQorCSAg ICAmJiBDT05TVF9JTlRfUCAoWEVYUCAoWEVYUCAoaW5pdGlhbF9jb21wYXJlLCAxKSwgMSkpCisJ ICAgICYmIElOVFZBTCAoWEVYUCAoWEVYUCAoaW5pdGlhbF9jb21wYXJlLCAxKSwgMSkpID09IDAp KQorCXJldHVybiBOVUxMOworCisgICAgICAvKiBVc3VhbGx5IHRoaXMgaXMgYSBMRSBjb25kaXRp b24sIGJ1dCBpdCBjYW4gYWxzbyBqdXN0IGJlIGEgR1Qgb3IgYW4gRVEKKwkgY29uZGl0aW9uIChp ZiB0aGUgdmFsdWUgaXMgdW5zaWduZWQgb3IgdGhlIGNvbXBpbGVyIGtub3dzIGl0cyBub3QgbmVn YXRpdmUpICAqLworICAgICAgcnR4X2luc24gKmxvb3BfanVtcG92ZXIgPSBCQl9FTkQgKHByZV9s b29wX2JiKTsKKyAgICAgIGlmICghKEpVTVBfUCAobG9vcF9qdW1wb3ZlcikKKwkgICAgJiYgR0VU X0NPREUgKFhFWFAgKFBBVFRFUk4gKGxvb3BfanVtcG92ZXIpLCAxKSkgPT0gSUZfVEhFTl9FTFNF CisJICAgICYmIChHRVRfQ09ERSAoWEVYUCAoWEVYUCAoUEFUVEVSTiAobG9vcF9qdW1wb3Zlciks IDEpLCAwKSkgPT0gTEUKKwkJfHwgR0VUX0NPREUgKFhFWFAgKFhFWFAgKFBBVFRFUk4gKGxvb3Bf anVtcG92ZXIpLCAxKSwgMCkpID09IEdUCisJCXx8IEdFVF9DT0RFIChYRVhQIChYRVhQIChQQVRU RVJOIChsb29wX2p1bXBvdmVyKSwgMSksIDApKSA9PSBFUSkpKQorCXJldHVybiBOVUxMOworICAg IH0KKworICAvKiBFdmVyeXRoaW5nIGxvb2tzIHZhbGlkLiAgKi8KKyAgcmV0dXJuIHZjdHBfaW5z bjsKK30KKworLyogRnVuY3Rpb24gdG8gY2hlY2sgYSBsb29wJ3Mgc3RydWN0dXJlIHRvIHNlZSBp ZiBpdCBpcyBhIHZhbGlkIGNhbmRpZGF0ZSBmb3IKKyAgIGFuIE1WRSBUYWlsIFByZWRpY2F0ZWQg TG93LU92ZXJoZWFkIExvb3AuICBSZXR1cm5zIHRoZSBsb29wJ3MgVkNUUF9JTlNOIGlmCisgICBp dCBpcyB2YWxpZCwgb3IgTlVMTCBpZiBpdCBpc24ndC4gICovCisKK3N0YXRpYyBydHhfaW5zbioK K2FybV9tdmVfbG9vcF92YWxpZF9mb3JfZGxzdHAgKGJhc2ljX2Jsb2NrIGJvZHkpCit7CisgIC8q IERvbG9vcCBjYW4gb25seSBiZSBkb25lICJlbGVtZW50d2lzZSIgd2l0aCBwcmVkaWNhdGVkIGRs c3RwL2xldHAgaWYgaXQKKyAgICAgY29udGFpbnMgYSBWQ1RQIG9uIHRoZSBudW1iZXIgb2YgZWxl bWVudHMgcHJvY2Vzc2VkIGJ5IHRoZSBsb29wLgorICAgICBGaW5kIHRoZSBWQ1RQIHByZWRpY2F0 ZSBnZW5lcmF0aW9uIGluc2lkZSB0aGUgbG9vcCBib2R5IEJCLiAgKi8KKyAgcnR4X2luc24gKnZj dHBfaW5zbiA9IGFybV9tdmVfZ2V0X2xvb3BfdmN0cCAoYm9keSk7CisgIGlmICghdmN0cF9pbnNu KQorICAgIHJldHVybiBOVUxMOworCisgIC8qIFRoZXJlIGFyZSBvbmx5IHR3byB0eXBlcyBvZiBs b29wcyB0aGF0IGNhbiBiZSB0dXJuZWQgaW50byBkbHN0cC9sZXRwCisgICAgIGxvb3BzOgorICAg ICAgQSkgTG9vcHMgb2YgdGhlIGZvcm06CisJICB3aGlsZSAobnVtX29mX2VsZW0gPiAwKQorCSAg ICB7CisJICAgICAgcCA9IHZjdHA8c2l6ZT4gKG51bV9vZl9lbGVtKQorCSAgICAgIG4gLT0gbnVt X29mX2xhbmVzOworCSAgICB9CisgICAgICBCKSBMb29wcyBvZiB0aGUgZm9ybToKKwkgIGludCBu dW1fb2ZfaXRlcnMgPSAobnVtX29mX2VsZW0gKyBudW1fb2ZfbGFuZXMgLSAxKSAvIG51bV9vZl9s YW5lcworCSAgZm9yIChpID0gMDsgaSA8IG51bV9vZl9pdGVyczsgaSsrKQorCSAgICB7CisJICAg ICAgcCA9IHZjdHA8c2l6ZT4gKG51bV9vZl9lbGVtKQorCSAgICAgIG4gLT0gbnVtX29mX2xhbmVz OworCSAgICB9CisKKyAgICBUaGVuLCBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgbG9vcCBhYm92 ZSB3ZSBuZWVkIHdpbGwgbmVlZCB0byBkbworICAgIGRpZmZlcmVudCBzZXRzIG9mIGNoZWNrcy4g ICovCisgIGl2X2FuYWx5c2lzX2xvb3BfaW5pdCAoYm9keS0+bG9vcF9mYXRoZXIpOworCisgIC8q IEluIG9yZGVyIHRvIGZpbmQgb3V0IGlmIHRoZSBsb29wIGlzIG9mIHR5cGUgQSBvciBCIGFib3Zl IGxvb2sgZm9yIHRoZQorICAgICBsb29wIGNvdW50ZXI6IGl0IHdpbGwgZWl0aGVyIGJlIGluY3Jl bWVudGluZyBieSBvbmUgcGVyIGl0ZXJhdGlvbiBvcgorICAgICBpdCB3aWxsIGJlIGRlY3JlbWVu dGluZyBieSBudW1fb2ZfbGFuZXMuICBXZSBjYW4gZmluZCB0aGUgbG9vcCBjb3VudGVyCisgICAg IGluIHRoZSBjb25kaXRpb24gYXQgdGhlIGVuZCBvZiB0aGUgbG9vcC4gICovCisgIHJ0eF9pbnNu ICpsb29wX2NvbmQgPSBwcmV2X25vbm5vdGVfbm9uZGVidWdfaW5zbl9iYiAoQkJfRU5EIChib2R5 KSk7CisgIGlmICghKGNjX3JlZ2lzdGVyIChYRVhQIChQQVRURVJOIChsb29wX2NvbmQpLCAwKSwg Vk9JRG1vZGUpCisJJiYgR0VUX0NPREUgKFhFWFAgKFBBVFRFUk4gKGxvb3BfY29uZCksIDEpKSA9 PSBDT01QQVJFKSkKKyAgICByZXR1cm4gTlVMTDsKKworICAvKiBUaGUgb3BlcmFuZHMgaW4gdGhl IGNvbmRpdGlvbjogIFRyeSB0byBpZGVudGlmeSB3aGljaCBvbmUgaXMgdGhlCisgICAgIGNvbnN0 YW50IGFuZCB3aGljaCBpcyB0aGUgY291bnRlciBhbmQgcnVuIElWIGFuYWx5c2lzIG9uIHRoZSBs YXR0ZXIuICAqLworICBydHggY29uZF9hcmdfMSA9IFhFWFAgKFhFWFAgKFBBVFRFUk4gKGxvb3Bf Y29uZCksIDEpLCAwKTsKKyAgcnR4IGNvbmRfYXJnXzIgPSBYRVhQIChYRVhQIChQQVRURVJOIChs b29wX2NvbmQpLCAxKSwgMSk7CisKKyAgcnR4IGxvb3BfY29uZF9jb25zdGFudDsKKyAgcnR4IGxv b3BfY291bnRlcjsKKyAgY2xhc3MgcnR4X2l2IGNvbmRfY291bnRlcl9pdiwgY29uZF90ZW1wX2l2 OworCisgIGlmIChDT05TVF9JTlRfUCAoY29uZF9hcmdfMSkpCisgICAgeworICAgICAgLyogY29u ZF9hcmdfMSBpcyB0aGUgY29uc3RhbnQgYW5kIGNvbmRfYXJnXzIgaXMgdGhlIGNvdW50ZXIuICAq LworICAgICAgbG9vcF9jb25kX2NvbnN0YW50ID0gY29uZF9hcmdfMTsKKyAgICAgIGxvb3BfY291 bnRlciA9IGNvbmRfYXJnXzI7CisgICAgICBpdl9hbmFseXplIChsb29wX2NvbmQsIGFzX2E8c2Nh bGFyX2ludF9tb2RlPiAoR0VUX01PREUgKGNvbmRfYXJnXzIpKSwKKwkJICBjb25kX2FyZ18yLCAm Y29uZF9jb3VudGVyX2l2KTsKKyAgICB9CisgIGVsc2UgaWYgKENPTlNUX0lOVF9QIChjb25kX2Fy Z18yKSkKKyAgICB7CisgICAgICAvKiBjb25kX2FyZ18yIGlzIHRoZSBjb25zdGFudCBhbmQgY29u ZF9hcmdfMSBpcyB0aGUgY291bnRlci4gICovCisgICAgICBsb29wX2NvbmRfY29uc3RhbnQgPSBj b25kX2FyZ18yOworICAgICAgbG9vcF9jb3VudGVyID0gY29uZF9hcmdfMTsKKyAgICAgIGl2X2Fu YWx5emUgKGxvb3BfY29uZCwgYXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAoY29uZF9h cmdfMSkpLAorCQkgIGNvbmRfYXJnXzEsICZjb25kX2NvdW50ZXJfaXYpOworICAgIH0KKyAgZWxz ZSBpZiAoUkVHX1AgKGNvbmRfYXJnXzEpICYmIFJFR19QIChjb25kX2FyZ18yKSkKKyAgICB7Cisg ICAgICAvKiBJZiBib3RoIG9wZXJhbmRzIHRvIHRoZSBjb21wYXJlIGFyZSBSRUdzLCB3ZSBjYW4g c2FmZWx5CisJIHJ1biBJViBhbmFseXNpcyBvbiBib3RoIGFuZCB0aGVuIGRldGVybWluZSB3aGlj aCBpcyB0aGUKKwkgY29uc3RhbnQgYnkgbG9va2luZyBhdCB0aGUgc3RlcC4KKwkgRmlyc3QgYXNz dW1lIGNvbmRfYXJnXzEgaXMgdGhlIGNvdW50ZXIuICAqLworICAgICAgbG9vcF9jb3VudGVyID0g Y29uZF9hcmdfMTsKKyAgICAgIGxvb3BfY29uZF9jb25zdGFudCA9IGNvbmRfYXJnXzI7CisgICAg ICBpdl9hbmFseXplIChsb29wX2NvbmQsIGFzX2E8c2NhbGFyX2ludF9tb2RlPiAoR0VUX01PREUg KGNvbmRfYXJnXzEpKSwKKwkJICBjb25kX2FyZ18xLCAmY29uZF9jb3VudGVyX2l2KTsKKyAgICAg IGl2X2FuYWx5emUgKGxvb3BfY29uZCwgYXNfYTxzY2FsYXJfaW50X21vZGU+IChHRVRfTU9ERSAo Y29uZF9hcmdfMikpLAorCQkgIGNvbmRfYXJnXzIsICZjb25kX3RlbXBfaXYpOworCisgICAgICBp ZiAoIUNPTlNUX0lOVF9QIChjb25kX2NvdW50ZXJfaXYuc3RlcCkgfHwgIUNPTlNUX0lOVF9QIChj b25kX3RlbXBfaXYuc3RlcCkpCisJcmV0dXJuIE5VTEw7CisgICAgICAvKiBMb29rIGF0IHRoZSBz dGVwcyBhbmQgc3dhcCBhcm91bmQgdGhlIHJ0eCdzIGlmIG5lZWRlZC4gIEVycm9yIG91dCBpZgor CSBvbmUgb2YgdGhlbSBjYW5ub3QgYmUgaWRlbnRpZmllZCBhcyBjb25zdGFudC4gICovCisgICAg ICBpZiAoSU5UVkFMIChjb25kX2NvdW50ZXJfaXYuc3RlcCkgIT0gMCAmJiBJTlRWQUwgKGNvbmRf dGVtcF9pdi5zdGVwKSAhPSAwKQorCXJldHVybiBOVUxMOworICAgICAgaWYgKElOVFZBTCAoY29u ZF9jb3VudGVyX2l2LnN0ZXApID09IDAgJiYgSU5UVkFMIChjb25kX3RlbXBfaXYuc3RlcCkgIT0g MCkKKwl7CisJICBsb29wX2NvdW50ZXIgPSBjb25kX2FyZ18yOworCSAgbG9vcF9jb25kX2NvbnN0 YW50ID0gY29uZF9hcmdfMTsKKwkgIGNvbmRfY291bnRlcl9pdiA9IGNvbmRfdGVtcF9pdjsKKwl9 CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIE5VTEw7CisKKyAgaWYgKCFSRUdfUCAobG9vcF9j b3VudGVyKSkKKyAgICByZXR1cm4gTlVMTDsKKyAgaWYgKCEoUkVHX1AgKGxvb3BfY29uZF9jb25z dGFudCkgfHwgQ09OU1RfSU5UX1AgKGxvb3BfY29uZF9jb25zdGFudCkpKQorICAgIHJldHVybiBO VUxMOworCisgIC8qIE5vdyB3ZSBoYXZlIGV4dHJhY3RlZCB0aGUgSVYgc3RlcCBvZiB0aGUgbG9v cCBjb3VudGVyLCBjYWxsIHRoZQorICAgICBhcHByb3ByaWF0ZSBjaGVja2luZyBmdW5jdGlvbi4g ICovCisgIGlmIChJTlRWQUwgKGNvbmRfY291bnRlcl9pdi5zdGVwKSA+IDApCisgICAgcmV0dXJu IGFybV9tdmVfZGxzdHBfY2hlY2tfaW5jX2NvdW50ZXIgKGJvZHksIHZjdHBfaW5zbiwKKwkJCQkJ ICAgIGxvb3BfY29uZF9jb25zdGFudCwgbG9vcF9jb3VudGVyKTsKKyAgZWxzZSBpZiAoSU5UVkFM IChjb25kX2NvdW50ZXJfaXYuc3RlcCkgPCAwKQorICAgIHJldHVybiBhcm1fbXZlX2Rsc3RwX2No ZWNrX2RlY19jb3VudGVyIChib2R5LCB2Y3RwX2luc24sCisJCQkJCSAgICBsb29wX2NvbmRfY29u c3RhbnQsIGxvb3BfY291bnRlcik7CisgIGVsc2UKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyog UHJlZGljdCB3aGV0aGVyIHRoZSBnaXZlbiBsb29wIGluIGdpbXBsZSB3aWxsIGJlIHRyYW5zZm9y bWVkIGluIHRoZSBSVEwKKyAgIGRvbG9vcF9vcHRpbWl6ZSBwYXNzLiAgKi8KKworc3RhdGljIGJv b2wKK2FybV9wcmVkaWN0X2RvbG9vcF9wIChzdHJ1Y3QgbG9vcCAqbG9vcCkKK3sKKyAgZ2NjX2Fz c2VydCAobG9vcCk7CisgIC8qIE9uIGFybSwgdGFyZ2V0bS5jYW5fdXNlX2RvbG9vcF9wIGlzIGFj dHVhbGx5CisgICAgIGNhbl91c2VfZG9sb29wX2lmX2lubmVybW9zdC4gIEVuc3VyZSB0aGUgbG9v cCBpcyBpbm5lcm1vc3QsCisgICAgIGl0IGlzIHZhbGlkIGFuZCBhcyBwZXIgYXJtX3RhcmdldF9i Yl9va19mb3JfbG9iIGFuZCB0aGUKKyAgICAgY29ycmVjdCBhcmNoaXRlY3R1cmUgZmxhZ3MgYXJl IGVuYWJsZWQuICAqLworICBpZiAoIShUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBVkVfTE9CICYm IG9wdGltaXplID4gMCkpCisgICAgeworICAgICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFn cyAmIFRERl9ERVRBSUxTKSkKKwlmcHJpbnRmIChkdW1wX2ZpbGUsICJQcmVkaWN0IGRvbG9vcCBm YWlsdXJlIGR1ZSB0byIKKwkJCSAgICAiIHRhcmdldCBhcmNoaXRlY3R1cmUgb3Igb3B0aW1pc2F0 aW9uIGZsYWdzLlxuIik7CisgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICBlbHNlIGlmIChs b29wLT5pbm5lciAhPSBOVUxMKQorICAgIHsKKyAgICAgIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBf ZmxhZ3MgJiBUREZfREVUQUlMUykpCisJZnByaW50ZiAoZHVtcF9maWxlLCAiUHJlZGljdCBkb2xv b3AgZmFpbHVyZSBkdWUgdG8iCisJCQkgICAgIiBsb29wIG5lc3RpbmcuXG4iKTsKKyAgICAgIHJl dHVybiBmYWxzZTsKKyAgICB9CisgIGVsc2UgaWYgKCFhcm1fdGFyZ2V0X2JiX29rX2Zvcl9sb2Ig KGxvb3AtPmhlYWRlci0+bmV4dF9iYikpCisgICAgeworICAgICAgaWYgKGR1bXBfZmlsZSAmJiAo ZHVtcF9mbGFncyAmIFRERl9ERVRBSUxTKSkKKwlmcHJpbnRmIChkdW1wX2ZpbGUsICJQcmVkaWN0 IGRvbG9vcCBmYWlsdXJlIGR1ZSB0byIKKwkJCSAgICAiIGxvb3AgYmIgY29tcGxleGl0eS5cbiIp OworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICByZXR1cm4gdHJ1ZTsKK30KKworLyog SW1wbGVtZW50IHRhcmdldG0ubG9vcF91bnJvbGxfYWRqdXN0LiAgVXNlIHRoaXMgdG8gYmxvY2sg dW5yb2xsaW5nIG9mIGxvb3BzCisgICB0aGF0IG1heSBsYXRlciBiZSB0dXJuZWQgaW50byBNVkUg VGFpbCBQcmVkaWNhdGVkIExvdyBPdmVyaGVhZCBMb29wcy4gIFRoZQorICAgcGVyZm9ybWFuY2Ug YmVuZWZpdCBvZiBhbiBNVkUgTG9MIGlzIGxpa2VseSB0byBiZSBtdWNoIGhpZ2hlciB0aGFuIHRo YXQgb2YKKyAgIHRoZSB1bnJvbGxpbmcuICAqLworCit1bnNpZ25lZAorYXJtX2xvb3BfdW5yb2xs X2FkanVzdCAodW5zaWduZWQgbnVucm9sbCwgc3RydWN0IGxvb3AgKmxvb3ApCit7CisgIGlmIChU QVJHRVRfSEFWRV9NVkUKKyAgICAgICYmIGFybV90YXJnZXRfYmJfb2tfZm9yX2xvYiAobG9vcC0+ bGF0Y2gpCisgICAgICAmJiBhcm1fbXZlX2xvb3BfdmFsaWRfZm9yX2Rsc3RwIChsb29wLT5oZWFk ZXIpKQorICAgIHJldHVybiAwOworICBlbHNlCisgICAgcmV0dXJuIG51bnJvbGw7Cit9CisKKy8q IEZ1bmN0aW9uIHRvIGhhZGxlIGVtaXR0aW5nIGEgVlBULXVucHJlZGljYXRlZCB2ZXJzaW9uIG9m IGEgVlBULXByZWRpY2F0ZWQKKyAgIGluc24gdG8gYSBzZXF1ZW5jZS4gICovCisKK3N0YXRpYyBi b29sCithcm1fZW1pdF9tdmVfdW5wcmVkaWNhdGVkX2luc25fdG9fc2VxIChydHhfaW5zbiogaW5z bikKK3sKKyAgcnR4IGluc25fdnByX3JlZ19vcGVyYW5kID0gYXJtX2dldF9yZXF1aXJlZF92cHJf cmVnX3BhcmFtIChpbnNuKTsKKyAgaW50IG5ld19pY29kZSA9IGdldF9hdHRyX212ZV91bnByZWRp Y2F0ZWRfaW5zbiAoaW5zbik7CisgIGlmICghaW5fc2VxdWVuY2VfcCAoKQorICAgICAgfHwgIU1W RV9WUFRfUFJFRElDQVRFRF9JTlNOX1AgKGluc24pCisgICAgICB8fCAoIWluc25fdnByX3JlZ19v cGVyYW5kKQorICAgICAgfHwgKCFuZXdfaWNvZGUpKQorICAgIHJldHVybiBmYWxzZTsKKworICBl eHRyYWN0X2luc24gKGluc24pOworICBydHggYXJyWzhdOworICBpbnQgaiA9IDA7CisKKyAgLyog V2hlbiB0cmFuc2Zvcm1pbmcgYSBWUFQtcHJlZGljYXRlZCBpbnN0cnVjdGlvbgorICAgICBpbnRv IGl0cyB1bnByZWRpY2F0ZWQgZXF1aXZhbGVudCB3ZSBuZWVkIHRvIGRyb3AKKyAgICAgdGhlIFZQ UiBvcGVyYW5kIGFuZCB3ZSBtYXkgbmVlZCB0byBhbHNvIGRyb3AgYQorICAgICBtZXJnZSAidnVu aW5pdCIgaW5wdXQgb3BlcmFuZCwgZGVwZW5kaW5nIG9uIHRoZQorICAgICBpbnN0cnVjdGlvbiBw YXR0ZXJuLiAgSGVyZSBlbnN1cmUgdGhhdCB3ZSBoYXZlIGF0CisgICAgIG1vc3QgYSB0d28tb3Bl cmFuZCBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIHR3bworICAgICBpbnN0cnVuY3Rpb25zLiAgKi8K KyAgaW50IG5fb3BlcmFuZHNfZGlmZgorICAgICAgPSByZWNvZ19kYXRhLm5fb3BlcmFuZHMgLSBp bnNuX2RhdGFbbmV3X2ljb2RlXS5uX29wZXJhbmRzOworICBpZiAoIShuX29wZXJhbmRzX2RpZmYg PiAwICYmIG5fb3BlcmFuZHNfZGlmZiA8PSAyKSkKKyAgICByZXR1cm4gZmFsc2U7CisKKyAgLyog VGhlbiwgbG9vcCB0aHJvdWdoIHRoZSBvcGVyYW5kcyBvZiB0aGUgcHJlZGljYXRlZAorICAgICBp bnN0cnVjdGlvbiwgYW5kIHJldGFpbiB0aGUgb25lcyB0aGF0IG1hcCB0byB0aGUKKyAgICAgdW5w cmVkaWNhdGVkIGluc3RydWN0aW9uLiAgKi8KKyAgZm9yIChpbnQgaSA9IDA7IGkgPCByZWNvZ19k YXRhLm5fb3BlcmFuZHM7IGkrKykKKyAgICB7CisgICAgICAvKiBJZ25vcmUgdGhlIFZQUiBhbmQs IGlmIG5lZWRlZCwgdGhlIHZ1bmluaXQKKwkgb3BlcmFuZC4gICovCisgICAgICBpZiAoaW5zbl92 cHJfcmVnX29wZXJhbmQgPT0gcmVjb2dfZGF0YS5vcGVyYW5kW2ldCisJICB8fCAobl9vcGVyYW5k c19kaWZmID09IDIKKwkgICAgICAmJiAhc3RyY21wIChyZWNvZ19kYXRhLmNvbnN0cmFpbnRzW2ld LCAiMCIpKSkKKwljb250aW51ZTsKKyAgICAgIGVsc2UKKwl7CisJICBhcnJbal0gPSByZWNvZ19k YXRhLm9wZXJhbmRbaV07CisJICBqKys7CisJfQorICAgIH0KKworICAvKiBGaW5hbGx5LCBlbWl0 IHRoZSB1cHJlZGljYXRlZCBpbnN0cnVjdGlvbi4gICovCisgIHN3aXRjaCAoaikKKyAgICB7Cisg ICAgICBjYXNlIDE6CisJZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0pKTsK KwlicmVhazsKKyAgICAgIGNhc2UgMjoKKwllbWl0X2luc24gKEdFTl9GQ04gKG5ld19pY29kZSkg KGFyclswXSwgYXJyWzFdKSk7CisJYnJlYWs7CisgICAgICBjYXNlIDM6CisJZW1pdF9pbnNuIChH RU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJyWzJdKSk7CisJYnJlYWs7Cisg ICAgICBjYXNlIDQ6CisJZW1pdF9pbnNuIChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFy clsxXSwgYXJyWzJdLAorCQkJCQlhcnJbM10pKTsKKwlicmVhazsKKyAgICAgIGNhc2UgNToKKwll bWl0X2luc24gKEdFTl9GQ04gKG5ld19pY29kZSkgKGFyclswXSwgYXJyWzFdLCBhcnJbMl0sIGFy clszXSwKKwkJCQkJYXJyWzRdKSk7CisJYnJlYWs7CisgICAgICBjYXNlIDY6CisJZW1pdF9pbnNu IChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM10sCisJ CQkJCWFycls0XSwgYXJyWzVdKSk7CisJYnJlYWs7CisgICAgICBjYXNlIDc6CisJZW1pdF9pbnNu IChHRU5fRkNOIChuZXdfaWNvZGUpIChhcnJbMF0sIGFyclsxXSwgYXJyWzJdLCBhcnJbM10sCisJ CQkJCWFycls0XSwgYXJyWzVdLCBhcnJbNl0pKTsKKwlicmVhazsKKyAgICAgIGRlZmF1bHQ6CisJ Z2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKyAgcmV0dXJuIHRydWU7Cit9CisKKy8qIFdoZW4g YSB2Y3RwIGluc24gaXMgdXNlZCwgaXRzIG91dCBpcyBvZnRlbiBmb2xsb3dlZCBieQorICAgYSB6 ZXJvLWV4dGVuZCBpbnNuIHRvIFNJbW9kZSwgd2hpY2ggaXMgdGhlbiBTVUJSRUcnZCBpbnRvIGEK KyAgIHZlY3RvciBmb3JtIG9mIG1vZGUgVkFMSURfTVZFX1BSRURfTU9ERTogdGhpcyB2ZWN0b3Ig Zm9ybSBpcworICAgd2hhdCBpcyB0aGVuIHVzZWQgYXMgYW4gaW5wdXQgdG8gdGhlIGluc3RydWN0 aW9ucyB3aXRoaW4gdGhlCisgICBsb29wLiAgSGVuY2UsIHN0b3JlIHRoYXQgdmVjdG9yIGZvcm0g b2YgdGhlIFZQUiByZWcgaW50bworICAgdmN0cF92cHJfZ2VuZXJhdGVkLCBzbyB0aGF0IHdlIGNh biBtYXRjaCBpdCB3aXRoIGluc3RydWN0aW9ucworICAgaW4gdGhlIGxvb3AgdG8gZGV0ZXJtaW5l IGlmIHRoZXkgYXJlIHByZWRpY2F0ZWQgb24gdGhpcyBzYW1lCisgICBWUFIuICBJZiB0aGVyZSBp cyBubyB6ZXJvLWV4dGVuZCBhbmQgc3VicmVnIG9yIGl0IGlzIG90aGVyd2lzZQorICAgaW52YWxp ZCwgdGhlbiByZXR1cm4gTlVMTCB0byBjYW5jZWwgdGhlIGRsc3RwIHRyYW5zZm9ybS4gICovCisK K3N0YXRpYyBydHgKK2FybV9tdmVfZ2V0X3ZjdHBfdmVjX2Zvcm0gKHJ0eF9pbnNuICppbnNuKQor eworICBydHggdmN0cF92cHJfZ2VuZXJhdGVkID0gTlVMTF9SVFg7CisgIHJ0eF9pbnNuICpuZXh0 X3VzZTEgPSBOVUxMOworICBkZl9yZWYgdXNlOworICBmb3IgKHVzZQorCT0gREZfUkVHX1VTRV9D SEFJTgorCSAgIChERl9SRUZfUkVHTk8gKERGX0lOU05fSU5GT19ERUZTIChERl9JTlNOX0lORk9f R0VUIChpbnNuKSkpKTsKKyAgICAgICB1c2U7IHVzZSA9IERGX1JFRl9ORVhUX1JFRyAodXNlKSkK KyAgICBpZiAoIW5leHRfdXNlMSAmJiBOT05ERUJVR19JTlNOX1AgKERGX1JFRl9JTlNOICh1c2Up KSkKKyAgICAgIG5leHRfdXNlMSA9IERGX1JFRl9JTlNOICh1c2UpOworCisgIGlmIChzaW5nbGVf c2V0IChuZXh0X3VzZTEpCisgICAgICAmJiBHRVRfQ09ERSAoU0VUX1NSQyAoc2luZ2xlX3NldCAo bmV4dF91c2UxKSkpID09IFpFUk9fRVhURU5EKQorICAgIHsKKyAgICAgIHJ0eF9pbnNuICpuZXh0 X3VzZTIgPSBOVUxMOworICAgICAgZm9yICh1c2UKKwkgICAgPSBERl9SRUdfVVNFX0NIQUlOCisJ ICAgICAgIChERl9SRUZfUkVHTk8KKwkJIChERl9JTlNOX0lORk9fREVGUyAoREZfSU5TTl9JTkZP X0dFVCAobmV4dF91c2UxKSkpKTsKKwkgICB1c2U7IHVzZSA9IERGX1JFRl9ORVhUX1JFRyAodXNl KSkKKwlpZiAoIW5leHRfdXNlMiAmJiBOT05ERUJVR19JTlNOX1AgKERGX1JFRl9JTlNOICh1c2Up KSkKKwkgIG5leHRfdXNlMiA9IERGX1JFRl9JTlNOICh1c2UpOworCisgICAgICBpZiAoc2luZ2xl X3NldCAobmV4dF91c2UyKQorCSAgJiYgR0VUX0NPREUgKFNFVF9TUkMgKHNpbmdsZV9zZXQgKG5l eHRfdXNlMikpKSA9PSBTVUJSRUcpCisJdmN0cF92cHJfZ2VuZXJhdGVkID0gWEVYUCAoUEFUVEVS TiAobmV4dF91c2UyKSwgMCk7CisgICAgfQorCisgIGlmICghdmN0cF92cHJfZ2VuZXJhdGVkIHx8 ICFSRUdfUCAodmN0cF92cHJfZ2VuZXJhdGVkKQorICAgICAgfHwgIVZBTElEX01WRV9QUkVEX01P REUgKEdFVF9NT0RFICh2Y3RwX3Zwcl9nZW5lcmF0ZWQpKSkKKyAgICByZXR1cm4gTlVMTF9SVFg7 CisKKyAgcmV0dXJuIHZjdHBfdnByX2dlbmVyYXRlZDsKK30KKworLyogQXR0ZW1wdCB0byB0cmFu c2Zvcm0gdGhlIGxvb3AgY29udGVudHMgb2YgbG9vcCBiYXNpYyBibG9jayBmcm9tIFZQVAorICAg cHJlZGljYXRlZCBpbnNucyBpbnRvIHVucHJlZGljYXRlZCBpbnNucyBmb3IgYSBkbHN0cC9sZXRw IGxvb3AuICAqLworCitydHgKK2FybV9hdHRlbXB0X2Rsc3RwX3RyYW5zZm9ybSAocnR4IGxhYmVs KQoreworICBiYXNpY19ibG9jayBib2R5ID0gQkxPQ0tfRk9SX0lOU04gKGxhYmVsKS0+cHJldl9i YjsKKworICAvKiBFbnN1cmUgdGhhdCB0aGUgYmIgaXMgd2l0aGluIGEgbG9vcCB0aGF0IGhhcyBh bGwgcmVxdWlyZWQgbWV0YWRhdGEuICAqLworICBpZiAoIWJvZHktPmxvb3BfZmF0aGVyIHx8ICFi b2R5LT5sb29wX2ZhdGhlci0+aGVhZGVyCisgICAgICB8fCAhYm9keS0+bG9vcF9mYXRoZXItPnNp bXBsZV9sb29wX2Rlc2MpCisgICAgcmV0dXJuIEdFTl9JTlQgKDEpOworCisgIHJ0eF9pbnNuICp2 Y3RwX2luc24gPSBhcm1fbXZlX2xvb3BfdmFsaWRfZm9yX2Rsc3RwIChib2R5KTsKKyAgaWYgKCF2 Y3RwX2luc24pCisgICAgcmV0dXJuIEdFTl9JTlQgKDEpOworICBydHggdmN0cF9yZWcgPSBYVkVD RVhQIChYRVhQIChQQVRURVJOICh2Y3RwX2luc24pLCAxKSwgMCwgMCk7CisKKyAgcnR4IHZjdHBf dnByX2dlbmVyYXRlZCA9IGFybV9tdmVfZ2V0X3ZjdHBfdmVjX2Zvcm0gKHZjdHBfaW5zbik7Cisg IGlmICghdmN0cF92cHJfZ2VuZXJhdGVkKQorICAgIHJldHVybiBHRU5fSU5UICgxKTsKKworICAv KiBkZWNyZW1lbnR1bnVtIGlzIGFscmVhZHkga25vd24gdG8gYmUgdmFsaWQgYXQgdGhpcyBwb2lu dC4gICovCisgIGludCBkZWNyZW1lbnRudW0gPSBhcm1fbXZlX2dldF92Y3RwX2xhbmVzIChQQVRU RVJOICh2Y3RwX2luc24pKTsKKworICBydHhfaW5zbiAqaW5zbiA9IDA7CisgIHJ0eF9pbnNuICpj dXJfaW5zbiA9IDA7CisgIHJ0eF9pbnNuICpzZXE7CisgIGhhc2hfbWFwIDxydHhfaW5zbiAqLCBi b29sPiAqc2FmZV9pbnNuX21hcAorICAgICAgPSBuZXcgaGFzaF9tYXAgPHJ0eF9pbnNuICosIGJv b2w+OworCisgIC8qIFNjYW4gdGhyb3VnaCB0aGUgaW5zbnMgaW4gdGhlIGxvb3AgYmIgYW5kIGVt aXQgdGhlIHRyYW5zZm9ybWVkIGJiCisgICAgIGluc25zIHRvIGEgc2VxdWVuY2UuICAqLworICBz dGFydF9zZXF1ZW5jZSAoKTsKKyAgRk9SX0JCX0lOU05TIChib2R5LCBpbnNuKQorICAgIHsKKyAg ICAgIGlmIChHRVRfQ09ERSAoaW5zbikgPT0gQ09ERV9MQUJFTCB8fCBOT1RFX0lOU05fQkFTSUNf QkxPQ0tfUCAoaW5zbikpCisJY29udGludWU7CisgICAgICBlbHNlIGlmIChOT1RFX1AgKGluc24p KQorCWVtaXRfbm90ZSAoKGVudW0gaW5zbl9ub3RlKU5PVEVfS0lORCAoaW5zbikpOworICAgICAg ZWxzZSBpZiAoREVCVUdfSU5TTl9QIChpbnNuKSkKKwllbWl0X2RlYnVnX2luc24gKFBBVFRFUk4g KGluc24pKTsKKyAgICAgIGVsc2UgaWYgKCFJTlNOX1AgKGluc24pKQorCXsKKwkgIGVuZF9zZXF1 ZW5jZSAoKTsKKwkgIHJldHVybiBHRU5fSU5UICgxKTsKKwl9CisgICAgICAvKiBXaGVuIHdlIGZp bmQgdGhlIHZjdHAgaW5zdHJ1Y3Rpb246IGNvbnRpbnVlLiAgKi8KKyAgICAgIGVsc2UgaWYgKGlu c24gPT0gdmN0cF9pbnNuKQorCWNvbnRpbnVlOworICAgICAgIC8qIElmIHRoZSBpbnNuIHBhdHRl cm4gcmVxdWlyZXMgdGhlIHVzZSBvZiB0aGUgVlBSIHZhbHVlIGZyb20gdGhlCisJICB2Y3RwIGFz IGFuIGlucHV0IHBhcmFtZXRlciBmb3IgcHJlZGljYXRpb24uICAqLworICAgICAgZWxzZSBpZiAo YXJtX212ZV92ZWNfaW5zbl9pc19wcmVkaWNhdGVkX3dpdGhfdGhpc19wcmVkaWNhdGUKKwkJKGlu c24sIHZjdHBfdnByX2dlbmVyYXRlZCkpCisJeworCSAgYm9vbCBzdWNjZXNzID0gYXJtX2VtaXRf bXZlX3VucHJlZGljYXRlZF9pbnNuX3RvX3NlcSAoaW5zbik7CisJICBpZiAoIXN1Y2Nlc3MpCisJ ICAgIHsKKwkgICAgICBlbmRfc2VxdWVuY2UgKCk7CisJICAgICAgcmV0dXJuIEdFTl9JTlQgKDEp OworCSAgICB9CisJfQorICAgICAgLyogSWYgdGhlIGluc24gaXNuJ3QgVlBUIHByZWRpY2F0ZWQg b24gdmN0cF92cHJfZ2VuZXJhdGVkLCB3ZSBuZWVkIHRvCisJIG1ha2Ugc3VyZSB0aGF0IGl0IGlz IHN0aWxsIHZhbGlkIHdpdGhpbiB0aGUgZGxzdHAvbGV0cCBsb29wLiAgKi8KKyAgICAgIGVsc2UK Kwl7CisJICAvKiBJZiB0aGlzIGluc3RydWN0aW9uIFVTRS1zIHRoZSB2Y3RwX3Zwcl9nZW5lcmF0 ZWQgb3RoZXIgdGhhbiBmb3IKKwkgICAgIHByZWRpY2F0aW9uLCB0aGlzIGJsb2NrcyB0aGUgdHJh bnNmb3JtYXRpb24gYXMgd2UgYXJlIG5vdCBhbGxvd2VkCisJICAgICB0byBvcHRpbWlzZSB0aGUg VlBSIHZhbHVlIGF3YXkuICAqLworCSAgZGZfcmVmIGluc25fdXNlcyA9IE5VTEw7CisJICBGT1Jf RUFDSF9JTlNOX1VTRSAoaW5zbl91c2VzLCBpbnNuKQorCSAgeworCSAgICBpZiAocnR4X2VxdWFs X3AgKHZjdHBfdnByX2dlbmVyYXRlZCwgREZfUkVGX1JFRyAoaW5zbl91c2VzKSkpCisJICAgICAg eworCQllbmRfc2VxdWVuY2UgKCk7CisJCXJldHVybiBHRU5fSU5UICgxKTsKKwkgICAgICB9CisJ ICB9CisJICAvKiBJZiB3aXRoaW4gdGhlIGxvb3Agd2UgaGF2ZSBhbiBNVkUgdmVjdG9yIGluc3Ry dWN0aW9uIHRoYXQgaXMKKwkgICAgIHVucHJlZGljYXRlZCwgdGhlIGRsc3RwL2xldHAgbG9vcGlu ZyB3aWxsIGFkZCBpbXBsaWNpdAorCSAgICAgcHJlZGljYXRpb24gdG8gaXQuICBUaGlzIHdpbGwg cmVzdWx0IGluIGEgY2hhbmdlIGluIGJlaGF2aW91cgorCSAgICAgb2YgdGhlIGluc3RydWN0aW9u LCBzbyB3ZSBuZWVkIHRvIGZpbmQgb3V0IGlmIGFueSBpbnN0cnVjdGlvbnMKKwkgICAgIHRoYXQg ZmVlZCBpbnRvIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIHdlcmUgaW1wbGljaXRseQorCSAgICAg cHJlZGljYXRlZC4gICovCisJICBpZiAoYXJtX212ZV9jaGVja19kZl9jaGFpbl9iYWNrX2Zvcl9p bXBsaWNfcHJlZGljCisJICAgICAgIChzYWZlX2luc25fbWFwLCBpbnNuLCB2Y3RwX3Zwcl9nZW5l cmF0ZWQpKQorCSAgICB7CisJICAgICAgaWYgKGFybV9tdmVfY2hlY2tfZGZfY2hhaW5fZndkX2Zv cl9pbXBsaWNfcHJlZGljX2ltcGFjdAorCQkgICAgKGluc24sIHZjdHBfdnByX2dlbmVyYXRlZCkp CisJCXsKKwkJICBlbmRfc2VxdWVuY2UgKCk7CisJCSAgcmV0dXJuIEdFTl9JTlQgKDEpOworCQl9 CisJICAgIH0KKwkgIGVtaXRfaW5zbiAoUEFUVEVSTiAoaW5zbikpOworCX0KKyAgICB9CisgIHNl cSA9IGdldF9pbnNucyAoKTsKKyAgZW5kX3NlcXVlbmNlICgpOworCisgIC8qIFJlLXdyaXRlIHRo ZSBlbnRpcmUgQkIgY29udGVudHMgd2l0aCB0aGUgdHJhbnNmb3JtZWQKKyAgICAgc2VxdWVuY2Uu ICAqLworICBGT1JfQkJfSU5TTlNfU0FGRSAoYm9keSwgaW5zbiwgY3VyX2luc24pCisgICAgaWYg KCEoR0VUX0NPREUgKGluc24pID09IENPREVfTEFCRUwgfHwgTk9URV9JTlNOX0JBU0lDX0JMT0NL X1AgKGluc24pKSkKKyAgICAgIGRlbGV0ZV9pbnNuIChpbnNuKTsKKyAgZm9yIChpbnNuID0gc2Vx OyBORVhUX0lOU04gKGluc24pOyBpbnNuID0gTkVYVF9JTlNOIChpbnNuKSkKKyAgICBpZiAoTk9U RV9QIChpbnNuKSkKKyAgICAgIGVtaXRfbm90ZV9hZnRlciAoKGVudW0gaW5zbl9ub3RlKU5PVEVf S0lORCAoaW5zbiksIEJCX0VORCAoYm9keSkpOworICAgIGVsc2UgaWYgKERFQlVHX0lOU05fUCAo aW5zbikpCisgICAgICBlbWl0X2RlYnVnX2luc25fYWZ0ZXIgKFBBVFRFUk4gKGluc24pLCBCQl9F TkQgKGJvZHkpKTsKKyAgICBlbHNlCisgICAgICBlbWl0X2luc25fYWZ0ZXIgKFBBVFRFUk4gKGlu c24pLCBCQl9FTkQgKGJvZHkpKTsKKworICBlbWl0X2p1bXBfaW5zbl9hZnRlciAoUEFUVEVSTiAo aW5zbiksIEJCX0VORCAoYm9keSkpOworICAvKiBUaGUgdHJhbnNmb3JtYXRpb24gaGFzIHN1Y2Nl ZWRlZCwgc28gbm93IG1vZGlmeSB0aGUgImNvdW50IgorICAgICAoYS5rLmEuIG5pdGVyX2V4cHIp IGZvciB0aGUgbWlkZGxlLWVuZC4gIEFsc28gc2V0IG5vbG9vcF9hc3N1bXB0aW9ucworICAgICB0 byBOVUxMIHRvIHN0b3AgdGhlIG1pZGRsZS1lbmQgZnJvbSBtYWtpbmcgYXNzdW1wdGlvbnMgYWJv dXQgdGhlCisgICAgIG51bWJlciBvZiBpdGVyYXRpb25zLiAgKi8KKyAgc2ltcGxlX2xvb3BfZGVz YyAoYm9keS0+bG9vcF9mYXRoZXIpLT5uaXRlcl9leHByID0gdmN0cF9yZWc7CisgIHNpbXBsZV9s b29wX2Rlc2MgKGJvZHktPmxvb3BfZmF0aGVyKS0+bm9sb29wX2Fzc3VtcHRpb25zID0gTlVMTF9S VFg7CisgIHJldHVybiBHRU5fSU5UIChkZWNyZW1lbnRudW0pOwogfQogCiAjaWYgQ0hFQ0tJTkdf UApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vYXJtLm1kIGIvZ2NjL2NvbmZpZy9hcm0vYXJt Lm1kCmluZGV4IDhlZmRlYmVjYzNjLi5kYTc0NTI4OGYyNiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hcm0vYXJtLm1kCisrKyBiL2djYy9jb25maWcvYXJtL2FybS5tZApAQCAtMTI0LDYgKzEyNCwx MSBAQAogOyBhbmQgbm90IGFsbCBBUk0gaW5zbnMgZG8uCiAoZGVmaW5lX2F0dHIgInByZWRpY2F0 ZWQiICJ5ZXMsbm8iIChjb25zdF9zdHJpbmcgIm5vIikpCiAKKworOyBBbiBhdHRyaWJ1dGUgdGhh dCBlbmNvZGVzIHRoZSBDT0RFX0ZPUl88aW5zbj4gb2YgdGhlIE1WRSBWUFQgdW5wcmVkaWNhdGVk Cis7IHZlcnNpb24gb2YgYSBWUFQtcHJlZGljYXRlZCBpbnN0cnVjdGlvbi4gIEZvciB1bnByZWRp Y2F0ZWQgaW5zdHJ1Y3Rpb25zCis7IHRoYXQgYXJlIHByZWRpY2FibGUsIGVuY29kZSB0aGUgc2Ft ZSBwYXR0ZXJuJ3MgQ09ERV9GT1JfPGluc24+IGFzIGEgd2F5IHRvCis7IGVuY29kZSB0aGF0IGl0 IGlzIGEgcHJlZGljYWJsZSBpbnN0cnVjdGlvbi4KIChkZWZpbmVfYXR0ciAibXZlX3VucHJlZGlj YXRlZF9pbnNuIiAiIiAoY29uc3RfaW50IDApKQogCiA7IExFTkdUSCBvZiBhbiBpbnN0cnVjdGlv biAoaW4gYnl0ZXMpCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2FybS9pdGVyYXRvcnMubWQgYi9n Y2MvY29uZmlnL2FybS9pdGVyYXRvcnMubWQKaW5kZXggNWVhMmQ5ZTg2NjguLmE2YTdmZjUwN2E1 IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2FybS9pdGVyYXRvcnMubWQKKysrIGIvZ2NjL2NvbmZp Zy9hcm0vaXRlcmF0b3JzLm1kCkBAIC0yNjczLDYgKzI2NzMsOSBAQAogKGRlZmluZV9pbnRfYXR0 ciBtcnJjIFsoVlVOU1BFQ19NUlJDICJtcnJjIikgKFZVTlNQRUNfTVJSQzIgIm1ycmMyIildKQog KGRlZmluZV9pbnRfYXR0ciBNUlJDIFsoVlVOU1BFQ19NUlJDICJNUlJDIikgKFZVTlNQRUNfTVJS QzIgIk1SUkMyIildKQogCisoZGVmaW5lX2ludF9hdHRyIG1vZGUxIFsoRExTVFA4ICI4IikgKERM U1RQMTYgIjE2IikgKERMU1RQMzIgIjMyIikKKwkJCShETFNUUDY0ICI2NCIpXSkKKwogKGRlZmlu ZV9pbnRfYXR0ciBvcHN1ZmZpeCBbKFVOU1BFQ19ET1RfUyAiczgiKQogCQkJICAgKFVOU1BFQ19E T1RfVSAidTgiKQogCQkJICAgKFVOU1BFQ19ET1RfVVMgInM4IikKQEAgLTI5MTYsNiArMjkxOSw4 IEBACiAoZGVmaW5lX2ludF9pdGVyYXRvciBWU0hMQ1FfTSBbVlNITENRX01fUyBWU0hMQ1FfTV9V XSkKIChkZWZpbmVfaW50X2l0ZXJhdG9yIFZRU0hMVVFfTV9OIFtWUVNITFVRX01fTl9TXSkKIChk ZWZpbmVfaW50X2l0ZXJhdG9yIFZRU0hMVVFfTiBbVlFTSExVUV9OX1NdKQorKGRlZmluZV9pbnRf aXRlcmF0b3IgRExTVFAgW0RMU1RQOCBETFNUUDE2IERMU1RQMzIKKwkJCQkgICBETFNUUDY0XSkK IAogOzsgRGVmaW5lIGl0ZXJhdG9ycyBmb3IgVkNNTEEgb3BlcmF0aW9ucwogKGRlZmluZV9pbnRf aXRlcmF0b3IgVkNNTEFfT1AgW1VOU1BFQ19WQ01MQQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9h cm0vbXZlLm1kIGIvZ2NjL2NvbmZpZy9hcm0vbXZlLm1kCmluZGV4IDQ0YTA0Yjg2Y2I1Li45Mzkw NTU4M2IxOCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vbXZlLm1kCisrKyBiL2djYy9jb25m aWcvYXJtL212ZS5tZApAQCAtNjkzMyw3ICs2OTMzLDcgQEAKICAgIChzZXQgKHJlZzpTSSBMUl9S RUdOVU0pCiAJKHBsdXM6U0kgKHJlZzpTSSBMUl9SRUdOVU0pIChtYXRjaF9kdXAgMCkpKQogICAg KGNsb2JiZXIgKHJlZzpDQyBDQ19SRUdOVU0pKV0KLSAgIlRBUkdFVF8zMkJJVCAmJiBUQVJHRVRf SEFWRV9MT0IgJiYgVEFSR0VUX0hBVkVfTVZFICYmIFRBUkdFVF9USFVNQjIiCisgICJUQVJHRVRf SEFWRV9NVkUiCiAgIHsKICAgICBpZiAoZ2V0X2F0dHJfbGVuZ3RoIChpbnNuKSA9PSA0KQogICAg ICAgcmV0dXJuICJsZXRwXHQlfGxyLCAlbDEiOwpAQCAtNjk1Myw1ICs2OTUzLDUgQEAKIAkgKHVu c3BlYzpTSSBbKG1hdGNoX29wZXJhbmQ6U0kgMCAic19yZWdpc3Rlcl9vcGVyYW5kIiAiciIpXQog CSAgRExTVFApKQogICBdCi0gICJUQVJHRVRfMzJCSVQgJiYgVEFSR0VUX0hBVkVfTE9CICYmIFRB UkdFVF9IQVZFX01WRSAmJiBUQVJHRVRfVEhVTUIyIgorICAiVEFSR0VUX0hBVkVfTVZFIgogICAi ZGxzdHAuPG1vZGUxPlx0JXxsciwgJTAiKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vdGh1 bWIyLm1kIGIvZ2NjL2NvbmZpZy9hcm0vdGh1bWIyLm1kCmluZGV4IGUxZTAxM2JlZmE3Li4zNjhk NTEzOGNhMSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9hcm0vdGh1bWIyLm1kCisrKyBiL2djYy9j b25maWcvYXJtL3RodW1iMi5tZApAQCAtMTYxMyw3ICsxNjEzLDcgQEAKICAgICh1c2UgKG1hdGNo X29wZXJhbmQgMSAiIiAiIikpXSAgICAgOyBsYWJlbAogICAiVEFSR0VUXzMyQklUIgogICAiCi0g eworewogICAgLyogQ3VycmVudGx5IFNNUyByZWxpZXMgb24gdGhlIGRvLWxvb3AgcGF0dGVybiB0 byByZWNvZ25pemUgbG9vcHMKICAgICAgIHdoZXJlICgxKSB0aGUgY29udHJvbCBwYXJ0IGNvbnNp c3RzIG9mIGFsbCBpbnNucyBkZWZpbmluZyBhbmQvb3IKICAgICAgIHVzaW5nIGEgY2VydGFpbiAn Y291bnQnIHJlZ2lzdGVyIGFuZCAoMikgdGhlIGxvb3AgY291bnQgY2FuIGJlCkBAIC0xNjIzLDQx ICsxNjIzLDY1IEBACiAKICAgICAgIEFsc28gdXNlZCB0byBpbXBsZW1lbnQgdGhlIGxvdyBvdmVy IGhlYWQgbG9vcHMgZmVhdHVyZSwgd2hpY2ggaXMgcGFydCBvZgogICAgICAgdGhlIEFybXY4LjEt TSBNYWlubGluZSBMb3cgT3ZlcmhlYWQgQnJhbmNoIChMT0IpIGV4dGVuc2lvbi4gICovCi0gICBp ZiAob3B0aW1pemUgPiAwICYmIChmbGFnX21vZHVsb19zY2hlZCB8fCBUQVJHRVRfSEFWRV9MT0Ip KQotICAgewotICAgICBydHggczA7Ci0gICAgIHJ0eCBiY29tcDsKLSAgICAgcnR4IGxvY19yZWY7 Ci0gICAgIHJ0eCBjY19yZWc7Ci0gICAgIHJ0eCBpbnNuOwotICAgICBydHggY21wOwotCi0gICAg IGlmIChHRVRfTU9ERSAob3BlcmFuZHNbMF0pICE9IFNJbW9kZSkKLSAgICAgICBGQUlMOwotCi0g ICAgIHMwID0gb3BlcmFuZHMgWzBdOwotCi0gICAgIC8qIExvdyBvdmVyIGhlYWQgbG9vcCBpbnN0 cnVjdGlvbnMgcmVxdWlyZSB0aGUgZmlyc3Qgb3BlcmFuZCB0byBiZSBMUi4gICovCi0gICAgIGlm IChUQVJHRVRfSEFWRV9MT0IgJiYgYXJtX3RhcmdldF9pbnNuX29rX2Zvcl9sb2IgKG9wZXJhbmRz IFsxXSkpCi0gICAgICAgczAgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBMUl9SRUdOVU0pOwotCi0g ICAgIGlmIChUQVJHRVRfVEhVTUIyKQotICAgICAgIGluc24gPSBlbWl0X2luc24gKGdlbl90aHVt YjJfYWRkc2kzX2NvbXBhcmUwIChzMCwgczAsIEdFTl9JTlQgKC0xKSkpOwotICAgICBlbHNlCi0g ICAgICAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX2FkZHNpM19jb21wYXJlMCAoczAsIHMwLCBHRU5f SU5UICgtMSkpKTsKLQotICAgICBjbXAgPSBYVkVDRVhQIChQQVRURVJOIChpbnNuKSwgMCwgMCk7 Ci0gICAgIGNjX3JlZyA9IFNFVF9ERVNUIChjbXApOwotICAgICBiY29tcCA9IGdlbl9ydHhfTkUg KFZPSURtb2RlLCBjY19yZWcsIGNvbnN0MF9ydHgpOwotICAgICBsb2NfcmVmID0gZ2VuX3J0eF9M QUJFTF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kcyBbMV0pOwotICAgICBlbWl0X2p1bXBfaW5zbiAo Z2VuX3J0eF9TRVQgKHBjX3J0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBn ZW5fcnR4X0lGX1RIRU5fRUxTRSAoVk9JRG1vZGUsIGJjb21wLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2NfcmVmLCBwY19ydHgpKSk7 Ci0gICAgIERPTkU7Ci0gICB9Ci0gZWxzZQotICAgRkFJTDsKLSB9IikKKyAgaWYgKG9wdGltaXpl ID4gMCAmJiAoZmxhZ19tb2R1bG9fc2NoZWQgfHwgVEFSR0VUX0hBVkVfTE9CKSkKKyAgICB7Cisg ICAgICBydHggczA7CisgICAgICBydHggYmNvbXA7CisgICAgICBydHggbG9jX3JlZjsKKyAgICAg IHJ0eCBjY19yZWc7CisgICAgICBydHggaW5zbjsKKyAgICAgIHJ0eCBjbXA7CisgICAgICBydHgg ZGVjcmVtZW50X251bTsKKworICAgICAgaWYgKEdFVF9NT0RFIChvcGVyYW5kc1swXSkgIT0gU0lt b2RlKQorCUZBSUw7CisKKyAgICAgIHMwID0gb3BlcmFuZHNbMF07CisKKyAgICAgICBpZiAoVEFS R0VUX0hBVkVfTE9CICYmIGFybV90YXJnZXRfYmJfb2tfZm9yX2xvYiAoQkxPQ0tfRk9SX0lOU04g KG9wZXJhbmRzWzFdKSkpCisJeworCSAgczAgPSBnZW5fcnR4X1JFRyAoU0ltb2RlLCBMUl9SRUdO VU0pOworCisJICAvKiBJZiB3ZSBoYXZlIGEgY29tcGF0aWJlIE1WRSB0YXJnZXQsIHRyeSBhbmQg YW5hbHlzZSB0aGUgbG9vcAorCSAgICAgY29udGVudHMgdG8gZGV0ZXJtaW5lIGlmIHdlIGNhbiB1 c2UgcHJlZGljYXRlZCBkbHN0cC9sZXRwCisJICAgICBsb29waW5nLiAgKi8KKwkgIGlmIChUQVJH RVRfSEFWRV9NVkUKKwkgICAgICAmJiAoZGVjcmVtZW50X251bSA9IGFybV9hdHRlbXB0X2Rsc3Rw X3RyYW5zZm9ybSAob3BlcmFuZHNbMV0pKQorCSAgICAgICYmIChJTlRWQUwgKGRlY3JlbWVudF9u dW0pICE9IDEpKQorCSAgICB7CisJICAgICAgaW5zbiA9IGVtaXRfaW5zbgorCQkgICAgICAoZ2Vu X3RodW1iMl9hZGRzaTNfY29tcGFyZTAKKwkJCSAgKHMwLCBzMCwgR0VOX0lOVCAoKC0xKSAqIChJ TlRWQUwgKGRlY3JlbWVudF9udW0pKSkpKTsKKwkgICAgICBjbXAgPSBYVkVDRVhQIChQQVRURVJO IChpbnNuKSwgMCwgMCk7CisJICAgICAgY2NfcmVnID0gU0VUX0RFU1QgKGNtcCk7CisJICAgICAg YmNvbXAgPSBnZW5fcnR4X0dFIChWT0lEbW9kZSwgY2NfcmVnLCBjb25zdDBfcnR4KTsKKwkgICAg ICBsb2NfcmVmID0gZ2VuX3J0eF9MQUJFTF9SRUYgKFZPSURtb2RlLCBvcGVyYW5kc1sxXSk7CisJ ICAgICAgZW1pdF9qdW1wX2luc24gKGdlbl9ydHhfU0VUIChwY19ydHgsCisJCQkJICAgICAgIGdl bl9ydHhfSUZfVEhFTl9FTFNFIChWT0lEbW9kZSwgYmNvbXAsCisJCQkJCQkJICAgICBsb2NfcmVm LCBwY19ydHgpKSk7CisJICAgICAgRE9ORTsKKwkgICAgfQorCX0KKworCS8qIE90aGVyd2lzZSwg dHJ5IHN0YW5kYXJkIGRlY3JlbWVudC1ieS1vbmUgZGxzL2xlIGxvb3BpbmcuICAqLworCWlmIChU QVJHRVRfVEhVTUIyKQorCSAgaW5zbiA9IGVtaXRfaW5zbiAoZ2VuX3RodW1iMl9hZGRzaTNfY29t cGFyZTAgKHMwLCBzMCwKKwkJCQkJCQlHRU5fSU5UICgtMSkpKTsKKwllbHNlCisJICBpbnNuID0g ZW1pdF9pbnNuIChnZW5fYWRkc2kzX2NvbXBhcmUwIChzMCwgczAsIEdFTl9JTlQgKC0xKSkpOwor CisJY21wID0gWFZFQ0VYUCAoUEFUVEVSTiAoaW5zbiksIDAsIDApOworCWNjX3JlZyA9IFNFVF9E RVNUIChjbXApOworCWJjb21wID0gZ2VuX3J0eF9ORSAoVk9JRG1vZGUsIGNjX3JlZywgY29uc3Qw X3J0eCk7CisJbG9jX3JlZiA9IGdlbl9ydHhfTEFCRUxfUkVGIChWT0lEbW9kZSwgb3BlcmFuZHNb MV0pOworCWVtaXRfanVtcF9pbnNuIChnZW5fcnR4X1NFVCAocGNfcnR4LAorCQkJCSAgICAgZ2Vu X3J0eF9JRl9USEVOX0VMU0UgKFZPSURtb2RlLCBiY29tcCwKKwkJCQkJCQkgICBsb2NfcmVmLCBw Y19ydHgpKSk7CisJRE9ORTsKKyAgICB9CisgIGVsc2UKKyAgICBGQUlMOworfSIpCiAKIChkZWZp bmVfaW5zbiAiKmNsZWFyX2Fwc3IiCiAgIFsodW5zcGVjX3ZvbGF0aWxlOlNJIFsoY29uc3RfaW50 IDApXSBWVU5TUEVDX0NMUk1fQVBTUikKQEAgLTE3NTUsNyArMTc3OSwzNyBAQAogICB7CiAgICAg aWYgKFJFR05PIChvcGVyYW5kc1swXSkgPT0gTFJfUkVHTlVNKQogICAgICAgewotCWVtaXRfaW5z biAoZ2VuX2Rsc19pbnNuIChvcGVyYW5kc1swXSkpOworCS8qIFBpY2sgb3V0IHRoZSBudW1iZXIg Ynkgd2hpY2ggd2UgYXJlIGRlY3JlbWVudGluZyB0aGUgbG9vcCBjb3VudGVyCisJICAgaW4gZXZl cnkgaXRlcmF0aW9uLiAgSWYgaXQncyA+IDEsIHRoZW4gdXNlIGRsc3RwLiAgKi8KKwlpbnQgY29u c3RfaW50X2RlY19udW0KKwkgICAgID0gYWJzIChJTlRWQUwgKFhFWFAgKFhFWFAgKFhWRUNFWFAg KFBBVFRFUk4gKG9wZXJhbmRzWzFdKSwgMCwgMSksCisJCQkJICAxKSwKKwkJCSAgICAxKSkpOwor CXN3aXRjaCAoY29uc3RfaW50X2RlY19udW0pCisJICB7CisJICAgIGNhc2UgMTY6CisJICAgICAg ZW1pdF9pbnNuIChnZW5fZGxzdHA4X2luc24gKG9wZXJhbmRzWzBdKSk7CisJICAgICAgYnJlYWs7 CisKKwkgICAgY2FzZSA4OgorCSAgICAgIGVtaXRfaW5zbiAoZ2VuX2Rsc3RwMTZfaW5zbiAob3Bl cmFuZHNbMF0pKTsKKwkgICAgICBicmVhazsKKworCSAgICBjYXNlIDQ6CisJICAgICAgZW1pdF9p bnNuIChnZW5fZGxzdHAzMl9pbnNuIChvcGVyYW5kc1swXSkpOworCSAgICAgIGJyZWFrOworCisJ ICAgIGNhc2UgMjoKKwkgICAgICBlbWl0X2luc24gKGdlbl9kbHN0cDY0X2luc24gKG9wZXJhbmRz WzBdKSk7CisJICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAxOgorCSAgICAgIGVtaXRfaW5zbiAo Z2VuX2Rsc19pbnNuIChvcGVyYW5kc1swXSkpOworCSAgICAgIGJyZWFrOworCisJICAgIGRlZmF1 bHQ6CisJICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworCSAgfQogCURPTkU7CiAgICAgICB9CiAg ICAgZWxzZQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hcm0vdW5zcGVjcy5tZCBiL2djYy9jb25m aWcvYXJtL3Vuc3BlY3MubWQKaW5kZXggNDcxM2VjODQwYWIuLjEyYWU0YzRmODIwIDEwMDY0NAot LS0gYS9nY2MvY29uZmlnL2FybS91bnNwZWNzLm1kCisrKyBiL2djYy9jb25maWcvYXJtL3Vuc3Bl Y3MubWQKQEAgLTU4Myw2ICs1ODMsMTAgQEAKICAgVkFERExWUV9VCiAgIFZDVFAKICAgVkNUUF9N CisgIERMU1RQOAorICBETFNUUDE2CisgIERMU1RQMzIKKyAgRExTVFA2NAogICBWUE5PVAogICBW Q1JFQVRFUV9GCiAgIFZDVlRRX05fVE9fRl9TCmRpZmYgLS1naXQgYS9nY2MvZGYtY29yZS5jYyBi L2djYy9kZi1jb3JlLmNjCmluZGV4IGQ0ODEyYjA0YTdjLi40ZmNjMTRiZjc5MCAxMDA2NDQKLS0t IGEvZ2NjL2RmLWNvcmUuY2MKKysrIGIvZ2NjL2RmLWNvcmUuY2MKQEAgLTE5NjQsNiArMTk2NCwy MSBAQCBkZl9iYl9yZWdub19sYXN0X2RlZl9maW5kIChiYXNpY19ibG9jayBiYiwgdW5zaWduZWQg aW50IHJlZ25vKQogICByZXR1cm4gTlVMTDsKIH0KIAorLyogUmV0dXJuIHRoZSBvbmUgYW5kIG9u bHkgZGVmIG9mIFJFR05PIHdpdGhpbiBCQi4gIElmIHRoZXJlIGlzIG5vIGRlZiBvcgorICAgdGhl cmUgYXJlIG11bHRpcGxlIGRlZnMsIHJldHVybiBOVUxMLiAgKi8KKworZGZfcmVmCitkZl9iYl9y ZWdub19vbmx5X2RlZl9maW5kIChiYXNpY19ibG9jayBiYiwgdW5zaWduZWQgaW50IHJlZ25vKQor eworICBkZl9yZWYgdGVtcCA9IGRmX2JiX3JlZ25vX2ZpcnN0X2RlZl9maW5kIChiYiwgcmVnbm8p OworICBpZiAoIXRlbXApCisgICAgcmV0dXJuIE5VTEw7CisgIGVsc2UgaWYgKHRlbXAgPT0gZGZf YmJfcmVnbm9fbGFzdF9kZWZfZmluZCAoYmIsIHJlZ25vKSkKKyAgICByZXR1cm4gdGVtcDsKKyAg ZWxzZQorICAgIHJldHVybiBOVUxMOworfQorCiAvKiBGaW5kcyB0aGUgcmVmZXJlbmNlIGNvcnJl c3BvbmRpbmcgdG8gdGhlIGRlZmluaXRpb24gb2YgUkVHIGluIElOU04uCiAgICBERiBpcyB0aGUg ZGF0YWZsb3cgb2JqZWN0LiAgKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL2RmLmggYi9nY2MvZGYuaApp bmRleCA0MDI2NTdhNzA3Ni4uOTg2MjM2MzdmOWMgMTAwNjQ0Ci0tLSBhL2djYy9kZi5oCisrKyBi L2djYy9kZi5oCkBAIC05ODcsNiArOTg3LDcgQEAgZXh0ZXJuIHZvaWQgZGZfY2hlY2tfY2ZnX2Ns ZWFuICh2b2lkKTsKICNlbmRpZgogZXh0ZXJuIGRmX3JlZiBkZl9iYl9yZWdub19maXJzdF9kZWZf ZmluZCAoYmFzaWNfYmxvY2ssIHVuc2lnbmVkIGludCk7CiBleHRlcm4gZGZfcmVmIGRmX2JiX3Jl Z25vX2xhc3RfZGVmX2ZpbmQgKGJhc2ljX2Jsb2NrLCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuIGRm X3JlZiBkZl9iYl9yZWdub19vbmx5X2RlZl9maW5kIChiYXNpY19ibG9jaywgdW5zaWduZWQgaW50 KTsKIGV4dGVybiBkZl9yZWYgZGZfZmluZF9kZWYgKHJ0eF9pbnNuICosIHJ0eCk7CiBleHRlcm4g Ym9vbCBkZl9yZWdfZGVmaW5lZCAocnR4X2luc24gKiwgcnR4KTsKIGV4dGVybiBkZl9yZWYgZGZf ZmluZF91c2UgKHJ0eF9pbnNuICosIHJ0eCk7CmRpZmYgLS1naXQgYS9nY2MvbG9vcC1kb2xvb3Au Y2MgYi9nY2MvbG9vcC1kb2xvb3AuY2MKaW5kZXggNGZlYjBhMjVhYjkuLjZhNzI3MDBhMTI3IDEw MDY0NAotLS0gYS9nY2MvbG9vcC1kb2xvb3AuY2MKKysrIGIvZ2NjL2xvb3AtZG9sb29wLmNjCkBA IC04NSwxMCArODUsMTAgQEAgZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0eF9pbnNuICpkb2xvb3Bf cGF0KQogICAgICBmb3JtczoKIAogICAgICAxKSAgKHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3Ro ZW5fZWxzZSAoY29uZGl0aW9uKQotCSAgCQkJICAgICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwp KQotCQkJCSAgICAgICAgICAgIChwYykpKQotCSAgICAgICAgICAgICAoc2V0IChyZWcpIChwbHVz IChyZWcpIChjb25zdF9pbnQgLTEpKSkKLQkgICAgICAgICAgICAgKGFkZGl0aW9uYWwgY2xvYmJl cnMgYW5kIHVzZXMpXSkKKwkJCQkJICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKKwkJCQkJICAgIChw YykpKQorCQkgICAgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpKQorCQkg ICAgIChhZGRpdGlvbmFsIGNsb2JiZXJzIGFuZCB1c2VzKV0pCiAKICAgICAgVGhlIGJyYW5jaCBt dXN0IGJlIHRoZSBmaXJzdCBlbnRyeSBvZiB0aGUgcGFyYWxsZWwgKGFsc28gcmVxdWlyZWQKICAg ICAgYnkganVtcC5jYyksIGFuZCB0aGUgc2Vjb25kIGVudHJ5IG9mIHRoZSBwYXJhbGxlbCBtdXN0 IGJlIGEgc2V0IG9mCkBAIC05NiwxOCArOTYsMTkgQEAgZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0 eF9pbnNuICpkb2xvb3BfcGF0KQogICAgICB0aGUgbG9vcCBjb3VudGVyIGluIGFuIGlmX3RoZW5f ZWxzZSB0b28uCiAKICAgICAgMikgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAt MSkpCi0gICAgICAgICAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAocmVnICE9IDApCi0JICAgICAg ICAgICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKLQkJCSAgICAgICAgIChwYykp KS4gIAorCSAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAocmVnICE9IDApCisJCQkJIChsYWJlbF9y ZWYgKGxhYmVsKSkKKwkJCQkgKHBjKSkpLgogCi0gICAgIFNvbWUgdGFyZ2V0cyAoQVJNKSBkbyB0 aGUgY29tcGFyaXNvbiBiZWZvcmUgdGhlIGJyYW5jaCwgYXMgaW4gdGhlCi0gICAgIGZvbGxvd2lu ZyBmb3JtOgorICAgICBTb21lIHRhcmdldHMgKEFSTSkgZG8gdGhlIGNvbXBhcmlzb24gYmVmb3Jl IHRoZSBicmFuY2guIFRoZSBBUk0gdGFyZ2V0CisgICAgIGFsc28gc3VwcG9ydHMgYSBjb3VudGVy IHRoYXQgY2FuIGRlY3JlbWVudCBieSBgbmAuICBBcyBzdWNoLCB0aGUKKyAgICAgZm9sbG93aW5n IGZvcm0gaXMgZXhwZWN0ZWQ6CiAKLSAgICAgMykgKHBhcmFsbGVsIFsoc2V0IChjYykgKGNvbXBh cmUgKChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpLCAwKSkpCi0gICAgICAgICAgICAgICAgICAg KHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkpXSkKLSAgICAgICAgKHNldCAo cGMpIChpZl90aGVuX2Vsc2UgKGNjID09IE5FKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAobGFiZWxfcmVmIChsYWJlbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChwYykpKSAqLworICAgICAzKSAocGFyYWxsZWwgWyhzZXQgKGNjKSAoY29tcGFyZSAocGx1cyAo cmVnKSAoY29uc3RfaW50IC1uKSkgMCkpCisJCSAgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNv bnN0X2ludCAtbikpKV0pCisJKHNldCAocGMpIChpZl90aGVuX2Vsc2UgKGNjID09IE5FL0dFKQor CQkJCShsYWJlbF9yZWYgKGxhYmVsKSkKKwkJCQkocGMpKSkgKi8KIAogICBwYXR0ZXJuID0gUEFU VEVSTiAoZG9sb29wX3BhdCk7CiAKQEAgLTE0Myw3ICsxNDQsNyBAQCBkb2xvb3BfY29uZGl0aW9u X2dldCAocnR4X2luc24gKmRvbG9vcF9wYXQpCiAJICAgICAgfHwgR0VUX0NPREUgKGNtcF9hcmcx KSAhPSBQTFVTKQogCSAgICByZXR1cm4gMDsKIAkgIHJlZ19vcmlnID0gWEVYUCAoY21wX2FyZzEs IDApOwotCSAgaWYgKFhFWFAgKGNtcF9hcmcxLCAxKSAhPSBHRU5fSU5UICgtMSkgCisJICBpZiAo IUNPTlNUX0lOVF9QIChYRVhQIChjbXBfYXJnMSwgMSkpCiAJICAgICAgfHwgIVJFR19QIChyZWdf b3JpZykpCiAJICAgIHJldHVybiAwOwogCSAgY2NfcmVnID0gU0VUX0RFU1QgKGNtcF9vcmlnKTsK QEAgLTE1NCw5ICsxNTUsMTEgQEAgZG9sb29wX2NvbmRpdGlvbl9nZXQgKHJ0eF9pbnNuICpkb2xv b3BfcGF0KQogICAgICAgICBpbmMgPSBQQVRURVJOIChwcmV2X2luc24pOwogICAgICAgaWYgKEdF VF9DT0RFIChjbXApID09IFNFVCAmJiBHRVRfQ09ERSAoU0VUX1NSQyAoY21wKSkgPT0gSUZfVEhF Tl9FTFNFKQogCXsKLQkgIC8qIFdlIGV4cGVjdCB0aGUgY29uZGl0aW9uIHRvIGJlIG9mIHRoZSBm b3JtIChyZWcgIT0gMCkgICovCisJICAvKiBXZSBleHBlY3QgdGhlIGNvbmRpdGlvbiB0byBiZSBv ZiB0aGUgZm9ybSAocmVnICE9IDApCisJICAgICBvciAocmVnID49IDApICAqLwogCSAgY29uZCA9 IFhFWFAgKFNFVF9TUkMgKGNtcCksIDApOwotCSAgaWYgKEdFVF9DT0RFIChjb25kKSAhPSBORSB8 fCBYRVhQIChjb25kLCAxKSAhPSBjb25zdDBfcnR4KQorCSAgaWYgKChHRVRfQ09ERSAoY29uZCkg IT0gTkUgJiYgR0VUX0NPREUgKGNvbmQpICE9IEdFKQorCSAgICAgIHx8IFhFWFAgKGNvbmQsIDEp ICE9IGNvbnN0MF9ydHgpCiAJICAgIHJldHVybiAwOwogCX0KICAgICB9CkBAIC0xNzMsMTQgKzE3 NiwxNCBAQCBkb2xvb3BfY29uZGl0aW9uX2dldCAocnR4X2luc24gKmRvbG9vcF9wYXQpCiAgIGlm ICghIFJFR19QIChyZWcpKQogICAgIHJldHVybiAwOwogCi0gIC8qIENoZWNrIGlmIHNvbWV0aGlu ZyA9IChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKS4KKyAgLyogQ2hlY2sgaWYgc29tZXRoaW5n ID0gKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtbikpLgogICAgICBPbiBJQS02NCwgdGhpcyBkZWNy ZW1lbnQgaXMgd3JhcHBlZCBpbiBhbiBpZl90aGVuX2Vsc2UuICAqLwogICBpbmNfc3JjID0gU0VU X1NSQyAoaW5jKTsKICAgaWYgKEdFVF9DT0RFIChpbmNfc3JjKSA9PSBJRl9USEVOX0VMU0UpCiAg ICAgaW5jX3NyYyA9IFhFWFAgKGluY19zcmMsIDEpOwogICBpZiAoR0VUX0NPREUgKGluY19zcmMp ICE9IFBMVVMKICAgICAgIHx8IFhFWFAgKGluY19zcmMsIDApICE9IHJlZwotICAgICAgfHwgWEVY UCAoaW5jX3NyYywgMSkgIT0gY29uc3RtMV9ydHgpCisgICAgICB8fCAhQ09OU1RfSU5UX1AgKFhF WFAgKGluY19zcmMsIDEpKSkKICAgICByZXR1cm4gMDsKIAogICAvKiBDaGVjayBmb3IgKHNldCAo cGMpIChpZl90aGVuX2Vsc2UgKGNvbmRpdGlvbikKQEAgLTIxMSw0MiArMjE0LDQ4IEBAIGRvbG9v cF9jb25kaXRpb25fZ2V0IChydHhfaW5zbiAqZG9sb29wX3BhdCkKICAgICAgIHx8IChHRVRfQ09E RSAoWEVYUCAoY29uZGl0aW9uLCAwKSkgPT0gUExVUwogCSAgJiYgWEVYUCAoWEVYUCAoY29uZGl0 aW9uLCAwKSwgMCkgPT0gcmVnKSkKICAgIHsKLSAgICAgaWYgKEdFVF9DT0RFIChwYXR0ZXJuKSAh PSBQQVJBTExFTCkKICAgICAgLyogIEZvciB0aGUgc2Vjb25kIGZvcm0gd2UgZXhwZWN0OgogCi0g ICAgICAgICAoc2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKQotICAgICAgICAg KHNldCAocGMpIChpZl90aGVuX2Vsc2UgKHJlZyAhPSAwKQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHBjKSkpLgorCSAoc2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEp KQorCSAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAocmVnICE9IDApCisJCQkJIChsYWJlbF9yZWYg KGxhYmVsKSkKKwkJCQkgKHBjKSkpLgogCi0gICAgICAgICBpcyBlcXVpdmFsZW50IHRvIHRoZSBm b2xsb3dpbmc6CisJIFRoYXQgaXMgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOgogCi0gICAg ICAgICAocGFyYWxsZWwgWyhzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChyZWcgIT0gMSkKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwp KQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGMpKSkKLSAg ICAgICAgICAgICAgICAgICAgIChzZXQgKHJlZykgKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkp KQotICAgICAgICAgICAgICAgICAgICAgKGFkZGl0aW9uYWwgY2xvYmJlcnMgYW5kIHVzZXMpXSkK KwkgKHBhcmFsbGVsIFsoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAocmVnICE9IDEpCisJCQkJCSAg ICAobGFiZWxfcmVmIChsYWJlbCkpCisJCQkJCSAgICAocGMpKSkKKwkJICAgICAoc2V0IChyZWcp IChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSkKKwkJICAgICAoYWRkaXRpb25hbCBjbG9iYmVy cyBhbmQgdXNlcyldKQogCi0gICAgICAgIEZvciB0aGUgdGhpcmQgZm9ybSB3ZSBleHBlY3Q6CisJ Rm9yIHRoZSB0aGlyZCBmb3JtIHdlIGV4cGVjdDoKIAotICAgICAgICAocGFyYWxsZWwgWyhzZXQg KGNjKSAoY29tcGFyZSAoKHBsdXMgKHJlZykgKGNvbnN0X2ludCAtMSkpLCAwKSkKLSAgICAgICAg ICAgICAgICAgICAoc2V0IChyZWcpIChwbHVzIChyZWcpIChjb25zdF9pbnQgLTEpKSldKQotICAg ICAgICAoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoY2MgPT0gTkUpCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChsYWJlbF9yZWYgKGxhYmVsKSkKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBjKSkpIAorCShwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJlIChwbHVz IChyZWcpIChjb25zdF9pbnQgLW4pKSAwKSkKKwkJICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAo Y29uc3RfaW50IC1uKSkpXSkKKwkoc2V0IChwYykgKGlmX3RoZW5fZWxzZSAoY2MgPT0gTkUvR0Up CisJCQkJKGxhYmVsX3JlZiAobGFiZWwpKQorCQkJCShwYykpKQogCi0gICAgICAgIHdoaWNoIGlz IGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKKwlXaGljaCwgZm9yIG4gPT0gMSwgaXMgZXF1 aXZhbGVudCB0byB0aGUgZm9sbG93aW5nOgogCi0gICAgICAgIChwYXJhbGxlbCBbKHNldCAoY2Mp IChjb21wYXJlIChyZWcsICAxKSkKLSAgICAgICAgICAgICAgICAgICAoc2V0IChyZWcpIChwbHVz IChyZWcpIChjb25zdF9pbnQgLTEpKSkKLSAgICAgICAgICAgICAgICAgICAoc2V0IChwYykgKGlm X3RoZW5fZWxzZSAoTkUgPT0gY2MpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGxhYmVsX3JlZiAobGFiZWwpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChwYykpKSldKQorCShwYXJhbGxlbCBbKHNldCAoY2MpIChjb21wYXJl IChyZWcsICAxKSkKKwkJICAgKHNldCAocmVnKSAocGx1cyAocmVnKSAoY29uc3RfaW50IC0xKSkp CisJCSAgIChzZXQgKHBjKSAoaWZfdGhlbl9lbHNlIChORSA9PSBjYykKKwkJCQkJICAgKGxhYmVs X3JlZiAobGFiZWwpKQorCQkJCQkgICAocGMpKSkpXSkKIAotICAgICAgICBTbyB3ZSByZXR1cm4g dGhlIHNlY29uZCBmb3JtIGluc3RlYWQgZm9yIHRoZSB0d28gY2FzZXMuCisJU28gd2UgcmV0dXJu IHRoZSBzZWNvbmQgZm9ybSBpbnN0ZWFkIGZvciB0aGUgdHdvIGNhc2VzIHdoZW4gbiA9PSAxLgog CisJRm9yIG4gPiAxLCB0aGUgZmluYWwgdmFsdWUgbWF5IGJlIGV4Y2VlZGVkLCBzbyB1c2UgR0Ug aW5zdGVhZCBvZiBORS4KICAgICAgKi8KLSAgICAgICAgY29uZGl0aW9uID0gZ2VuX3J0eF9mbXRf ZWUgKE5FLCBWT0lEbW9kZSwgaW5jX3NyYywgY29uc3QxX3J0eCk7CisgICAgIGlmIChHRVRfQ09E RSAocGF0dGVybikgIT0gUEFSQUxMRUwpCisgICAgICAgeworCWlmIChJTlRWQUwgKFhFWFAgKGlu Y19zcmMsIDEpKSAhPSAtMSkKKwkgIGNvbmRpdGlvbiA9IGdlbl9ydHhfZm10X2VlIChHRSwgVk9J RG1vZGUsIGluY19zcmMsIGNvbnN0MF9ydHgpOworCWVsc2UKKwkgIGNvbmRpdGlvbiA9IGdlbl9y dHhfZm10X2VlIChORSwgVk9JRG1vZGUsIGluY19zcmMsIGNvbnN0MV9ydHgpOzsKKyAgICAgICB9 CiAKICAgICByZXR1cm4gY29uZGl0aW9uOwogICAgfQpAQCAtNjQyLDcgKzY1MSw3IEBAIGRvbG9v cF9vcHRpbWl6ZSAoY2xhc3MgbG9vcCAqbG9vcCkKIHsKICAgc2NhbGFyX2ludF9tb2RlIG1vZGU7 CiAgIHJ0eCBkb2xvb3BfcmVnOwotICBydHggY291bnQ7CisgIHJ0eCBjb3VudCA9IE5VTExfUlRY OwogICB3aWRlc3RfaW50IGl0ZXJhdGlvbnMsIGl0ZXJhdGlvbnNfbWF4OwogICBydHhfY29kZV9s YWJlbCAqc3RhcnRfbGFiZWw7CiAgIHJ0eCBjb25kaXRpb247CkBAIC02ODUsMTcgKzY5NCw2IEBA IGRvbG9vcF9vcHRpbWl6ZSAoY2xhc3MgbG9vcCAqbG9vcCkKICAgICAgIHJldHVybiBmYWxzZTsK ICAgICB9CiAKLSAgbWF4X2Nvc3QKLSAgICA9IENPU1RTX05fSU5TTlMgKHBhcmFtX21heF9pdGVy YXRpb25zX2NvbXB1dGF0aW9uX2Nvc3QpOwotICBpZiAoc2V0X3NyY19jb3N0IChkZXNjLT5uaXRl cl9leHByLCBtb2RlLCBvcHRpbWl6ZV9sb29wX2Zvcl9zcGVlZF9wIChsb29wKSkKLSAgICAgID4g bWF4X2Nvc3QpCi0gICAgewotICAgICAgaWYgKGR1bXBfZmlsZSkKLQlmcHJpbnRmIChkdW1wX2Zp bGUsCi0JCSAiRG9sb29wOiBudW1iZXIgb2YgaXRlcmF0aW9ucyB0b28gY29zdGx5IHRvIGNvbXB1 dGUuXG4iKTsKLSAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KICAgaWYgKGRlc2MtPmNvbnN0 X2l0ZXIpCiAgICAgaXRlcmF0aW9ucyA9IHdpZGVzdF9pbnQ6OmZyb20gKHJ0eF9tb2RlX3QgKGRl c2MtPm5pdGVyX2V4cHIsIG1vZGUpLAogCQkJCSAgIFVOU0lHTkVEKTsKQEAgLTcxNiwxMiArNzE0 LDI1IEBAIGRvbG9vcF9vcHRpbWl6ZSAoY2xhc3MgbG9vcCAqbG9vcCkKIAogICAvKiBHZW5lcmF0 ZSBsb29waW5nIGluc24uICBJZiB0aGUgcGF0dGVybiBGQUlMcyB0aGVuIGdpdmUgdXAgdHJ5aW5n CiAgICAgIHRvIG1vZGlmeSB0aGUgbG9vcCBzaW5jZSB0aGVyZSBpcyBzb21lIGFzcGVjdCB0aGUg YmFjay1lbmQgZG9lcwotICAgICBub3QgbGlrZS4gICovCi0gIGNvdW50ID0gY29weV9ydHggKGRl c2MtPm5pdGVyX2V4cHIpOworICAgICBub3QgbGlrZS4gIElmIHRoaXMgc3VjY2VlZHMsIHRoZXJl IGlzIGEgY2hhbmNlIHRoYXQgdGhlIGxvb3AKKyAgICAgZGVzYy0+bml0ZXJfZXhwciBoYXMgYmVl biBhbHRlcmVkIGJ5IHRoZSBiYWNrZW5kLCBzbyBvbmx5IGV4dHJhY3QKKyAgICAgdGhhdCBkYXRh IGFmdGVyIHRoZSBnZW5fZG9sb29wX2VuZC4gICovCiAgIHN0YXJ0X2xhYmVsID0gYmxvY2tfbGFi ZWwgKGRlc2MtPmluX2VkZ2UtPmRlc3QpOwogICBkb2xvb3BfcmVnID0gZ2VuX3JlZ19ydHggKG1v ZGUpOwogICBydHhfaW5zbiAqZG9sb29wX3NlcSA9IHRhcmdldG0uZ2VuX2RvbG9vcF9lbmQgKGRv bG9vcF9yZWcsIHN0YXJ0X2xhYmVsKTsKIAorICBtYXhfY29zdAorICAgID0gQ09TVFNfTl9JTlNO UyAocGFyYW1fbWF4X2l0ZXJhdGlvbnNfY29tcHV0YXRpb25fY29zdCk7CisgIGlmIChzZXRfc3Jj X2Nvc3QgKGRlc2MtPm5pdGVyX2V4cHIsIG1vZGUsIG9wdGltaXplX2xvb3BfZm9yX3NwZWVkX3Ag KGxvb3ApKQorICAgICAgPiBtYXhfY29zdCkKKyAgICB7CisgICAgICBpZiAoZHVtcF9maWxlKQor CWZwcmludGYgKGR1bXBfZmlsZSwKKwkJICJEb2xvb3A6IG51bWJlciBvZiBpdGVyYXRpb25zIHRv byBjb3N0bHkgdG8gY29tcHV0ZS5cbiIpOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor ICBjb3VudCA9IGNvcHlfcnR4IChkZXNjLT5uaXRlcl9leHByKTsKICAgd29yZF9tb2RlX3NpemUg PSBHRVRfTU9ERV9QUkVDSVNJT04gKHdvcmRfbW9kZSk7CiAgIHdvcmRfbW9kZV9tYXggPSAoSE9T VF9XSURFX0lOVF8xVSA8PCAod29yZF9tb2RlX3NpemUgLSAxKSA8PCAxKSAtIDE7CiAgIGlmICgh IGRvbG9vcF9zZXEKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbG9i LmggYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2xvYi5oCmluZGV4IGZlYWFlN2NjODk5 Li4zOTQxZmU3YThiNiAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9s b2IuaAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2xvYi5oCkBAIC0xLDE1ICsx LDEzMSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgotCisjaW5jbHVkZSA8c3RkaW50Lmg+CiAvKiBD b21tb24gY29kZSBmb3IgbG9iIHRlc3RzLiAgKi8KIAogI2RlZmluZSBOT19MT0IgYXNtIHZvbGF0 aWxlICgiQCBjbG9iYmVyIGxyIiA6IDogOiAibHIiICkKIAotI2RlZmluZSBOIDEwMDAwCisjZGVm aW5lIE4gMTAwCisKK3N0YXRpYyB2b2lkCityZXNldF9kYXRhIChpbnQgKmEsIGludCAqYiwgaW50 ICpjLCBpbnQgeCkKK3sKKyAgbWVtc2V0IChhLCAtMSwgeCAqIHNpemVvZiAoKmEpKTsKKyAgbWVt c2V0IChiLCAtMSwgeCAqIHNpemVvZiAoKmIpKTsKKyAgbWVtc2V0IChjLCAwLCB4ICogc2l6ZW9m ICgqYykpOworfQorCitzdGF0aWMgdm9pZAorcmVzZXRfZGF0YTggKGludDhfdCAqYSwgaW50OF90 ICpiLCBpbnQ4X3QgKmMsIGludCB4KQoreworICBtZW1zZXQgKGEsIC0xLCB4ICogc2l6ZW9mICgq YSkpOworICBtZW1zZXQgKGIsIC0xLCB4ICogc2l6ZW9mICgqYikpOworICBtZW1zZXQgKGMsIDAs IHggKiBzaXplb2YgKCpjKSk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNldF9kYXRhMTYgKGludDE2 X3QgKmEsIGludDE2X3QgKmIsIGludDE2X3QgKmMsIGludCB4KQoreworICBtZW1zZXQgKGEsIC0x LCB4ICogc2l6ZW9mICgqYSkpOworICBtZW1zZXQgKGIsIC0xLCB4ICogc2l6ZW9mICgqYikpOwor ICBtZW1zZXQgKGMsIDAsIHggKiBzaXplb2YgKCpjKSk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNl dF9kYXRhMzIgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCB4KQorewor ICBtZW1zZXQgKGEsIC0xLCB4ICogc2l6ZW9mICgqYSkpOworICBtZW1zZXQgKGIsIC0xLCB4ICog c2l6ZW9mICgqYikpOworICBtZW1zZXQgKGMsIDAsIHggKiBzaXplb2YgKCpjKSk7Cit9CisKK3N0 YXRpYyB2b2lkCityZXNldF9kYXRhNjQgKGludDY0X3QgKmEsIGludDY0X3QgKmMsIGludCB4KQor eworICBtZW1zZXQgKGEsIC0xLCB4ICogc2l6ZW9mICgqYSkpOworICBtZW1zZXQgKGMsIDAsIHgg KiBzaXplb2YgKCpjKSk7Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19wbHVzIChpbnQgKmEsIGlu dCAqYiwgaW50ICpjLCBpbnQgeCkKK3sKKyAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisg ICAgeworICAgICAgTk9fTE9COworICAgICAgaWYgKGkgPCB4KQorCXsKKwkgIGlmIChjW2ldICE9 IChhW2ldICsgYltpXSkpIGFib3J0ICgpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICBpZiAoY1tp XSAhPSAwKSBhYm9ydCAoKTsKKwl9CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorY2hlY2tfcGx1 czggKGludDhfdCAqYSwgaW50OF90ICpiLCBpbnQ4X3QgKmMsIGludCB4KQoreworICBmb3IgKGlu dCBpID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBOT19MT0I7CisgICAgICBpZiAoaSA8 IHgpCisJeworCSAgaWYgKGNbaV0gIT0gKGFbaV0gKyBiW2ldKSkgYWJvcnQgKCk7CisJfQorICAg ICAgZWxzZQorCXsKKwkgIGlmIChjW2ldICE9IDApIGFib3J0ICgpOworCX0KKyAgICB9Cit9CisK K3N0YXRpYyB2b2lkCitjaGVja19wbHVzMTYgKGludDE2X3QgKmEsIGludDE2X3QgKmIsIGludDE2 X3QgKmMsIGludCB4KQoreworICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKKyAgICB7Cisg ICAgICBOT19MT0I7CisgICAgICBpZiAoaSA8IHgpCisJeworCSAgaWYgKGNbaV0gIT0gKGFbaV0g KyBiW2ldKSkgYWJvcnQgKCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChjW2ldICE9IDAp IGFib3J0ICgpOworCX0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitjaGVja19wbHVzMzIgKGlu dDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCB4KQoreworICBmb3IgKGludCBp ID0gMDsgaSA8IE47IGkrKykKKyAgICB7CisgICAgICBOT19MT0I7CisgICAgICBpZiAoaSA8IHgp CisJeworCSAgaWYgKGNbaV0gIT0gKGFbaV0gKyBiW2ldKSkgYWJvcnQgKCk7CisJfQorICAgICAg ZWxzZQorCXsKKwkgIGlmIChjW2ldICE9IDApIGFib3J0ICgpOworCX0KKyAgICB9Cit9CiAKIHN0 YXRpYyB2b2lkCi1yZXNldF9kYXRhIChpbnQgKmEsIGludCAqYiwgaW50ICpjKQorY2hlY2tfbWVt Y3B5NjQgKGludDY0X3QgKmEsIGludDY0X3QgKmMsIGludCB4KQogewotICBtZW1zZXQgKGEsIC0x LCBOICogc2l6ZW9mICgqYSkpOwotICBtZW1zZXQgKGIsIC0xLCBOICogc2l6ZW9mICgqYikpOwot ICBtZW1zZXQgKGMsIC0xLCBOICogc2l6ZW9mICgqYykpOworICBmb3IgKGludCBpID0gMDsgaSA8 IE47IGkrKykKKyAgICB7CisgICAgICBOT19MT0I7CisgICAgICBpZiAoaSA8IHgpCisJeworCSAg aWYgKGNbaV0gIT0gYVtpXSkgYWJvcnQgKCk7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGlmIChj W2ldICE9IDApIGFib3J0ICgpOworCX0KKyAgICB9CiB9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL2xvYjEuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0v bG9iMS5jCmluZGV4IGJhNWM4MmNkNTVjLi5jOGNlNjUzYTVjMyAxMDA2NDQKLS0tIGEvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2IxLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2FybS9sb2IxLmMKQEAgLTU0LDI5ICs1NCwxOCBAQCBsb29wMyAoaW50ICphLCBpbnQgKmIs IGludCAqYykKICAgICB9IHdoaWxlIChpIDwgTik7CiB9CiAKLXZvaWQKLWNoZWNrIChpbnQgKmEs IGludCAqYiwgaW50ICpjKQotewotICBmb3IgKGludCBpID0gMDsgaSA8IE47IGkrKykKLSAgICB7 Ci0gICAgICBOT19MT0I7Ci0gICAgICBpZiAoY1tpXSAhPSBhW2ldICsgYltpXSkKLQlhYm9ydCAo KTsKLSAgICB9Ci19Ci0KIGludAogbWFpbiAodm9pZCkKIHsKLSAgcmVzZXRfZGF0YSAoYSwgYiwg Yyk7CisgIHJlc2V0X2RhdGEgKGEsIGIsIGMsIE4pOwogICBsb29wMSAoYSwgYiAsYyk7Ci0gIGNo ZWNrIChhLCBiICxjKTsKLSAgcmVzZXRfZGF0YSAoYSwgYiwgYyk7CisgIGNoZWNrX3BsdXMgKGEs IGIsIGMsIE4pOworICByZXNldF9kYXRhIChhLCBiLCBjLCBOKTsKICAgbG9vcDIgKGEsIGIgLGMp OwotICBjaGVjayAoYSwgYiAsYyk7Ci0gIHJlc2V0X2RhdGEgKGEsIGIsIGMpOworICBjaGVja19w bHVzIChhLCBiLCBjLCBOKTsKKyAgcmVzZXRfZGF0YSAoYSwgYiwgYywgTik7CiAgIGxvb3AzIChh LCBiICxjKTsKLSAgY2hlY2sgKGEsIGIgLGMpOworICBjaGVja19wbHVzIChhLCBiLCBjLCBOKTsK IAogICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vbG9iNi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9sb2I2LmMKaW5kZXggMTdi NjEyNDI5NWUuLjRmZTExNmUyYzJiIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYXJtL2xvYjYuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL2xvYjYuYwpA QCAtNzksMTQgKzc5LDE0IEBAIGNoZWNrICh2b2lkKQogaW50CiBtYWluICh2b2lkKQogewotICBy ZXNldF9kYXRhIChhMSwgYjEsIGMxKTsKLSAgcmVzZXRfZGF0YSAoYTIsIGIyLCBjMik7CisgIHJl c2V0X2RhdGEgKGExLCBiMSwgYzEsIE4pOworICByZXNldF9kYXRhIChhMiwgYjIsIGMyLCBOKTsK ICAgbG9vcDEgKGExLCBiMSwgYzEpOwogICByZWYxIChhMiwgYjIsIGMyKTsKICAgY2hlY2sgKCk7 CiAKLSAgcmVzZXRfZGF0YSAoYTEsIGIxLCBjMSk7Ci0gIHJlc2V0X2RhdGEgKGEyLCBiMiwgYzIp OworICByZXNldF9kYXRhIChhMSwgYjEsIGMxLCBOKTsKKyAgcmVzZXRfZGF0YSAoYTIsIGIyLCBj MiwgTik7CiAgIGxvb3AyIChhMSwgYjEsIGMxKTsKICAgcmVmMiAoYTIsIGIyLCBjMik7CiAgIGNo ZWNrICgpOwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxz dHAtY29tcGlsZS1hc20uYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3Rw LWNvbXBpbGUtYXNtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjVk ZGQ5OTRlNTNkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fy bS9tdmUvZGxzdHAtY29tcGlsZS1hc20uYwpAQCAtMCwwICsxLDU2MSBAQAorLyogeyBkZy1kbyBj b21waWxlIHsgdGFyZ2V0IHsgYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZl Y3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLworLyogeyBkZy1vcHRpb25zICItTzMg LXNhdmUtdGVtcHMiIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlvbnMgYXJtX3Y4XzFtX212ZSB9ICov CisKKyNpbmNsdWRlIDxhcm1fbXZlLmg+CisKKyNkZWZpbmUgSU1NIDUKKworI2RlZmluZSBURVNU X0NPTVBJTEVfSU5fRExTVFBfVEVSTkFSWShCSVRTLCBMQU5FUywgTERSU1RSWVRQRSwgVFlQRSwg U0lHTiwgTkFNRSwgUFJFRCkJCQkJXAordm9pZCB0ZXN0XyMjTkFNRSMjUFJFRCMjXyMjU0lHTiMj QklUUyAoVFlQRSMjQklUUyMjX3QgKmEsIFRZUEUjI0JJVFMjI190ICpiLCAgVFlQRSMjQklUUyMj X3QgKmMsIGludCBuKQlcCit7CQkJCQkJCQkJCQlcCisgIHdoaWxlIChuID4gMCkJCQkJCQkJCQkJ XAorICAgIHsJCQkJCQkJCQkJCVwKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cCMjQklUUyMj cSAobik7CQkJCQkJXAorICAgICAgVFlQRSMjQklUUyMjeCMjTEFORVMjI190IHZhID0gdmxkciMj TERSU1RSWVRQRSMjcV96XyMjU0lHTiMjQklUUyAoYSwgcCk7CQlcCisgICAgICBUWVBFIyNCSVRT IyN4IyNMQU5FUyMjX3QgdmIgPSB2bGRyIyNMRFJTVFJZVFBFIyNxX3pfIyNTSUdOIyNCSVRTIChi LCBwKTsJCVwKKyAgICAgIFRZUEUjI0JJVFMjI3gjI0xBTkVTIyNfdCB2YyA9IE5BTUUjI1BSRUQj I18jI1NJR04jI0JJVFMgKHZhLCB2YiwgcCk7CQlcCisgICAgICB2c3RyIyNMRFJTVFJZVFBFIyNx X3BfIyNTSUdOIyNCSVRTIChjLCB2YywgcCk7CQkJCQlcCisgICAgICBjICs9IExBTkVTOwkJCQkJ CQkJCVwKKyAgICAgIGEgKz0gTEFORVM7CQkJCQkJCQkJXAorICAgICAgYiArPSBMQU5FUzsJCQkJ CQkJCQlcCisgICAgICBuIC09IExBTkVTOwkJCQkJCQkJCVwKKyAgICB9CQkJCQkJCQkJCQlcCit9 CisKKyNkZWZpbmUgVEVTVF9DT01QSUxFX0lOX0RMU1RQX1NJR05FRF9VTlNJR05FRF9URVJOQVJZ KEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBOQU1FLCBQUkVEKQlcCitURVNUX0NPTVBJTEVfSU5f RExTVFBfVEVSTkFSWSAoQklUUywgTEFORVMsIExEUlNUUllUUEUsIGludCwgcywgTkFNRSwgUFJF RCkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfVEVSTkFSWSAoQklUUywgTEFORVMsIExEUlNU UllUUEUsIHVpbnQsIHUsIE5BTUUsIFBSRUQpCisKKyNkZWZpbmUgVEVTVF9DT01QSUxFX0lOX0RM U1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUlkoTkFNRSwgUFJFRCkJCQlcCitURVNU X0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUlkgKDgsIDE2LCBiLCBOQU1F LCBQUkVEKQkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5B UlkgKDE2LCA4LCBoLCBOQU1FLCBQUkVEKQkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lH TkVEX1VOU0lHTkVEX1RFUk5BUlkgKDMyLCA0LCB3LCBOQU1FLCBQUkVEKQorCisKK1RFU1RfQ09N UElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZICh2YWRkcSwgX3gp CitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWSAo dm11bHEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVE X1RFUk5BUlkgKHZzdWJxLCBfeCkKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05F RF9VTlNJR05FRF9URVJOQVJZICh2aGFkZHEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lO VEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUlkgKHZvcnJxLCBfeCkKKworCisjZGVmaW5lIFRF U1RfQ09NUElMRV9JTl9ETFNUUF9URVJOQVJZX00oQklUUywgTEFORVMsIExEUlNUUllUUEUsIFRZ UEUsIFNJR04sIE5BTUUsIFBSRUQpCQkJCVwKK3ZvaWQgdGVzdF8jI05BTUUjI1BSRUQjI18jI1NJ R04jI0JJVFMgKFRZUEUjI0JJVFMjI3gjI0xBTkVTIyNfdCBfX2luYWN0aXZlLCBUWVBFIyNCSVRT IyNfdCAqYSwgVFlQRSMjQklUUyMjX3QgKmIsICBUWVBFIyNCSVRTIyNfdCAqYywgaW50IG4pCVwK K3sJCQkJCQkJCQkJCVwKKyAgd2hpbGUgKG4gPiAwKQkJCQkJCQkJCQlcCisgICAgewkJCQkJCQkJ CQkJXAorICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwIyNCSVRTIyNxIChuKTsJCQkJCQlcCisg ICAgICBUWVBFIyNCSVRTIyN4IyNMQU5FUyMjX3QgdmEgPSB2bGRyIyNMRFJTVFJZVFBFIyNxX3pf IyNTSUdOIyNCSVRTIChhLCBwKTsJCVwKKyAgICAgIFRZUEUjI0JJVFMjI3gjI0xBTkVTIyNfdCB2 YiA9IHZsZHIjI0xEUlNUUllUUEUjI3Ffel8jI1NJR04jI0JJVFMgKGIsIHApOwkJXAorICAgICAg VFlQRSMjQklUUyMjeCMjTEFORVMjI190IHZjID0gTkFNRSMjUFJFRCMjXyMjU0lHTiMjQklUUyAo X19pbmFjdGl2ZSwgdmEsIHZiLCBwKTsJCVwKKyAgICAgIHZzdHIjI0xEUlNUUllUUEUjI3FfcF8j I1NJR04jI0JJVFMgKGMsIHZjLCBwKTsJCQkJCVwKKyAgICAgIGMgKz0gTEFORVM7CQkJCQkJCQkJ XAorICAgICAgYSArPSBMQU5FUzsJCQkJCQkJCQlcCisgICAgICBiICs9IExBTkVTOwkJCQkJCQkJ CVwKKyAgICAgIG4gLT0gTEFORVM7CQkJCQkJCQkJXAorICAgIH0JCQkJCQkJCQkJCVwKK30KKwor I2RlZmluZSBURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTShC SVRTLCBMQU5FUywgTERSU1RSWVRQRSwgTkFNRSwgUFJFRCkJXAorVEVTVF9DT01QSUxFX0lOX0RM U1RQX1RFUk5BUllfTSAoQklUUywgTEFORVMsIExEUlNUUllUUEUsIGludCwgcywgTkFNRSwgUFJF RCkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfVEVSTkFSWV9NIChCSVRTLCBMQU5FUywgTERS U1RSWVRQRSwgdWludCwgdSwgTkFNRSwgUFJFRCkKKworI2RlZmluZSBURVNUX0NPTVBJTEVfSU5f RExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9NKE5BTUUsIFBSRUQpCQkJXAor VEVTVF9DT01QSUxFX0lOX0RMU1RQX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX00gKDgsIDE2LCBi LCBOQU1FLCBQUkVEKQkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVE X1RFUk5BUllfTSAoMTYsIDgsIGgsIE5BTUUsIFBSRUQpCQkJCVwKK1RFU1RfQ09NUElMRV9JTl9E TFNUUF9TSUdORURfVU5TSUdORURfVEVSTkFSWV9NICgzMiwgNCwgdywgTkFNRSwgUFJFRCkKKwor CitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9N ICh2YWRkcSwgX20pCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdO RURfVEVSTkFSWV9NICh2bXVscSwgX20pCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19T SUdORURfVU5TSUdORURfVEVSTkFSWV9NICh2c3VicSwgX20pCitURVNUX0NPTVBJTEVfSU5fRExT VFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9NICh2aGFkZHEsIF9tKQorVEVTVF9D T01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTSAodm9ycnEs IF9tKQorCisjZGVmaW5lIFRFU1RfQ09NUElMRV9JTl9ETFNUUF9URVJOQVJZX04oQklUUywgTEFO RVMsIExEUlNUUllUUEUsIFRZUEUsIFNJR04sIE5BTUUsIFBSRUQpCVwKK3ZvaWQgdGVzdF8jI05B TUUjI1BSRUQjI19uXyMjU0lHTiMjQklUUyAoVFlQRSMjQklUUyMjX3QgKmEsICBUWVBFIyNCSVRT IyNfdCAqYywgaW50IG4pCVwKK3sJCQkJCQkJCQkJCVwKKyAgd2hpbGUgKG4gPiAwKQkJCQkJCQkJ CQlcCisgICAgewkJCQkJCQkJCQkJXAorICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwIyNCSVRT IyNxIChuKTsJCQkJCQlcCisgICAgICBUWVBFIyNCSVRTIyN4IyNMQU5FUyMjX3QgdmEgPSB2bGRy IyNMRFJTVFJZVFBFIyNxX3pfIyNTSUdOIyNCSVRTIChhLCBwKTsJCVwKKyAgICAgIFRZUEUjI0JJ VFMjI3gjI0xBTkVTIyNfdCB2YyA9IE5BTUUjI1BSRUQjI19uXyMjU0lHTiMjQklUUyAodmEsIElN TSwgcCk7CQlcCisgICAgICB2c3RyIyNMRFJTVFJZVFBFIyNxX3BfIyNTSUdOIyNCSVRTIChjLCB2 YywgcCk7CQkJCQlcCisgICAgICBjICs9IExBTkVTOwkJCQkJCQkJCVwKKyAgICAgIGEgKz0gTEFO RVM7CQkJCQkJCQkJXAorICAgICAgbiAtPSBMQU5FUzsJCQkJCQkJCQlcCisgICAgfQkJCQkJCQkJ CQkJXAorfQorCisjZGVmaW5lIFRFU1RfQ09NUElMRV9JTl9ETFNUUF9TSUdORURfVU5TSUdORURf VEVSTkFSWV9OKEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCBOQU1FLCBQUkVEKQlcCitURVNUX0NP TVBJTEVfSU5fRExTVFBfVEVSTkFSWV9OIChCSVRTLCBMQU5FUywgTERSU1RSWVRQRSwgaW50LCBz LCBOQU1FLCBQUkVEKQkJCVwKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9URVJOQVJZX04gKEJJVFMs IExBTkVTLCBMRFJTVFJZVFBFLCB1aW50LCB1LCBOQU1FLCBQUkVEKQorCisjZGVmaW5lIFRFU1Rf Q09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX04oTkFNRSwg UFJFRCkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllf TiAoOCwgMTYsIGIsIE5BTUUsIFBSRUQpCQkJCVwKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9TSUdO RURfVU5TSUdORURfVEVSTkFSWV9OICgxNiwgOCwgaCwgTkFNRSwgUFJFRCkJCQkJXAorVEVTVF9D T01QSUxFX0lOX0RMU1RQX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX04gKDMyLCA0LCB3LCBOQU1F LCBQUkVEKQorCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURf VEVSTkFSWV9OICh2YWRkcSwgX3gpCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdO RURfVU5TSUdORURfVEVSTkFSWV9OICh2bXVscSwgX3gpCitURVNUX0NPTVBJTEVfSU5fRExTVFBf SU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9OICh2c3VicSwgX3gpCitURVNUX0NPTVBJ TEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFSWV9OICh2aGFkZHEsIF94 KQorCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19TSUdORURfVU5TSUdORURfVEVSTkFS WV9OICh2YnJzcnEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VO U0lHTkVEX1RFUk5BUllfTiAodnNobHEsIF94KQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJ VFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTiAodnNocnEsIF94KQorCisjZGVmaW5lIFRFU1Rf Q09NUElMRV9JTl9ETFNUUF9URVJOQVJZX01fTihCSVRTLCBMQU5FUywgTERSU1RSWVRQRSwgVFlQ RSwgU0lHTiwgTkFNRSwgUFJFRCkJXAordm9pZCB0ZXN0XyMjTkFNRSMjUFJFRCMjX25fIyNTSUdO IyNCSVRTIChUWVBFIyNCSVRTIyN4IyNMQU5FUyMjX3QgX19pbmFjdGl2ZSwgVFlQRSMjQklUUyMj X3QgKmEsICBUWVBFIyNCSVRTIyNfdCAqYywgaW50IG4pCVwKK3sJCQkJCQkJCQkJCVwKKyAgd2hp bGUgKG4gPiAwKQkJCQkJCQkJCQlcCisgICAgewkJCQkJCQkJCQkJXAorICAgICAgbXZlX3ByZWQx Nl90IHAgPSB2Y3RwIyNCSVRTIyNxIChuKTsJCQkJCQlcCisgICAgICBUWVBFIyNCSVRTIyN4IyNM QU5FUyMjX3QgdmEgPSB2bGRyIyNMRFJTVFJZVFBFIyNxX3pfIyNTSUdOIyNCSVRTIChhLCBwKTsJ CVwKKyAgICAgIFRZUEUjI0JJVFMjI3gjI0xBTkVTIyNfdCB2YyA9IE5BTUUjI1BSRUQjI19uXyMj U0lHTiMjQklUUyAoX19pbmFjdGl2ZSwgdmEsIElNTSwgcCk7CQlcCisgICAgICB2c3RyIyNMRFJT VFJZVFBFIyNxX3BfIyNTSUdOIyNCSVRTIChjLCB2YywgcCk7CQkJCQlcCisgICAgICBjICs9IExB TkVTOwkJCQkJCQkJCVwKKyAgICAgIGEgKz0gTEFORVM7CQkJCQkJCQkJXAorICAgICAgbiAtPSBM QU5FUzsJCQkJCQkJCQlcCisgICAgfQkJCQkJCQkJCQkJXAorfQorCisjZGVmaW5lIFRFU1RfQ09N UElMRV9JTl9ETFNUUF9TSUdORURfVU5TSUdORURfVEVSTkFSWV9NX04oQklUUywgTEFORVMsIExE UlNUUllUUEUsIE5BTUUsIFBSRUQpCVwKK1RFU1RfQ09NUElMRV9JTl9ETFNUUF9URVJOQVJZX01f TiAoQklUUywgTEFORVMsIExEUlNUUllUUEUsIGludCwgcywgTkFNRSwgUFJFRCkJCQlcCitURVNU X0NPTVBJTEVfSU5fRExTVFBfVEVSTkFSWV9NX04gKEJJVFMsIExBTkVTLCBMRFJTVFJZVFBFLCB1 aW50LCB1LCBOQU1FLCBQUkVEKQorCisjZGVmaW5lIFRFU1RfQ09NUElMRV9JTl9ETFNUUF9JTlRC SVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX01fTihOQU1FLCBQUkVEKQkJCVwKK1RFU1RfQ09N UElMRV9JTl9ETFNUUF9TSUdORURfVU5TSUdORURfVEVSTkFSWV9NX04gKDgsIDE2LCBiLCBOQU1F LCBQUkVEKQkJCQlcCitURVNUX0NPTVBJTEVfSU5fRExTVFBfU0lHTkVEX1VOU0lHTkVEX1RFUk5B UllfTV9OICgxNiwgOCwgaCwgTkFNRSwgUFJFRCkJCQkJXAorVEVTVF9DT01QSUxFX0lOX0RMU1RQ X1NJR05FRF9VTlNJR05FRF9URVJOQVJZX01fTiAoMzIsIDQsIHcsIE5BTUUsIFBSRUQpCisKK1RF U1RfQ09NUElMRV9JTl9ETFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX01fTiAo dmFkZHEsIF9tKQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVE X1RFUk5BUllfTV9OICh2bXVscSwgX20pCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklUU19T SUdORURfVU5TSUdORURfVEVSTkFSWV9NX04gKHZzdWJxLCBfbSkKK1RFU1RfQ09NUElMRV9JTl9E TFNUUF9JTlRCSVRTX1NJR05FRF9VTlNJR05FRF9URVJOQVJZX01fTiAodmhhZGRxLCBfbSkKKwor VEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lHTkVEX1RFUk5BUllfTV9O ICh2YnJzcnEsIF9tKQorVEVTVF9DT01QSUxFX0lOX0RMU1RQX0lOVEJJVFNfU0lHTkVEX1VOU0lH TkVEX1RFUk5BUllfTV9OICh2c2hscSwgX20pCitURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklU U19TSUdORURfVU5TSUdORURfVEVSTkFSWV9NX04gKHZzaHJxLCBfbSkKKworLyogTm93IHRlc3Qg c29tZSBtb3JlIGNvbmZpZ3VyYXRpb25zLiAgKi8KKworLyogVXNpbmcgYSA+PTEgY29uZGl0aW9u LiAgKi8KK3ZvaWQgdGVzdDEgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGlu dCBuKQoreworICB3aGlsZSAobiA+PSAxKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOwor ICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsKKyAgICAgIGludDMyeDRf dCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHApOworICAgICAgdnN0cndxX3BfczMyIChjLCB2 YywgcCk7CisgICAgICBjKz00OworICAgICAgYSs9NDsKKyAgICAgIGIrPTQ7CisgICAgICBuLT00 OworICAgIH0KK30KKworLyogVGVzdCBhIGZvciBsb29wIGZvcm1hdCBvZiBkZWNyZW1lbnRpbmcg dG8gemVybyAqLworaW50MzJfdCBhW10gPSB7MCwgMSwgMiwgMywgNCwgNSwgNiwgN307Cit2b2lk IHRlc3QyIChpbnQzMl90ICpiLCBpbnQgbnVtX2VsZW1zKQoreworICAgIGZvciAoaW50IGkgPSBu dW1fZWxlbXM7IGkgPiAwOyBpLT0gNCkKKyAgICB7CisgICAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDMycSAoaSk7CisgICAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoJihhW2ld KSwgcCk7CisgICAgICAgIHZzdHJ3cV9wX3MzMiAoYiArIGksIHZhLCBwKTsKKyAgICB9Cit9CisK Ky8qIEl0ZXJhdGlvbiBjb3VudGVyIGNvdW50aW5nIHVwIHRvIG51bV9pdGVyLiAgKi8KK3ZvaWQg dGVzdDMgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuKQoreworICAg IGludCBudW1faXRlciA9IChuICsgMTUpLzE2OworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVt X2l0ZXI7IGkrKykKKyAgICB7CisgICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsK KyAgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICAgdWlu dDh4MTZfdCB2YiA9IHZsZHJicV96X3U4IChiLCBwKTsKKyAgICAgICAgdWludDh4MTZfdCB2YyA9 IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7 CisgICAgICAgIG4tPTE2OworICAgIH0KK30KKworLyogSXRlcmF0aW9uIGNvdW50ZXIgY291bnRp bmcgZG93biBmcm9tIG51bV9pdGVyLiAgKi8KK3ZvaWQgdGVzdDQgKHVpbnQ4X3QgKmEsIHVpbnQ4 X3QgKmIsIHVpbnQ4X3QgKmMsIGludCBuKQoreworICAgIGludCBudW1faXRlciA9IChuICsgMTUp LzE2OworICAgIGZvciAoaW50IGkgPSBudW1faXRlcjsgaSA+IDA7IGktLSkKKyAgICB7CisgICAg ICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICAgdWludDh4MTZfdCB2YSA9 IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICAgdWludDh4MTZfdCB2YiA9IHZsZHJicV96X3U4 IChiLCBwKTsKKyAgICAgICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7 CisgICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7CisgICAgICAgIG4tPTE2OworICAgIH0K K30KKworLyogVXNpbmcgYW4gdW5wcmVkaWNhdGVkIGFyaXRobWV0aWMgaW5zdHJ1Y3Rpb24gd2l0 aGluIHRoZSBsb29wLiAgKi8KK3ZvaWQgdGVzdDUgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVp bnQ4X3QgKmMsICB1aW50OF90ICpkLCBpbnQgbikKK3sKKyAgICB3aGlsZSAobiA+IDApCisgICAg eworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIHVpbnQ4eDE2 X3QgdmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRy YnFfdTggKGIpOworCS8qIElzIGFmZmVjdGVkIGJ5IGltcGxpY2l0IHByZWRpY2F0aW9uLCBiZWNh dXNlIHZiIGFsc28KKwljYW1lIGZyb20gYW4gdW5wcmVkaWNhdGVkIGxvYWQsIGJ1dCB0aGVyZSBp cyBubyBmdW5jdGlvbmFsCisJcHJvYmxlbSwgYmVjYXVzZSB0aGUgcmVzdWx0IGlzIHVzZWQgaW4g YSBwcmVkaWNhdGVkIHN0b3JlLiAgKi8gCisgICAgICAgIHVpbnQ4eDE2X3QgdmMgPSB2YWRkcV91 OCAodmEsIHZiKTsKKyAgICAgICAgdWludDh4MTZfdCB2ZCA9IHZhZGRxX3hfdTggKHZhLCB2Yiwg cCk7CisgICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7CisgICAgICAgIHZzdHJicV9wX3U4 IChkLCB2ZCwgcCk7CisgICAgICAgIG4tPTE2OworICAgIH0KK30KKworLyogVXNpbmcgYSBkaWZm ZXJlbnQgVlBSIHZhbHVlIGZvciBvbmUgaW5zdHJ1Y3Rpb24gaW4gdGhlIGxvb3AuICAqLwordm9p ZCB0ZXN0NiAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4sIG12ZV9w cmVkMTZfdCBwMSkKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZf dCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEs IHApOworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwMSk7CisgICAgICBp bnQzMng0X3QgdmMgPSB2YWRkcV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3Mz MiAoYywgdmMsIHApOworICAgICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0 OworICAgICAgbiAtPSA0OworICAgIH0KK30KKworLyogR2VuZXJhdGluZyBhbmQgdXNpbmcgYW5v dGhlciBWUFIgdmFsdWUgaW4gdGhlIGxvb3AsIHdpdGggYSB2Y3RwLgorICAgVGhlIGRvbG9vcCBs b2dpYyB3aWxsIGFsd2F5cyB0cnkgdG8gZG8gdGhlIHRyYW5zZm9ybSBvbiB0aGUgZmlyc3QKKyAg IHZjdHAgaXQgZW5jb3VudGVycywgc28gdGhpcyBpcyBzdGlsbCBleHBlY3RlZCB0byB3b3JrLiAg Ki8KK3ZvaWQgdGVzdDcgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBu LCBpbnQgZykKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBw ID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHAp OworICAgICAgbXZlX3ByZWQxNl90IHAxID0gdmN0cDMycSAoZyk7CisgICAgICBpbnQzMng0X3Qg dmIgPSB2bGRyd3Ffel9zMzIgKGIsIHAxKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZhZGRxX3hf czMyICh2YSwgdmIsIHApOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBj ICs9IDQ7CisgICAgICBhICs9IDQ7CisgICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAg fQorfQorCisvKiBHZW5lcmF0aW5nIGFuZCB1c2luZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgaW4g dGhlIGxvb3AsIHdpdGggYSB2Y3RwLAorICAgYnV0IHRoaXMgdGltZSB0aGUgcDEgd2lsbCBhbHNv IGNoYW5nZSBpbiBldmVyeSBsb29wIChzdGlsbCBmaW5lKSAgKi8KK3ZvaWQgdGVzdDggKGludDMy X3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuLCBpbnQgZykKK3sKKyAgd2hpbGUg KG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7CisgICAg ICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOworICAgICAgbXZlX3ByZWQxNl90 IHAxID0gdmN0cDMycSAoZyk7CisgICAgICBpbnQzMng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIs IHAxKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHApOworICAg ICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7CisgICAgICBhICs9IDQ7 CisgICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgICBnKys7CisgICAgfQorfQorCisv KiBHZW5lcmF0aW5nIGFuZCB1c2luZyBhIGRpZmZlcmVudCBWUFIgdmFsdWUgaW4gdGhlIGxvb3As IHdpdGggYSB2Y3RwX20KKyAgIHRoYXQgaXMgaW5kZXBlbmRlbnQgb2YgdGhlIGxvb3AgdmN0cCBW UFIuICAqLwordm9pZCB0ZXN0OSAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywg aW50IG4sIG12ZV9wcmVkMTZfdCBwMSkKK3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAg IG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRy d3Ffel9zMzIgKGEsIHApOworICAgICAgbXZlX3ByZWQxNl90IHAyID0gdmN0cDMycV9tIChuLCBw MSk7CisgICAgICBpbnQzMng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHAxKTsKKyAgICAgIGlu dDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHAyKTsKKyAgICAgIHZzdHJ3cV9wX3Mz MiAoYywgdmMsIHApOworICAgICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0 OworICAgICAgbiAtPSA0OworICAgIH0KK30KKworLyogR2VuZXJhdGluZyBhbmQgdXNpbmcgYSBk aWZmZXJlbnQgVlBSIHZhbHVlIGluIHRoZSBsb29wLAorICAgd2l0aCBhIHZjdHBfbSB0aGF0IGlz IHRpZWQgdG8gdGhlIGJhc2UgdmN0cCBWUFIuICBUaGlzCisgICBpcyBzdGlsbCBmaW5lLCBiZWNh dXNlIHRoZSB2Y3RwX20gd2lsbCBiZSB0cmFuc2Zvcm1lZAorICAgaW50byBhIHZjdHAgYW5kIGJl IGltcGxpY2l0bHkgcHJlZGljYXRlZC4gICovCit2b2lkIHRlc3QxMCAoaW50MzJfdCAqYSwgaW50 MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4pCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7Cisg ICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKG4pOworICAgICAgaW50MzJ4NF90IHZhID0g dmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZjdHAzMnFfbSAo biwgcCk7CisgICAgICBpbnQzMng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHAxKTsKKyAgICAg IGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2YSwgdmIsIHAxKTsKKyAgICAgIHZzdHJ3cV9w X3MzMiAoYywgdmMsIHApOworICAgICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiAr PSA0OworICAgICAgbiAtPSA0OworICAgIH0KK30KKworLyogR2VuZXJhdGluZyBhbmQgdXNpbmcg YSBkaWZmZXJlbnQgVlBSIHZhbHVlIGluIHRoZSBsb29wLCB3aXRoIGEgdmNtcC4gICovCit2b2lk IHRlc3QxMSAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4pCit7Cisg IHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKG4p OworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIGludDMy eDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBtdmVfcHJlZDE2X3QgcDEgPSB2 Y21wZXFxX3MzMiAodmEsIHZiKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZhZGRxX3hfczMyICh2 YSwgdmIsIHAxKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHApOworICAgICAgYyArPSA0 OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0OworICAgIH0KK30K KworLyogR2VuZXJhdGluZyBhbmQgdXNpbmcgYSBkaWZmZXJlbnQgVlBSIHZhbHVlIGluIHRoZSBs b29wLCB3aXRoIGEgdmNtcF9tLiAgKi8KK3ZvaWQgdGVzdDEyIChpbnQzMl90ICphLCBpbnQzMl90 ICpiLCBpbnQzMl90ICpjLCBpbnQgbiwgbXZlX3ByZWQxNl90IHAxKQoreworICB3aGlsZSAobiA+ IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChuKTsKKyAgICAgIGlu dDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBpbnQzMng0X3QgdmIgPSB2 bGRyd3Ffel9zMzIgKGIsIHApOworICAgICAgbXZlX3ByZWQxNl90IHAyID0gdmNtcGVxcV9tX3Mz MiAodmEsIHZiLCBwMSk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRkcV94X3MzMiAodmEsIHZi LCBwMik7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0gNDsKKyAg ICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisKKy8q IEdlbmVyYXRpbmcgYW5kIHVzaW5nIGEgZGlmZmVyZW50IFZQUiB2YWx1ZSBpbiB0aGUgbG9vcCwg d2l0aCBhIHZjbXBfbSAKKyAgIHRoYXQgaXMgdGllZCB0byB0aGUgYmFzZSB2Y3RwIFZQUiAoc2Ft ZSBhcyBhYm92ZSwgdGhpcyB3aWxsIGJlIHR1cm5lZAorICAgaW50byBhIHZjbXAgYW5kIGJlIGlt cGxpY2l0bHkgcHJlZGljYXRlZCkuICAqLwordm9pZCB0ZXN0MTMgKGludDMyX3QgKmEsIGludDMy X3QgKmIsIGludDMyX3QgKmMsIGludCBuLCBtdmVfcHJlZDE2X3QgcDEpCit7CisgIHdoaWxlIChu ID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEgKG4pOworICAgICAg aW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YiA9 IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBtdmVfcHJlZDE2X3QgcDIgPSB2Y21wZXFxX21f czMyICh2YSwgdmIsIHApOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2 YiwgcDIpOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7CisgICAgICBjICs9IDQ7Cisg ICAgICBhICs9IDQ7CisgICAgICBiICs9IDQ7CisgICAgICBuIC09IDQ7CisgICAgfQorfQorCisv KiBVc2luZyBhbiB1bnByZWRpY2F0ZWQgb3Agd2l0aCBhIHNjYWxhciBvdXRwdXQsIHdoZXJlIHRo ZSByZXN1bHQgaXMgdmFsaWQKKyAgIG91dHNpZGUgdGhlIGJiLiAgVGhpcyBpcyB2YWxpZCwgYmVj YXVzZSBhbGwgdGhlIGlucHV0cyB0byB0aGUgdW5wcmVkaWNhdGVkCisgICBvcCBhcmUgY29ycmVj dGx5IHByZWRpY2F0ZWQuICAqLwordWludDhfdCB0ZXN0MTQgKHVpbnQ4X3QgKmEsIHVpbnQ4X3Qg KmIsIHVpbnQ4X3QgKmMsIGludCBuLCB1aW50OHgxNl90IHZ4KQoreworICAgIHVpbnQ4X3Qgc3Vt ID0gMDsKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDhxIChuKTsKKyAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOwor ICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgdWludDh4 MTZfdCB2YyA9IHZhZGRxX21fdTggKHZ4LCB2YSwgdmIsIHApOworICAgICAgIHN1bSArPSB2YWRk dnFfdTggKHZjKTsKKyAgICAgICBhICs9IDE2OworICAgICAgIGIgKz0gMTY7CisgICAgICAgbiAt PSAxNjsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KKworLyogU2FtZSBhcyBhYm92ZSwgYnV0 IHdpdGggYW5vdGhlciBzY2FsYXIgb3AgYmV0d2VlbiB0aGUgdW5wcmVkaWNhdGVkIG9wIGFuZAor ICAgdGhlIHNjYWxhciBvcCBvdXRzaWRlIHRoZSBsb29wLiAgKi8KK3VpbnQ4X3QgdGVzdDE1ICh1 aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbiwgdWludDh4MTZfdCB2eCwg aW50IGcpCit7CisgICAgdWludDhfdCBzdW0gPSAwOworICAgIHdoaWxlIChuID4gMCkKKyAgICB7 CisgICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgIHVpbnQ4eDE2X3Qg dmEgPSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YiA9IHZsZHJicV96 X3U4IChiLCBwKTsKKyAgICAgICB1aW50OHgxNl90IHZjID0gdmFkZHFfbV91OCAodngsIHZhLCB2 YiwgcCk7CisgICAgICAgc3VtICs9IHZhZGR2cV91OCAodmMpOworICAgICAgIHN1bSArPSBnOwor ICAgICAgIGEgKz0gMTY7CisgICAgICAgYiArPSAxNjsKKyAgICAgICBuIC09IDE2OworICAgIH0K KyAgICByZXR1cm4gc3VtOworfQorCisvKiBVc2luZyBhbiB1bnByZWRpY2F0ZWQgdmNtcCB0byBn ZW5lcmF0ZSBhIG5ldyBwcmVkaWNhdGUgdmFsdWUgaW4gdGhlCisgICBsb29wIGFuZCB0aGVuIHVz aW5nIGl0IGluIGEgcHJlZGljYXRlZCBzdG9yZSBpbnNuLiAgKi8KK3ZvaWQgdGVzdDE2IChpbnQz Ml90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBpbnQgbikKK3sKKyAgd2hpbGUgKG4gPiAw KQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQz Mng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOworICAgICAgaW50MzJ4NF90IHZiID0gdmxk cndxX3MzMiAoYik7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRkcV94X3MzMiAodmEsIHZiLCBw KTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZjbXBlcXFfczMyICh2YSwgdmMpOworICAgICAg dnN0cndxX3BfczMyIChjLCB2YywgcDEpOworICAgICAgYyArPSA0OworICAgICAgYSArPSA0Owor ICAgICAgYiArPSA0OworICAgICAgbiAtPSA0OworICAgIH0KK30KKworLyogVXNpbmcgYSBwcmVk aWNhdGVkIHZjbXAgdG8gZ2VuZXJhdGUgYSBuZXcgcHJlZGljYXRlIHZhbHVlIGluIHRoZQorICAg bG9vcCBhbmQgdGhlbiB1c2luZyBpdCBpbiBhIHByZWRpY2F0ZWQgc3RvcmUgaW5zbi4gICovCit2 b2lkIHRlc3QxNyAoaW50MzJfdCAqYSwgaW50MzJfdCAqYiwgaW50MzJfdCAqYywgaW50IG4pCit7 CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnEg KG4pOworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIGlu dDMyeDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2 YWRkcV9zMzIgKHZhLCB2Yik7CisgICAgICBtdmVfcHJlZDE2X3QgcDEgPSB2Y21wZXFxX21fczMy ICh2YSwgdmMsIHApOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcDEpOworICAgICAgYyAr PSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0OworICAgIH0K K30KKworLyogVXNpbmcgYW4gYWNyb3NzLXZlY3RvciB1bnByZWRpY2F0ZWQgaW5zdHJ1Y3Rpb24g aW4gYSB2YWxpZCB3YXkuCisgICBUaGlzIHRlc3RzIHRoYXQgInZjIiBoYXMgY29ycmVjdGx5IG1h c2tlZCB0aGUgcmlza3kgInZiIi4gICovCit1aW50MTZfdCB0ZXN0MTggKHVpbnQxNl90ICphLCB1 aW50MTZfdCAqYiwgIHVpbnQxNl90ICpjLCBpbnQgbikKK3sKKyAgdWludDE2eDhfdCB2YiA9IHZs ZHJocV91MTYgKGIpOworICB1aW50MTZfdCByZXMgPSAwOworICB3aGlsZSAobiA+IDApCisgICAg eworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMTZxIChuKTsKKyAgICAgIHVpbnQxNng4X3Qg dmEgPSB2bGRyaHFfel91MTYgKGEsIHApOworICAgICAgdWludDE2eDhfdCB2YyA9IHZhZGRxX3hf dTE2ICh2YSwgdmIsIHApOworICAgICAgcmVzID0gdmFkZHZxX3UxNiAodmMpOworICAgICAgYyAr PSA4OworICAgICAgYSArPSA4OworICAgICAgYiArPSA4OworICAgICAgbiAtPSA4OworICAgIH0K KyAgcmV0dXJuIHJlczsKK30KKworLyogVXNpbmcgYW4gYWNyb3NzLXZlY3RvciB1bnByZWRpY2F0 ZWQgaW5zdHJ1Y3Rpb24gd2l0aCBhIHNjYWxhciBmcm9tIG91dHNpZGUgdGhlIGxvb3AuICAqLwor dWludDE2X3QgdGVzdDE5ICh1aW50MTZfdCAqYSwgdWludDE2X3QgKmIsICB1aW50MTZfdCAqYywg aW50IG4pCit7CisgIHVpbnQxNng4X3QgdmIgPSB2bGRyaHFfdTE2IChiKTsKKyAgdWludDE2X3Qg cmVzID0gMDsKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDE2cSAobik7CisgICAgICB1aW50MTZ4OF90IHZhID0gdmxkcmhxX3pfdTE2IChhLCBwKTsK KyAgICAgIHVpbnQxNng4X3QgdmMgPSB2YWRkcV94X3UxNiAodmEsIHZiLCBwKTsKKyAgICAgIHJl cyA9IHZhZGR2YXFfdTE2IChyZXMsIHZjKTsKKyAgICAgIGMgKz0gODsKKyAgICAgIGEgKz0gODsK KyAgICAgIGIgKz0gODsKKyAgICAgIG4gLT0gODsKKyAgICB9CisgIHJldHVybiByZXM7Cit9CisK Ky8qIFVzaW5nIGFuIGFjcm9zcy12ZWN0b3IgcHJlZGljYXRlZCBpbnN0cnVjdGlvbiBpbiBhIHZh bGlkIHdheS4gICovCit1aW50MTZfdCAgdGVzdDIwICh1aW50MTZfdCAqYSwgdWludDE2X3QgKmIs ICB1aW50MTZfdCAqYywgaW50IG4pCit7CisgIHVpbnQxNl90IHJlcyA9IDA7CisgIHdoaWxlIChu ID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOworICAgICAg dWludDE2eDhfdCB2YiA9IHZsZHJocV91MTYgKGIpOworICAgICAgdWludDE2eDhfdCB2YSA9IHZs ZHJocV96X3UxNiAoYSwgcCk7CisgICAgICByZXMgPSB2YWRkdmFxX3BfdTE2IChyZXMsIHZiLCBw KTsKKyAgICAgIGMgKz0gODsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0gODsKKyAgICAgIG4g LT0gODsKKyAgICB9CisgIHJldHVybiByZXM7Cit9CisKKy8qIFVzaW5nIGFuIGFjcm9zcy12ZWN0 b3IgcHJlZGljYXRlZCBpbnN0cnVjdGlvbiBpbiBhIHZhbGlkIHdheS4gICovCit1aW50MTZfdCAg dGVzdDIxICh1aW50MTZfdCAqYSwgdWludDE2X3QgKmIsICB1aW50MTZfdCAqYywgaW50IG4pCit7 CisgIHVpbnQxNl90IHJlcyA9IDA7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVf cHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOworICAgICAgdWludDE2eDhfdCB2YiA9IHZsZHJocV91 MTYgKGIpOworICAgICAgdWludDE2eDhfdCB2YSA9IHZsZHJocV96X3UxNiAoYSwgcCk7CisgICAg ICByZXMrKzsKKyAgICAgIHJlcyA9IHZhZGR2YXFfcF91MTYgKHJlcywgdmIsIHApOworICAgICAg YyArPSA4OworICAgICAgYSArPSA4OworICAgICAgYiArPSA4OworICAgICAgbiAtPSA4OworICAg IH0KKyAgcmV0dXJuIHJlczsKK30KKworaW50IHRlc3QyMiAodWludDhfdCAqYSwgdWludDhfdCAq YiwgdWludDhfdCAqYywgaW50IG4pCit7CisgICAgaW50IHJlcyA9IDA7CisgICAgd2hpbGUgKG4g PiAwKQorICAgIHsKKyAgICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAg ICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOworICAgICAgICByZXMgPSB2bWF4 dnEgKHJlcywgdmEpOworICAgICAgICBuLT0xNjsKKyAgICAgICAgYSs9MTY7CisgICAgfQorICAg IHJldHVybiByZXM7Cit9CisKK2ludCB0ZXN0MjMgKGludDhfdCAqYSwgaW50OF90ICpiLCBpbnQ4 X3QgKmMsIGludCBuKQoreworICAgIGludCByZXMgPSAwOworICAgIHdoaWxlIChuID4gMCkKKyAg ICB7CisgICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICAgaW50OHgx Nl90IHZhID0gdmxkcmJxX3pfczggKGEsIHApOworICAgICAgICByZXMgPSB2bWF4YXZxIChyZXMs IHZhKTsKKyAgICAgICAgbi09MTY7CisgICAgICAgIGErPTE2OworICAgIH0KKyAgICByZXR1cm4g cmVzOworfQorCisvKiBUaGUgZmluYWwgbnVtYmVyIG9mIERMU1RQcyBjdXJyZW50bHkgaXMgY2Fs Y3VsYXRlZCBieSB0aGUgbnVtYmVyIG9mCisgIGBURVNUX0NPTVBJTEVfSU5fRExTVFBfSU5UQklU U19TSUdORURfVU5TSUdORURfVEVSTkFSWS4qYCBtYWNyb3MgKiA2ICsgMjMuICAqLworLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGRsc3RwfSAxNjcgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0bGV0cH0gMTY3IH0gfSAqLwpkaWZm IC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50MTZ4OC5j IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50MTZ4OC5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMTI1YTJhMTVmYQotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludDE2eDgu YwpAQCAtMCwwICsxLDY5IEBACisvKiB7IGRnLWRvIHJ1biB7IHRhcmdldCB7IGFybSotKi0qIH0g fSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhcm1fdjhfMW1fbXZlX29r IH0gKi8KKy8qIHsgZGctcmVxdWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV9tdmVfaHcgfSAqLwor LyogeyBkZy1vcHRpb25zICItTzIgLXNhdmUtdGVtcHMiIH0gKi8KKy8qIHsgZGctYWRkLW9wdGlv bnMgYXJtX3Y4XzFtX212ZSB9ICovCisKKyNpbmNsdWRlIDxhcm1fbXZlLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICIuLi9sb2IuaCIKKwordm9p ZCAgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkgdGVzdCAoaW50MTZfdCAqYSwgaW50MTZfdCAq YiwgaW50MTZfdCAqYywgaW50IG4pCit7CisgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICBt dmVfcHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOworICAgICAgaW50MTZ4OF90IHZhID0gdmxkcmhx X3pfczE2IChhLCBwKTsKKyAgICAgIGludDE2eDhfdCB2YiA9IHZsZHJocV96X3MxNiAoYiwgcCk7 CisgICAgICBpbnQxNng4X3QgdmMgPSB2YWRkcV94X3MxNiAodmEsIHZiLCBwKTsKKyAgICAgIHZz dHJocV9wX3MxNiAoYywgdmMsIHApOworICAgICAgYys9ODsKKyAgICAgIGErPTg7CisgICAgICBi Kz04OworICAgICAgbi09ODsKKyAgICB9Cit9CisKK2ludCBtYWluICgpCit7CisgIGludCBpOwor ICBpbnQxNl90IHRlbXAxW05dOworICBpbnQxNl90IHRlbXAyW05dOworICBpbnQxNl90IHRlbXAz W05dOworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRl bXAzLCAwKTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4pOworICB0 ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVt cDIsIHRlbXAzLCAxKTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIE4p OworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA3KTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1w MSwgdGVtcDIsIHRlbXAzLCA3KTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1wMiwgdGVt cDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKyAgY2hlY2tfcGx1czE2 ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA4KTsKKworICByZXNldF9kYXRhMTYgKHRlbXAxLCB0ZW1w MiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKyAgY2hlY2tf cGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCA5KTsKKworICByZXNldF9kYXRhMTYgKHRlbXAx LCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxNik7Cisg IGNoZWNrX3BsdXMxNiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMTYpOworCisgIHJlc2V0X2RhdGEx NiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IDE3KTsKKyAgY2hlY2tfcGx1czE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxNyk7CisKKyAgcmVz ZXRfZGF0YTE2ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGRsc3RwLjE2fSAxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGxldHB9IDEgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZjdHAiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAiXHR2cHN0IiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci1ub3QgInAwIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hcm0vbXZlL2Rsc3RwLWludDMyeDQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h cm0vbXZlL2Rsc3RwLWludDMyeDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uMDZiOTYwYWQ5Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQzMng0LmMKQEAgLTAsMCArMSw2OSBAQAorLyogeyBkZy1k byBydW4geyB0YXJnZXQgeyBhcm0qLSotKiB9IH0gfSAqLworLyogeyBkZy1yZXF1aXJlLWVmZmVj dGl2ZS10YXJnZXQgYXJtX3Y4XzFtX212ZV9vayB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0 aXZlLXRhcmdldCBhcm1fbXZlX2h3IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1zYXZlLXRl bXBzIiB9ICovCisvKiB7IGRnLWFkZC1vcHRpb25zIGFybV92OF8xbV9tdmUgfSAqLworCisjaW5j bHVkZSA8YXJtX212ZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+ CisjaW5jbHVkZSAiLi4vbG9iLmgiCisKK3ZvaWQgIF9fYXR0cmlidXRlX18gKChub2lubGluZSkp IHRlc3QgKGludDMyX3QgKmEsIGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuKQoreworICB3 aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChuKTsK KyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBpbnQzMng0 X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIsIHApOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFf eF9zMzIgKHZhLCB2YiwgcCk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAg IGMrPTQ7CisgICAgICBhKz00OworICAgICAgYis9NDsKKyAgICAgIG4tPTQ7CisgICAgfQorfQor CitpbnQgbWFpbiAoKQoreworICBpbnQgaTsKKyAgaW50MzJfdCB0ZW1wMVtOXTsKKyAgaW50MzJf dCB0ZW1wMltOXTsKKyAgaW50MzJfdCB0ZW1wM1tOXTsKKyAgcmVzZXRfZGF0YTMyICh0ZW1wMSwg dGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMCk7CisgIGNo ZWNrX3BsdXMzMiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMCk7CisKKyAgcmVzZXRfZGF0YTMyICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMSk7 CisgIGNoZWNrX3BsdXMzMiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMSk7CisKKyAgcmVzZXRfZGF0 YTMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1w MywgMyk7CisgIGNoZWNrX3BsdXMzMiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMyk7CisKKyAgcmVz ZXRfZGF0YTMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAy LCB0ZW1wMywgNCk7CisgIGNoZWNrX3BsdXMzMiAodGVtcDEsIHRlbXAyLCB0ZW1wMywgNCk7CisK KyAgcmVzZXRfZGF0YTMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEs IHRlbXAyLCB0ZW1wMywgNSk7CisgIGNoZWNrX3BsdXMzMiAodGVtcDEsIHRlbXAyLCB0ZW1wMywg NSk7CisKKyAgcmVzZXRfZGF0YTMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAo dGVtcDEsIHRlbXAyLCB0ZW1wMywgOCk7CisgIGNoZWNrX3BsdXMzMiAodGVtcDEsIHRlbXAyLCB0 ZW1wMywgOCk7CisKKyAgcmVzZXRfZGF0YTMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAg dGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgOSk7CisgIGNoZWNrX3BsdXMzMiAodGVtcDEsIHRl bXAyLCB0ZW1wMywgOSk7CisKKyAgcmVzZXRfZGF0YTMyICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCBO KTsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGRsc3RwLjMy fSAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGxldHB9 IDEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZjdHAiIH0g fSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHR2cHN0IiB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInAwIiB9IH0gKi8KZGlmZiAtLWdp dCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludDY0eDIuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludDY0eDIuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWE3ODJkZDdmNzQKLS0tIC9kZXYvbnVsbAor KysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQ2NHgyLmMKQEAg LTAsMCArMSw2OSBAQAorLyogeyBkZy1kbyBydW4geyB0YXJnZXQgeyBhcm0qLSotKiB9IH0gfSAq LworLyogeyBkZy1yZXF1aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX3Y4XzFtX212ZV9vayB9ICov CisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhcm1fbXZlX2h3IH0gKi8KKy8qIHsg ZGctb3B0aW9ucyAiLU8yIC1zYXZlLXRlbXBzIiB9ICovCisvKiB7IGRnLWFkZC1vcHRpb25zIGFy bV92OF8xbV9tdmUgfSAqLworCisjaW5jbHVkZSA8YXJtX212ZS5oPgorI2luY2x1ZGUgPHN0ZGlv Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAiLi4vbG9iLmgiCisKK3ZvaWQgIF9f YXR0cmlidXRlX18gKChub2lubGluZSkpIHRlc3QgKGludDY0X3QgKmEsIGludDY0X3QgKmMsIGlu dCBuKQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2 Y3RwNjRxIChuKTsKKyAgICAgIGludDY0eDJfdCB2YSA9IHZsZHJkcV9nYXRoZXJfb2Zmc2V0X3pf czY0IChhLCB2Y3JlYXRlcV91NjQgKDAsIDgpLCBwKTsKKyAgICAgIHZzdHJkcV9zY2F0dGVyX29m ZnNldF9wX3M2NCAoYywgdmNyZWF0ZXFfdTY0ICgwLCA4KSwgdmEsIHApOworICAgICAgYys9MjsK KyAgICAgIGErPTI7CisgICAgICBuLT0yOworICAgIH0KK30KKworaW50IG1haW4gKCkKK3sKKyAg aW50IGk7CisgIGludDY0X3QgdGVtcDFbTl07CisgIGludDY0X3QgdGVtcDNbTl07CisgIHJlc2V0 X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgMCk7Cisg IGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDApOworCisgIHJlc2V0X2RhdGE2NCAgKHRl bXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgMSk7CisgIGNoZWNrX21lbWNw eTY0ICh0ZW1wMSwgdGVtcDMsIDEpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywg Tik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgMik7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwg dGVtcDMsIDIpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3Qg KHRlbXAxLCB0ZW1wMywgMyk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDMpOwor CisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1w MywgNCk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDQpOworCisgIHJlc2V0X2Rh dGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgNSk7CisgIGNo ZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVtcDMsIDUpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAx LCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgNik7CisgIGNoZWNrX21lbWNweTY0 ICh0ZW1wMSwgdGVtcDMsIDYpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7 CisgIHRlc3QgKHRlbXAxLCB0ZW1wMywgNyk7CisgIGNoZWNrX21lbWNweTY0ICh0ZW1wMSwgdGVt cDMsIDcpOworCisgIHJlc2V0X2RhdGE2NCAgKHRlbXAxLCB0ZW1wMywgTik7Cit9CisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRkbHN0cC42NH0gMSB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRsZXRwfSAxIH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHR2Y3RwIiB9IH0gKi8KKy8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0dnBzdCIgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItbm90ICJwMCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQ4eDE2LmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnQ4eDE2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAuLjhlYTE4MWM4MmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FybS9tdmUvZGxzdHAtaW50OHgxNi5jCkBAIC0wLDAgKzEsNjkgQEAK Ky8qIHsgZGctZG8gcnVuIHsgdGFyZ2V0IHsgYXJtKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctcmVx dWlyZS1lZmZlY3RpdmUtdGFyZ2V0IGFybV92OF8xbV9tdmVfb2sgfSAqLworLyogeyBkZy1yZXF1 aXJlLWVmZmVjdGl2ZS10YXJnZXQgYXJtX212ZV9odyB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1P MiAtc2F2ZS10ZW1wcyIgfSAqLworLyogeyBkZy1hZGQtb3B0aW9ucyBhcm1fdjhfMW1fbXZlIH0g Ki8KKworI2luY2x1ZGUgPGFybV9tdmUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUg PHN0ZGxpYi5oPgorI2luY2x1ZGUgIi4uL2xvYi5oIgorCit2b2lkICBfX2F0dHJpYnV0ZV9fICgo bm9pbmxpbmUpKSB0ZXN0IChpbnQ4X3QgKmEsIGludDhfdCAqYiwgaW50OF90ICpjLCBpbnQgbikK K3sKKyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhx IChuKTsKKyAgICAgIGludDh4MTZfdCB2YSA9IHZsZHJicV96X3M4IChhLCBwKTsKKyAgICAgIGlu dDh4MTZfdCB2YiA9IHZsZHJicV96X3M4IChiLCBwKTsKKyAgICAgIGludDh4MTZfdCB2YyA9IHZh ZGRxX3hfczggKHZhLCB2YiwgcCk7CisgICAgICB2c3RyYnFfcF9zOCAoYywgdmMsIHApOworICAg ICAgYys9MTY7CisgICAgICBhKz0xNjsKKyAgICAgIGIrPTE2OworICAgICAgbi09MTY7CisgICAg fQorfQorCitpbnQgbWFpbiAoKQoreworICBpbnQgaTsKKyAgaW50OF90IHRlbXAxW05dOworICBp bnQ4X3QgdGVtcDJbTl07CisgIGludDhfdCB0ZW1wM1tOXTsKKyAgcmVzZXRfZGF0YTggKHRlbXAx LCB0ZW1wMiwgdGVtcDMsIE4pOworICB0ZXN0ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAwKTsKKyAg Y2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDApOworCisgIHJlc2V0X2RhdGE4ICh0 ZW1wMSwgdGVtcDIsIHRlbXAzLCBOKTsKKyAgdGVzdCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgMSk7 CisgIGNoZWNrX3BsdXM4ICh0ZW1wMSwgdGVtcDIsIHRlbXAzLCAxKTsKKworICByZXNldF9kYXRh OCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMs IDE1KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDE1KTsKKworICByZXNl dF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0ZW1wMiwg dGVtcDMsIDE2KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDE2KTsKKwor ICByZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRlbXAxLCB0 ZW1wMiwgdGVtcDMsIDE3KTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDE3 KTsKKworICByZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRlc3QgKHRl bXAxLCB0ZW1wMiwgdGVtcDMsIDMyKTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1wMiwgdGVt cDMsIDMyKTsKKworICByZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7CisgIHRl c3QgKHRlbXAxLCB0ZW1wMiwgdGVtcDMsIDMzKTsKKyAgY2hlY2tfcGx1czggKHRlbXAxLCB0ZW1w MiwgdGVtcDMsIDMzKTsKKworICByZXNldF9kYXRhOCAodGVtcDEsIHRlbXAyLCB0ZW1wMywgTik7 Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRkbHN0cC44fSAx IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGxldHB9IDEg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJcdHZjdHAiIH0gfSAq LworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiXHR2cHN0IiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgInAwIiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludmFsaWQtYXNtLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXJtL212ZS9kbHN0cC1pbnZhbGlkLWFzbS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43YzMzMWM3ODk1ZgotLS0gL2Rldi9u dWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hcm0vbXZlL2Rsc3RwLWludmFsaWQt YXNtLmMKQEAgLTAsMCArMSwzODggQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7IGFy bSotKi0qIH0gfSB9ICovCisvKiB7IGRnLXJlcXVpcmUtZWZmZWN0aXZlLXRhcmdldCBhcm1fdjhf MW1fbXZlX29rIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1zYXZlLXRlbXBzIiB9ICovCisv KiB7IGRnLWFkZC1vcHRpb25zIGFybV92OF8xbV9tdmUgfSAqLworCisjaW5jbHVkZSA8YXJtX212 ZS5oPgorCisvKiBUZXJtaW5hdGluZyBvbiBhIG5vbi16ZXJvIG51bWJlciBvZiBlbGVtZW50cy4g ICovCit2b2lkIHRlc3QwICh1aW50OF90ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQg bikKK3sKKyAgICB3aGlsZSAobiA+IDEpCisgICAgeworICAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDhxIChuKTsKKyAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOwor ICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgdWludDh4 MTZfdCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAgICAgdnN0cmJxX3BfdTggKGMs IHZjLCBwKTsKKyAgICAgICBuIC09IDE2OworICAgIH0KK30KKworLyogVGVybWluYXRpbmcgb24g biA+PSAwLiAgKi8KK3ZvaWQgdGVzdDEgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3Qg KmMsIGludCBuKQoreworICAgIHdoaWxlIChuID49IDApCisgICAgeworICAgICAgIG12ZV9wcmVk MTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTgg KGEsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAg ICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAgICAgdnN0cmJx X3BfdTggKGMsIHZjLCBwKTsKKyAgICAgICBuIC09IDE2OworICAgIH0KK30KKworLyogU2ltaWxh ciwgdGVybWluYXRpbmcgb24gYSBub24temVybyBudW1iZXIgb2YgZWxlbWVudHMsIGJ1dCBpbiBh IGZvciBsb29wCisgICBmb3JtYXQuICAqLworaW50MzJfdCBhW10gPSB7MCwgMSwgMiwgMywgNCwg NSwgNiwgN307Cit2b2lkIHRlc3QyIChpbnQzMl90ICpiLCBpbnQgbnVtX2VsZW1zKQoreworICAg IGZvciAoaW50IGkgPSBudW1fZWxlbXM7IGkgPj0gMjsgaS09IDQpCisgICAgeworICAgICAgIG12 ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAoaSk7CisgICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndx X3pfczMyICgmKGFbaV0pLCBwKTsKKyAgICAgICB2c3Ryd3FfcF9zMzIgKGIgKyBpLCB2YSwgcCk7 CisgICAgfQorfQorCisvKiBJdGVyYXRpb24gY291bnRlciBjb3VudGluZyB1cCB0byBudW1faXRl ciwgd2l0aCBhIG5vbi16ZXJvIHN0YXJ0aW5nIG51bS4gICovCit2b2lkIHRlc3QzICh1aW50OF90 ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbikKK3sKKyAgICBpbnQgbnVtX2l0ZXIg PSAobiArIDE1KS8xNjsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IG51bV9pdGVyOyBpKyspCisg ICAgeworICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICB1aW50OHgx Nl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRy YnFfel91OCAoYiwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2 YiwgcCk7CisgICAgICAgdnN0cmJxX3BfdTggKGMsIHZjLCBwKTsKKyAgICAgICBuIC09IDE2Owor ICAgIH0KK30KKworLyogSXRlcmF0aW9uIGNvdW50ZXIgY291bnRpbmcgdXAgdG8gbnVtX2l0ZXIs IHdpdGggYSBsYXJnZXIgaW5jcmVtZW50ICAqLwordm9pZCB0ZXN0NCAodWludDhfdCAqYSwgdWlu dDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4pCit7CisgICAgaW50IG51bV9pdGVyID0gKG4gKyAx NSkvMTY7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1faXRlcjsgaSs9MikKKyAgICB7Cisg ICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgIHVpbnQ4eDE2X3QgdmEg PSB2bGRyYnFfel91OCAoYSwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YiA9IHZsZHJicV96X3U4 IChiLCBwKTsKKyAgICAgICB1aW50OHgxNl90IHZjID0gdmFkZHFfeF91OCAodmEsIHZiLCBwKTsK KyAgICAgICB2c3RyYnFfcF91OCAoYywgdmMsIHApOworICAgICAgIG4gLT0gMTY7CisgICAgfQor fQorCisvKiBVc2luZyBhbiB1bnByZWRpY2F0ZWQgc3RvcmUgaW5zdHJ1Y3Rpb24gd2l0aGluIHRo ZSBsb29wLiAgKi8KK3ZvaWQgdGVzdDUgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVpbnQ4X3Qg KmMsICB1aW50OF90ICpkLCBpbnQgbikKK3sKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAg ICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICB1aW50OHgxNl90IHZhID0g dmxkcmJxX3pfdTggKGEsIHApOworICAgICAgIHVpbnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAo YiwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3U4ICh2YSwgdmIpOworICAgICAg IHVpbnQ4eDE2X3QgdmQgPSB2YWRkcV94X3U4ICh2YSwgdmIsIHApOworICAgICAgIHZzdHJicV91 OCAoZCwgdmQpOworICAgICAgIG4gLT0gMTY7CisgICAgfQorfQorCisvKiBVc2luZyBhbiB1bnBy ZWRpY2F0ZWQgc3RvcmUgb3V0c2lkZSB0aGUgbG9vcC4gICovCit2b2lkIHRlc3Q2ICh1aW50OF90 ICphLCB1aW50OF90ICpiLCB1aW50OF90ICpjLCBpbnQgbiwgdWludDh4MTZfdCB2eCkKK3sKKyAg ICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChu KTsKKyAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pfdTggKGEsIHApOworICAgICAgIHVp bnQ4eDE2X3QgdmIgPSB2bGRyYnFfel91OCAoYiwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YyA9 IHZhZGRxX21fdTggKHZ4LCB2YSwgdmIsIHApOworICAgICAgIHZ4ID0gdmFkZHFfdTggKHZ4LCB2 Yyk7CisgICAgICAgYSArPSAxNjsKKyAgICAgICBiICs9IDE2OworICAgICAgIG4gLT0gMTY7Cisg ICAgfQorICAgIHZzdHJicV91OCAoYywgdngpOworfQorCisvKiBVc2luZyBhIFZQUiB0aGF0IGdl dHMgbW9kaWZpZWQgd2l0aGluIHRoZSBsb29wLiAgKi8KK3ZvaWQgdGVzdDkgKGludDMyX3QgKmEs IGludDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuKQoreworICB3aGlsZSAobiA+IDApCisgICAg eworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChuKTsKKyAgICAgIGludDMyeDRfdCB2 YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAgICBwKys7CisgICAgICBpbnQzMng0X3QgdmIg PSB2bGRyd3Ffel9zMzIgKGIsIHApOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIg KHZhLCB2YiwgcCk7CisgICAgICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0g NDsKKyAgICAgIGEgKz0gNDsKKyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9 CisKKy8qIFVzaW5nIGEgVlBSIHRoYXQgZ2V0cyByZS1nZW5lcmF0ZWQgd2l0aGluIHRoZSBsb29w LiAgKi8KK3ZvaWQgdGVzdDEwIChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCBp bnQgbikKK3sKKyAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMzJxIChuKTsKKyAgd2hpbGUgKG4gPiAw KQorICAgIHsKKyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV96X3MzMiAoYSwgcCk7CisgICAg ICBwID0gdmN0cDMycSAobik7CisgICAgICBpbnQzMng0X3QgdmIgPSB2bGRyd3Ffel9zMzIgKGIs IHApOworICAgICAgaW50MzJ4NF90IHZjID0gdmFkZHFfeF9zMzIgKHZhLCB2YiwgcCk7CisgICAg ICB2c3Ryd3FfcF9zMzIgKGMsIHZjLCBwKTsKKyAgICAgIGMgKz0gNDsKKyAgICAgIGEgKz0gNDsK KyAgICAgIGIgKz0gNDsKKyAgICAgIG4gLT0gNDsKKyAgICB9Cit9CisKKy8qIFVzaW5nIHZjdHAz MnFfbSBpbnN0ZWFkIG9mIHZjdHAzMnEuICAqLwordm9pZCB0ZXN0MTEgKGludDMyX3QgKmEsIGlu dDMyX3QgKmIsIGludDMyX3QgKmMsIGludCBuLCBtdmVfcHJlZDE2X3QgcDApCit7CisgIHdoaWxl IChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAzMnFfbSAobiwgcDAp OworICAgICAgaW50MzJ4NF90IHZhID0gdmxkcndxX3pfczMyIChhLCBwKTsKKyAgICAgIGludDMy eDRfdCB2YiA9IHZsZHJ3cV96X3MzMiAoYiwgcCk7CisgICAgICBpbnQzMng0X3QgdmMgPSB2YWRk cV94X3MzMiAodmEsIHZiLCBwKTsKKyAgICAgIHZzdHJ3cV9wX3MzMiAoYywgdmMsIHApOworICAg ICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0Owor ICAgIH0KK30KKworLyogVXNpbmcgYW4gdW5wcmVkaWNhdGVkIG9wIHdpdGggYSBzY2FsYXIgb3V0 cHV0LCB3aGVyZSB0aGUgcmVzdWx0IGlzIHZhbGlkCisgICBvdXRzaWRlIHRoZSBiYi4gIFRoaXMg aXMgaW52YWxpZCwgYmVjYXVzZSBvbmUgb2YgdGhlIGlucHV0cyB0byB0aGUKKyAgIHVucHJlZGlj YXRlZCBvcCBpcyBhbHNvIHVucHJlZGljYXRlZC4gICovCit1aW50OF90IHRlc3QxMiAodWludDhf dCAqYSwgdWludDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4sIHVpbnQ4eDE2X3QgdngpCit7Cisg ICAgdWludDhfdCBzdW0gPSAwOworICAgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICAgbXZl X3ByZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgIHVpbnQ4eDE2X3QgdmEgPSB2bGRyYnFf el91OCAoYSwgcCk7CisgICAgICAgdWludDh4MTZfdCB2YiA9IHZsZHJicV91OCAoYik7CisgICAg ICAgdWludDh4MTZfdCB2YyA9IHZhZGRxX3U4ICh2YSwgdmIpOworICAgICAgIHN1bSArPSB2YWRk dnFfdTggKHZjKTsKKyAgICAgICBhICs9IDE2OworICAgICAgIGIgKz0gMTY7CisgICAgICAgbiAt PSAxNjsKKyAgICB9CisgICAgcmV0dXJuIHN1bTsKK30KKworLyogVXNpbmcgYW4gdW5wcmVkaWNh dGVkIHZjbXAgdG8gZ2VuZXJhdGUgYSBuZXcgcHJlZGljYXRlIHZhbHVlIGluIHRoZQorICAgbG9v cCBhbmQgdGhlbiB1c2luZyB0aGF0IFZQUiB0byBwcmVkaWNhdGUgYSBzdG9yZSBpbnNuLiAgKi8K K3ZvaWQgdGVzdDEzIChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMng0X3QgdmMsIGludDMy X3QgKmMsIGludCBuKQoreworICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgbXZlX3ByZWQx Nl90IHAgPSB2Y3RwMzJxIChuKTsKKyAgICAgIGludDMyeDRfdCB2YSA9IHZsZHJ3cV9zMzIgKGEp OworICAgICAgaW50MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsKKyAgICAgIGludDMy eDRfdCB2YyA9IHZhZGRxX3MzMiAodmEsIHZiKTsKKyAgICAgIG12ZV9wcmVkMTZfdCBwMSA9IHZj bXBlcXFfczMyICh2YSwgdmMpOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcDEpOworICAg ICAgYyArPSA0OworICAgICAgYSArPSA0OworICAgICAgYiArPSA0OworICAgICAgbiAtPSA0Owor ICAgIH0KK30KKworLyogVXNpbmcgYW4gYWNyb3NzLXZlY3RvciB1bnByZWRpY2F0ZWQgaW5zdHJ1 Y3Rpb24uICJ2YiIgaXMgdGhlIHJpc2suICAqLwordWludDE2X3QgdGVzdDE0ICh1aW50MTZfdCAq YSwgdWludDE2X3QgKmIsICB1aW50MTZfdCAqYywgaW50IG4pCit7CisgIHVpbnQxNng4X3QgdmIg PSB2bGRyaHFfdTE2IChiKTsKKyAgdWludDE2X3QgcmVzID0gMDsKKyAgd2hpbGUgKG4gPiAwKQor ICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDE2cSAobik7CisgICAgICB1aW50MTZ4 OF90IHZhID0gdmxkcmhxX3pfdTE2IChhLCBwKTsKKyAgICAgIHZiID0gdmFkZHFfdTE2ICh2YSwg dmIpOworICAgICAgcmVzID0gdmFkZHZxX3UxNiAodmIpOworICAgICAgYyArPSA4OworICAgICAg YSArPSA4OworICAgICAgYiArPSA4OworICAgICAgbiAtPSA4OworICAgIH0KKyAgcmV0dXJuIHJl czsKK30KKworLyogVXNpbmcgYW4gYWNyb3NzLXZlY3RvciB1bnByZWRpY2F0ZWQgaW5zdHJ1Y3Rp b24uICJ2YyIgaXMgdGhlIHJpc2suICovCit1aW50MTZfdCB0ZXN0MTUgKHVpbnQxNl90ICphLCB1 aW50MTZfdCAqYiwgIHVpbnQxNl90ICpjLCBpbnQgbikKK3sKKyAgdWludDE2eDhfdCB2YiA9IHZs ZHJocV91MTYgKGIpOworICB1aW50MTZfdCByZXMgPSAwOworICB3aGlsZSAobiA+IDApCisgICAg eworICAgICAgbXZlX3ByZWQxNl90IHAgPSB2Y3RwMTZxIChuKTsKKyAgICAgIHVpbnQxNng4X3Qg dmEgPSB2bGRyaHFfel91MTYgKGEsIHApOworICAgICAgdWludDE2eDhfdCB2YyA9IHZhZGRxX3Ux NiAodmEsIHZiKTsKKyAgICAgIHJlcyA9IHZhZGR2YXFfdTE2IChyZXMsIHZjKTsKKyAgICAgIGMg Kz0gODsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0gODsKKyAgICAgIG4gLT0gODsKKyAgICB9 CisgIHJldHVybiByZXM7Cit9CisKK3VpbnQxNl90IHRlc3QxNiAodWludDE2X3QgKmEsIHVpbnQx Nl90ICpiLCAgdWludDE2X3QgKmMsIGludCBuKQoreworICB1aW50MTZfdCByZXMgPTA7CisgIHdo aWxlIChuID4gMCkKKyAgICB7CisgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHAxNnEgKG4pOwor ICAgICAgdWludDE2eDhfdCB2YiA9IHZsZHJocV91MTYgKGIpOworICAgICAgdWludDE2eDhfdCB2 YSA9IHZsZHJocV96X3UxNiAoYSwgcCk7CisgICAgICByZXMgPSB2YWRkdmFxX3UxNiAocmVzLCB2 Yik7CisgICAgICByZXMgPSB2YWRkdmFxX3BfdTE2IChyZXMsIHZhLCBwKTsKKyAgICAgIGMgKz0g ODsKKyAgICAgIGEgKz0gODsKKyAgICAgIGIgKz0gODsKKyAgICAgIG4gLT0gODsKKyAgICB9Cisg IHJldHVybiByZXM7Cit9CisKK2ludCB0ZXN0MTcgKGludDhfdCAqYSwgaW50OF90ICpiLCBpbnQ4 X3QgKmMsIGludCBuKQoreworICAgIGludCByZXMgPSAwOworICAgIHdoaWxlIChuID4gMCkKKyAg ICB7CisgICAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDhxIChuKTsKKyAgICAgICAgaW50OHgx Nl90IHZhID0gdmxkcmJxX3pfczggKGEsIHApOworICAgICAgICByZXMgPSB2bWF4dnEgKHJlcywg dmEpOworICAgICAgICBuLT0xNjsKKyAgICAgICAgYSs9MTY7CisgICAgfQorICAgIHJldHVybiBy ZXM7Cit9CisKKworCitpbnQgdGVzdDE4IChpbnQ4X3QgKmEsIGludDhfdCAqYiwgaW50OF90ICpj LCBpbnQgbikKK3sKKyAgICBpbnQgcmVzID0gMDsKKyAgICB3aGlsZSAobiA+IDApCisgICAgewor ICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIGludDh4MTZfdCB2 YSA9IHZsZHJicV96X3M4IChhLCBwKTsKKyAgICAgICAgcmVzID0gdm1pbnZxIChyZXMsIHZhKTsK KyAgICAgICAgbi09MTY7CisgICAgICAgIGErPTE2OworICAgIH0KKyAgICByZXR1cm4gcmVzOwor fQorCitpbnQgdGVzdDE5IChpbnQ4X3QgKmEsIGludDhfdCAqYiwgaW50OF90ICpjLCBpbnQgbikK K3sKKyAgICBpbnQgcmVzID0gMDsKKyAgICB3aGlsZSAobiA+IDApCisgICAgeworICAgICAgICBt dmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7CisgICAgICAgIGludDh4MTZfdCB2YSA9IHZsZHJi cV96X3M4IChhLCBwKTsKKyAgICAgICAgcmVzID0gdm1pbmF2cSAocmVzLCB2YSk7CisgICAgICAg IG4tPTE2OworICAgICAgICBhKz0xNjsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworaW50 IHRlc3QyMCAodWludDhfdCAqYSwgdWludDhfdCAqYiwgdWludDhfdCAqYywgaW50IG4pCit7Cisg ICAgaW50IHJlcyA9IDA7CisgICAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgICAgbXZlX3By ZWQxNl90IHAgPSB2Y3RwOHEgKG4pOworICAgICAgICB1aW50OHgxNl90IHZhID0gdmxkcmJxX3pf dTggKGEsIHApOworICAgICAgICByZXMgPSB2bWludnEgKHJlcywgdmEpOworICAgICAgICBuLT0x NjsKKyAgICAgICAgYSs9MTY7CisgICAgfQorICAgIHJldHVybiByZXM7Cit9CisKK3VpbnQ4eDE2 X3QgdGVzdDIxICh1aW50OF90ICphLCB1aW50MzJfdCAqYiwgaW50IG4sIHVpbnQ4eDE2X3QgcmVz KQoreworICAgIHdoaWxlIChuID4gMCkKKyAgICB7CisgICAgICAgIG12ZV9wcmVkMTZfdCBwID0g dmN0cDhxIChuKTsKKyAgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsK KyAgICAgICAgcmVzID0gdnNobGNxX3U4ICh2YSwgYiwgMSk7CisgICAgICAgIG4tPTE2OworICAg ICAgICBhKz0xNjsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworaW50OHgxNl90IHRlc3Qy MiAoaW50OF90ICphLCBpbnQzMl90ICpiLCBpbnQgbiwgaW50OHgxNl90IHJlcykKK3sKKyAgICB3 aGlsZSAobiA+IDApCisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobik7 CisgICAgICAgIGludDh4MTZfdCB2YSA9IHZsZHJicV96X3M4IChhLCBwKTsKKyAgICAgICAgcmVz ID0gdnNobGNxX3M4ICh2YSwgYiwgMSk7CisgICAgICAgIG4tPTE2OworICAgICAgICBhKz0xNjsK KyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLyogVXNpbmcgYW4gdW5zaWduZWQgbnVtYmVy IG9mIGVsZW1lbnRzIHRvIGNvdW50IGRvd24gZnJvbSwgd2l0aCBhID4wKi8KK3ZvaWQgdGVzdDIz IChpbnQzMl90ICphLCBpbnQzMl90ICpiLCBpbnQzMl90ICpjLCB1bnNpZ25lZCBpbnQgbikKK3sK KyAgd2hpbGUgKG4gPiAwKQorICAgIHsKKyAgICAgIG12ZV9wcmVkMTZfdCBwID0gdmN0cDMycSAo bik7CisgICAgICBpbnQzMng0X3QgdmEgPSB2bGRyd3Ffel9zMzIgKGEsIHApOworICAgICAgaW50 MzJ4NF90IHZiID0gdmxkcndxX3pfczMyIChiLCBwKTsKKyAgICAgIGludDMyeDRfdCB2YyA9IHZh ZGRxX3hfczMyICh2YSwgdmIsIHApOworICAgICAgdnN0cndxX3BfczMyIChjLCB2YywgcCk7Cisg ICAgICBjKz00OworICAgICAgYSs9NDsKKyAgICAgIGIrPTQ7CisgICAgICBuLT00OworICAgIH0K K30KKworLyogVXNpbmcgYW4gdW5zaWduZWQgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGNvdW50IHVw IHRvLCB3aXRoIGEgPG4qLwordm9pZCB0ZXN0MjQgKHVpbnQ4X3QgKmEsIHVpbnQ4X3QgKmIsIHVp bnQ4X3QgKmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg aSs9MTYpCisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAobi1pKTsKKyAg ICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAgICAgdWludDh4 MTZfdCB2YiA9IHZsZHJicV96X3U4IChiLCBwKTsKKyAgICAgICAgdWludDh4MTZfdCB2YyA9IHZh ZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAgICAgIHZzdHJicV9wX3U4IChjLCB2YywgcCk7Cisg ICAgfQorfQorCisKKy8qIFVzaW5nIGFuIHVuc2lnbmVkIG51bWJlciBvZiBlbGVtZW50cyB0byBj b3VudCB1cCB0bywgd2l0aCBhIDw9biovCit2b2lkIHRlc3QyNSAodWludDhfdCAqYSwgdWludDhf dCAqYiwgdWludDhfdCAqYywgdW5zaWduZWQgaW50IG4pCit7CisgICAgZm9yIChpbnQgaSA9IDE7 IGkgPD0gbjsgaSs9MTYpCisgICAgeworICAgICAgICBtdmVfcHJlZDE2X3QgcCA9IHZjdHA4cSAo bi1pKTsKKyAgICAgICAgdWludDh4MTZfdCB2YSA9IHZsZHJicV96X3U4IChhLCBwKTsKKyAgICAg ICAgdWludDh4MTZfdCB2YiA9IHZsZHJicV96X3U4IChiLCBwKTsKKyAgICAgICAgdWludDh4MTZf dCB2YyA9IHZhZGRxX3hfdTggKHZhLCB2YiwgcCk7CisgICAgICAgIHZzdHJicV9wX3U4IChjLCB2 YywgcCk7CisgICAgfQorfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICJc dGRsc3RwIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIlx0bGV0 cCIgfSB9ICovClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQo= --------------nIo9MbJdT79IoCMlYca73OyB--