From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 91360C43334 for ; Thu, 16 Jun 2022 08:01:03 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 13F318D0001; Thu, 16 Jun 2022 04:01:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 0EEF96B0073; Thu, 16 Jun 2022 04:01:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E83538D0001; Thu, 16 Jun 2022 04:01:02 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id D1FC16B0072 for ; Thu, 16 Jun 2022 04:01:02 -0400 (EDT) Received: from smtpin08.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 9BA4D3579D for ; Thu, 16 Jun 2022 08:01:02 +0000 (UTC) X-FDA: 79583353164.08.C762FA3 Received: from FRA01-MR2-obe.outbound.protection.outlook.com (mail-eopbgr90058.outbound.protection.outlook.com [40.107.9.58]) by imf07.hostedemail.com (Postfix) with ESMTP id C86664008A for ; Thu, 16 Jun 2022 08:01:01 +0000 (UTC) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=avyb9/JoIj9zuf/td5E9I8Tz8P5K9CXDyIVyjF5dAauJ2uDYP9J2PDrbfXFelo5NmtNx6RvLN5FJF/bAox8vocP9GSnNd50TeOpPlkNC0zZ2Hs9oh/PIqukL7qxE9s/r4D/+eQJsxbciMo9HhZkxjDR2RFF/Tri0FRffbIH6yiUvV5PHROZlaDaScXUzAC8/Ar2Hw2+PYQxdcG58nQ902g8oVX7X0x0MNt9yhDvkb3mZxBZh4jmf/7Gzl2rnq2GHGj5f0by4N/76dfRQFHnNbXPIa5sywM49pt5P/rTqcvddCYJRoEn04JDKA3b0ReklzMhqTt7R65+6N1FsEcSe2A== 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=EiWG33v1qOu5yBVhLv7zyT1GYDem3JNnym7FtcweD0U=; b=hJQovs9RzDRW4MKhftK4wV/y94wahw886/Y1/1sTHUQTcZWOKKMiI8VG+au67OJ+qhGS3zSS4DfewOt86cVKMBxUKgjlywJ5HKc+Y+32csA737++ecE2NpJugMl3TVUeBbT+vBLmuh2xp7PLqf70LoncPc9KwL916r6dZ3JLgjO0u3Jpm5JZ5K/VEEhy+CmRBMb2M6Bs7KxGpjF6yDmjtir4PAjYQChumIsX3ENf9Jsm9ZK9d62+/EYJGOVffRTjIzDfKRDOqicw2nnEtqnNJVw//8DQM0AMS9dQWR0s7esdCUrO9TfyqYLMZUprDPvxA545VBLLBwEO4zZZGGHWxw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=csgroup.eu; dmarc=pass action=none header.from=csgroup.eu; dkim=pass header.d=csgroup.eu; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=csgroup.eu; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=EiWG33v1qOu5yBVhLv7zyT1GYDem3JNnym7FtcweD0U=; b=EQyKram2SAPiUS0yjLUYihUnPeUGB284QM3Oz182B+u5Fk1ej/cVWcxFoBWR/JdB9Pf5dZ+RVPVku6cKTHlCJwiu9G9qv3hwtt7n4I5vgQyaPfLmWnd6abOwY3jtuU0hGjtLHhi3MoktFsUdrkG3Ri6fLBZ9S1fSRDuTfJaczgGo+p8Y4jzusoecb0+MpylAIqlC1aNzvmR7m+rRUoZCayHk0LKTvHkH2iPXybGgiEnxPqW/2PEAnfTB88m14I/f/6dEcUzHqXs5le9ecRr/DBBz0yMF2yjBr94zKTi9Du877/7xfKjM9K911iCpfygFz92bl/XpHBul0D4jbwjmcw== Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:31::15) by MRZP264MB3067.FRAP264.PROD.OUTLOOK.COM (2603:10a6:501:30::24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5332.13; Thu, 16 Jun 2022 08:00:59 +0000 Received: from MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::b15e:862f:adf7:5356]) by MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM ([fe80::b15e:862f:adf7:5356%5]) with mapi id 15.20.5353.014; Thu, 16 Jun 2022 08:00:59 +0000 From: Christophe Leroy To: Muchun Song , "mike.kravetz@oracle.com" , "akpm@linux-foundation.org" CC: "linux-mm@kvack.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] mm: hugetlb: rework hugetlb cmdline parsing Thread-Topic: [PATCH] mm: hugetlb: rework hugetlb cmdline parsing Thread-Index: AQHYgVFS89n7mOBxhE+J11C+RUtHj61Rq8cA Date: Thu, 16 Jun 2022 08:00:58 +0000 Message-ID: References: <20220616071827.3480-1-songmuchun@bytedance.com> In-Reply-To: <20220616071827.3480-1-songmuchun@bytedance.com> Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0 x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: dcb0da0d-fdc0-44f5-0a80-08da4f6e5953 x-ms-traffictypediagnostic: MRZP264MB3067:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: Tr/HEyaCzAaWsM1xDkFRcoEEf81C3bNqVEl9uLjUBP+t5Lf/9IrL9pw355ICrxu+Ah7eJBzQCJ0Tb/jgZklC4tbe4MqiITnjkcXPrRHnkwZVh145TU1QhumPQ1Ot+b+25koVrglfkonPinwq9gFrqkD6i/rAefAf6sZdC1WuoDnIdvWNTVO0J/cxUPwJKEWLsSakhye9Lheo2kcC78gWeFYJgFLC3KKGDZOn77cPXJ3tYTaC0b68psg0nUiyTx1RaQzp/y+pBICpeK237QCCLQCCTeraUoy3GVUPcDStoejLXQ+CdYaFw7SCikgShnyVyKbMYSyWAt4AAzQ8pxFt5JmxB3qqHVzus8vkfzg0wBLWBRX2J6jvehkFPTIxj5dmJoNyiPrKzNQ7wJfsn5R1B7p/kgJ7JAxTYjhIYZ9cv3+KAmLCIXZaC9KMh/XADVxBJMe3SrHG7m0XTTk1l7zdLJMqiIYayqWiG+8wa/KCCFhGoI/6ROEEg2ll/9QZQVb3Y5lR1U4/z5Hp/s6651dQ4+eJiQqBlu6CsC5jWkjJICuOtyp/f87Q1uiUPpML74QnioLyfa9hfPmvFOzmrS0LH/kNqyUcYwcduw/x1lbaPGoZD2LofF510YCSH1usB74MvQSS/83xgk3NHotesgHb5vOEtevL+DgV0PwwlWAxLCtZzjwKMWbOVmZSU8uTBLKQ4mRhdZWglTaTxcGxS/UQHmSuCQECSSERNwWUl/w0WLbbawyZ3k05n60hVQs06yLAyuUt53UHuyIt6i+gV59mUA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230016)(4636009)(366004)(76116006)(66556008)(64756008)(8676002)(4326008)(66946007)(186003)(66476007)(66446008)(31696002)(54906003)(91956017)(71200400001)(2616005)(498600001)(6486002)(31686004)(83380400001)(36756003)(8936002)(66574015)(30864003)(122000001)(2906002)(5660300002)(44832011)(6506007)(110136005)(6512007)(38100700002)(26005)(86362001)(38070700005)(43740500002)(45980500001)(579004)(559001);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?d21BL3JEekZxL1ByczB0Z3FsRUlheFlyeGtrU0IzeVlaVW5MNDFOMVJjSTlS?= =?utf-8?B?OXE5a0l4L1FYTTRnc2lTT3B2akRWajRUZFBWWTVaQ29JZHBEdmloWDdLejRm?= =?utf-8?B?UDBrcCt1Q3Z3dXdxalF3c21VYW43TUFFVFZUaFNoSWE1RGJsMUZPV0IzQ1U0?= =?utf-8?B?OWxqNlBXdkRUNG0zNDZoVG5rQm1kNktuWVJEYTdBZWRpaGxyelNocTNXL2gr?= =?utf-8?B?TzdjbEVUcXIxWnJ4NCtHejJuQXFaZHFkYk5FMlVJM0lXbXJ4UzZPTURJM2Fa?= =?utf-8?B?TEdTN3VyMmxSSXVvOU4rOUE3alJ1dlVmVDZlbDdoVlp4aTZvWk9XbnJLOUNH?= =?utf-8?B?U2k5c2lpK2lsTjZJMmpEa3l1YVVRcjN0UTg4U1FxaXVLRlc0OFlpcG54a0V4?= =?utf-8?B?aGY1dFh1TC9LWjF2a3BDZmJlYjljb0NkWkVrMm13MTB4ejA0bThrTXpXdktM?= =?utf-8?B?dW96MEdDYW9vdUhqM0laT1A0YTlEaW56U0RNZnVxMFBPekpQMWcvT3RqV0Fi?= =?utf-8?B?cTh0djltOEJmUGNOMU5OSUthckVEVWhQbWI5dXFra0VSdzA0ZTNiZWJLQ0RV?= =?utf-8?B?bThsZ1p4d3dleGVnZ2FDRStEbWZXak55KzhOaHZhZyt5Q3Y5cGJBYVg2UGNM?= =?utf-8?B?eDJaOUVmeHlyZzlvOUIwUTF3SHhzNEdKQWIxWlBCRUhTR0hnSUlwNzdKOHU5?= =?utf-8?B?cjJSU3pwa1EvRllUVG5GTUhIYXpaSTltTVBQZ21HOTFYbXZVK0hhRHB2N25p?= =?utf-8?B?S1BPSHc3eDlnc2VuczdRaFNraFE1Ris2WW5SWTk1ZkV4RlprQ0cvUVo4SVBs?= =?utf-8?B?ZjBOL1I4MU1uTGhxeXkrcmpTOEdyQ1llRWpCZ2lRNmlGTTFqRHhVQXg2Nk1Q?= =?utf-8?B?NW44MGRIaDBoazI5ZGE0a29TVEQyb3JXcllMamlwYjV1U2MwTlU4WlZCUk9F?= =?utf-8?B?emJ5MXg4dU0yejR4TU95eE94YklOdjhFOXEvYUJ5Vm9IN2xORVB4ZVVJL21S?= =?utf-8?B?dURWQTlvYXh2alBUWjhZNDJadS9xcEUxV1lSZVM4a1RZZFlxTVhXVG0raGo5?= =?utf-8?B?NE9TR3VEbnRvZmJabmFaWkRxaWF6SUxwTElYa3pPdlBsVmFUamFDTmpkajR1?= =?utf-8?B?VWdzc0hzNnRhNVdKUzVTTnZVZm9veXN6QU93T2doYkZmQmZhbzRnUm1aZ2Qx?= =?utf-8?B?aEd4ZVA5WDZLZFhmdzB4SFMrN3BRRkJwdjFFL3R6MkVTL3lRaUJ5KzlCa29D?= =?utf-8?B?WURQYzRIdnlSUmFzdC9vcTRzRDRST3ZZQldsaS9uTzRwdWRTOStUa3l1WnZ1?= =?utf-8?B?VHhpVVpvdFA1bnZmVmN2dVBaU0ZKanlUMnlnQ0RPVFRmSk9CWnJEK01JZFhl?= =?utf-8?B?cGhpMXMxVFZnVGppNzVyTDloaGg3bllZK1BYbW4yWnBhUC80VVRXY1drcXh4?= =?utf-8?B?ejA3NkRIQXRSSU1rbzFDbXFOaVk2WTZyaUdYWWg1QWlDYnVIZnA1bXdlelFx?= =?utf-8?B?YkdSOGh5SGpvb3h5M01DdWY3SEpiOXJ6T0ZYejVNTGRUMUVrNUVpRHhOeDhr?= =?utf-8?B?V0crTmhvZ0QzMVlPcFZVZnpjWURDTUZyRDZ5TkVqUGRMc1pVMjJHL3crZzd4?= =?utf-8?B?SzlpVEtSS2NHenlSZXBpODNUZzM1R0UzdFNJR2o1Ni9JR3NYbGxSUENKQTVk?= =?utf-8?B?T2xyYW9CMUVsZHM4TkpBbVFNb3Byc1BISk5XVUFBTVNEYVYxODA0MFVnMXdO?= =?utf-8?B?TTlmTVd2ZUtnVjZCRW9ielFNK2RBZUtkMWw3SXJyakUyRmYzQTlEMVRSYXdQ?= =?utf-8?B?amhvMllOcHNTODB0UyszU2Q0Uzc5c2F1bjlXZlc5aVR0NnlHbGUraXpaZFVI?= =?utf-8?B?cmE2ZmlYL0prc3hWVlRtenZ1dVlLSHRubGZ5K1pwNFhMTEdqZVRoK29aRkVk?= =?utf-8?B?QUFnYjZNeXY0dHgwQkJpSmpoT3p1ZjJqR0tkM0RSM1hXRjZ1ZjRYWFFLVUVh?= =?utf-8?B?ZXQ5TVVxVjlFUjN1SVY1OWdIQ0QvanMzQithempDSnVaVmJlbmx2NmxTZWJL?= =?utf-8?B?THVxYWIvRWQvUDV1VjQvVUhhQjRCYUl6Sk5VZmZXRWRPMDJMQlZDQkV0Wjhu?= =?utf-8?B?cDZkb0JMak1VTFhxSkJ5S1FYL3NOZmhnY25qMWg2YkhrUzVxU05NYXVNOEJt?= =?utf-8?B?WmtSSWJTMmhpQ3QrdVNBby9tTFRkazMzT0ErTnJlVDFnY2h2b2grVjBkMnE3?= =?utf-8?B?MWh4UmpMVVRyV1ZvY05OZzExSnJJTVliV3Z1OFdndmtSNGw4NWJvVXRrTlE5?= =?utf-8?B?bVc3MHdrMkZ0L1RmUWhYV05abzJ0VnVXQ0NtbnBOeGliclBocSswcVRUZWIz?= =?utf-8?Q?wvmT1Nj5wq0vNtoVaDZNpX4n3IimFJsRIctry?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: csgroup.eu X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MRZP264MB2988.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: dcb0da0d-fdc0-44f5-0a80-08da4f6e5953 X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Jun 2022 08:00:58.9801 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 9914def7-b676-4fda-8815-5d49fb3b45c8 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 3hlGIO5kPu/4epj2j7KYyRf0XZ0TOCaqA69t7r+YMNybRnPvNT5VEd8q3Z0f4fb7Rcch/ioYvgk4Th73Zt8UZ2GTjs0Q4H8pNpJEluft26s= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MRZP264MB3067 ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1655366462; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=EiWG33v1qOu5yBVhLv7zyT1GYDem3JNnym7FtcweD0U=; b=fAvUaxz1fVIogH/LwfbHdNcPmz5kfBIvc6j1CLSvlnio+pvj2kS6Aba5lFqzfO9M6/60O9 dPCqWqMnidFTsxxqxu+3XAVTp71WbkH4FsZgPIkHwC8Qf3RWi33ISBvBeOaLXnp9V7/eh0 4dGu4LuVCYkB29PhaP61s2PgCqHSSvo= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1655366462; a=rsa-sha256; cv=pass; b=eraWUrdFNi1UuAl2Ur+aurBtwHP3a5PPtuV6+ESRWYFslSbJs6ASISjy/A7b/ND9Zo21b+ lYbSf6YekGCfl0IAk3TBp3THUA2Q7HZnF4OeCVdLrcvoSGEXbRDp6k6QECM5Sig1sGAZgM pEdFUzxu0IGvVVtypmLGNvGCe2nvYto= ARC-Authentication-Results: i=2; imf07.hostedemail.com; dkim=pass header.d=csgroup.eu header.s=selector1 header.b=EQyKram2; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=none; spf=pass (imf07.hostedemail.com: domain of christophe.leroy@csgroup.eu designates 40.107.9.58 as permitted sender) smtp.mailfrom=christophe.leroy@csgroup.eu Authentication-Results: imf07.hostedemail.com; dkim=pass header.d=csgroup.eu header.s=selector1 header.b=EQyKram2; arc=pass ("microsoft.com:s=arcselector9901:i=1"); dmarc=none; spf=pass (imf07.hostedemail.com: domain of christophe.leroy@csgroup.eu designates 40.107.9.58 as permitted sender) smtp.mailfrom=christophe.leroy@csgroup.eu X-Rspamd-Server: rspam12 X-Rspam-User: X-Stat-Signature: 34utxn651n7sqt1xcfbz6ts49aswe999 X-Rspamd-Queue-Id: C86664008A X-HE-Tag: 1655366461-427785 X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: DQoNCkxlIDE2LzA2LzIwMjIgw6AgMDk6MTgsIE11Y2h1biBTb25nIGEgw6ljcml0wqA6DQo+IEkg b2Z0ZW4gZ2V0IGxvc3QgaW4gdGhlIGxvZ2ljIGludGVybGVhdmVkIGJldHdlZW4gbnVtZXJvdXMg Z2xvYmFsDQo+IHZhcmlhYmxlcyBmb3IgcGFyc2luZyBjbWRsaW5lLiAgSXQgaXMgbm90IGVhc3kg dG8gYmUgbWFpbnRhaW5lZC4NCj4gVGhpcyBwYXRjaCBhaW1zIHRvIHJld29yayBjbWRsaW5lIHBh cnNpbmcgdG8gc2ltbGlmeSB0aGUgY29kZSBhbmQNCj4gbWFrZSB0aGUgY29kZSBtb3JlIHJlYWRh YmxlLg0KDQpUaGlzIHBhdGNoIGlzIHF1aXRlIGJpZy4NCg0KQ2FuIHlvdSBleHBsYWluIGluIHRo ZSBjb21taXQgZGVzY3JpcHRpb24gaW4gbW9yZSBkZXRhaWxzIHdoYXQgYXJlIHRoZSANCmNoYW5n ZXMgcGVyZm9ybWVkIGJ5IHRoaXMgcGF0Y2ggPw0KDQpPdGhlcndpc2UgSSBoYXZlIGFic29sdXRl bHkgbm8gaWRlYSBvZiB3aGF0IHRvIHJldmlldyBvciB3aGF0IHRvIHRlc3QuDQoNClRoYW5rcw0K Q2hyaXN0b3BoZQ0KDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBNdWNodW4gU29uZyA8c29uZ211Y2h1 bkBieXRlZGFuY2UuY29tPg0KPiAtLS0NCj4gICBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCB8ICAg MSAtDQo+ICAgbW0vaHVnZXRsYi5jICAgICAgICAgICAgfCA0OTkgKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCAyMDYg aW5zZXJ0aW9ucygrKSwgMjk0IGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmgNCj4gaW5kZXggNjQy YTM5MDE2ZjlhLi5hYWIyZWYzYTA1NGQgMTAwNjQ0DQo+IC0tLSBhL2luY2x1ZGUvbGludXgvaHVn ZXRsYi5oDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oDQo+IEBAIC02MzYsNyArNjM2 LDYgQEAgc3RydWN0IGhzdGF0ZSB7DQo+ICAgCXVuc2lnbmVkIGxvbmcgbnJfb3ZlcmNvbW1pdF9o dWdlX3BhZ2VzOw0KPiAgIAlzdHJ1Y3QgbGlzdF9oZWFkIGh1Z2VwYWdlX2FjdGl2ZWxpc3Q7DQo+ ICAgCXN0cnVjdCBsaXN0X2hlYWQgaHVnZXBhZ2VfZnJlZWxpc3RzW01BWF9OVU1OT0RFU107DQo+ IC0JdW5zaWduZWQgaW50IG1heF9odWdlX3BhZ2VzX25vZGVbTUFYX05VTU5PREVTXTsNCj4gICAJ dW5zaWduZWQgaW50IG5yX2h1Z2VfcGFnZXNfbm9kZVtNQVhfTlVNTk9ERVNdOw0KPiAgIAl1bnNp Z25lZCBpbnQgZnJlZV9odWdlX3BhZ2VzX25vZGVbTUFYX05VTU5PREVTXTsNCj4gICAJdW5zaWdu ZWQgaW50IHN1cnBsdXNfaHVnZV9wYWdlc19ub2RlW01BWF9OVU1OT0RFU107DQo+IGRpZmYgLS1n aXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmMNCj4gaW5kZXggOTg0OTI3MzNjYzY0Li4w ZDNjMWFlNTgxMDcgMTAwNjQ0DQo+IC0tLSBhL21tL2h1Z2V0bGIuYw0KPiArKysgYi9tbS9odWdl dGxiLmMNCj4gQEAgLTM3LDYgKzM3LDcgQEANCj4gICAjaW5jbHVkZSA8YXNtL3BhZ2UuaD4NCj4g ICAjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4NCj4gICAjaW5jbHVkZSA8YXNtL3RsYi5oPg0KPiAr I2luY2x1ZGUgPGFzbS9zZXR1cC5oPg0KPiAgIA0KPiAgICNpbmNsdWRlIDxsaW51eC9pby5oPg0K PiAgICNpbmNsdWRlIDxsaW51eC9odWdldGxiLmg+DQo+IEBAIC00Nyw3ICs0OCw3IEBADQo+ICAg I2luY2x1ZGUgImh1Z2V0bGJfdm1lbW1hcC5oIg0KPiAgIA0KPiAgIGludCBodWdldGxiX21heF9o c3RhdGUgX19yZWFkX21vc3RseTsNCj4gLXVuc2lnbmVkIGludCBkZWZhdWx0X2hzdGF0ZV9pZHg7 DQo+ICt1bnNpZ25lZCBpbnQgZGVmYXVsdF9oc3RhdGVfaWR4ID0gSFVHRV9NQVhfSFNUQVRFOw0K PiAgIHN0cnVjdCBoc3RhdGUgaHN0YXRlc1tIVUdFX01BWF9IU1RBVEVdOw0KPiAgIA0KPiAgICNp ZmRlZiBDT05GSUdfQ01BDQo+IEBAIC02OCwxMyArNjksNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9u ZyBodWdldGxiX2NtYV9zaXplIF9faW5pdGRhdGE7DQo+ICAgDQo+ICAgX19pbml0ZGF0YSBMSVNU X0hFQUQoaHVnZV9ib290X3BhZ2VzKTsNCj4gICANCj4gLS8qIGZvciBjb21tYW5kIGxpbmUgcGFy c2luZyAqLw0KPiAtc3RhdGljIHN0cnVjdCBoc3RhdGUgKiBfX2luaXRkYXRhIHBhcnNlZF9oc3Rh dGU7DQo+IC1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXRkYXRhIGRlZmF1bHRfaHN0YXRlX21h eF9odWdlX3BhZ2VzOw0KPiAtc3RhdGljIGJvb2wgX19pbml0ZGF0YSBwYXJzZWRfdmFsaWRfaHVn ZXBhZ2VzeiA9IHRydWU7DQo+IC1zdGF0aWMgYm9vbCBfX2luaXRkYXRhIHBhcnNlZF9kZWZhdWx0 X2h1Z2VwYWdlc3o7DQo+IC1zdGF0aWMgdW5zaWduZWQgaW50IGRlZmF1bHRfaHVnZXBhZ2VzX2lu X25vZGVbTUFYX05VTU5PREVTXSBfX2luaXRkYXRhOw0KPiAtDQo+ICAgLyoNCj4gICAgKiBQcm90 ZWN0cyB1cGRhdGVzIHRvIGh1Z2VwYWdlX2ZyZWVsaXN0cywgaHVnZXBhZ2VfYWN0aXZlbGlzdCwg bnJfaHVnZV9wYWdlcywNCj4gICAgKiBmcmVlX2h1Z2VfcGFnZXMsIGFuZCBzdXJwbHVzX2h1Z2Vf cGFnZXMuDQo+IEBAIC0zMDI2LDYgKzMwMjAsMTQ2IEBAIGludCBfX2FsbG9jX2Jvb3RtZW1faHVn ZV9wYWdlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpDQo+ICAgCXJldHVybiAxOw0KPiAgIH0N Cj4gICANCj4gK3N0cnVjdCBodWdldGxiX29uZV9hcmcgew0KPiArCXVuc2lnbmVkIGxvbmcgaHVn ZXBhZ2VzejsNCj4gKwl1bnNpZ25lZCBsb25nIGh1Z2VwYWdlczsNCj4gKwl1bnNpZ25lZCBsb25n IGh1Z2VwYWdlc19ub2RlW01BWF9OVU1OT0RFU107DQo+ICt9Ow0KPiArDQo+ICtzdHJ1Y3QgaHVn ZXRsYl9hcmdzIHsNCj4gKwl1bnNpZ25lZCBpbnQJCW5yX2FyZzsNCj4gKwlzdHJ1Y3QgaHVnZXRs Yl9vbmVfYXJnCWFyZ3NbSFVHRV9NQVhfSFNUQVRFXTsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBz dHJ1Y3QgaHVnZXRsYl9hcmdzIGh1Z2V0bGJfYXJncyBfX2luaXRkYXRhOw0KPiArDQo+ICtzdGF0 aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgaHVnZXRsYl9wYXJzZV9odWdlcGFnZXN6KGNvbnN0IGNo YXIgKnBhcmFtLA0KPiArCQkJCQkJICAgICBjb25zdCBjaGFyICp2YWwpDQo+ICt7DQo+ICsJdW5z aWduZWQgbG9uZyBzaXplOw0KPiArDQo+ICsJc2l6ZSA9IG1lbXBhcnNlKHZhbCwgTlVMTCk7DQo+ ICsJaWYgKCFhcmNoX2h1Z2V0bGJfdmFsaWRfc2l6ZShzaXplKSkgew0KPiArCQlwcl9lcnIoIkh1 Z2VUTEI6ICVzPSVzIGlzIHVuc3VwcG9ydGVkXG4iLCBwYXJhbSwgdmFsKTsNCj4gKwkJcmV0dXJu IDA7DQo+ICsJfQ0KPiArCWh1Z2V0bGJfYWRkX2hzdGF0ZShpbG9nMihzaXplKSAtIFBBR0VfU0hJ RlQpOw0KPiArCXJldHVybiBzaXplOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IF9faW5pdCBo dWdldGxiX3Byb2Nlc3NfYXJnKGNoYXIgKnBhcmFtLCBjaGFyICp2YWwsDQo+ICsJCQkJICAgICAg Y29uc3QgY2hhciAqdW51c2VkLCB2b2lkICpwcml2KQ0KPiArew0KPiArCXN0cnVjdCBodWdldGxi X2FyZ3MgKmFyZ3MgPSBwcml2Ow0KPiArCXN0cnVjdCBodWdldGxiX29uZV9hcmcgKmFyZyA9ICZh cmdzLT5hcmdzW2FyZ3MtPm5yX2FyZ107DQo+ICsNCj4gKwlpZiAoIXZhbCkNCj4gKwkJcmV0dXJu IDA7DQo+ICsNCj4gKwlpZiAoIXN0cmNtcChwYXJhbSwgImh1Z2VwYWdlc3oiKSkgew0KPiArCQl1 bnNpZ25lZCBsb25nIHNpemUgPSBodWdldGxiX3BhcnNlX2h1Z2VwYWdlc3oocGFyYW0sIHZhbCk7 DQo+ICsNCj4gKwkJLyoNCj4gKwkJICogIlVMT05HX01BWCIgbWVhbnMgdGhlIG5leHQgcGFyYW1l dGVyICJodWdlcGFnZXMiIHNob3VsZCBiZQ0KPiArCQkgKiBpZ25vcmVkLg0KPiArCQkgKi8NCj4g KwkJc2l6ZSA9IHNpemUgPyA6IFVMT05HX01BWDsNCj4gKw0KPiArCQkvKiBMb29rdXAgImh1Z2Vw YWdlc3oiIHdoZXRoZXIgaWYgd2UgaGF2ZSBzcGVjaWZpZWQgYmVmb3JlLiAqLw0KPiArCQlpZiAo c2l6ZSAhPSBVTE9OR19NQVgpIHsNCj4gKwkJCWludCBpOw0KPiArDQo+ICsJCQlmb3IgKGkgPSAw OyBpIDwgYXJncy0+bnJfYXJnOyBpKyspIHsNCj4gKwkJCQlpZiAoYXJncy0+YXJnc1tpXS5odWdl cGFnZXN6ID09IHNpemUgfHwNCj4gKwkJCQkgICAgKCFhcmdzLT5hcmdzW2ldLmh1Z2VwYWdlc3og JiYgc2l6ZSA9PSBIUEFHRV9TSVpFKSkgew0KPiArCQkJCQlwcl93YXJuKCJIdWdlVExCOiAlcz0l cyBpcyBpZ25vcmVkXG4iLCBwYXJhbSwgdmFsKTsNCj4gKwkJCQkJc2l6ZSA9IFVMT05HX01BWDsN Cj4gKwkJCQkJYnJlYWs7DQo+ICsJCQkJfQ0KPiArCQkJfQ0KPiArCQl9DQo+ICsJCWFyZy0+aHVn ZXBhZ2VzeiA9IHNpemU7DQo+ICsJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiZGVmYXVsdF9o dWdlcGFnZXN6IikpIHsNCj4gKwkJdW5zaWduZWQgbG9uZyBzaXplID0gaHVnZXRsYl9wYXJzZV9o dWdlcGFnZXN6KHBhcmFtLCB2YWwpOw0KPiArDQo+ICsJCWlmIChzaXplID09IDApDQo+ICsJCQly ZXR1cm4gMDsNCj4gKw0KPiArCQlpZiAoZGVmYXVsdF9oc3RhdGVfaWR4ICE9IEhVR0VfTUFYX0hT VEFURSkgew0KPiArCQkJcHJfZXJyKCJIdWdlVExCOiAlcz0lcyBpcyBpZ25vcmVkXG4iLCBwYXJh bSwgdmFsKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCWRlZmF1bHRfaHN0YXRlX2lkeCA9IGhzdGF0 ZV9pbmRleChzaXplX3RvX2hzdGF0ZShzaXplKSk7DQo+ICsNCj4gKwkJCS8qDQo+ICsJCQkgKiBV cGRhdGUgLT5odWdlcGFnZXN6IGlmIHRoZSBmaXJzdCAiaHVnZXBhZ2VzIiBpcw0KPiArCQkJICog Zm9sbG93ZWQgYnkgImRlZmF1bHRfaHVnZXBhZ2VzeiIuDQo+ICsJCQkgKi8NCj4gKwkJCWlmIChh cmdzLT5hcmdzWzBdLmh1Z2VwYWdlc3ogPT0gMCkNCj4gKwkJCQlhcmdzLT5hcmdzWzBdLmh1Z2Vw YWdlc3ogPSBzaXplOw0KPiArCQl9DQo+ICsJfSBlbHNlIGlmICghc3RyY21wKHBhcmFtLCAiaHVn ZXBhZ2VzIikpIHsNCj4gKwkJaW50IG5vZGU7DQo+ICsJCWNvbnN0IGNoYXIgKnAgPSB2YWw7DQo+ ICsNCj4gKwkJLyoNCj4gKwkJICogVGhlcmUgYXJlIHR3byBjYXNlcyB3aGljaCBuZWVkIHRvIGJl IGlnbm9yZWQuDQo+ICsJCSAqDQo+ICsJCSAqIDEpIFRoZSBwcmV2aW91cyAiaHVnZXBhZ2VzeiIg aXMgaW52YWxpZC4NCj4gKwkJICogMikgTGFjayBvZiAiaHVnZXBhZ2VzeiIgd2hpY2ggbWF0Y2hl cyB3aXRoICJodWdlcGFnZXMiIGV4Y2VwdA0KPiArCQkgKiAgICB0aGUgZmlyc3QgImh1Z2VwYWdl cyIuDQo+ICsJCSAqLw0KPiArCQlpZiAoYXJnLT5odWdlcGFnZXN6ID09IFVMT05HX01BWCB8fA0K PiArCQkgICAgKGFyZy0+aHVnZXBhZ2VzeiA9PSAwICYmIGFyZ3MtPm5yX2FyZyAhPSAwKSkgew0K PiArCQkJcHJfd2FybigiSHVnZVRMQjogJXM9JXMgaXMgaWdub3JlZFxuIiwgcGFyYW0sIHZhbCk7 DQo+ICsJCQlyZXR1cm4gMDsNCj4gKwkJfQ0KPiArDQo+ICsJCXdoaWxlICgqcCkgew0KPiArCQkJ aW50IGNvdW50ID0gMDsNCj4gKwkJCXVuc2lnbmVkIGxvbmcgdG1wOw0KPiArDQo+ICsJCQlpZiAo c3NjYW5mKHAsICIlbHUlbiIsICZ0bXAsICZjb3VudCkgIT0gMSkNCj4gKwkJCQlnb3RvIGludmFs aWQ7DQo+ICsNCj4gKwkJCS8qIFBhcmFtZXRlciBpcyBub2RlIGZvcm1hdCAqLw0KPiArCQkJaWYg KHBbY291bnRdID09ICc6Jykgew0KPiArCQkJCWlmICghaHVnZXRsYl9ub2RlX2FsbG9jX3N1cHBv cnRlZCgpKSB7DQo+ICsJCQkJCXByX3dhcm4oIkh1Z2VUTEI6IGFyY2hpdGVjdHVyZSBjYW4ndCBz dXBwb3J0IG5vZGUgc3BlY2lmaWMgYWxsb2MsIGlnbm9yaW5nIVxuIik7DQo+ICsJCQkJCXJldHVy biAwOw0KPiArCQkJCX0NCj4gKwkJCQlpZiAodG1wID49IE1BWF9OVU1OT0RFUyB8fCAhbm9kZV9v bmxpbmUodG1wKSkNCj4gKwkJCQkJZ290byBpbnZhbGlkOw0KPiArCQkJCW5vZGUgPSBhcnJheV9p bmRleF9ub3NwZWModG1wLCBNQVhfTlVNTk9ERVMpOw0KPiArCQkJCXAgKz0gY291bnQgKyAxOw0K PiArCQkJCS8qIFBhcnNlIGh1Z2VwYWdlcyAqLw0KPiArCQkJCWlmIChzc2NhbmYocCwgIiVsdSVu IiwgJnRtcCwgJmNvdW50KSAhPSAxKQ0KPiArCQkJCQlnb3RvIGludmFsaWQ7DQo+ICsJCQkJYXJn LT5odWdlcGFnZXNfbm9kZVtub2RlXSA9IHRtcDsNCj4gKwkJCQlhcmctPmh1Z2VwYWdlcyArPSB0 bXA7DQo+ICsJCQkJLyogR28gdG8gcGFyc2UgbmV4dCBub2RlKi8NCj4gKwkJCQlpZiAocFtjb3Vu dF0gPT0gJywnKQ0KPiArCQkJCQlwICs9IGNvdW50ICsgMTsNCj4gKwkJCQllbHNlDQo+ICsJCQkJ CWJyZWFrOw0KPiArCQkJfSBlbHNlIHsNCj4gKwkJCQlpZiAocCAhPSB2YWwpDQo+ICsJCQkJCWdv dG8gaW52YWxpZDsNCj4gKwkJCQlhcmctPmh1Z2VwYWdlcyA9IHRtcDsNCj4gKwkJCQlicmVhazsN Cj4gKwkJCX0NCj4gKwkJfQ0KPiArCQlhcmdzLT5ucl9hcmcrKzsNCj4gKwkJcmV0dXJuIDA7DQo+ ICtpbnZhbGlkOg0KPiArCQlmb3JfZWFjaF9ub2RlKG5vZGUpDQo+ICsJCQlhcmctPmh1Z2VwYWdl c19ub2RlW25vZGVdID0gMDsNCj4gKwkJYXJnLT5odWdlcGFnZXMgPSAwOw0KPiArCQlwcl93YXJu KCJIdWdlVExCOiAlcz0lcyBpcyBpZ25vcmVkXG4iLCBwYXJhbSwgdmFsKTsNCj4gKwl9DQo+ICsN Cj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiAgIC8qDQo+ICAgICogUHV0IGJvb3RtZW0gaHVn ZSBwYWdlcyBpbnRvIHRoZSBzdGFuZGFyZCBsaXN0cyBhZnRlciBtZW1fbWFwIGlzIHVwLg0KPiAg ICAqIE5vdGU6IFRoaXMgb25seSBhcHBsaWVzIHRvIGdpZ2FudGljIChvcmRlciA+IE1BWF9PUkRF UikgcGFnZXMuDQo+IEBAIC0zMDU4LDEyICszMTkyLDEzIEBAIHN0YXRpYyB2b2lkIF9faW5pdCBn YXRoZXJfYm9vdG1lbV9wcmVhbGxvYyh2b2lkKQ0KPiAgIAkJY29uZF9yZXNjaGVkKCk7DQo+ICAg CX0NCj4gICB9DQo+IC1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFn ZXNfb25lbm9kZShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkKQ0KPiArc3RhdGljIHZvaWQgX19p bml0IGh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoc3RydWN0IGhzdGF0ZSAqaCwg aW50IG5pZCwNCj4gKwkJCQkJCSAgICAgIHN0cnVjdCBodWdldGxiX29uZV9hcmcgKmFyZykNCj4g ICB7DQo+ICAgCXVuc2lnbmVkIGxvbmcgaTsNCj4gICAJY2hhciBidWZbMzJdOw0KPiAgIA0KPiAt CWZvciAoaSA9IDA7IGkgPCBoLT5tYXhfaHVnZV9wYWdlc19ub2RlW25pZF07ICsraSkgew0KPiAr CWZvciAoaSA9IDA7IGkgPCBhcmctPmh1Z2VwYWdlc19ub2RlW25pZF07ICsraSkgew0KPiAgIAkJ aWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSkgew0KPiAgIAkJCWlmICghYWxsb2NfYm9vdG1lbV9o dWdlX3BhZ2UoaCwgbmlkKSkNCj4gICAJCQkJYnJlYWs7DQo+IEBAIC0zMDc5LDMyICszMjE0LDMz IEBAIHN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlc19vbmVub2Rl KHN0cnVjdCBoc3RhdGUgKmgsIGludCBuaWQpDQo+ICAgCQl9DQo+ICAgCQljb25kX3Jlc2NoZWQo KTsNCj4gICAJfQ0KPiAtCWlmIChpID09IGgtPm1heF9odWdlX3BhZ2VzX25vZGVbbmlkXSkNCj4g KwloLT5tYXhfaHVnZV9wYWdlcyArPSBpOw0KPiArCWlmIChpID09IGFyZy0+aHVnZXBhZ2VzX25v ZGVbbmlkXSkNCj4gICAJCXJldHVybjsNCj4gICANCj4gICAJc3RyaW5nX2dldF9zaXplKGh1Z2Vf cGFnZV9zaXplKGgpLCAxLCBTVFJJTkdfVU5JVFNfMiwgYnVmLCAzMik7DQo+IC0JcHJfd2Fybigi SHVnZVRMQjogYWxsb2NhdGluZyAldSBvZiBwYWdlIHNpemUgJXMgZmFpbGVkIG5vZGUlZC4gIE9u bHkgYWxsb2NhdGVkICVsdSBodWdlcGFnZXMuXG4iLA0KPiAtCQloLT5tYXhfaHVnZV9wYWdlc19u b2RlW25pZF0sIGJ1ZiwgbmlkLCBpKTsNCj4gLQloLT5tYXhfaHVnZV9wYWdlcyAtPSAoaC0+bWF4 X2h1Z2VfcGFnZXNfbm9kZVtuaWRdIC0gaSk7DQo+IC0JaC0+bWF4X2h1Z2VfcGFnZXNfbm9kZVtu aWRdID0gaTsNCj4gKwlwcl93YXJuKCJIdWdlVExCOiBhbGxvY2F0aW5nICVsdSBvZiBwYWdlIHNp emUgJXMgZmFpbGVkIG5vZGUlZC4gIE9ubHkgYWxsb2NhdGVkICVsdSBodWdlcGFnZXMuXG4iLA0K PiArCQlhcmctPmh1Z2VwYWdlc19ub2RlW25pZF0sIGJ1ZiwgbmlkLCBpKTsNCj4gICB9DQo+ICAg DQo+IC1zdGF0aWMgdm9pZCBfX2luaXQgaHVnZXRsYl9oc3RhdGVfYWxsb2NfcGFnZXMoc3RydWN0 IGhzdGF0ZSAqaCkNCj4gK3N0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19w YWdlcyhzdHJ1Y3QgaHN0YXRlICpoLA0KPiArCQkJCQkgICAgICBzdHJ1Y3QgaHVnZXRsYl9vbmVf YXJnICphcmcpDQo+ICAgew0KPiAgIAl1bnNpZ25lZCBsb25nIGk7DQo+IC0Jbm9kZW1hc2tfdCAq bm9kZV9hbGxvY19ub3JldHJ5Ow0KPiArCW5vZGVtYXNrX3Qgbm9kZV9hbGxvY19ub3JldHJ5ID0g Tk9ERV9NQVNLX05PTkU7DQo+ICAgCWJvb2wgbm9kZV9zcGVjaWZpY19hbGxvYyA9IGZhbHNlOw0K PiAgIA0KPiAgIAkvKiBza2lwIGdpZ2FudGljIGh1Z2VwYWdlcyBhbGxvY2F0aW9uIGlmIGh1Z2V0 bGJfY21hIGVuYWJsZWQgKi8NCj4gICAJaWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSAmJiBodWdl dGxiX2NtYV9zaXplKSB7DQo+ICsJCWgtPm1heF9odWdlX3BhZ2VzID0gYXJnLT5odWdlcGFnZXM7 DQo+ICAgCQlwcl93YXJuX29uY2UoIkh1Z2VUTEI6IGh1Z2V0bGJfY21hIGlzIGVuYWJsZWQsIHNr aXAgYm9vdCB0aW1lIGFsbG9jYXRpb25cbiIpOw0KPiAgIAkJcmV0dXJuOw0KPiAgIAl9DQo+ICAg DQo+ICAgCS8qIGRvIG5vZGUgc3BlY2lmaWMgYWxsb2MgKi8NCj4gICAJZm9yX2VhY2hfb25saW5l X25vZGUoaSkgew0KPiAtCQlpZiAoaC0+bWF4X2h1Z2VfcGFnZXNfbm9kZVtpXSA+IDApIHsNCj4g LQkJCWh1Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzX29uZW5vZGUoaCwgaSk7DQo+ICsJCWlmIChh cmctPmh1Z2VwYWdlc19ub2RlW2ldID4gMCkgew0KPiArCQkJaHVnZXRsYl9oc3RhdGVfYWxsb2Nf cGFnZXNfb25lbm9kZShoLCBpLCBhcmcpOw0KPiAgIAkJCW5vZGVfc3BlY2lmaWNfYWxsb2MgPSB0 cnVlOw0KPiAgIAkJfQ0KPiAgIAl9DQo+IEBAIC0zMTEyLDU1ICszMjQ4LDc1IEBAIHN0YXRpYyB2 b2lkIF9faW5pdCBodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhzdHJ1Y3QgaHN0YXRlICpoKQ0K PiAgIAlpZiAobm9kZV9zcGVjaWZpY19hbGxvYykNCj4gICAJCXJldHVybjsNCj4gICANCj4gLQkv KiBiZWxvdyB3aWxsIGRvIGFsbCBub2RlIGJhbGFuY2VkIGFsbG9jICovDQo+IC0JaWYgKCFoc3Rh dGVfaXNfZ2lnYW50aWMoaCkpIHsNCj4gLQkJLyoNCj4gLQkJICogQml0IG1hc2sgY29udHJvbGxp bmcgaG93IGhhcmQgd2UgcmV0cnkgcGVyLW5vZGUgYWxsb2NhdGlvbnMuDQo+IC0JCSAqIElnbm9y ZSBlcnJvcnMgYXMgbG93ZXIgbGV2ZWwgcm91dGluZXMgY2FuIGRlYWwgd2l0aA0KPiAtCQkgKiBu b2RlX2FsbG9jX25vcmV0cnkgPT0gTlVMTC4gIElmIHRoaXMga21hbGxvYyBmYWlscyBhdCBib290 DQo+IC0JCSAqIHRpbWUsIHdlIGFyZSBsaWtlbHkgaW4gYmlnZ2VyIHRyb3VibGUuDQo+IC0JCSAq Lw0KPiAtCQlub2RlX2FsbG9jX25vcmV0cnkgPSBrbWFsbG9jKHNpemVvZigqbm9kZV9hbGxvY19u b3JldHJ5KSwNCj4gLQkJCQkJCUdGUF9LRVJORUwpOw0KPiAtCX0gZWxzZSB7DQo+IC0JCS8qIGFs bG9jYXRpb25zIGRvbmUgYXQgYm9vdCB0aW1lICovDQo+IC0JCW5vZGVfYWxsb2Nfbm9yZXRyeSA9 IE5VTEw7DQo+IC0JfQ0KPiAtDQo+IC0JLyogYml0IG1hc2sgY29udHJvbGxpbmcgaG93IGhhcmQg d2UgcmV0cnkgcGVyLW5vZGUgYWxsb2NhdGlvbnMgKi8NCj4gLQlpZiAobm9kZV9hbGxvY19ub3Jl dHJ5KQ0KPiAtCQlub2Rlc19jbGVhcigqbm9kZV9hbGxvY19ub3JldHJ5KTsNCj4gLQ0KPiAtCWZv ciAoaSA9IDA7IGkgPCBoLT5tYXhfaHVnZV9wYWdlczsgKytpKSB7DQo+ICsJZm9yIChpID0gMDsg aSA8IGFyZy0+aHVnZXBhZ2VzOyArK2kpIHsNCj4gICAJCWlmIChoc3RhdGVfaXNfZ2lnYW50aWMo aCkpIHsNCj4gICAJCQlpZiAoIWFsbG9jX2Jvb3RtZW1faHVnZV9wYWdlKGgsIE5VTUFfTk9fTk9E RSkpDQo+ICAgCQkJCWJyZWFrOw0KPiAgIAkJfSBlbHNlIGlmICghYWxsb2NfcG9vbF9odWdlX3Bh Z2UoaCwNCj4gICAJCQkJCSAmbm9kZV9zdGF0ZXNbTl9NRU1PUlldLA0KPiAtCQkJCQkgbm9kZV9h bGxvY19ub3JldHJ5KSkNCj4gKwkJCQkJICZub2RlX2FsbG9jX25vcmV0cnkpKQ0KPiAgIAkJCWJy ZWFrOw0KPiAgIAkJY29uZF9yZXNjaGVkKCk7DQo+ICAgCX0NCj4gLQlpZiAoaSA8IGgtPm1heF9o dWdlX3BhZ2VzKSB7DQo+ICsJaC0+bWF4X2h1Z2VfcGFnZXMgPSBpOw0KPiArCWlmIChpIDwgYXJn LT5odWdlcGFnZXMpIHsNCj4gICAJCWNoYXIgYnVmWzMyXTsNCj4gICANCj4gICAJCXN0cmluZ19n ZXRfc2l6ZShodWdlX3BhZ2Vfc2l6ZShoKSwgMSwgU1RSSU5HX1VOSVRTXzIsIGJ1ZiwgMzIpOw0K PiAgIAkJcHJfd2FybigiSHVnZVRMQjogYWxsb2NhdGluZyAlbHUgb2YgcGFnZSBzaXplICVzIGZh aWxlZC4gIE9ubHkgYWxsb2NhdGVkICVsdSBodWdlcGFnZXMuXG4iLA0KPiAtCQkJaC0+bWF4X2h1 Z2VfcGFnZXMsIGJ1ZiwgaSk7DQo+IC0JCWgtPm1heF9odWdlX3BhZ2VzID0gaTsNCj4gKwkJCWFy Zy0+aHVnZXBhZ2VzLCBidWYsIGkpOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQg X19pbml0IGh1Z2V0bGJfcHJlYWxsb2MoYm9vbCBnaWdhbnRpYykNCj4gK3sNCj4gKwlpbnQgaTsN Cj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBodWdldGxiX2FyZ3MubnJfYXJnOyBpKyspIHsNCj4g KwkJc3RydWN0IGhzdGF0ZSAqaDsNCj4gKwkJc3RydWN0IGh1Z2V0bGJfb25lX2FyZyAqYXJnOw0K PiArDQo+ICsJCWFyZyA9ICZodWdldGxiX2FyZ3MuYXJnc1tpXTsNCj4gKwkJaWYgKGFyZy0+aHVn ZXBhZ2VzeiA9PSAwKSB7DQo+ICsJCQlhcmctPmh1Z2VwYWdlc3ogPSBIUEFHRV9TSVpFOw0KPiAr CQkJZGVmYXVsdF9oc3RhdGVfaWR4ID0gaHN0YXRlX2luZGV4KHNpemVfdG9faHN0YXRlKEhQQUdF X1NJWkUpKTsNCj4gKwkJfQ0KPiArCQloID0gc2l6ZV90b19oc3RhdGUoYXJnLT5odWdlcGFnZXN6 KTsNCj4gKwkJaWYgKGhzdGF0ZV9pc19naWdhbnRpYyhoKSA9PSBnaWdhbnRpYykNCj4gKwkJCWh1 Z2V0bGJfaHN0YXRlX2FsbG9jX3BhZ2VzKGgsIGFyZyk7DQo+ICAgCX0NCj4gLQlrZnJlZShub2Rl X2FsbG9jX25vcmV0cnkpOw0KPiAgIH0NCj4gICANCj4gK3N0YXRpYyBpbnQgX19pbml0IGh1Z2V0 bGJfY21kbGluZV9wYXJzZShjaGFyICpzKQ0KPiArew0KPiArCXN0YXRpYyBib29sIHBhcnNlZCBf X2luaXRkYXRhOw0KPiArCXN0YXRpYyBjaGFyIGNtZGxpbmVbQ09NTUFORF9MSU5FX1NJWkVdIF9f aW5pdGRhdGE7DQo+ICsNCj4gKwlpZiAoIWh1Z2VwYWdlc19zdXBwb3J0ZWQoKSB8fCBwYXJzZWQp DQo+ICsJCXJldHVybiAxOw0KPiArCS8qDQo+ICsJICogTWFrZSBzdXJlIEhQQUdFX1NJWkUgKEhV R0VUTEJfUEFHRV9PUkRFUikgaHN0YXRlIGV4aXN0cy4gIFNvbWUNCj4gKwkgKiBhcmNoaXRlY3R1 cmVzIGRlcGVuZCBvbiBzZXR1cCBiZWluZyBkb25lIGhlcmUuDQo+ICsJICovDQo+ICsJaHVnZXRs Yl9hZGRfaHN0YXRlKEhVR0VUTEJfUEFHRV9PUkRFUik7DQo+ICsNCj4gKwlzdHJzY3B5KGNtZGxp bmUsIGJvb3RfY29tbWFuZF9saW5lLCBDT01NQU5EX0xJTkVfU0laRSk7DQo+ICsJcGFyc2VfYXJn cygiSHVnZVRMQiBvcHRpb25zIiwgY21kbGluZSwgTlVMTCwgMCwgMCwgMCwgJmh1Z2V0bGJfYXJn cywNCj4gKwkJICAgaHVnZXRsYl9wcm9jZXNzX2FyZyk7DQo+ICsJaHVnZXRsYl9wcmVhbGxvYyh0 cnVlKTsNCj4gKwlwYXJzZWQgPSB0cnVlOw0KPiArDQo+ICsJcmV0dXJuIDE7DQo+ICt9DQo+ICtf X3NldHVwX3BhcmFtKCJodWdlcGFnZXMiLCBodWdlcGFnZXMsIGh1Z2V0bGJfY21kbGluZV9wYXJz ZSwgMCk7DQo+ICtfX3NldHVwX3BhcmFtKCJodWdlcGFnZXN6IiwgaHVnZXBhZ2VzeiwgaHVnZXRs Yl9jbWRsaW5lX3BhcnNlLCAwKTsNCj4gK19fc2V0dXBfcGFyYW0oImRlZmF1bHRfaHVnZXBhZ2Vz eiIsIGRlZmF1bHRfaHVnZXBhZ2VzeiwgaHVnZXRsYl9jbWRsaW5lX3BhcnNlLCAwKTsNCj4gKw0K PiAgIHN0YXRpYyB2b2lkIF9faW5pdCBodWdldGxiX2luaXRfaHN0YXRlcyh2b2lkKQ0KPiAgIHsN Cj4gICAJc3RydWN0IGhzdGF0ZSAqaCwgKmgyOw0KPiAgIA0KPiAgIAlmb3JfZWFjaF9oc3RhdGUo aCkgew0KPiAtCQkvKiBvdmVyc2l6ZSBodWdlcGFnZXMgd2VyZSBpbml0J2VkIGluIGVhcmx5IGJv b3QgKi8NCj4gLQkJaWYgKCFoc3RhdGVfaXNfZ2lnYW50aWMoaCkpDQo+IC0JCQlodWdldGxiX2hz dGF0ZV9hbGxvY19wYWdlcyhoKTsNCj4gLQ0KPiAgIAkJLyoNCj4gICAJCSAqIFNldCBkZW1vdGUg b3JkZXIgZm9yIGVhY2ggaHN0YXRlLiAgTm90ZSB0aGF0DQo+ICAgCQkgKiBoLT5kZW1vdGVfb3Jk ZXIgaXMgaW5pdGlhbGx5IDAuDQo+IEBAIC00MDI3LDQ4ICs0MTgzLDExIEBAIHN0YXRpYyBpbnQg X19pbml0IGh1Z2V0bGJfaW5pdCh2b2lkKQ0KPiAgIAlCVUlMRF9CVUdfT04oc2l6ZW9mX2ZpZWxk KHN0cnVjdCBwYWdlLCBwcml2YXRlKSAqIEJJVFNfUEVSX0JZVEUgPA0KPiAgIAkJCV9fTlJfSFBB R0VGTEFHUyk7DQo+ICAgDQo+IC0JaWYgKCFodWdlcGFnZXNfc3VwcG9ydGVkKCkpIHsNCj4gLQkJ aWYgKGh1Z2V0bGJfbWF4X2hzdGF0ZSB8fCBkZWZhdWx0X2hzdGF0ZV9tYXhfaHVnZV9wYWdlcykN Cj4gLQkJCXByX3dhcm4oIkh1Z2VUTEI6IGh1Z2UgcGFnZXMgbm90IHN1cHBvcnRlZCwgaWdub3Jp bmcgYXNzb2NpYXRlZCBjb21tYW5kLWxpbmUgcGFyYW1ldGVyc1xuIik7DQo+ICsJaWYgKCFodWdl cGFnZXNfc3VwcG9ydGVkKCkpDQo+ICAgCQlyZXR1cm4gMDsNCj4gLQl9DQo+IC0NCj4gLQkvKg0K PiAtCSAqIE1ha2Ugc3VyZSBIUEFHRV9TSVpFIChIVUdFVExCX1BBR0VfT1JERVIpIGhzdGF0ZSBl eGlzdHMuICBTb21lDQo+IC0JICogYXJjaGl0ZWN0dXJlcyBkZXBlbmQgb24gc2V0dXAgYmVpbmcg ZG9uZSBoZXJlLg0KPiAtCSAqLw0KPiAtCWh1Z2V0bGJfYWRkX2hzdGF0ZShIVUdFVExCX1BBR0Vf T1JERVIpOw0KPiAtCWlmICghcGFyc2VkX2RlZmF1bHRfaHVnZXBhZ2Vzeikgew0KPiAtCQkvKg0K PiAtCQkgKiBJZiB3ZSBkaWQgbm90IHBhcnNlIGEgZGVmYXVsdCBodWdlIHBhZ2Ugc2l6ZSwgc2V0 DQo+IC0JCSAqIGRlZmF1bHRfaHN0YXRlX2lkeCB0byBIUEFHRV9TSVpFIGhzdGF0ZS4gQW5kLCBp ZiB0aGUNCj4gLQkJICogbnVtYmVyIG9mIGh1Z2UgcGFnZXMgZm9yIHRoaXMgZGVmYXVsdCBzaXpl IHdhcyBpbXBsaWNpdGx5DQo+IC0JCSAqIHNwZWNpZmllZCwgc2V0IHRoYXQgaGVyZSBhcyB3ZWxs Lg0KPiAtCQkgKiBOb3RlIHRoYXQgdGhlIGltcGxpY2l0IHNldHRpbmcgd2lsbCBvdmVyd3JpdGUg YW4gZXhwbGljaXQNCj4gLQkJICogc2V0dGluZy4gIEEgd2FybmluZyB3aWxsIGJlIHByaW50ZWQg aW4gdGhpcyBjYXNlLg0KPiAtCQkgKi8NCj4gLQkJZGVmYXVsdF9oc3RhdGVfaWR4ID0gaHN0YXRl X2luZGV4KHNpemVfdG9faHN0YXRlKEhQQUdFX1NJWkUpKTsNCj4gLQkJaWYgKGRlZmF1bHRfaHN0 YXRlX21heF9odWdlX3BhZ2VzKSB7DQo+IC0JCQlpZiAoZGVmYXVsdF9oc3RhdGUubWF4X2h1Z2Vf cGFnZXMpIHsNCj4gLQkJCQljaGFyIGJ1ZlszMl07DQo+IC0NCj4gLQkJCQlzdHJpbmdfZ2V0X3Np emUoaHVnZV9wYWdlX3NpemUoJmRlZmF1bHRfaHN0YXRlKSwNCj4gLQkJCQkJMSwgU1RSSU5HX1VO SVRTXzIsIGJ1ZiwgMzIpOw0KPiAtCQkJCXByX3dhcm4oIkh1Z2VUTEI6IElnbm9yaW5nIGh1Z2Vw YWdlcz0lbHUgYXNzb2NpYXRlZCB3aXRoICVzIHBhZ2Ugc2l6ZVxuIiwNCj4gLQkJCQkJZGVmYXVs dF9oc3RhdGUubWF4X2h1Z2VfcGFnZXMsIGJ1Zik7DQo+IC0JCQkJcHJfd2FybigiSHVnZVRMQjog VXNpbmcgaHVnZXBhZ2VzPSVsdSBmb3IgbnVtYmVyIG9mIGRlZmF1bHQgaHVnZSBwYWdlc1xuIiwN Cj4gLQkJCQkJZGVmYXVsdF9oc3RhdGVfbWF4X2h1Z2VfcGFnZXMpOw0KPiAtCQkJfQ0KPiAtCQkJ ZGVmYXVsdF9oc3RhdGUubWF4X2h1Z2VfcGFnZXMgPQ0KPiAtCQkJCWRlZmF1bHRfaHN0YXRlX21h eF9odWdlX3BhZ2VzOw0KPiAtDQo+IC0JCQlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQ0KPiAtCQkJ CWRlZmF1bHRfaHN0YXRlLm1heF9odWdlX3BhZ2VzX25vZGVbaV0gPQ0KPiAtCQkJCQlkZWZhdWx0 X2h1Z2VwYWdlc19pbl9ub2RlW2ldOw0KPiAtCQl9DQo+IC0JfQ0KPiAgIA0KPiAgIAlodWdldGxi X2NtYV9jaGVjaygpOw0KPiArCWh1Z2V0bGJfcHJlYWxsb2MoZmFsc2UpOw0KPiAgIAlodWdldGxi X2luaXRfaHN0YXRlcygpOw0KPiAgIAlnYXRoZXJfYm9vdG1lbV9wcmVhbGxvYygpOw0KPiAgIAly ZXBvcnRfaHVnZXBhZ2VzKCk7DQo+IEBAIC00MTIxLDggKzQyNDAsNiBAQCB2b2lkIF9faW5pdCBo dWdldGxiX2FkZF9oc3RhdGUodW5zaWduZWQgaW50IG9yZGVyKQ0KPiAgIAlzbnByaW50ZihoLT5u YW1lLCBIU1RBVEVfTkFNRV9MRU4sICJodWdlcGFnZXMtJWx1a0IiLA0KPiAgIAkJCQkJaHVnZV9w YWdlX3NpemUoaCkvMTAyNCk7DQo+ICAgCWh1Z2V0bGJfdm1lbW1hcF9pbml0KGgpOw0KPiAtDQo+ IC0JcGFyc2VkX2hzdGF0ZSA9IGg7DQo+ICAgfQ0KPiAgIA0KPiAgIGJvb2wgX19pbml0IF9fd2Vh ayBodWdldGxiX25vZGVfYWxsb2Nfc3VwcG9ydGVkKHZvaWQpDQo+IEBAIC00MTMwLDIxMCArNDI0 Nyw2IEBAIGJvb2wgX19pbml0IF9fd2VhayBodWdldGxiX25vZGVfYWxsb2Nfc3VwcG9ydGVkKHZv aWQpDQo+ICAgCXJldHVybiB0cnVlOw0KPiAgIH0NCj4gICANCj4gLXN0YXRpYyB2b2lkIF9faW5p dCBodWdlcGFnZXNfY2xlYXJfcGFnZXNfaW5fbm9kZSh2b2lkKQ0KPiAtew0KPiAtCWlmICghaHVn ZXRsYl9tYXhfaHN0YXRlKSB7DQo+IC0JCWRlZmF1bHRfaHN0YXRlX21heF9odWdlX3BhZ2VzID0g MDsNCj4gLQkJbWVtc2V0KGRlZmF1bHRfaHVnZXBhZ2VzX2luX25vZGUsIDAsDQo+IC0JCQlNQVhf TlVNTk9ERVMgKiBzaXplb2YodW5zaWduZWQgaW50KSk7DQo+IC0JfSBlbHNlIHsNCj4gLQkJcGFy c2VkX2hzdGF0ZS0+bWF4X2h1Z2VfcGFnZXMgPSAwOw0KPiAtCQltZW1zZXQocGFyc2VkX2hzdGF0 ZS0+bWF4X2h1Z2VfcGFnZXNfbm9kZSwgMCwNCj4gLQkJCU1BWF9OVU1OT0RFUyAqIHNpemVvZih1 bnNpZ25lZCBpbnQpKTsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLS8qDQo+IC0gKiBodWdlcGFnZXMg Y29tbWFuZCBsaW5lIHByb2Nlc3NpbmcNCj4gLSAqIGh1Z2VwYWdlcyBub3JtYWxseSBmb2xsb3dz IGEgdmFsaWQgaHVnZXBhZ3N6IG9yIGRlZmF1bHRfaHVnZXBhZ3N6DQo+IC0gKiBzcGVjaWZpY2F0 aW9uLiAgSWYgbm90LCBpZ25vcmUgdGhlIGh1Z2VwYWdlcyB2YWx1ZS4gIGh1Z2VwYWdlcyBjYW4g YWxzbw0KPiAtICogYmUgdGhlIGZpcnN0IGh1Z2UgcGFnZSBjb21tYW5kIGxpbmUgIG9wdGlvbiBp biB3aGljaCBjYXNlIGl0IGltcGxpY2l0bHkNCj4gLSAqIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9m IGh1Z2UgcGFnZXMgZm9yIHRoZSBkZWZhdWx0IHNpemUuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQg X19pbml0IGh1Z2VwYWdlc19zZXR1cChjaGFyICpzKQ0KPiAtew0KPiAtCXVuc2lnbmVkIGxvbmcg Km1ocDsNCj4gLQlzdGF0aWMgdW5zaWduZWQgbG9uZyAqbGFzdF9taHA7DQo+IC0JaW50IG5vZGUg PSBOVU1BX05PX05PREU7DQo+IC0JaW50IGNvdW50Ow0KPiAtCXVuc2lnbmVkIGxvbmcgdG1wOw0K PiAtCWNoYXIgKnAgPSBzOw0KPiAtDQo+IC0JaWYgKCFwYXJzZWRfdmFsaWRfaHVnZXBhZ2Vzeikg ew0KPiAtCQlwcl93YXJuKCJIdWdlVExCOiBodWdlcGFnZXM9JXMgZG9lcyBub3QgZm9sbG93IGEg dmFsaWQgaHVnZXBhZ2VzeiwgaWdub3JpbmdcbiIsIHMpOw0KPiAtCQlwYXJzZWRfdmFsaWRfaHVn ZXBhZ2VzeiA9IHRydWU7DQo+IC0JCXJldHVybiAxOw0KPiAtCX0NCj4gLQ0KPiAtCS8qDQo+IC0J ICogIWh1Z2V0bGJfbWF4X2hzdGF0ZSBtZWFucyB3ZSBoYXZlbid0IHBhcnNlZCBhIGh1Z2VwYWdl c3o9IHBhcmFtZXRlcg0KPiAtCSAqIHlldCwgc28gdGhpcyBodWdlcGFnZXM9IHBhcmFtZXRlciBn b2VzIHRvIHRoZSAiZGVmYXVsdCBoc3RhdGUiLg0KPiAtCSAqIE90aGVyd2lzZSwgaXQgZ29lcyB3 aXRoIHRoZSBwcmV2aW91c2x5IHBhcnNlZCBodWdlcGFnZXN6IG9yDQo+IC0JICogZGVmYXVsdF9o dWdlcGFnZXN6Lg0KPiAtCSAqLw0KPiAtCWVsc2UgaWYgKCFodWdldGxiX21heF9oc3RhdGUpDQo+ IC0JCW1ocCA9ICZkZWZhdWx0X2hzdGF0ZV9tYXhfaHVnZV9wYWdlczsNCj4gLQllbHNlDQo+IC0J CW1ocCA9ICZwYXJzZWRfaHN0YXRlLT5tYXhfaHVnZV9wYWdlczsNCj4gLQ0KPiAtCWlmIChtaHAg PT0gbGFzdF9taHApIHsNCj4gLQkJcHJfd2FybigiSHVnZVRMQjogaHVnZXBhZ2VzPSBzcGVjaWZp ZWQgdHdpY2Ugd2l0aG91dCBpbnRlcmxlYXZpbmcgaHVnZXBhZ2Vzej0sIGlnbm9yaW5nIGh1Z2Vw YWdlcz0lc1xuIiwgcyk7DQo+IC0JCXJldHVybiAxOw0KPiAtCX0NCj4gLQ0KPiAtCXdoaWxlICgq cCkgew0KPiAtCQljb3VudCA9IDA7DQo+IC0JCWlmIChzc2NhbmYocCwgIiVsdSVuIiwgJnRtcCwg JmNvdW50KSAhPSAxKQ0KPiAtCQkJZ290byBpbnZhbGlkOw0KPiAtCQkvKiBQYXJhbWV0ZXIgaXMg bm9kZSBmb3JtYXQgKi8NCj4gLQkJaWYgKHBbY291bnRdID09ICc6Jykgew0KPiAtCQkJaWYgKCFo dWdldGxiX25vZGVfYWxsb2Nfc3VwcG9ydGVkKCkpIHsNCj4gLQkJCQlwcl93YXJuKCJIdWdlVExC OiBhcmNoaXRlY3R1cmUgY2FuJ3Qgc3VwcG9ydCBub2RlIHNwZWNpZmljIGFsbG9jLCBpZ25vcmlu ZyFcbiIpOw0KPiAtCQkJCXJldHVybiAxOw0KPiAtCQkJfQ0KPiAtCQkJaWYgKHRtcCA+PSBNQVhf TlVNTk9ERVMgfHwgIW5vZGVfb25saW5lKHRtcCkpDQo+IC0JCQkJZ290byBpbnZhbGlkOw0KPiAt CQkJbm9kZSA9IGFycmF5X2luZGV4X25vc3BlYyh0bXAsIE1BWF9OVU1OT0RFUyk7DQo+IC0JCQlw ICs9IGNvdW50ICsgMTsNCj4gLQkJCS8qIFBhcnNlIGh1Z2VwYWdlcyAqLw0KPiAtCQkJaWYgKHNz Y2FuZihwLCAiJWx1JW4iLCAmdG1wLCAmY291bnQpICE9IDEpDQo+IC0JCQkJZ290byBpbnZhbGlk Ow0KPiAtCQkJaWYgKCFodWdldGxiX21heF9oc3RhdGUpDQo+IC0JCQkJZGVmYXVsdF9odWdlcGFn ZXNfaW5fbm9kZVtub2RlXSA9IHRtcDsNCj4gLQkJCWVsc2UNCj4gLQkJCQlwYXJzZWRfaHN0YXRl LT5tYXhfaHVnZV9wYWdlc19ub2RlW25vZGVdID0gdG1wOw0KPiAtCQkJKm1ocCArPSB0bXA7DQo+ IC0JCQkvKiBHbyB0byBwYXJzZSBuZXh0IG5vZGUqLw0KPiAtCQkJaWYgKHBbY291bnRdID09ICcs JykNCj4gLQkJCQlwICs9IGNvdW50ICsgMTsNCj4gLQkJCWVsc2UNCj4gLQkJCQlicmVhazsNCj4g LQkJfSBlbHNlIHsNCj4gLQkJCWlmIChwICE9IHMpDQo+IC0JCQkJZ290byBpbnZhbGlkOw0KPiAt CQkJKm1ocCA9IHRtcDsNCj4gLQkJCWJyZWFrOw0KPiAtCQl9DQo+IC0JfQ0KPiAtDQo+IC0JLyoN Cj4gLQkgKiBHbG9iYWwgc3RhdGUgaXMgYWx3YXlzIGluaXRpYWxpemVkIGxhdGVyIGluIGh1Z2V0 bGJfaW5pdC4NCj4gLQkgKiBCdXQgd2UgbmVlZCB0byBhbGxvY2F0ZSBnaWdhbnRpYyBoc3RhdGVz IGhlcmUgZWFybHkgdG8gc3RpbGwNCj4gLQkgKiB1c2UgdGhlIGJvb3RtZW0gYWxsb2NhdG9yLg0K PiAtCSAqLw0KPiAtCWlmIChodWdldGxiX21heF9oc3RhdGUgJiYgaHN0YXRlX2lzX2dpZ2FudGlj KHBhcnNlZF9oc3RhdGUpKQ0KPiAtCQlodWdldGxiX2hzdGF0ZV9hbGxvY19wYWdlcyhwYXJzZWRf aHN0YXRlKTsNCj4gLQ0KPiAtCWxhc3RfbWhwID0gbWhwOw0KPiAtDQo+IC0JcmV0dXJuIDE7DQo+ IC0NCj4gLWludmFsaWQ6DQo+IC0JcHJfd2FybigiSHVnZVRMQjogSW52YWxpZCBodWdlcGFnZXMg cGFyYW1ldGVyICVzXG4iLCBwKTsNCj4gLQlodWdlcGFnZXNfY2xlYXJfcGFnZXNfaW5fbm9kZSgp Ow0KPiAtCXJldHVybiAxOw0KPiAtfQ0KPiAtX19zZXR1cCgiaHVnZXBhZ2VzPSIsIGh1Z2VwYWdl c19zZXR1cCk7DQo+IC0NCj4gLS8qDQo+IC0gKiBodWdlcGFnZXN6IGNvbW1hbmQgbGluZSBwcm9j ZXNzaW5nDQo+IC0gKiBBIHNwZWNpZmljIGh1Z2UgcGFnZSBzaXplIGNhbiBvbmx5IGJlIHNwZWNp ZmllZCBvbmNlIHdpdGggaHVnZXBhZ2Vzei4NCj4gLSAqIGh1Z2VwYWdlc3ogaXMgZm9sbG93ZWQg YnkgaHVnZXBhZ2VzIG9uIHRoZSBjb21tYW5kIGxpbmUuICBUaGUgZ2xvYmFsDQo+IC0gKiB2YXJp YWJsZSAncGFyc2VkX3ZhbGlkX2h1Z2VwYWdlc3onIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIGlmIHBy aW9yDQo+IC0gKiBodWdlcGFnZXN6IGFyZ3VtZW50IHdhcyB2YWxpZC4NCj4gLSAqLw0KPiAtc3Rh dGljIGludCBfX2luaXQgaHVnZXBhZ2Vzel9zZXR1cChjaGFyICpzKQ0KPiAtew0KPiAtCXVuc2ln bmVkIGxvbmcgc2l6ZTsNCj4gLQlzdHJ1Y3QgaHN0YXRlICpoOw0KPiAtDQo+IC0JcGFyc2VkX3Zh bGlkX2h1Z2VwYWdlc3ogPSBmYWxzZTsNCj4gLQlzaXplID0gKHVuc2lnbmVkIGxvbmcpbWVtcGFy c2UocywgTlVMTCk7DQo+IC0NCj4gLQlpZiAoIWFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHNpemUp KSB7DQo+IC0JCXByX2VycigiSHVnZVRMQjogdW5zdXBwb3J0ZWQgaHVnZXBhZ2Vzej0lc1xuIiwg cyk7DQo+IC0JCXJldHVybiAxOw0KPiAtCX0NCj4gLQ0KPiAtCWggPSBzaXplX3RvX2hzdGF0ZShz aXplKTsNCj4gLQlpZiAoaCkgew0KPiAtCQkvKg0KPiAtCQkgKiBoc3RhdGUgZm9yIHRoaXMgc2l6 ZSBhbHJlYWR5IGV4aXN0cy4gIFRoaXMgaXMgbm9ybWFsbHkNCj4gLQkJICogYW4gZXJyb3IsIGJ1 dCBpcyBhbGxvd2VkIGlmIHRoZSBleGlzdGluZyBoc3RhdGUgaXMgdGhlDQo+IC0JCSAqIGRlZmF1 bHQgaHN0YXRlLiAgTW9yZSBzcGVjaWZpY2FsbHksIGl0IGlzIG9ubHkgYWxsb3dlZCBpZg0KPiAt CQkgKiB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgZm9yIHRoZSBkZWZhdWx0IGhzdGF0ZSB3YXMg bm90DQo+IC0JCSAqIHByZXZpb3VzbHkgc3BlY2lmaWVkLg0KPiAtCQkgKi8NCj4gLQkJaWYgKCFw YXJzZWRfZGVmYXVsdF9odWdlcGFnZXN6IHx8ICBoICE9ICZkZWZhdWx0X2hzdGF0ZSB8fA0KPiAt CQkgICAgZGVmYXVsdF9oc3RhdGUubWF4X2h1Z2VfcGFnZXMpIHsNCj4gLQkJCXByX3dhcm4oIkh1 Z2VUTEI6IGh1Z2VwYWdlc3o9JXMgc3BlY2lmaWVkIHR3aWNlLCBpZ25vcmluZ1xuIiwgcyk7DQo+ IC0JCQlyZXR1cm4gMTsNCj4gLQkJfQ0KPiAtDQo+IC0JCS8qDQo+IC0JCSAqIE5vIG5lZWQgdG8g Y2FsbCBodWdldGxiX2FkZF9oc3RhdGUoKSBhcyBoc3RhdGUgYWxyZWFkeQ0KPiAtCQkgKiBleGlz dHMuICBCdXQsIGRvIHNldCBwYXJzZWRfaHN0YXRlIHNvIHRoYXQgYSBmb2xsb3dpbmcNCj4gLQkJ ICogaHVnZXBhZ2VzPSBwYXJhbWV0ZXIgd2lsbCBiZSBhcHBsaWVkIHRvIHRoaXMgaHN0YXRlLg0K PiAtCQkgKi8NCj4gLQkJcGFyc2VkX2hzdGF0ZSA9IGg7DQo+IC0JCXBhcnNlZF92YWxpZF9odWdl cGFnZXN6ID0gdHJ1ZTsNCj4gLQkJcmV0dXJuIDE7DQo+IC0JfQ0KPiAtDQo+IC0JaHVnZXRsYl9h ZGRfaHN0YXRlKGlsb2cyKHNpemUpIC0gUEFHRV9TSElGVCk7DQo+IC0JcGFyc2VkX3ZhbGlkX2h1 Z2VwYWdlc3ogPSB0cnVlOw0KPiAtCXJldHVybiAxOw0KPiAtfQ0KPiAtX19zZXR1cCgiaHVnZXBh Z2Vzej0iLCBodWdlcGFnZXN6X3NldHVwKTsNCj4gLQ0KPiAtLyoNCj4gLSAqIGRlZmF1bHRfaHVn ZXBhZ2VzeiBjb21tYW5kIGxpbmUgaW5wdXQNCj4gLSAqIE9ubHkgb25lIGluc3RhbmNlIG9mIGRl ZmF1bHRfaHVnZXBhZ2VzeiBhbGxvd2VkIG9uIGNvbW1hbmQgbGluZS4NCj4gLSAqLw0KPiAtc3Rh dGljIGludCBfX2luaXQgZGVmYXVsdF9odWdlcGFnZXN6X3NldHVwKGNoYXIgKnMpDQo+IC17DQo+ IC0JdW5zaWduZWQgbG9uZyBzaXplOw0KPiAtCWludCBpOw0KPiAtDQo+IC0JcGFyc2VkX3ZhbGlk X2h1Z2VwYWdlc3ogPSBmYWxzZTsNCj4gLQlpZiAocGFyc2VkX2RlZmF1bHRfaHVnZXBhZ2Vzeikg ew0KPiAtCQlwcl9lcnIoIkh1Z2VUTEI6IGRlZmF1bHRfaHVnZXBhZ2VzeiBwcmV2aW91c2x5IHNw ZWNpZmllZCwgaWdub3JpbmcgJXNcbiIsIHMpOw0KPiAtCQlyZXR1cm4gMTsNCj4gLQl9DQo+IC0N Cj4gLQlzaXplID0gKHVuc2lnbmVkIGxvbmcpbWVtcGFyc2UocywgTlVMTCk7DQo+IC0NCj4gLQlp ZiAoIWFyY2hfaHVnZXRsYl92YWxpZF9zaXplKHNpemUpKSB7DQo+IC0JCXByX2VycigiSHVnZVRM QjogdW5zdXBwb3J0ZWQgZGVmYXVsdF9odWdlcGFnZXN6PSVzXG4iLCBzKTsNCj4gLQkJcmV0dXJu IDE7DQo+IC0JfQ0KPiAtDQo+IC0JaHVnZXRsYl9hZGRfaHN0YXRlKGlsb2cyKHNpemUpIC0gUEFH RV9TSElGVCk7DQo+IC0JcGFyc2VkX3ZhbGlkX2h1Z2VwYWdlc3ogPSB0cnVlOw0KPiAtCXBhcnNl ZF9kZWZhdWx0X2h1Z2VwYWdlc3ogPSB0cnVlOw0KPiAtCWRlZmF1bHRfaHN0YXRlX2lkeCA9IGhz dGF0ZV9pbmRleChzaXplX3RvX2hzdGF0ZShzaXplKSk7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIFRo ZSBudW1iZXIgb2YgZGVmYXVsdCBodWdlIHBhZ2VzIChmb3IgdGhpcyBzaXplKSBjb3VsZCBoYXZl IGJlZW4NCj4gLQkgKiBzcGVjaWZpZWQgYXMgdGhlIGZpcnN0IGh1Z2V0bGIgcGFyYW1ldGVyOiBo dWdlcGFnZXM9WC4gIElmIHNvLA0KPiAtCSAqIHRoZW4gZGVmYXVsdF9oc3RhdGVfbWF4X2h1Z2Vf cGFnZXMgaXMgc2V0LiAgSWYgdGhlIGRlZmF1bHQgaHVnZQ0KPiAtCSAqIHBhZ2Ugc2l6ZSBpcyBn aWdhbnRpYyAoPj0gTUFYX09SREVSKSwgdGhlbiB0aGUgcGFnZXMgbXVzdCBiZQ0KPiAtCSAqIGFs bG9jYXRlZCBoZXJlIGZyb20gYm9vdG1lbSBhbGxvY2F0b3IuDQo+IC0JICovDQo+IC0JaWYgKGRl ZmF1bHRfaHN0YXRlX21heF9odWdlX3BhZ2VzKSB7DQo+IC0JCWRlZmF1bHRfaHN0YXRlLm1heF9o dWdlX3BhZ2VzID0gZGVmYXVsdF9oc3RhdGVfbWF4X2h1Z2VfcGFnZXM7DQo+IC0JCWZvcl9lYWNo X29ubGluZV9ub2RlKGkpDQo+IC0JCQlkZWZhdWx0X2hzdGF0ZS5tYXhfaHVnZV9wYWdlc19ub2Rl W2ldID0NCj4gLQkJCQlkZWZhdWx0X2h1Z2VwYWdlc19pbl9ub2RlW2ldOw0KPiAtCQlpZiAoaHN0 YXRlX2lzX2dpZ2FudGljKCZkZWZhdWx0X2hzdGF0ZSkpDQo+IC0JCQlodWdldGxiX2hzdGF0ZV9h bGxvY19wYWdlcygmZGVmYXVsdF9oc3RhdGUpOw0KPiAtCQlkZWZhdWx0X2hzdGF0ZV9tYXhfaHVn ZV9wYWdlcyA9IDA7DQo+IC0JfQ0KPiAtDQo+IC0JcmV0dXJuIDE7DQo+IC19DQo+IC1fX3NldHVw KCJkZWZhdWx0X2h1Z2VwYWdlc3o9IiwgZGVmYXVsdF9odWdlcGFnZXN6X3NldHVwKTsNCj4gLQ0K PiAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgYWxsb3dlZF9tZW1zX25yKHN0cnVjdCBoc3RhdGUgKmgp DQo+ICAgew0KPiAgIAlpbnQgbm9kZTs=