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]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 674D3CCF9F8 for ; Thu, 30 Oct 2025 18:48:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 947A48E01D8; Thu, 30 Oct 2025 14:48:12 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 8F7738E0153; Thu, 30 Oct 2025 14:48:12 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 6D4EA8E01D8; Thu, 30 Oct 2025 14:48:12 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id 43B5C8E0153 for ; Thu, 30 Oct 2025 14:48:12 -0400 (EDT) Received: from smtpin21.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id EB61FB70A4 for ; Thu, 30 Oct 2025 18:48:11 +0000 (UTC) X-FDA: 84055665582.21.B632A3F Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by imf06.hostedemail.com (Postfix) with ESMTP id ED534180007 for ; Thu, 30 Oct 2025 18:48:07 +0000 (UTC) Authentication-Results: imf06.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=p8Tv+y3V; spf=pass (imf06.hostedemail.com: domain of Slava.Dubeyko@ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=Slava.Dubeyko@ibm.com; dmarc=pass (policy=reject) header.from=ibm.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1761850088; 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=a68MmncQ+sB1jVq4khdRQ1y2PT1bnhk0YlqFzIT2jlo=; b=LY2hAkTOcdXg34ZAYE1n3TfzIEqDwiVxkFjT8HTV+n2a/QjCMfdspJFp5LQOutmuvcMCWB hjSOSjiHulDEB5A4kT8uPClGkHJXtzDkz0FH4QYQy3RjUEL+jC43J7FNf3rbtWmX6Y8O94 E9YczVLiVEUDtz1pcPJgRkuM13v3jRc= ARC-Authentication-Results: i=2; imf06.hostedemail.com; dkim=pass header.d=ibm.com header.s=pp1 header.b=p8Tv+y3V; spf=pass (imf06.hostedemail.com: domain of Slava.Dubeyko@ibm.com designates 148.163.158.5 as permitted sender) smtp.mailfrom=Slava.Dubeyko@ibm.com; dmarc=pass (policy=reject) header.from=ibm.com; arc=reject ("signature check failed: fail, {[1] = sig:microsoft.com:reject}") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1761850088; a=rsa-sha256; cv=fail; b=S7yZ2Xg7b5+qxFEH/OEmQvYnZKTwtQuLROYxYUY6dbrxWDx3d8BtypXCe1f+peatvLoACx HJO0ABnVuQBBZy/tj0+vcq9NPfeyTSJPA8Liy6sM6FrRqJXhQLh+8B4Tr5+ktmF1beRW2r LI28UeU5IY+eWxK1/1bXwxKe/7ZRq8c= Received: from pps.filterd (m0356516.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 59UCDvaN026029; Thu, 30 Oct 2025 18:47:50 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-id:content-transfer-encoding:content-type:date:from :in-reply-to:message-id:mime-version:references:subject:to; s= pp1; bh=a68MmncQ+sB1jVq4khdRQ1y2PT1bnhk0YlqFzIT2jlo=; b=p8Tv+y3V Y1tlNECl0ovqZWfpws3wfoO3YNBm1YOn921aDXDRvn6ojHlpr1ySw8ZD68RZ6RbX E55ifFsuhjl2nK22VFa4GTOMWIAEv65OqMBtyBk9ylOA454+YD7OB9iDjrOQ0K+E vEa0stvjb8thyChf2uFxc9SfkR23qiuB6KScz9bLx5v5XoCmy6u1mhN2nasNSqhM DoYuI9MylhVQXcFP/IkKO+hhB/qIq4gY/7ViBAzJG95fESh3VYeVSc1AXLi59vOX KYxj852xBNEWflmtYrm0Cqc752JOlAqfKdOR4glty2m1e1czlFB5hIo5602JBYse rFWoOS8vvK4iWg== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34aat21d-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 30 Oct 2025 18:47:49 +0000 (GMT) Received: from m0356516.ppops.net (m0356516.ppops.net [127.0.0.1]) by pps.reinject (8.18.1.12/8.18.0.8) with ESMTP id 59UIlmuF029087; Thu, 30 Oct 2025 18:47:48 GMT Received: from bn1pr04cu002.outbound.protection.outlook.com (mail-eastus2azon11010056.outbound.protection.outlook.com [52.101.56.56]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 4a34aat218-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 30 Oct 2025 18:47:48 +0000 (GMT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=iAqW8gDIxeR8ZIoPhG3GuXNT7laKZmJj6ZWNhZl4d4gZN/5vUl1Q76dvz6vAnnJHbE0XSA04fnQm5H9woImwCnPdYswipiBdKA4CJvc5xgjDF2mELxv43MRSpxdr7K8PGUw0AQZa+BS70b9M/9IfOw+qKbL7XyF5d2vIUWJH49ci21fUwIlTNhESbLY9rx+gbu9jk+CXF5JUeS6+8ox6Bo5P+Rr7ijH7lZBfEHBikJJfpnjlGXfAR3EsJ9UTMLAw2tv4F4M+sSNu/AasGuNGWyNb7yjwZ5wMiOGvqvqg5+ZvIm84PxArpV/d9sCBLO2+Eig7Eu3tFEV9l6h8qsFpKg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; 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=a68MmncQ+sB1jVq4khdRQ1y2PT1bnhk0YlqFzIT2jlo=; b=Ss+sa8p3Whpp8uty1+I1wEicqxftPy8aRVl7/FTq+gOwUaJ0xzxvLVHQQzd4NAjLJqJEtAyAtOKXVFjFu/Ofgu6PLypntZsd+ihp8ZzhUJ4/A5zq58y83jib31mCZDBLZ/WCT1CPCQsDXT2h1cwPyrYI3r6AzFVkWVrRQsXOGAkSdKkcoTMx2fFFNHlYDUa762HrRj4zVmfRmg+kYFF7VVX4bX96GWo469sT8rouJmSI6zTkDWMsCUXdf6NgZim6efQrcR5M/lYJRlY2Pq8q1kdMOrkutT2lgV9yOlWysA2K5IljHxQl2FCKsCe0TZHRu5eNbBd0EYaxC9VDT/664A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=ibm.com; dmarc=pass action=none header.from=ibm.com; dkim=pass header.d=ibm.com; arc=none Received: from SA1PR15MB5819.namprd15.prod.outlook.com (2603:10b6:806:338::8) by SN7PR15MB6086.namprd15.prod.outlook.com (2603:10b6:806:2ea::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.13; Thu, 30 Oct 2025 18:47:44 +0000 Received: from SA1PR15MB5819.namprd15.prod.outlook.com ([fe80::920c:d2ba:5432:b539]) by SA1PR15MB5819.namprd15.prod.outlook.com ([fe80::920c:d2ba:5432:b539%4]) with mapi id 15.20.9275.013; Thu, 30 Oct 2025 18:47:44 +0000 From: Viacheslav Dubeyko To: "linux-mm@kvack.org" , Alex Markuze , "ceph-devel@vger.kernel.org" , "linux-kernel@vger.kernel.org" CC: "dietmar.eggemann@arm.com" , "rppt@kernel.org" , "lorenzo.stoakes@oracle.com" , Xiubo Li , "idryomov@gmail.com" , "david@redhat.com" , "mgorman@suse.de" , "vbabka@suse.cz" , "vincent.guittot@linaro.org" , "akpm@linux-foundation.org" , "Liam.Howlett@oracle.com" , Ingo Molnar , "rostedt@goodmis.org" , "surenb@google.com" , Valentin Schneider , "kees@kernel.org" , "peterz@infradead.org" , "mhocko@suse.com" , "bsegall@google.com" , "juri.lelli@redhat.com" Thread-Topic: [EXTERNAL] [RFC PATCH 2/5] lib: Introduce BLOG (Binary LOGging) subsystem Thread-Index: AQHcRMJFhPrNI8+QMUutIOUaA/k+2LTbEdWA Date: Thu, 30 Oct 2025 18:47:44 +0000 Message-ID: <9dc0107937fe161e14b1353722060fde02637d24.camel@ibm.com> References: <20251024084259.2359693-1-amarkuze@redhat.com> <20251024084259.2359693-3-amarkuze@redhat.com> In-Reply-To: <20251024084259.2359693-3-amarkuze@redhat.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: SA1PR15MB5819:EE_|SN7PR15MB6086:EE_ x-ms-office365-filtering-correlation-id: c04bb4be-9468-4396-034e-08de17e4cfe5 x-ld-processed: fcf67057-50c9-4ad4-98f3-ffca64add9e9,ExtAddr x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|7416014|376014|366016|1800799024|10070799003|38070700021; x-microsoft-antispam-message-info: =?utf-8?B?WkhHcWtUc084a1cyOENaMVl1S1B5TVgxV1ZiNGwwdEg4dlB2Q0N1cG81RkQ3?= =?utf-8?B?UDg2ZGtZVmlYVnl5T1RhMG1wSEF2KzVYWkpVUmp0ZXYxQjFuQUdTY0NiQUt4?= =?utf-8?B?WXZnaDJMSUtjWVh1bm1EWDRUVnVpR25DM00wVEI1SlZ3UWJORFk1UE02aXhh?= =?utf-8?B?d0QxUDc1d2dhZkp2Tm8rTUdKZnppWHg5Szg4cFNoZEZmY09SRms5MFM1QTNs?= =?utf-8?B?WUJodEd0dlJTRk5TYkZaQUo2WktNZ0tpUWx3MnhwMHhCMG5WajBZMmlFYlpL?= =?utf-8?B?TTZ6dVFQNEh0TGsvdHlCS3cweTgzNUNwQjVxSmd0QjE1RlQrZE5xRFFjZ3BE?= =?utf-8?B?Z2dMK1cvVWNrOVVxMlV6VUV6ZDdMa01qZ21PSVI0MHJpMUN3eVlOZjZTM3Nr?= =?utf-8?B?aFRlb0prMlk1bHBXeWN0MHFUcWU5S3NpQ2UzTEhxaWFITjFRdDNacWVqU0xp?= =?utf-8?B?QStENU80b01HdFB3R01zT1h5cjlKb2cwbmY3UlFFdFk5eXBpVzNLdmYzVS9R?= =?utf-8?B?a3ZHNHM0Wjdzcm9CenkyMFFkcWRTeXR5MXlESkw2b3ZHeCtOQXBFWFVhUFZN?= =?utf-8?B?L0NNWjgyMkd2SGhGU2t6WWZtQU9ScEpxc0tPRDFqSUpZVHpHOVdDWTZiSE9W?= =?utf-8?B?Z0hvai9YeDF3aDBJQnpOVWkwWUIwamI3WXd6SnFMbi96cW1IRTVWY1IrdkpX?= =?utf-8?B?ZXEwazR5TWFRNTRUQVdQaXhNb1VYblZ0aExnYTA4amJXVFRRVG00bExZWGRz?= =?utf-8?B?cHMyWnZ0ckFoWWNjTHZNR2xzamFVR0YvWDBMQkU1dVk0T3BzZzQwUFpiNVA3?= =?utf-8?B?VTFDZXBreE1pcTNPbWNnL2NKbjNzRUZpYk15ZGUwK2FtclgrN0RUbCt1akRZ?= =?utf-8?B?Q2pHaFBDcWtGWnFPaEpqNHU0WkNpUThqeUNpVkR3b3o3TVR1dk8rZC9XMEJS?= =?utf-8?B?dnRtSmhmVHIyTFJXVy9welZpbXNqckVXdUNuVU4vRzdHalphWTZ0TzNhWmE3?= =?utf-8?B?clB4eXlKN3d6QjhtK1BUem96ZnY2eU9OTkFZV1FkcHhnNWJRNHdKc0xOSVN5?= =?utf-8?B?Si83NkhOd1RDVGVOclNVazFtMGU5aVE2dVlwMU9tSGhxMTlFc0FnUTFpMGtH?= =?utf-8?B?aTA1Z01UNm83VW9QY3FkQ1ZXZXFPb052b0hMd1JrRXJvZkNJdEl6R1FtTDVQ?= =?utf-8?B?eEc1TUZGZmZwdE5YN1NjcEhXWWQzbzVlOFk3cGxwUWpPVUFacTdWV2xlZkVl?= =?utf-8?B?Y0p1NVNkMDdTR1g1OUZsKzJCeTl1eFFXMDNhUVJpelM4bjZLSTlaOXFRMkZI?= =?utf-8?B?L2V3TDRncW02YlJScld1UHEzb1FIVzU2eExSVzlyMWs1UmVqOFFjbFRpN2xk?= =?utf-8?B?MUsxTWVCci9tWllDNGozWXdnL0RIN3lpMVEyYnhLSmREMUhaUkMydzV0SU5n?= =?utf-8?B?SkV0QjJnRjZzeUVlVzdyMEI1VmZrTjVReUFsTHhnZ0pJUTZWdUhQVTViZmY0?= =?utf-8?B?Z1YrbDZIcHFNcCsxTFVMdVRROWwwZWlCd2loOEN6TjdmZnh4aGozbG9YYWFI?= =?utf-8?B?cG9taWNQa2grem5CRFc0SU1Qem40RTRUbFBiVlB0RnRvVHp1K3dzeUVUM01m?= =?utf-8?B?SGpLK3AxdkJqaUNybkFhb244RHdDVXNJQlVzMUdPVmlWdDFPcXByTGh3d2tw?= =?utf-8?B?c3FsYWZLc2IvZDJZRmJBNHN4VW1SNjIrY0xpQldKSFd2dkk4WFdXaE1kVHJ5?= =?utf-8?B?ZUdoUUpIUFB5a3NBSDFwdWJUdDNHUFJ1NEpGUmV4U1ZJZVJlaGx0U2FXMGxC?= =?utf-8?B?b1JJaXJMTzV5bHBOakhORUlua05WRkFiR1cyR0NYcCtydXpZOU5tR0wxZHhK?= =?utf-8?B?ckwreThleDJKb25mMVRnMDR2Q1RySFZERTk3WXN1SUl6NUtQaHVtN1NQSUU5?= =?utf-8?B?VUV5MCtTdlYzSjN4am9NZ2pKVXVvNWNrWFNzUmN4TWF3b2N5eit6ZnlzdmNx?= =?utf-8?B?cWtjQ2hzQjI0MXMrV2NTTHVMUXRvWHpucVZ2cXFCeXA3SjdiQ1lYL1MxRWdj?= =?utf-8?Q?7E+VNR?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:SA1PR15MB5819.namprd15.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(7416014)(376014)(366016)(1800799024)(10070799003)(38070700021);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?LzlJa2R6NlNzV3VjaWl4bjN0M21MK0xobDVmQmtGSk1nSlVZQ2s4Znp6MVhW?= =?utf-8?B?WFQwLzM3dDZGR3grZ0V2Q1d1UjFjRGpzUEtYdXNMT1RWTUpVejg0NzVDTUhr?= =?utf-8?B?S3l3SUpyOFZWVVZQZmJxOVArWkFiN1pyMVY1U080K0ora3Y2cGd0Mll2UE5K?= =?utf-8?B?TnorQ2NXQm5VT1U3bHIzQnN6STBScm5JT2dpVkptdTlTZmFYVHFId2M0ditS?= =?utf-8?B?WnJMNDI3UHdCZHorampGZzFtUlJwdy9TRlVQYnlXVGZWOFhVb0hnQ1Q2TWFx?= =?utf-8?B?UXpXdWRyZHMraDd0WHNFbVB0ZUZkZTlZODY0eGpwb213b3JCMzkwUjYzVyt4?= =?utf-8?B?NUJRMWpLOVQwRlVpODdpVkk2cldoTU83MHRjQWY0MmMrV3dBYVJPYk1JTk8r?= =?utf-8?B?Q0Y0RWhscnpDbHJYNmZpWXdCU29RVXBNMTYwQkZHK3NjM1N3VndJaEZxUjdr?= =?utf-8?B?QktNZjBBMS9JT2hCVVk2MVNhUUwvdlpLYTloZ05ydWFLQkRiUks2Z2cyMFgw?= =?utf-8?B?Q3VQMXY1blNmKzRZTWVwbCttREVjbS9aMmdNWCtFQUlxVHRiemRlTW1YcUtF?= =?utf-8?B?OWVwRzNvVVByZmplOUNlUHBEbklJN3JabFJIRVRTRkc2VXJqNGUzOXRZN0pt?= =?utf-8?B?R29iRU8zb25qMXQvMnltbFllNHA3dVlWZnFLb0NCNE5NYnFzSXhRQUd1Ynho?= =?utf-8?B?M0FZNEZlOU90Vlo4emRaVG41cjgxU1VXdDVDakxTMFk4dnZRemhRejlJRW50?= =?utf-8?B?cHR1WXAyMFc2VlJXNmJ6K3RXREpRTmcxK21XbEk3L0lWdGs1aDg0Tm9OUVZa?= =?utf-8?B?NWxlSkxLNlVlNzFyRkU0TVZEYTgvTk4xbkdlaFE2S2owd0N3dzZneFBPNXdw?= =?utf-8?B?T2o3OTVuL0dMTWJqWTlJN3B2alFwanhZMEFDQUZRVFBEOURid0twU3lMUTdZ?= =?utf-8?B?UE1hanprN3o4UTFadkQ1c3dYaHQ2VzJ6YjhyOWlvdzh1U3JxdWlQNlI3TmJr?= =?utf-8?B?K2dOZndIeGI1ZlM5bHZUQVIyTGxNdHNsZ245NXl5MFVYT1VqSlFWTE5odllP?= =?utf-8?B?Y1hQdk42ZkpiNldqWEVkRHFCYkRVVytTZXY3QTNWVmEwRm9STkRZRkpQOCt2?= =?utf-8?B?dUNoUjBVM3dRSFlvaDRHbHJkOEJxc0xjZXNUVEEvSnZxSWpvMVZ0S3Foczd6?= =?utf-8?B?dHRtM2xiVzVQUlhPN3FiMDlZYm9JR09may9hblRBTG53MUpYK2VDa0RKRkdt?= =?utf-8?B?bUNQMHRpVVFsZWNDMEt1MW5DZzJ5SUMxTnZzdEhjckZBZkdSSktGNnhJV0No?= =?utf-8?B?MHp2YmhYdUhralB6YkhxcUxKUWZYZUZQV01PMGxYOWxVUFJRSjlVYmVVR3ky?= =?utf-8?B?NCtwR21LL0RQNWpua1A1WHdFTDMvSTdvK3lMRmpmSmZ0NXA1Rm9VcDdEelor?= =?utf-8?B?SHgwWjFDV0RRMlZXVUhiZk53MEl6UUg4QUZEV1lJamt2MTlJeC9XY1k2Y0ds?= =?utf-8?B?RWcwaTlrajBvckRFbnVPVC9Pd3ZMa1hFemdFT0QzR0NRYUlheURXWlEwd0hS?= =?utf-8?B?MzRpVmdtdWE1dTMzQS95SXpNalZHZlJ5Z0x3L2VyUGhOcmZESzJkTndBbnRK?= =?utf-8?B?UVdFaTdzUzQ1cFp0QjQ0YVNYNm0vWW1aZm43cEQwV3ZrbGtsdWxqb0xkUU1j?= =?utf-8?B?K0tGR0VqYmozb0d4ci9ROXhXcW04aTk5K05ZOWdCaEVkVlRaOVZEaUwzR2RS?= =?utf-8?B?WjdPT0dWTnhpUnNQK1h2YXpEbjJXL0Q5M0swVHFGMkhLS0FqamRrN0gxUDFY?= =?utf-8?B?TGVtT0hNbEVZbTV4NUUrZkkxc1BwV05Uc2RnKy9SMGpaV0Q4ZTREcXZlUDY1?= =?utf-8?B?VHIzYlA4UDFXem5DTWVreHN2WW15R2N5RWJpa08rOVBZbXNuRy83NWNMQ0Jn?= =?utf-8?B?QlloN05EQkdKNFVRRGEveWhmbVkzSWdNMDF1TTRwRFpjU0pzV0l6RXJLKzMv?= =?utf-8?B?ZkpNMC9TcGNZVFd3WG9NNThvWWMvYjhTMmt0THJBRTR2ajRZbnRlS1FRMnlw?= =?utf-8?B?V3JaeFZ2bFVOUk9UVlBoYWFYT0RhRHNWMWl0aldvV3EyR2NSRUJQaU5wbkwx?= =?utf-8?B?WGwwZFFYQkFqWEdyNzVYL2QxRjVYd2twSnNHb0xibFAwc3RlNFZPYlFMTGNF?= =?utf-8?Q?hGJFjd0pQS8JEcVria6zSC8=3D?= Content-Type: text/plain; charset="utf-8" Content-ID: <52D9E1D1D2B6E44FA92A4882EC459B09@namprd15.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: ibm.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SA1PR15MB5819.namprd15.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: c04bb4be-9468-4396-034e-08de17e4cfe5 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Oct 2025 18:47:44.0975 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: fcf67057-50c9-4ad4-98f3-ffca64add9e9 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: kjmKcbJ6VVsx4htiZl2AOWcQMYXQIvlLg9Xjbk1prl7lM4YXd5pD33NYTFFPxRKc44Z2mxddcuOWUXhRg2F/+g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN7PR15MB6086 X-Authority-Analysis: v=2.4 cv=ALkgKXG8 c=1 sm=1 tr=0 ts=6903b2d5 cx=c_pps a=T1Jff0mhgTaaoho+8HaPfw==:117 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=x6icFKpwvdMA:10 a=VkNPw1HP01LnGYTKEx00:22 a=20KFwNOVAAAA:8 a=YpRYlj3MQucwXn4L8ygA:9 a=VhLqCGwW9qjcqv2u:21 a=QEXdDO2ut3YA:10 a=nl4s5V0KI7Kw-pW0DWrs:22 a=pHzHmUro8NiASowvMSCR:22 a=xoEH_sTeL_Rfw54TyV31:22 X-Proofpoint-ORIG-GUID: rlkK4tuKHIVcFOc3XKbZe1K7gPU-9gPD X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMDI4MDE2NiBTYWx0ZWRfX1D1LPiVJyTGY MttXKMLjepbmOQTy8QHaJaezky4CRQpOn/jouz109k7xmRI3Uuzh7TIlDHV/cvvQn2pkYwSlx9z mso3oxtmxwmbavIU1W4U6XTVQXcGytl0rpcOfqMl/95ETosu9TT3A4ZRazu94W4nSMDWe1YPv0X 6xwyPS6A6NTSMetJZMCqjSRKouZ+Y1zKYzhcBkzus52c/7J6JlpycJtcJko8oiMpeP2m9FsrD/s VeOdIhx0jgppYurDoyEckgqtgFKE9ziflGbIK3okCI4r7rnsIx/BC4m9gIC/O66ZL9hZsov3yxu 1r1dYMRwQx8s2Ui4EWyyhew+oM6NPJ8w0ojifaxW9jpNU1ypQZAXNI0Ln6pi0cPI1YkW72lfZ+M xCIWTOLFXBrrnGO3E4XWBeYfN8Puyg== X-Proofpoint-GUID: 8DUEatOqI0CdkMgE2WMotJPR82wXMuuq Subject: Re: [RFC PATCH 2/5] lib: Introduce BLOG (Binary LOGging) subsystem X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-10-30_06,2025-10-29_03,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 suspectscore=0 impostorscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 malwarescore=0 phishscore=0 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2510240000 definitions=main-2510280166 X-Stat-Signature: xrjg3epx5jb7ugzjcmmt73xtc1p7kam6 X-Rspamd-Queue-Id: ED534180007 X-Rspam-User: X-Rspamd-Server: rspam08 X-HE-Tag: 1761850087-610653 X-HE-Meta: U2FsdGVkX19f2dCMDc/TArAO27IbqdYR42X/mMD/bAJU1KLp6eiXbmvqYwTkuiSWTvy6uLf7ts8jw3yL+kBxpcULZpodgfDsQ4d+jGD74I/5qTMwLbw9rGRT9myR5RGW37isKngUCDWLjy4wQrVoHkZRBr2V+IVAteUf0bsFWUKa3FuWkASkpUPUcwFxVkBPOOP18T/LvjvEj9NTaF6aufi6yRyndbKD+OkHqFpnZ1/UV79p46RoaVXqVuXE5OR4BgF5xx56MqFSAjngv+WHpduPgNldXP2q4dW5yRZ6jvds/+N7Rwrlz7gz2J1mKj3H/RtDku1V+X7RatKE40xrpmnEhzBllp/djBteK5YxSr2k6R+uk+19nQzDiGZyxNcDXt/j4y9kUxHBgdQvA4a97O2fJENx0b19YYKGU+lFeLf2TLCaeQ4UzVBD9cKeMyXQQ6Apc8k0GKIJuHJcs5k8X6qyBW2zgBG6MeDjb8gHNsaAwZcGB3f0SWYOcL8leE0pcFaTGfGBT1HaFLqPlRDyC7Ubg+mInoMdik2GumLaYC0dNOmb/qM2IwGnGZ4VEFvwTTTB4yYgrcAeqqy03JKrkMUJ11XMyyrmbp3ohRgCZcQ16+jzPDUpwMi0rydZpEBiKOlx7a4Y0TSpHr+vCg2kGzFguv86d0Q0W71kuDDndSuHLjhtox3+EANxdQDB/POd45aDfaqqVuMOZ5+6YnL51GSX4LWCFlcX1dPmcZB9A8nnCsPLghLoWhpTeYdVAHT3tydPfuszsRInKeP1fhCLwskvrPJ5XHKHyNoTqIOhpFaGRQc4AndBJJitAij0Y2HrHE5gch2hBDwKkrKOTV1BBOQ7x1RQD1lzRR2JIdhHTm7LUNk5qXCoKOT67YC0XYZf3s75vvdfaTRDvcIjhu+BxdYW8sxPZ4/ignh4Bth9KxF6di8zVP6ezaZ2ysTXaf1Kz5o8FMNNKkau3YhoctY sdE7d/iZ CUkEuPyQmVzaiRkvl/upzxCSMafzPrpi+oQ5PYKx6dyYxFysS2/fIjE9+hcpkhf1fhhNt+VQi5JHbPKX0hKws1NyPWcipEzIXGriLHq3Mt2Ewmu+42sc5csAL/GUO9RWD1GAGNvS8yNJg8DoRki56TDs8GXB9rR6lqapWAAqB+IPEuL7WwEm9SHiM8Vxlupl6UkryIX0UOW+sOP1hHqFp3TPfncUH/HHn5ln1u0TxyRAoULrNcD7u4d6JIviNfdzPgkPYtlV7eqCGXMNI8H3AjWQJIIiIJN84pc0pkn2QJakUemY/iBzQqZVUL0sfBqLaJ+VSInOBU0SZbDpYJ31GisEPRxUlTJjp5mqXaD1ukC3L8Oc+1vKxDcn8XxgnYzn9kDWU9XKgadR/wtMj7bKg/qZ2GqWtu/vfp+dcMYh5AYtIbIdVEBDKJwkgiNlBhDRG2dZn1gHjtf11Jg6KTg/YkfqiC02vCYLz1h7G4/EBbuR3OykA5JIlNkXV0/xfp6qv9gGQ9j4kGKP2fky4J0qKQEyJavk5is2eIrS0ywAG801tydCBNzEUGKwTYUgA7ogNtROp9ang5uIKq48= 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: List-Subscribe: List-Unsubscribe: T24gRnJpLCAyMDI1LTEwLTI0IGF0IDA4OjQyICswMDAwLCBBbGV4IE1hcmt1emUgd3JvdGU6DQo+ IFRoaXMgY29tbWl0IGludHJvZHVjZXMgdGhlIEJMT0cgKEJpbmFyeSBMT0dnaW5nKSBsaWJyYXJ5 LCBhIGhpZ2gtdGhyb3VnaHB1dA0KPiBzdHJ1Y3R1cmVkIGxvZ2dpbmcgZnJhbWV3b3JrIGRlc2ln bmVkIGZvciBlZmZpY2llbnQgYmluYXJ5IGxvZyBjYXB0dXJlIGluDQo+IGtlcm5lbCBzcGFjZSB3 aXRoIG1pbmltYWwgcGVyZm9ybWFuY2UgaW1wYWN0IG9uIGhvdCBwYXRocy4NCj4gDQo+IEJMT0cg cHJvdmlkZXMgYSBjb21wbGV0ZSBsb2dnaW5nIHNvbHV0aW9uIHdpdGggdGhlIGZvbGxvd2luZyBr ZXkgY29tcG9uZW50czoNCj4gDQo+ICoqQ29yZSBJbmZyYXN0cnVjdHVyZSAoYmxvZ19jb3JlLmMs IGJsb2cuaCk6KioNCj4gLSBMb2dnZXIgcmVnaXN0cmF0aW9uIGFuZCBsaWZlY3ljbGUgbWFuYWdl bWVudA0KPiAtIFBlci1tb2R1bGUgbG9nZ2VyIGluc3RhbmNlcyB3aXRoIGlzb2xhdGVkIG5hbWVz cGFjZXMNCj4gLSBTb3VyY2UgSUQgdHJhY2tpbmcgZm9yIGZvcm1hdCBzdHJpbmcgcmVnaXN0cmF0 aW9uDQo+IC0gUmVmZXJlbmNlLWNvdW50ZWQgbG9nZ2VyIGNsZWFudXANCj4gDQo+ICoqTWVtb3J5 IE1hbmFnZW1lbnQgKGJsb2dfYmF0Y2guYywgYmxvZ19wYWdlZnJhZy5jKToqKg0KPiAtIE1hZ2F6 aW5lLWJhc2VkIGFsbG9jYXRvciBmb3IgVExTIGNvbnRleHQgcG9vbGluZw0KPiAtIExvY2stZnJl ZSBjb250ZXh0IGFjcXVpc2l0aW9uL3JlbGVhc2Ugb24gaG90IHBhdGhzDQo+IC0gUGFnZWZyYWct YmFzZWQgY2lyY3VsYXIgYnVmZmVyIG1hbmFnZW1lbnQNCj4gLSBFZmZpY2llbnQgYnVmZmVyIHJl Y3ljbGluZyBhbmQgY2FwYWNpdHkgdHJhY2tpbmcNCj4gDQo+ICoqU2VyaWFsaXphdGlvbiBGcmFt ZXdvcmsgKGJsb2dfc2VyLmgpOioqDQo+IC0gQ29tcGlsZS10aW1lIHR5cGUtc2FmZSBzZXJpYWxp emF0aW9uIG1hY3Jvcw0KPiAtIEVmZmljaWVudCBiaW5hcnkgZW5jb2Rpbmcgd2l0aCBtaW5pbWFs IG92ZXJoZWFkDQo+IC0gU3VwcG9ydCBmb3IgYWxsIHByaW1pdGl2ZSB0eXBlcywgc3RyaW5ncywg YW5kIGJpbmFyeSBibG9icw0KPiAtIEF1dG9tYXRpYyBzaXplIGNhbGN1bGF0aW9uIGFuZCBhbGln bm1lbnQgaGFuZGxpbmcNCj4gDQo+ICoqRGVzZXJpYWxpemF0aW9uIFN1cHBvcnQgKGJsb2dfZGVz LmMsIGJsb2dfZGVzLmgpOioqDQo+IC0gSXRlcmF0b3ItYmFzZWQgZGVzZXJpYWxpemF0aW9uIGZv ciB1c2Vyc3BhY2UgY29uc3VtcHRpb24NCj4gLSBGb3JtYXQgc3RyaW5nIHJlc29sdXRpb24gYW5k IHBhcmFtZXRlciBleHRyYWN0aW9uDQo+IC0gRW50cnkgdmFsaWRhdGlvbiBhbmQgYm91bmRhcnkg Y2hlY2tpbmcNCj4gLSBEZXNpZ25lZCBmb3IgZGVidWdmcyBleHBvcnQgYW5kIGFuYWx5c2lzIHRv b2xzDQo+IA0KPiAqKk1vZHVsZSBJbnRlZ3JhdGlvbiAoYmxvZ19tb2R1bGUuYywgYmxvZ19tb2R1 bGUuaCk6KioNCj4gLSBQZXItdGFzayBUTFMgY29udGV4dCBtYW5hZ2VtZW50DQo+IC0gTW9kdWxl LXNwZWNpZmljIGxvZ2dlciByZWdpc3RyYXRpb24NCj4gLSBDb250ZXh0IGxpc3QgdHJhY2tpbmcg Zm9yIGRlYnVnZnMgZW51bWVyYXRpb24NCj4gLSBBdXRvbWF0aWMgY29udGV4dCBpbml0aWFsaXph dGlvbiBhbmQgY2xlYW51cA0KPiANCj4gKipDb25maWd1cmF0aW9uIChsaWIvYmxvZy9LY29uZmln KToqKg0KPiAtIENPTkZJR19CTE9HOiBNYXN0ZXIgc3dpdGNoIGZvciBCTE9HIHN1YnN5c3RlbQ0K PiAtIERlZmF1bHQgYnVmZmVyIHNpemUgYW5kIGNhcGFjaXR5IHR1bmluZyBvcHRpb25zDQo+IC0g SW50ZWdyYXRpb24gd2l0aCBrZXJuZWwgYnVpbGQgc3lzdGVtDQo+IA0KPiBUaGUgaW1wbGVtZW50 YXRpb24gaW5jbHVkZXMgYWxsIGNvcnJlY3RuZXNzIGZpeGVzIGZvciB0aGUgc2VyaWFsaXphdGlv biBwYXRoOg0KPiAtIFByb3BlciBoYW5kbGluZyBvZiBwYXJhbWV0ZXItbGVzcyBsb2cgbWVzc2Fn ZXMNCj4gLSBDb3JyZWN0IHJlc2VydmUvcHVibGlzaCBzaXplIHJvdW5kaW5nIHRvIHByZXZlbnQg YnVmZmVyIG92ZXJsYXANCj4gLSBBY2N1cmF0ZSBlbnRyeSBsZW5ndGggdHJhY2tpbmcgZm9yIGRl c2VyaWFsaXphdGlvbg0KPiAtIFByb3BlciBsb2NraW5nIGZvciBjb250ZXh0IHNuYXBzaG90cyB0 byBwcmV2ZW50IGRlYWRsb2Nrcw0KPiANCj4gQWZ0ZXIgdGhpcyBjb21taXQsIEJMT0cgYnVpbGRz IGNsZWFubHkgd2hlbiBDT05GSUdfQkxPRyBpcyBlbmFibGVkIGJ1dA0KPiByZW1haW5zIHVudXNl ZCBieSB0aGUga2VybmVsLiBObyBsb2dnaW5nIGlzIHBlcmZvcm1lZCB1bnRpbCBzdWJzeXN0ZW1z DQo+IGV4cGxpY2l0bHkgcmVnaXN0ZXIgbG9nZ2VycyBhbmQgd2lyZSBpbiB0aGUgVExTIGNvbnRl eHQgaG9va3MuIFN1YnNlcXVlbnQNCj4gY29tbWl0cyB3aWxsIGludGVncmF0ZSBCTE9HIGludG8g dGhlIENlcGggZmlsZXN5c3RlbSBhcyBhIHJlZmVyZW5jZQ0KPiBpbXBsZW1lbnRhdGlvbi4NCj4g DQo+IFNpZ25lZC1vZmYtYnk6IEFsZXggTWFya3V6ZSA8YW1hcmt1emVAcmVkaGF0LmNvbT4NCj4g LS0tDQo+ICBpbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZy5oICAgICAgICAgIHwgNTE1ICsrKysrKysr KysrKysrKysrKysNCj4gIGluY2x1ZGUvbGludXgvYmxvZy9ibG9nX2JhdGNoLmggICAgfCAgNTQg KysNCj4gIGluY2x1ZGUvbGludXgvYmxvZy9ibG9nX2Rlcy5oICAgICAgfCAgNDYgKysNCj4gIGlu Y2x1ZGUvbGludXgvYmxvZy9ibG9nX21vZHVsZS5oICAgfCAzMjkgKysrKysrKysrKysrDQo+ICBp bmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19wYWdlZnJhZy5oIHwgIDMzICsrDQo+ICBpbmNsdWRlL2xp bnV4L2Jsb2cvYmxvZ19zZXIuaCAgICAgIHwgMjc1ICsrKysrKysrKysNCj4gIGxpYi9LY29uZmln ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKw0KPiAgbGliL01ha2VmaWxlICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMiArDQo+ICBsaWIvYmxvZy9LY29uZmlnICAgICAgICAgICAgICAg ICAgIHwgIDU2ICsrKw0KPiAgbGliL2Jsb2cvTWFrZWZpbGUgICAgICAgICAgICAgICAgICB8ICAx NSArDQo+ICBsaWIvYmxvZy9ibG9nX2JhdGNoLmMgICAgICAgICAgICAgIHwgMzExICsrKysrKysr KysrKw0KPiAgbGliL2Jsb2cvYmxvZ19jb3JlLmMgICAgICAgICAgICAgICB8IDc3MiArKysrKysr KysrKysrKysrKysrKysrKysrKysrDQo+ICBsaWIvYmxvZy9ibG9nX2Rlcy5jICAgICAgICAgICAg ICAgIHwgMzg1ICsrKysrKysrKysrKysrDQo+ICBsaWIvYmxvZy9ibG9nX21vZHVsZS5jICAgICAg ICAgICAgIHwgNzgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ICBsaWIvYmxvZy9i bG9nX3BhZ2VmcmFnLmMgICAgICAgICAgIHwgMTI0ICsrKysrDQo+ICAxNSBmaWxlcyBjaGFuZ2Vk LCAzNzAwIGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4 L2Jsb2cvYmxvZy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9ibG9nL2Js b2dfYmF0Y2guaA0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgvYmxvZy9ibG9n X2Rlcy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9ibG9nL2Jsb2dfbW9k dWxlLmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19wYWdl ZnJhZy5oDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQgaW5jbHVkZS9saW51eC9ibG9nL2Jsb2dfc2Vy LmgNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvYmxvZy9LY29uZmlnDQo+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgbGliL2Jsb2cvTWFrZWZpbGUNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvYmxv Zy9ibG9nX2JhdGNoLmMNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvYmxvZy9ibG9nX2NvcmUu Yw0KPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9ibG9nL2Jsb2dfZGVzLmMNCj4gIGNyZWF0ZSBt b2RlIDEwMDY0NCBsaWIvYmxvZy9ibG9nX21vZHVsZS5jDQo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg bGliL2Jsb2cvYmxvZ19wYWdlZnJhZy5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9ibG9nL2Jsb2cuaCBiL2luY2x1ZGUvbGludXgvYmxvZy9ibG9nLmgNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi42ZDkzZmYzMTczMmUNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZy5oDQo+IEBAIC0wLDAgKzEsNTE1 IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiArLyoNCj4g KyAqIEJpbmFyeSBMb2dnaW5nIEluZnJhc3RydWN0dXJlIChCTE9HKQ0KPiArICoNCj4gKyAqIEdl bmVyaWMgYmluYXJ5IGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUgZm9yIGtlcm5lbCBzdWJzeXN0ZW1z Lg0KPiArICogTW9kdWxlcyBtYWludGFpbiB0aGVpciBvd24gY2xpZW50IG1hcHBpbmdzIGFuZCBk ZWJ1Z2ZzIGludGVyZmFjZXMuDQo+ICsgKi8NCg0KRG8gd2UgbmVlZCB0byBhZGQgdGhlIGNvcHly aWdodCBzdGF0ZW1lbnQgaW4gYWxsIGNyZWF0ZWQgZmlsZXM/DQoNCj4gKyNpZm5kZWYgX0xJTlVY X0JMT0dfSA0KPiArI2RlZmluZSBfTElOVVhfQkxPR19IDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51 eC90eXBlcy5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQo+ICsjaW5jbHVkZSA8bGlu dXgvbGlzdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvYmxvZy9ibG9nX2JhdGNoLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYmxvZy9ibG9nX3Bh Z2VmcmFnLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYmxvZy9ibG9nX3Nlci5oPg0KPiArI2luY2x1 ZGUgPGxpbnV4L2Jsb2cvYmxvZ19kZXMuaD4NCj4gKw0KPiArc3RydWN0IGJsb2dfbW9kdWxlX2Nv bnRleHQ7DQo+ICsNCj4gKy8qIERlYnVnIGNvbmZpZ3VyYXRpb24gKi8NCj4gKyNpZmRlZiBDT05G SUdfQkxPR19ERUJVRw0KPiArI2RlZmluZSBCTE9HX0RFQlVHX1BPSVNPTiAxDQo+ICsjZWxzZQ0K PiArI2RlZmluZSBCTE9HX0RFQlVHX1BPSVNPTiAwDQo+ICsjZW5kaWYNCg0KV2hhdCdzIHRoZSBw b2ludCB0byBkZWZpbmUgQkxPR19ERUJVR19QT0lTT04/IEl0IGxvb2tzIGxpa2UgdGhhdA0KQ09O RklHX0JMT0dfREVCVUcgPT0gQkxPR19ERUJVR19QT0lTT04uIFlvdSBjYW4gdXNlIENPTkZJR19C TE9HX0RFQlVHIGluc3RlYWQgb2YNCkJMT0dfREVCVUdfUE9JU09OLg0KDQo+ICsNCj4gKyNpZmRl ZiBDT05GSUdfQkxPR19UUkFDS19VU0FHRQ0KPiArI2RlZmluZSBCTE9HX1RSQUNLX1VTQUdFIDEN Cj4gKyNlbHNlDQo+ICsjZGVmaW5lIEJMT0dfVFJBQ0tfVVNBR0UgMA0KPiArI2VuZGlmDQo+ICsN Cg0KRGl0dG8uIFlvdSBjYW4gdXNlIENPTkZJR19CTE9HX1RSQUNLX1VTQUdFIGluc3RlYWQgb2Yg ZGVjbGFyYXRpb24gdGhlDQpCTE9HX1RSQUNLX1VTQUdFLg0KDQo+ICsvKiBEZWJ1ZyBwb2lzb24g dmFsdWVzICovDQo+ICsjaWYgQkxPR19ERUJVR19QT0lTT04NCj4gKyNkZWZpbmUgQkxPR19MT0df RU5UUllfUE9JU09OIDB4RDFFN0MwREUNCj4gKyNkZWZpbmUgQkxPR19DVFhfUE9JU09OIDB4Q0FG RUJBQkUNCj4gKyNlbmRpZg0KPiArDQo+ICsvKiBObyBnbG9iYWwgbG9nZ2VyIC0gYWxsIGxvZ2dp bmcgbXVzdCB1c2UgcGVyLW1vZHVsZSBjb250ZXh0cyAqLw0KPiArDQo+ICsvKiBNYXhpbXVtIHZh bHVlcyAqLw0KPiArI2RlZmluZSBCTE9HX01BWF9QQVlMT0FEIDI1NQ0KPiArI2lmZGVmIENPTkZJ R19CTE9HX01BWF9TT1VSQ0VTDQo+ICsjZGVmaW5lIEJMT0dfTUFYX1NPVVJDRV9JRFMgQ09ORklH X0JMT0dfTUFYX1NPVVJDRVMNCj4gKyNlbHNlDQo+ICsjZGVmaW5lIEJMT0dfTUFYX1NPVVJDRV9J RFMgNDA5Ng0KPiArI2VuZGlmDQo+ICsjaWZkZWYgQ09ORklHX0JMT0dfTUFYX0NMSUVOVFMNCj4g KyNkZWZpbmUgQkxPR19NQVhfQ0xJRU5UX0lEUyBDT05GSUdfQkxPR19NQVhfQ0xJRU5UUw0KPiAr I2Vsc2UNCj4gKyNkZWZpbmUgQkxPR19NQVhfQ0xJRU5UX0lEUyAyNTYNCj4gKyNlbmRpZg0KDQpU ZWNobmljYWxseSBzcGVha2luZywgeW91IGNhbiBkZWZpbmUgYSBzZXQgb2YgdmFsdWVzIGZvciBD T05GSUdfQkxPR19NQVhfU09VUkNFUw0KYW5kIENPTkZJR19CTE9HX01BWF9DTElFTlRTIGluIEtj b25maWcuIEl0IGRvZXNuJ3QgbmVlZCB0byBtYWtlIHRoaXMgc2V0IG9mDQpkZWNsYXJhdGlvbnMg aGVyZS4NCg0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBibG9nX3NvdXJjZV9pbmZvIC0gU291 cmNlIGxvY2F0aW9uIG1ldGFkYXRhIGZvciBsb2cgZW50cmllcw0KPiArICogQGZpbGU6IFNvdXJj ZSBmaWxlIG5hbWUgKGZyb20gX19GSUxFX18pDQo+ICsgKiBAZnVuYzogRnVuY3Rpb24gbmFtZSAo ZnJvbSBfX2Z1bmNfXykNCj4gKyAqIEBsaW5lOiBMaW5lIG51bWJlciAoZnJvbSBfX0xJTkVfXykN Cj4gKyAqIEBmbXQ6IFByaW50Zi1zdHlsZSBmb3JtYXQgc3RyaW5nIGZvciB0aGlzIGxvZyBzaXRl DQo+ICsgKiBAd2Fybl9jb3VudDogTnVtYmVyIG9mIHdhcm5pbmdzIGlzc3VlZCBmcm9tIHRoaXMg c2l0ZQ0KPiArICogQG5hcGlfdXNhZ2U6IE51bWJlciBvZiB0aW1lcyBsb2dnZWQgZnJvbSBOQVBJ IGNvbnRleHQgKGlmIEJMT0dfVFJBQ0tfVVNBR0UpDQoNCldoYXQgaXMgdGhlIE5BUEk/DQoNCj4g KyAqIEB0YXNrX3VzYWdlOiBOdW1iZXIgb2YgdGltZXMgbG9nZ2VkIGZyb20gdGFzayBjb250ZXh0 IChpZiBCTE9HX1RSQUNLX1VTQUdFKQ0KPiArICogQG5hcGlfYnl0ZXM6IFRvdGFsIGJ5dGVzIGxv Z2dlZCBmcm9tIE5BUEkgKGlmIEJMT0dfVFJBQ0tfVVNBR0UpDQo+ICsgKiBAdGFza19ieXRlczog VG90YWwgYnl0ZXMgbG9nZ2VkIGZyb20gdGFzayAoaWYgQkxPR19UUkFDS19VU0FHRSkNCj4gKyAq DQo+ICsgKiBNYXBzIHNvdXJjZSBJRHMgdG8gdGhlaXIgb3JpZ2luYWwgc291cmNlIGxvY2F0aW9u cy4gT25lIGVudHJ5IHBlciB1bmlxdWUNCj4gKyAqIGZpbGU6ZnVuYzpsaW5lIGxvY2F0aW9uLiBU aGUgZm9ybWF0IHN0cmluZyBpcyBzdG9yZWQgaGVyZSBmb3IgdXNlIGR1cmluZw0KPiArICogZGVz ZXJpYWxpemF0aW9uIHRvIHJlY29uc3RydWN0IHRoZSBvcmlnaW5hbCBsb2cgbWVzc2FnZS4NCg0K RG9lcyBpdCBtZWFuIHRoYXQga2VybmVsIHNob3VsZCBiZSBjb21waWxlZCB3aXRoIGRlYnVnIHN5 bWJvbHMgZm9yIEJMT0cNCnN1YnN5c3RlbT8NCg0KPiArICovDQo+ICtzdHJ1Y3QgYmxvZ19zb3Vy Y2VfaW5mbyB7DQo+ICsJY29uc3QgY2hhciAqZmlsZTsNCj4gKwljb25zdCBjaGFyICpmdW5jOw0K PiArCXVuc2lnbmVkIGludCBsaW5lOw0KPiArCWNvbnN0IGNoYXIgKmZtdDsNCj4gKwlpbnQgd2Fy bl9jb3VudDsNCg0KV2h5IHRoZSB3YXJuX2NvdW50IGlzIG5vdCB1bmRlciBCTE9HX1RSQUNLX1VT QUdFPyBBbmQgd2h5IGl0IGlzIG5vdCBhdG9taWNfdA0KdHlwZT8NCg0KPiArI2lmIEJMT0dfVFJB Q0tfVVNBR0UNCj4gKwlhdG9taWNfdCBuYXBpX3VzYWdlOw0KPiArCWF0b21pY190IHRhc2tfdXNh Z2U7DQo+ICsJYXRvbWljX3QgbmFwaV9ieXRlczsNCj4gKwlhdG9taWNfdCB0YXNrX2J5dGVzOw0K PiArI2VuZGlmDQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBibG9nX2xvZ19lbnRy eSAtIEJpbmFyeSBsb2cgZW50cnkgaGVhZGVyIGFuZCBwYXlsb2FkDQo+ICsgKiBAZGVidWdfcG9p c29uOiBNYWdpYyB2YWx1ZSBmb3IgY29ycnVwdGlvbiBkZXRlY3Rpb24gKGlmIEJMT0dfREVCVUdf UE9JU09OKQ0KPiArICogQHRzX2RlbHRhOiBUaW1lc3RhbXAgZGVsdGEgZnJvbSBjb250ZXh0J3Mg YmFzZV9qaWZmaWVzDQo+ICsgKiBAc291cmNlX2lkOiBTb3VyY2UgbG9jYXRpb24gSUQgKGluZGV4 IGludG8gc291cmNlX21hcCkNCj4gKyAqIEBsZW46IExlbmd0aCBvZiBzZXJpYWxpemVkIGRhdGEg aW4gYnVmZmVyIChtYXggMjU1KQ0KPiArICogQGNsaWVudF9pZDogTW9kdWxlLXNwZWNpZmljIGNs aWVudCBpZGVudGlmaWVyDQo+ICsgKiBAZmxhZ3M6IFJlc2VydmVkIGZvciBmdXR1cmUgdXNlDQo+ ICsgKiBAYnVmZmVyOiBWYXJpYWJsZS1sZW5ndGggc2VyaWFsaXplZCBhcmd1bWVudCBkYXRhDQo+ ICsgKg0KPiArICogV2lyZSBmb3JtYXQgZm9yIGEgc2luZ2xlIGxvZyBlbnRyeS4gRW50cmllcyBh cmUgc3RvcmVkIHNlcXVlbnRpYWxseSBpbg0KPiArICogdGhlIHBhZ2VmcmFnIGJ1ZmZlci4gVGhl IGJ1ZmZlciBjb250YWlucyBiaW5hcnktc2VyaWFsaXplZCBhcmd1bWVudHMNCj4gKyAqIHRoYXQg bWF0Y2ggdGhlIGZvcm1hdCBzdHJpbmcgc3RvcmVkIGluIHNvdXJjZV9tYXBbc291cmNlX2lkXS4N Cj4gKyAqLw0KPiArc3RydWN0IGJsb2dfbG9nX2VudHJ5IHsNCj4gKyNpZiBCTE9HX0RFQlVHX1BP SVNPTg0KPiArCXU2NCBkZWJ1Z19wb2lzb247DQo+ICsjZW5kaWYNCj4gKwl1MzIgdHNfZGVsdGE7 DQo+ICsJdTE2IHNvdXJjZV9pZDsNCj4gKwl1OCBsZW47DQoNCldoeSBsZW4gaXMgbm90IG5lYXIg YnVmZmVyPw0KDQo+ICsJdTggY2xpZW50X2lkOw0KPiArCXU4IGZsYWdzOw0KDQpBcyBmYXIgYXMg SSBjYW4gc2VlLCB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIG5vdCBwcm9wZXJseSBhbGlnbmVkLiBJ dCB3aWxsIGJlDQpiZXR0ZXIgdG8gc3RhcnQgdGhlIGJ1ZmZlciBvbiA4LWJ5dGVzIGFsaWduZWQg Ym91bmRhcnkuDQoNCj4gKwljaGFyIGJ1ZmZlcltdOw0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsg KiBzdHJ1Y3QgYmxvZ190bHNfY3R4IC0gUGVyLXRhc2sgKG9yIE5BUEkpIGxvZ2dpbmcgY29udGV4 dA0KPiArICogQGxpc3Q6IExpbmthZ2UgaW4gbG9nZ2VyJ3MgY29udGV4dHMgbGlzdA0KPiArICog QHJlbGVhc2U6IENsZWFudXAgZnVuY3Rpb24gY2FsbGVkIG9uIGNvbnRleHQgZGVzdHJ1Y3Rpb24N Cj4gKyAqIEByZWZjb3VudDogUmVmZXJlbmNlIGNvdW50ICgwPWluIGJhdGNoLCAxPWFjdGl2ZSkN Cj4gKyAqIEB0YXNrOiBBc3NvY2lhdGVkIHRhc2sgKE5VTEwgZm9yIE5BUEkgY29udGV4dHMpDQo+ ICsgKiBAcGlkOiBQcm9jZXNzIElEIG9mIGFzc29jaWF0ZWQgdGFzaw0KPiArICogQGNvbW06IENv bW1hbmQgbmFtZSBvZiBhc3NvY2lhdGVkIHRhc2sNCj4gKyAqIEBpZDogVW5pcXVlIGNvbnRleHQg SUQgKGZvciBkZWJ1Z2dpbmcpDQo+ICsgKiBAZGVidWdfcG9pc29uOiBNYWdpYyB2YWx1ZSBmb3Ig Y29ycnVwdGlvbiBkZXRlY3Rpb24gKGlmIEJMT0dfREVCVUdfUE9JU09OKQ0KPiArICogQGJhc2Vf amlmZmllczogQmFzZSB0aW1lc3RhbXAgZm9yIGRlbHRhIGNhbGN1bGF0aW9uDQo+ICsgKiBAbG9n Z2VyOiBQYXJlbnQgbG9nZ2VyIGluc3RhbmNlDQo+ICsgKg0KPiArICogRWFjaCB0YXNrIChvciBD UFUgZm9yIE5BUEkpIGhhcyBpdHMgb3duIGxvZ2dpbmcgY29udGV4dC4gVGhlIGNvbnRleHQNCj4g KyAqIGlzIGVtYmVkZGVkIGluIGEgYmxvZ190bHNfcGFnZWZyYWcgY29tcG9zaXRlIHdoaWNoIGNv bnRhaW5zIHRoZSBpbmxpbmUNCj4gKyAqIDUxMktCIGJ1ZmZlci4gVXNlIGJsb2dfY3R4X3BmKCkg dG8gYWNjZXNzIHRoZSBwYWdlZnJhZyBhbGxvY2F0b3IuDQo+ICsgKiBDb250ZXh0cyBhcmUgcmVj eWNsZWQgdGhyb3VnaCBtYWdhemluZSBiYXRjaGluZyBzeXN0ZW0uDQo+ICsgKg0KPiArICogTk9U RTogc3RydWN0IGJsb2dfcGFnZWZyYWcgcGYgaGFzIGJlZW4gUkVNT1ZFRCBmcm9tIHRoaXMgc3Ry dWN0dXJlLg0KPiArICogSXQgbm93IGxpdmVzIGluIHRoZSBjb21wb3NpdGUgKGJsb2dfdGxzX3Bh Z2VmcmFnKS4gVXNlIGJsb2dfY3R4X3BmKGN0eCkNCj4gKyAqIHRvIGFjY2VzcyBpdC4gVGhpcyBl bnN1cmVzIHRoZSBwYWdlZnJhZyBwb2ludHMgdG8gdGhlIGlubGluZSBidWZmZXIuDQo+ICsgKi8N Cj4gK3N0cnVjdCBibG9nX3Rsc19jdHggew0KPiArCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCj4g Kwl2b2lkICgqcmVsZWFzZSkodm9pZCAqZGF0YSk7DQo+ICsJYXRvbWljX3QgcmVmY291bnQ7DQoN CldoeSBub3QgcmVmY291bnRfdD8NCg0KPiArCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsNCj4g KwlwaWRfdCBwaWQ7DQo+ICsJY2hhciBjb21tW1RBU0tfQ09NTV9MRU5dOw0KPiArCXU2NCBpZDsN Cj4gKwl1NjQgZGVidWdfcG9pc29uOw0KDQpTaG91bGQgaWQgYW5kIGRlYnVnX3BvaXNvbiBiZSB1 bmRlciBDT05GSUdfQkxPR19ERUJVRz8NCg0KVXN1YWxseSwgcG9pc29uIHZhbHVlIGlzIGxvY2F0 ZWQgYXQgdGhlIGJlZ2lubmluZyBvciBhdCB0aGUgZW5kIG9mIHRoZQ0Kc3RydWN0dXJlLiBQcm9i YWJseSwgaXQgbWFrZXMgc2Vuc2UgdG8gcGxhY2UgZGVidWdfcG9pc29uIGF0IHRoZSBzdHJ1Y3R1 cmUncw0KZW5kPw0KDQo+ICsJdW5zaWduZWQgbG9uZyBiYXNlX2ppZmZpZXM7DQo+ICsJc3RydWN0 IGJsb2dfbG9nZ2VyICpsb2dnZXI7DQo+ICsJaW50IHBlbmRpbmdfb2Zmc2V0OwkvKiBPZmZzZXQg b2YgcmVzZXJ2ZWQgYnV0IG5vdCB5ZXQgcHVibGlzaGVkIGVudHJ5ICovDQo+ICsJc2l6ZV90IHBl bmRpbmdfc2l6ZTsJLyogU2l6ZSBvZiByZXNlcnZlZCBlbnRyeSAqLw0KPiArfTsNCg0KSSB0aGlu aywgbWF5YmUsIGl0IG1ha2VzIHNlbnNlIHRvIHJlb3JkZXIgZmllbGRzIG9mIHRoZSBzdHJ1Y3R1 cmU6DQoNCnN0cnVjdCBibG9nX3Rsc19jdHggew0KCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsNCglh dG9taWNfdCByZWZjb3VudDsNCglwaWRfdCBwaWQ7DQoJc3RydWN0IHRhc2tfc3RydWN0ICp0YXNr Ow0KCXN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyOw0KCWludCBwZW5kaW5nX29mZnNldDsNCglz aXplX3QgcGVuZGluZ19zaXplOw0KCXZvaWQgKCpyZWxlYXNlKSh2b2lkICpkYXRhKTsNCgljaGFy IGNvbW1bVEFTS19DT01NX0xFTl07DQoJdTY0IGlkOw0KCXU2NCBkZWJ1Z19wb2lzb247DQp9Ow0K DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGJsb2dfdGxzX3BhZ2VmcmFnIC0gQ29tcG9zaXRl IGFsbG9jYXRpb24gdW5pdCBmb3IgVExTIGNvbnRleHRzDQo+ICsgKiBAY3R4OiBUTFMgY29udGV4 dCBtZXRhZGF0YSAocmVmY291bnQsIHJlbGVhc2UgaG9vaywgdGFzayBpbmZvKQ0KPiArICogQHBm OiBFbWJlZGRlZCBwYWdlZnJhZyBhbGxvY2F0b3IgKGNvdW50ZXJzICsgbG9jaykNCj4gKyAqIEBi dWY6IEZsZXhpYmxlIGFycmF5IGZvciBsb2cgZW50cmllcw0KPiArICoNCj4gKyAqIFRoaXMgY29t cG9zaXRlIHN0cnVjdHVyZSBjb21iaW5lcyB0aGUgVExTIGNvbnRleHQgaGVhZGVyIHdpdGggaXRz DQo+ICsgKiBsb2dnaW5nIGJ1ZmZlciBpbnRvIGEgc2luZ2xlIGFsbG9jYXRpb24gdW5pdC4gVG90 YWwgYWxsb2NhdGlvbiBpcw0KPiArICogZXhhY3RseSBCTE9HX1BBR0VGUkFHX1NJWkUgKDUxMktC KSwgd2l0aCB0aGUgYnVmZmVyIG9jY3VweWluZyB0aGUNCj4gKyAqIHJlbWFpbmRlciBhZnRlciB0 aGUgaGVhZGVyOiBCTE9HX1BBR0VGUkFHX1NJWkUgLSBzaXplb2Yoc3RydWN0IGJsb2dfdGxzX3Bh Z2VmcmFnKS4NCj4gKyAqDQo+ICsgKiBUaGUgY29tcG9zaXRlcyBmbG93IHRocm91Z2ggdGhlIGJh dGNoaW5nIHN5c3RlbToNCj4gKyAqIGFsbG9jX2JhdGNoIChlbXB0eSkg4oaSIGluLXVzZSAoZmls bGluZykg4oaSIGxvZ19iYXRjaCAoZnVsbCwgcmVhZGFibGUpDQo+ICsgKiDihpIgZHJhaW4g4oaS IHJlc2V0IOKGkiBiYWNrIHRvIGFsbG9jX2JhdGNoLg0KPiArICoNCj4gKyAqIFRoZSBidWZmZXIg ZW5zdXJlcyBubyBzZXBhcmF0ZSBhbGxvY19wYWdlcygpIGNhbGxzIGFyZSBuZWVkZWQNCj4gKyAq IG9uIHRoZSBob3QgcGF0aC4gVGhlIHBhZ2VmcmFnJ3MgYnVmZmVyIHBvaW50ZXIgaXMgaW5pdGlh bGl6ZWQgdG8gcG9pbnQNCj4gKyAqIGF0IGJ1ZltdLCBhbmQgc2VyaWFsaXphdGlvbiBzdGFydHMg YXQgb2Zmc2V0IDAgd2l0aGluIGJ1ZltdICh3aGljaCBpcw0KPiArICogYWxyZWFkeSBwb3NpdGlv bmVkIGFmdGVyIHRoZSBtZXRhZGF0YSkuDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX3Rsc19wYWdl ZnJhZyB7DQo+ICsJc3RydWN0IGJsb2dfdGxzX2N0eCBjdHg7DQo+ICsJc3RydWN0IGJsb2dfcGFn ZWZyYWcgcGY7DQo+ICsJdW5zaWduZWQgY2hhciBidWZbXTsNCj4gK307DQo+ICsNCj4gKy8qIFRv dGFsIGFsbG9jYXRpb24gaXMgZXhhY3RseSA1MTJLQiAtIGJ1ZmZlciBzaXplIGlzIHRoZSByZW1h aW5kZXIgYWZ0ZXIgaGVhZGVyICovDQo+ICsjZGVmaW5lIEJMT0dfVExTX1BBR0VGUkFHX0FMTE9D X1NJWkUgQkxPR19QQUdFRlJBR19TSVpFDQo+ICsjZGVmaW5lIEJMT0dfVExTX1BBR0VGUkFHX0JV RkZFUl9TSVpFIFwNCj4gKwkoQkxPR19QQUdFRlJBR19TSVpFIC0gc2l6ZW9mKHN0cnVjdCBibG9n X3Rsc19wYWdlZnJhZykpDQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGJsb2dfbG9nZ2VyIC0g UGVyLW1vZHVsZSBsb2dnZXIgaW5zdGFuY2UNCj4gKyAqIEBjb250ZXh0czogTGlzdCBvZiBhbGwg VExTIGNvbnRleHRzIGZvciB0aGlzIGxvZ2dlcg0KPiArICogQGxvY2s6IFByb3RlY3RzIGNvbnRl eHRzIGxpc3QNCj4gKyAqIEBhbGxvY19iYXRjaDogTWFnYXppbmUgYmF0Y2ggZm9yIGNvbnRleHQg YWxsb2NhdGlvbg0KPiArICogQGxvZ19iYXRjaDogTWFnYXppbmUgYmF0Y2ggZm9yIGNvbXBsZXRl ZCBsb2cgY29udGV4dHMNCj4gKyAqIEBzb3VyY2VfbWFwOiBBcnJheSBtYXBwaW5nIHNvdXJjZSBJ RHMgdG8gc291cmNlIGluZm8gKG1heCA0MDk2KQ0KPiArICogQG5leHRfc291cmNlX2lkOiBOZXh0 IHNvdXJjZSBJRCB0byBhc3NpZ24NCj4gKyAqIEBzb3VyY2VfbG9jazogUHJvdGVjdHMgc291cmNl IG1hcCBvcGVyYXRpb25zDQo+ICsgKiBAdG90YWxfY29udGV4dHNfYWxsb2NhdGVkOiBUb3RhbCBu dW1iZXIgb2YgY29udGV4dHMgY3JlYXRlZA0KPiArICogQG5leHRfY3R4X2lkOiBOZXh0IGNvbnRl eHQgSUQgdG8gYXNzaWduDQo+ICsgKiBAY3R4X2lkX2xvY2s6IFByb3RlY3RzIGNvbnRleHQgSUQg Y291bnRlcg0KPiArICogQG5hcGlfY3R4czogUGVyLUNQVSBOQVBJIGNvbnRleHQgcG9pbnRlcnMN Cj4gKyAqDQo+ICsgKiBFYWNoIG1vZHVsZSBoYXMgaXRzIG93biBsb2dnZXIgaW5zdGFuY2Ugd2l0 aCBpc29sYXRlZCBzb3VyY2UgSUQgc3BhY2UsDQo+ICsgKiBjb250ZXh0IGxpc3QsIGFuZCBiYXRj aGluZyBzeXN0ZW0uIENvbXBvc2l0ZXMgYXJlIGFsbG9jYXRlZCB2aWEgYWxsb2NfcGFnZXMoKQ0K PiArICogc2luY2UgdGhleSdyZSA1MTJLQiBlYWNoIC0gdG9vIGxhcmdlIGZvciBzbGFiIGFsbG9j YXRvci4NCj4gKyAqLw0KPiArc3RydWN0IGJsb2dfbG9nZ2VyIHsNCj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIGNvbnRleHRzOw0KPiArCXNwaW5sb2NrX3QgbG9jazsJCS8qIHByb3RlY3RzIGNvbnRleHRz IGxpc3QgKi8NCg0KU2hvdWxkIHRoaXMgbG9jayB0byBiZSBiZWZvcmUgdGhlIGNvbnRleHRzIGRl Y2xhcmF0aW9uPw0KDQo+ICsJc3RydWN0IGJsb2dfYmF0Y2ggYWxsb2NfYmF0Y2g7DQo+ICsJc3Ry dWN0IGJsb2dfYmF0Y2ggbG9nX2JhdGNoOw0KPiArCXN0cnVjdCBrbWVtX2NhY2hlICptYWdhemlu ZV9jYWNoZTsgLyogU2hhcmVkIGNhY2hlIGZvciBtYWdhemluZSBzdHJ1Y3RzICovDQoNCklmIGl0 IGlzIHNoYXJlZCwgdGhlbiB3aGljaCBsb2NrIHByb3RlY3RzIHRoZSBtYWdhemluZV9jYWNoZSBm cm9tIHJhY2UNCmNvbmRpdGlvbnM/DQoNCj4gKwlzdHJ1Y3QgYmxvZ19zb3VyY2VfaW5mbw0KPiAr CQlzb3VyY2VfbWFwW0JMT0dfTUFYX1NPVVJDRV9JRFNdOw0KDQpXaGF0J3MgdGhlIHBvaW50IHRv IG1ha2UgaXQgdGhlIHR3byBsaW5lcyBkZWNsYXJhdGlvbj8NCg0KPiArCWF0b21pY190IG5leHRf c291cmNlX2lkOw0KPiArCXNwaW5sb2NrX3Qgc291cmNlX2xvY2s7CS8qIHByb3RlY3RzIHNvdXJj ZV9pZHMgdGFibGUgKi8NCg0KV2hhdCBpcyBzb3VyY2VfaWRzIHRhYmxlPyBBbmQgd2hlcmUgaXQg aXMgbG9jYXRlZD8NCg0KPiArCXVuc2lnbmVkIGxvbmcgdG90YWxfY29udGV4dHNfYWxsb2NhdGVk Ow0KPiArCXU2NCBuZXh0X2N0eF9pZDsNCg0KRG9lcyBuZXh0X2N0eF9pZCBwcm90ZWN0ZWQgYnkg c291cmNlX2xvY2s/DQoNCj4gKwlzcGlubG9ja190IGN0eF9pZF9sb2NrOwkvKiBwcm90ZWN0cyBu ZXh0X2N0eF9pZCAqLw0KDQpJZiB0aGlzIGxvY2sgcHJvdGVjdHMgbmV4dF9jdHhfaWQsIHRoZW4g d2h5IGl0IGlzIG5vdCBkZWNsYXJlZCBiZWZvcmUgdGhlDQpuZXh0X2N0eF9pZD8NCg0KPiArCXN0 cnVjdCBibG9nX3Rsc19jdHggKl9fcGVyY3B1DQo+ICsJCSpuYXBpX2N0eHM7DQoNCldoYXQncyB0 aGUgcG9pbnQgdG8gbWFrZSBpdCB0aGUgdHdvIGxpbmVzIGRlY2xhcmF0aW9uPw0KDQo+ICsJdTgg c2xvdF9pZDsNCj4gKwlib29sIGhhc19zbG90Ow0KPiArCXN0cnVjdCBibG9nX21vZHVsZV9jb250 ZXh0ICpvd25lcl9jdHg7DQo+ICt9Ow0KPiArDQo+ICsvKioNCj4gKyAqIHN0cnVjdCBibG9nX2xv Z19pdGVyIC0gSXRlcmF0b3IgZm9yIHJlYWRpbmcgbG9nIGVudHJpZXMgZnJvbSBhIHBhZ2VmcmFn DQo+ICsgKiBAcGY6IFBhZ2VmcmFnIGJlaW5nIGl0ZXJhdGVkDQo+ICsgKiBAY3VycmVudF9vZmZz ZXQ6IEN1cnJlbnQgcmVhZCBwb3NpdGlvbiBpbiBwYWdlZnJhZw0KPiArICogQGVuZF9vZmZzZXQ6 IEVuZCBwb3NpdGlvbiAocGYtPmhlYWQgYXQgaXRlcmF0aW9uIHN0YXJ0KQ0KPiArICogQHByZXZf b2Zmc2V0OiBQcmV2aW91cyBvZmZzZXQgKGZvciBkZWJ1Z2dpbmcpDQo+ICsgKiBAc3RlcHM6IE51 bWJlciBvZiBlbnRyaWVzIGl0ZXJhdGVkIHNvIGZhcg0KPiArICoNCj4gKyAqIFVzZWQgdG8gd2Fs ayB0aHJvdWdoIGFsbCBsb2cgZW50cmllcyBpbiBhIHBhZ2VmcmFnIHNlcXVlbnRpYWxseS4NCj4g KyAqIEluaXRpYWxpemUgd2l0aCBibG9nX2xvZ19pdGVyX2luaXQoKSwgdGhlbiBjYWxsIGJsb2df bG9nX2l0ZXJfbmV4dCgpDQo+ICsgKiByZXBlYXRlZGx5IHVudGlsIGl0IHJldHVybnMgTlVMTC4N Cj4gKyAqLw0KPiArc3RydWN0IGJsb2dfbG9nX2l0ZXIgew0KPiArCXN0cnVjdCBibG9nX3BhZ2Vm cmFnICpwZjsNCj4gKwl1NjQgY3VycmVudF9vZmZzZXQ7DQo+ICsJdTY0IGVuZF9vZmZzZXQ7DQo+ ICsJdTY0IHByZXZfb2Zmc2V0Ow0KDQpTaG91bGQgcHJldl9vZmZzZXQgYmUgdW5kZXIgQ09ORklH X0JMT0dfREVCVUc/DQoNCj4gKwl1NjQgc3RlcHM7DQoNCkkgYXNzdW1lIHRoYXQgd2UgaGF2ZSB0 aGUgdmFyaWFibGUtc2l6ZWQgcG9ydGlvbnMgaW4gdGhlIHBhZ2VmcmFnLiBTbywgSSBhbSBub3QN CnN1cmUgaG93IHVzZWZ1bCBjb3VsZCBiZSB0aGUgbnVtYmVyIG9mIGl0ZXJhdGVkIGl0ZW1zLiBJ ZiBJIGtub3cgdGhlIHN0YXJ0DQpvZmZzZXQsIHRoZW4gSSBjYW4gcmVwZWF0IHRoZSBzYW1lIHN0 ZXBzLiBCdXQgbnVtYmVyIG9mIGl0ZXJhdGVkIGVudHJpZXMgZG9uJ3QNCnByb3ZpZGUgdGhlIHdh eSB0byByZS1jYWxjdWxhdGUgdGhlIHN0YXJ0IG9mZnNldCBiZWNhdXNlIG9mIHZhcmlhYmxlLXNp emVkDQpuYXR1cmUgb2YgaXRlbXMgaW4gdGhlIHNlcXVlbmNlLg0KDQo+ICt9Ow0KPiArDQo+ICsv KiBDbGllbnQgZGVzZXJpYWxpemF0aW9uIGNhbGxiYWNrIHR5cGUgKi8NCj4gK3R5cGVkZWYgaW50 ICgqYmxvZ19jbGllbnRfZGVzX2ZuKShjaGFyICpidWYsIHNpemVfdCBzaXplLCB1OCBjbGllbnRf aWQpOw0KPiArDQo+ICsvKiBDb3JlIEFQSSBmdW5jdGlvbnMgLSBhbGwgcmVxdWlyZSB2YWxpZCBs b2dnZXIgcGFyYW1ldGVyICovDQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19nZXRfc291cmNlX2lk IC0gR2V0IG9yIGFsbG9jYXRlIGEgdW5pcXVlIHNvdXJjZSBJRCBmb3IgYSBsb2cgbG9jYXRpb24N Cj4gKyAqIEBsb2dnZXI6IExvZ2dlciBpbnN0YW5jZSB0byB1c2UNCj4gKyAqIEBmaWxlOiBTb3Vy Y2UgZmlsZSBuYW1lICh0eXBpY2FsbHkga2Jhc2VuYW1lKF9fRklMRV9fKSkNCj4gKyAqIEBmdW5j OiBGdW5jdGlvbiBuYW1lICh0eXBpY2FsbHkgX19mdW5jX18pDQo+ICsgKiBAbGluZTogTGluZSBu dW1iZXIgKHR5cGljYWxseSBfX0xJTkVfXykNCj4gKyAqIEBmbXQ6IFByaW50Zi1zdHlsZSBmb3Jt YXQgc3RyaW5nIGZvciB0aGlzIGxvZyBzaXRlDQo+ICsgKg0KPiArICogQXNzaWducyBhIHVuaXF1 ZSBzb3VyY2UgSUQgdG8gYSBzcGVjaWZpYyBmaWxlOmZ1bmM6bGluZSBsb2NhdGlvbi4gVGhlIElE DQo+ICsgKiBpcyB0eXBpY2FsbHkgY2FjaGVkIGluIGEgc3RhdGljIHZhcmlhYmxlIGF0IHRoZSBj YWxsIHNpdGUgZm9yIGZhc3QgbG9va3VwLg0KPiArICogVGhlIGZvcm1hdCBzdHJpbmcgaXMgc3Rv cmVkIGluIHRoZSBsb2dnZXIncyBzb3VyY2UgbWFwIGZvciBsYXRlcg0KPiArICogZGVzZXJpYWxp emF0aW9uLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IENhbiBiZSBjYWxsZWQgZnJvbSBhbnkgY29u dGV4dCAocHJvY2Vzcywgc29mdGlycSwgaGFyZGlycSkNCj4gKyAqIFJldHVybjogU291cmNlIElE ICgxIHRvIEJMT0dfTUFYX1NPVVJDRV9JRFMtMSksIG9yIDAgb24gZXJyb3INCj4gKyAqLw0KPiAr dTMyIGJsb2dfZ2V0X3NvdXJjZV9pZChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlciwgY29uc3Qg Y2hhciAqZmlsZSwNCj4gKwkJICAgICAgIGNvbnN0IGNoYXIgKmZ1bmMsIHVuc2lnbmVkIGludCBs aW5lLCBjb25zdCBjaGFyICpmbXQpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfZ2V0X3NvdXJj ZV9pbmZvIC0gUmV0cmlldmUgc291cmNlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHNvdXJjZSBJ RA0KPiArICogQGxvZ2dlcjogTG9nZ2VyIGluc3RhbmNlIHRvIHF1ZXJ5DQo+ICsgKiBAaWQ6IFNv dXJjZSBJRCB0byBsb29rIHVwDQo+ICsgKg0KPiArICogUmV0cmlldmVzIHRoZSBmaWxlLCBmdW5j dGlvbiwgbGluZSwgYW5kIGZvcm1hdCBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoDQo+ICsgKiBhIHNv dXJjZSBJRC4gVXNlZCBkdXJpbmcgZGVzZXJpYWxpemF0aW9uIHRvIHJlY29uc3RydWN0IGxvZyBt ZXNzYWdlcy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dA0KPiArICogUmV0dXJu OiBQb2ludGVyIHRvIHNvdXJjZV9pbmZvIHN0cnVjdHVyZSwgb3IgTlVMTCBpZiBJRCBpcyBpbnZh bGlkDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX3NvdXJjZV9pbmZvICpibG9nX2dldF9zb3VyY2Vf aW5mbyhzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlciwNCj4gKwkJCQkJICAgICAgdTMyIGlkKTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2xvZyAtIFJlc2VydmUgYnVmZmVyIGZvciBhIGJpbmFy eSBsb2cgbWVzc2FnZQ0KPiArICogQGxvZ2dlcjogTG9nZ2VyIGluc3RhbmNlIHRvIHVzZQ0KPiAr ICogQHNvdXJjZV9pZDogU291cmNlIElEIGZvciB0aGlzIGxvZyBsb2NhdGlvbiAoZnJvbSBibG9n X2dldF9zb3VyY2VfaWQpDQo+ICsgKiBAY2xpZW50X2lkOiBNb2R1bGUtc3BlY2lmaWMgY2xpZW50 IGlkZW50aWZpZXIgKDAgaWYgbm90IHVzZWQpDQo+ICsgKiBAbmVlZGVkX3NpemU6IFNpemUgaW4g Ynl0ZXMgbmVlZGVkIGZvciBzZXJpYWxpemVkIGFyZ3VtZW50cw0KPiArICoNCj4gKyAqIFJlc2Vy dmVzIHNwYWNlIGluIHRoZSBjdXJyZW50IGNvbnRleHQncyBwYWdlZnJhZyBmb3IgYSBsb2cgZW50 cnkgYW5kDQo+ICsgKiByZXR1cm5zIGEgYnVmZmVyIHBvaW50ZXIgZm9yIHRoZSBjYWxsZXIgdG8g c2VyaWFsaXplIGFyZ3VtZW50cyBpbnRvLg0KPiArICogVGhlIGxvZyBlbnRyeSBoZWFkZXIgKHRp bWVzdGFtcCwgc291cmNlX2lkLCBldGMuKSBpcyBmaWxsZWQgYXV0b21hdGljYWxseS4NCj4gKyAq DQo+ICsgKiBUaGUgcmVzZXJ2ZWQgc3BhY2UgaXMgTk9UIHZpc2libGUgdG8gcmVhZGVycyB1bnRp bCBibG9nX2xvZ19jb21taXQoKSBpcw0KPiArICogY2FsbGVkIGFmdGVyIHNlcmlhbGl6YXRpb24g Y29tcGxldGVzLiBUaGlzIHByZXZlbnRzIHJlYWRlcnMgZnJvbSBzZWVpbmcNCj4gKyAqIHBhcnRp YWxseS13cml0dGVuIGVudHJpZXMuDQo+ICsgKg0KPiArICogSWYgYWxsb2NhdGlvbiBmYWlscywg dGhlIHBhZ2VmcmFnIGlzIHJlc2V0IGFuZCByZXRyaWVkIHVwIHRvIDMgdGltZXMuDQo+ICsgKiBQ YXlsb2FkIG11c3Qgbm90IGV4Y2VlZCBCTE9HX01BWF9QQVlMT0FEICgyNTUgYnl0ZXMpLg0KPiAr ICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3Mgb3Igc29mdGlycSAoYXV0b21hdGljYWxseSBzZWxl Y3RzIGFwcHJvcHJpYXRlIGNvbnRleHQpDQo+ICsgKiBSZXR1cm46IEJ1ZmZlciBwb2ludGVyIHRv IHdyaXRlIHNlcmlhbGl6ZWQgZGF0YSwgb3IgTlVMTCBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3Zv aWQgKmJsb2dfbG9nKHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyLCB1MzIgc291cmNlX2lkLCB1 OCBjbGllbnRfaWQsDQo+ICsJICAgICAgIHNpemVfdCBuZWVkZWRfc2l6ZSk7DQo+ICsNCj4gKy8q Kg0KPiArICogYmxvZ19sb2dfY29tbWl0IC0gUHVibGlzaCBhIHJlc2VydmVkIGxvZyBlbnRyeQ0K PiArICogQGxvZ2dlcjogTG9nZ2VyIGluc3RhbmNlDQo+ICsgKiBAYWN0dWFsX3NpemU6IEFjdHVh bCBieXRlcyB3cml0dGVuIGR1cmluZyBzZXJpYWxpemF0aW9uDQo+ICsgKg0KPiArICogUHVibGlz aGVzIHRoZSBsb2cgZW50cnkgdGhhdCB3YXMgcmVzZXJ2ZWQgYnkgdGhlIGxhc3QgYmxvZ19sb2co KSBjYWxsLA0KPiArICogbWFraW5nIGl0IHZpc2libGUgdG8gcmVhZGVycy4gTXVzdCBiZSBjYWxs ZWQgYWZ0ZXIgc2VyaWFsaXphdGlvbiBpcyBjb21wbGV0ZS4NCj4gKyAqDQo+ICsgKiBUaGUgYWN0 dWFsX3NpemUgc2hvdWxkIGJlIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgd3JpdHRlbiwg d2hpY2ggbWF5IGJlDQo+ICsgKiBsZXNzIHRoYW4gdGhlIHdvcnN0LWNhc2Ugc2l6ZSByZXNlcnZl ZCAoZS5nLiwgc3RyaW5ncyBtYXkgYmUgc2hvcnRlciB0aGFuIDI1NSkuDQo+ICsgKg0KPiArICog VXNlcyBtZW1vcnkgYmFycmllciB0byBlbnN1cmUgYWxsIHdyaXRlcyBhcmUgdmlzaWJsZSBiZWZv cmUgbWFraW5nIGVudHJ5DQo+ICsgKiB2aXNpYmxlIHRvIHJlYWRlcnMuDQo+ICsgKg0KPiArICog Q29udGV4dDogU2FtZSBjb250ZXh0IGFzIHRoZSBwcmVjZWRpbmcgYmxvZ19sb2coKSBjYWxsDQo+ ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJl DQo+ICsgKi8NCj4gK2ludCBibG9nX2xvZ19jb21taXQoc3RydWN0IGJsb2dfbG9nZ2VyICpsb2dn ZXIsIHNpemVfdCBhY3R1YWxfc2l6ZSk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19nZXRfdGxz X2N0eCAtIEdldCBvciBjcmVhdGUgcGVyLXRhc2sgbG9nZ2luZyBjb250ZXh0DQo+ICsgKiBAbG9n Z2VyOiBMb2dnZXIgaW5zdGFuY2UgdG8gdXNlDQo+ICsgKg0KPiArICogUmV0dXJucyB0aGUgQkxP RyBjb250ZXh0IGZvciB0aGUgY3VycmVudCB0YXNrLCBjcmVhdGluZyBpdCBpZiBuZWVkZWQuDQo+ ICsgKiBFYWNoIHRhc2sgaGFzIGEgNTEyS0IgcGFnZWZyYWcgYnVmZmVyIGZvciBsb2dnaW5nLiBU aGlzIGZ1bmN0aW9uIHNob3VsZA0KPiArICogbm90IGJlIGNhbGxlZCBkaXJlY3RseSAtIHVzZSBi bG9nX2dldF9jdHgoKSBpbnN0ZWFkLg0KDQpJZiB0aGlzIGZ1bmN0aW9uIHNob3VsZCBub3QgYmUg Y2FsbGVkIGRpcmVjdGx5LCB0aGVuIHdoYXQgaXMgdGhlIHBvaW50IHRvDQpkZWNsYXJlIGl0IGhl cmU/IA0KDQo+ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0IG9ubHkgKHVzZXMg Y3VycmVudCB0YXNrKQ0KPiArICogUmV0dXJuOiBUTFMgY29udGV4dCBwb2ludGVyLCBvciBOVUxM IG9uIGFsbG9jYXRpb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdHJ1Y3QgYmxvZ190bHNfY3R4ICpi bG9nX2dldF90bHNfY3R4KHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyKTsNCj4gKw0KPiArLyoq DQo+ICsgKiBibG9nX2dldF9uYXBpX2N0eCAtIEdldCBOQVBJIGxvZ2dpbmcgY29udGV4dCBmb3Ig Y3VycmVudCBDUFUNCj4gKyAqIEBsb2dnZXI6IExvZ2dlciBpbnN0YW5jZSB0byB1c2UNCj4gKyAq DQo+ICsgKiBSZXR1cm5zIHRoZSBOQVBJIChzb2Z0aXJxKSBjb250ZXh0IGZvciB0aGUgY3VycmVu dCBDUFUuIE5BUEkgY29udGV4dHMNCj4gKyAqIG11c3QgYmUgZXhwbGljaXRseSBzZXQgdmlhIGJs b2dfc2V0X25hcGlfY3R4KCkgYmVmb3JlIHVzZS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBTb2Z0 aXJxIGNvbnRleHQNCj4gKyAqIFJldHVybjogTkFQSSBjb250ZXh0IHBvaW50ZXIsIG9yIE5VTEwg aWYgbm90IHNldA0KPiArICovDQo+ICtzdHJ1Y3QgYmxvZ190bHNfY3R4ICpibG9nX2dldF9uYXBp X2N0eChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcik7DQo+ICsNCj4gKy8qKg0KPiArICogYmxv Z19zZXRfbmFwaV9jdHggLSBTZXQgTkFQSSBsb2dnaW5nIGNvbnRleHQgZm9yIGN1cnJlbnQgQ1BV DQo+ICsgKiBAbG9nZ2VyOiBMb2dnZXIgaW5zdGFuY2UNCj4gKyAqIEBjdHg6IENvbnRleHQgdG8g YXNzb2NpYXRlIHdpdGggdGhpcyBDUFUncyBOQVBJIHByb2Nlc3NpbmcNCj4gKyAqDQo+ICsgKiBB c3NvY2lhdGVzIGEgbG9nZ2luZyBjb250ZXh0IHdpdGggdGhlIGN1cnJlbnQgQ1BVIGZvciB1c2Ug ZHVyaW5nDQo+ICsgKiBzb2Z0aXJxIChOQVBJKSBwcm9jZXNzaW5nLiBUaGlzIGFsbG93cyBuZXR3 b3JrIGRyaXZlcnMgYW5kIG90aGVyDQo+ICsgKiBzb2Z0aXJxIGhhbmRsZXJzIHRvIGxvZyB3aXRo b3V0IGFjY2Vzc2luZyBwZXItdGFzayBjb250ZXh0cy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBB bnkgY29udGV4dCAodHlwaWNhbGx5IGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24pDQo+ICsg KiBSZXR1cm46IHZvaWQNCj4gKyAqLw0KPiArdm9pZCBibG9nX3NldF9uYXBpX2N0eChzdHJ1Y3Qg YmxvZ19sb2dnZXIgKmxvZ2dlciwgc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4KTsNCj4gKw0KPiAr LyoqDQo+ICsgKiBibG9nX2dldF9jdHggLSBHZXQgYXBwcm9wcmlhdGUgbG9nZ2luZyBjb250ZXh0 IGJhc2VkIG9uIGV4ZWN1dGlvbiBjb250ZXh0DQo+ICsgKiBAbG9nZ2VyOiBMb2dnZXIgaW5zdGFu Y2UgdG8gdXNlDQo+ICsgKg0KPiArICogQXV0b21hdGljYWxseSBzZWxlY3RzIHRoZSBjb3JyZWN0 IGNvbnRleHQ6DQo+ICsgKiAtIFNvZnRpcnEgY29udGV4dDogUmV0dXJucyBOQVBJIGNvbnRleHQg KG9yIGZhbGxzIGJhY2sgdG8gVExTKQ0KPiArICogLSBQcm9jZXNzIGNvbnRleHQ6IFJldHVybnMg cGVyLXRhc2sgVExTIGNvbnRleHQNCj4gKyAqDQo+ICsgKiBUaGlzIGlzIHRoZSByZWNvbW1lbmRl ZCBmdW5jdGlvbiBmb3IgZ2V0dGluZyBjb250ZXh0cy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBB bnkgY29udGV4dA0KPiArICogUmV0dXJuOiBMb2dnaW5nIGNvbnRleHQgcG9pbnRlciwgb3IgTlVM TCBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX3Rsc19jdHggKmJsb2dfZ2V0X2N0 eChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcik7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19s b2dfaXRlcl9pbml0IC0gSW5pdGlhbGl6ZSBpdGVyYXRvciBmb3IgcmVhZGluZyBsb2cgZW50cmll cw0KPiArICogQGl0ZXI6IEl0ZXJhdG9yIHN0cnVjdHVyZSB0byBpbml0aWFsaXplDQo+ICsgKiBA cGY6IFBhZ2VmcmFnIGNvbnRhaW5pbmcgbG9nIGVudHJpZXMgdG8gaXRlcmF0ZSBvdmVyDQo+ICsg KiBAaGVhZF9zbmFwc2hvdDogU25hcHNob3Qgb2YgcGYtPmhlYWQgYXQgbG9jayBhY3F1aXNpdGlv biB0aW1lDQo+ICsgKg0KPiArICogUHJlcGFyZXMgYW4gaXRlcmF0b3IgdG8gd2FsayB0aHJvdWdo IGFsbCBsb2cgZW50cmllcyBpbiBhIHBhZ2VmcmFnLg0KPiArICogVGhlIGhlYWRfc25hcHNob3Qg cGFyYW1ldGVyIGRlZmluZXMgdGhlIGJvdW5kYXJ5IC0gb25seSBlbnRyaWVzIHVwIHRvDQo+ICsg KiB0aGlzIG9mZnNldCB3aWxsIGJlIGl0ZXJhdGVkLiBDYWxsZXIgbXVzdCBob2xkIHBmLT5sb2Nr IHRocm91Z2hvdXQNCj4gKyAqIGl0ZXJhdGlvbiB0byBwcmV2ZW50IGJ1ZmZlciByZXNldC9yZWN5 Y2xpbmcuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQNCj4gKyAqIFJldHVybjog dm9pZA0KPiArICovDQo+ICt2b2lkIGJsb2dfbG9nX2l0ZXJfaW5pdChzdHJ1Y3QgYmxvZ19sb2df aXRlciAqaXRlciwgc3RydWN0IGJsb2dfcGFnZWZyYWcgKnBmLA0KPiArCQkJdTY0IGhlYWRfc25h cHNob3QpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfbG9nX2l0ZXJfbmV4dCAtIEdldCBuZXh0 IGxvZyBlbnRyeSBmcm9tIGl0ZXJhdG9yDQo+ICsgKiBAaXRlcjogSXRlcmF0b3IgcHJldmlvdXNs eSBpbml0aWFsaXplZCB3aXRoIGJsb2dfbG9nX2l0ZXJfaW5pdCgpDQo+ICsgKg0KPiArICogQWR2 YW5jZXMgdGhlIGl0ZXJhdG9yIHRvIHRoZSBuZXh0IGxvZyBlbnRyeSBpbiB0aGUgcGFnZWZyYWcu DQo+ICsgKiBFbnRyaWVzIGFyZSByZXR1cm5lZCBpbiBjaHJvbm9sb2dpY2FsIG9yZGVyIChvcmRl ciB0aGV5IHdlcmUgbG9nZ2VkKS4NCj4gKyAqDQo+ICsgKiBJTVBPUlRBTlQ6IENhbGxlciBtdXN0 IGhvbGQgcGYtPmxvY2sgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgaXRlcmF0aW9uDQo+ICsg KiAoZnJvbSBibG9nX2xvZ19pdGVyX2luaXQoKSB0aHJvdWdoIGFsbCBibG9nX2xvZ19pdGVyX25l eHQoKSBjYWxscyB1bnRpbA0KPiArICogaXRlcmF0aW9uIGNvbXBsZXRlcykuIFRoaXMgcHJldmVu dHMgYmxvZ19wYWdlZnJhZ19yZXNldCgpIGZyb20gY2xlYXJpbmcNCj4gKyAqIHRoZSBidWZmZXIg bWlkLWl0ZXJhdGlvbi4gV3JpdGVycyByZW1haW4gbG9ja2xlc3MgYW5kIG5ldmVyIHRha2UgcGYt PmxvY2suDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQsIHdpdGggcGYtPmxvY2sg aGVsZA0KPiArICogUmV0dXJuOiBQb2ludGVyIHRvIG5leHQgbG9nIGVudHJ5LCBvciBOVUxMIHdo ZW4gbm8gbW9yZSBlbnRyaWVzDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX2xvZ19lbnRyeSAqYmxv Z19sb2dfaXRlcl9uZXh0KHN0cnVjdCBibG9nX2xvZ19pdGVyICppdGVyKTsNCj4gKw0KPiArLyoq DQo+ICsgKiBibG9nX2Rlc19lbnRyeSAtIERlc2VyaWFsaXplIGEgbG9nIGVudHJ5IGludG8gaHVt YW4tcmVhZGFibGUgZm9ybWF0DQo+ICsgKiBAbG9nZ2VyOiBMb2dnZXIgaW5zdGFuY2UgKGZvciBz b3VyY2UgbWFwIGxvb2t1cCkNCj4gKyAqIEBlbnRyeTogTG9nIGVudHJ5IHRvIGRlc2VyaWFsaXpl DQo+ICsgKiBAb3V0cHV0OiBCdWZmZXIgdG8gd3JpdGUgZm9ybWF0dGVkIHN0cmluZyB0bw0KPiAr ICogQG91dF9zaXplOiBTaXplIG9mIG91dHB1dCBidWZmZXIgaW4gYnl0ZXMNCj4gKyAqIEBjbGll bnRfY2I6IE9wdGlvbmFsIGNhbGxiYWNrIHRvIGhhbmRsZSBtb2R1bGUtc3BlY2lmaWMgY2xpZW50 X2lkIGZvcm1hdHRpbmcNCj4gKyAqDQo+ICsgKiBSZWNvbnN0cnVjdHMgYSBmb3JtYXR0ZWQgbG9n IG1lc3NhZ2UgZnJvbSBiaW5hcnkgbG9nIGVudHJ5LiBVc2VzIHRoZQ0KPiArICogc291cmNlX2lk IHRvIGxvb2sgdXAgdGhlIGZvcm1hdCBzdHJpbmcsIHRoZW4gZGVzZXJpYWxpemVzIHRoZSBlbnRy eSdzDQo+ICsgKiBidWZmZXIgYWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgc3BlY2lmaWVycy4NCj4g KyAqDQo+ICsgKiBJZiBjbGllbnRfY2IgaXMgcHJvdmlkZWQsIGl0J3MgY2FsbGVkIHRvIGZvcm1h dCB0aGUgY2xpZW50X2lkIHByZWZpeC4NCj4gKyAqIE90aGVyd2lzZSwgY2xpZW50X2lkIGlzIGln bm9yZWQuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQNCj4gKyAqIFJldHVybjog TnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gb3V0cHV0IGJ1ZmZlciwgb3IgbmVnYXRpdmUgZXJy b3IgY29kZQ0KPiArICovDQo+ICtpbnQgYmxvZ19kZXNfZW50cnkoc3RydWN0IGJsb2dfbG9nZ2Vy ICpsb2dnZXIsIHN0cnVjdCBibG9nX2xvZ19lbnRyeSAqZW50cnksDQo+ICsJCSAgIGNoYXIgKm91 dHB1dCwgc2l6ZV90IG91dF9zaXplLA0KPiArCQkgICBibG9nX2NsaWVudF9kZXNfZm4gY2xpZW50 X2NiKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2xvZ2dlcl9wcmludF9zdGF0cyAtIFByaW50 IGxvZ2dlciBzdGF0aXN0aWNzIHRvIGtlcm5lbCBsb2cNCj4gKyAqIEBsb2dnZXI6IExvZ2dlciBp bnN0YW5jZSB0byBwcmludCBzdGF0cyBmb3INCj4gKyAqDQo+ICsgKiBEZWJ1ZyBoZWxwZXIgdGhh dCBwcmludHMgY3VycmVudCBzdGF0ZSBvZiBsb2dnZXIncyBiYXRjaGluZyBzeXN0ZW0NCj4gKyAq IGFuZCBjb250ZXh0IGNvdW50cy4gT3V0cHV0IGdvZXMgdG8ga2VybmVsIGxvZyBhdCBkZWJ1ZyBs ZXZlbC4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dA0KPiArICogUmV0dXJuOiB2 b2lkDQo+ICsgKi8NCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBibG9nX2xvZ2dlcl9wcmludF9zdGF0 cyhzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcikNCj4gK3sNCj4gKwlwcl9kZWJ1ZygNCj4gKwkJ ImJsb2c6IHRvdGFsX2NvbnRleHRzPSVsdSwgYWxsb2NfYmF0Y2g9e2VtcHR5PSVkLCBmdWxsPSVk fSwgbG9nX2JhdGNoPXtlbXB0eT0lZCwgZnVsbD0lZH1cbiIsDQo+ICsJCWxvZ2dlci0+dG90YWxf Y29udGV4dHNfYWxsb2NhdGVkLCBsb2dnZXItPmFsbG9jX2JhdGNoLm5yX2VtcHR5LA0KPiArCQls b2dnZXItPmFsbG9jX2JhdGNoLm5yX2Z1bGwsIGxvZ2dlci0+bG9nX2JhdGNoLm5yX2VtcHR5LA0K PiArCQlsb2dnZXItPmxvZ19iYXRjaC5ucl9mdWxsKTsNCg0KRG8gd2UgaGF2ZSBtdWx0aXBsZSBs b2dnZXIgaW5zdGFuY2VzPyBJZiBzbywgdGhlbiBob3cgY2FuIHdlIGRpc3Rpbmd1aXNoIHRoZQ0K b3V0cHV0IGZyb20gZGlmZmVyZW50IHRocmVhZHM/DQoNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsg KiBibG9nX2lzX3ZhbGlkX2tlcm5lbF9hZGRyIC0gQ2hlY2sgaWYgYWRkcmVzcyBpcyBpbiB2YWxp ZCBrZXJuZWwgcmFuZ2UNCj4gKyAqIEBhZGRyOiBBZGRyZXNzIHRvIHZhbGlkYXRlDQo+ICsgKg0K PiArICogVmVyaWZpZXMgdGhhdCBhbiBhZGRyZXNzIHBvaW50cyB0byB2YWxpZCBrZXJuZWwgbWVt b3J5IHVzaW5nDQo+ICsgKiB2aXJ0X2FkZHJfdmFsaWQoKS4gVXNlZCBpbnRlcm5hbGx5IGZvciBz YW5pdHkgY2hlY2tpbmcuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQNCj4gKyAq IFJldHVybjogdHJ1ZSBpZiBhZGRyZXNzIGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UNCj4gKyAq Lw0KPiArYm9vbCBibG9nX2lzX3ZhbGlkX2tlcm5lbF9hZGRyKGNvbnN0IHZvaWQgKmFkZHIpOw0K PiArDQo+ICsvKioNCj4gKyAqIGJsb2dfY3R4X2NvbnRhaW5lciAtIEdldCBjb21wb3NpdGUgY29u dGFpbmVyIGZyb20gVExTIGNvbnRleHQgcG9pbnRlcg0KPiArICogQGN0eDogVExTIGNvbnRleHQg cG9pbnRlcg0KPiArICoNCj4gKyAqIFJldHVybnMgdGhlIGNvbnRhaW5pbmcgYmxvZ190bHNfcGFn ZWZyYWcgY29tcG9zaXRlIHRoYXQgaG9sZHMgdGhpcyBjb250ZXh0Lg0KPiArICogVXNlZCBpbnRl cm5hbGx5IHRvIGFjY2VzcyB0aGUgaW5saW5lIGJ1ZmZlciBhbmQgcGFnZWZyYWcgZmllbGRzLg0K PiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0DQo+ICsgKiBSZXR1cm46IFBvaW50ZXIg dG8gY29udGFpbmluZyBibG9nX3Rsc19wYWdlZnJhZyBjb21wb3NpdGUNCj4gKyAqLw0KPiArc3Rh dGljIGlubGluZSBzdHJ1Y3QgYmxvZ190bHNfcGFnZWZyYWcgKmJsb2dfY3R4X2NvbnRhaW5lcihz dHJ1Y3QgYmxvZ190bHNfY3R4ICpjdHgpDQo+ICt7DQo+ICsJcmV0dXJuIGNvbnRhaW5lcl9vZihj dHgsIHN0cnVjdCBibG9nX3Rsc19wYWdlZnJhZywgY3R4KTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgKiBibG9nX2N0eF9idWZmZXIgLSBHZXQgaW5saW5lIGJ1ZmZlciBwb2ludGVyIGZyb20gVExT IGNvbnRleHQNCj4gKyAqIEBjdHg6IFRMUyBjb250ZXh0IHBvaW50ZXINCj4gKyAqDQo+ICsgKiBS ZXR1cm5zIHBvaW50ZXIgdG8gdGhlIDUxMktCIGlubGluZSBidWZmZXIgd2l0aGluIHRoZSBjb21w b3NpdGUuDQo+ICsgKiBUaGlzIGJ1ZmZlciBpcyB3aGVyZSBsb2cgZW50cmllcyBhcmUgc3RvcmVk Lg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0DQo+ICsgKiBSZXR1cm46IFBvaW50 ZXIgdG8gaW5saW5lIGJ1ZmZlcg0KPiArICovDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgKmJsb2df Y3R4X2J1ZmZlcihzdHJ1Y3QgYmxvZ190bHNfY3R4ICpjdHgpDQoNCkRvZXMgYnVmIGhhdmUgdW5z aWduZWQgY2hhciBkYXRhIHR5cGU/DQoNCj4gK3sNCj4gKwlyZXR1cm4gYmxvZ19jdHhfY29udGFp bmVyKGN0eCktPmJ1ZjsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2N0eF9wZiAtIEdl dCBwYWdlZnJhZyBzdHJ1Y3R1cmUgZnJvbSBUTFMgY29udGV4dA0KPiArICogQGN0eDogVExTIGNv bnRleHQgcG9pbnRlcg0KPiArICoNCj4gKyAqIFJldHVybnMgcG9pbnRlciB0byB0aGUgZW1iZWRk ZWQgcGFnZWZyYWcgYWxsb2NhdG9yIHdpdGhpbiB0aGUgY29tcG9zaXRlLg0KPiArICogVGhlIHBh Z2VmcmFnJ3MgYnVmZmVyIHBvaW50ZXIgaXMgaW5pdGlhbGl6ZWQgdG8gcG9pbnQgYXQgdGhlIGlu bGluZSBidWZmZXIuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQNCj4gKyAqIFJl dHVybjogUG9pbnRlciB0byBlbWJlZGRlZCBwYWdlZnJhZyBzdHJ1Y3R1cmUNCj4gKyAqLw0KPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgYmxvZ19wYWdlZnJhZyAqYmxvZ19jdHhfcGYoc3RydWN0IGJs b2dfdGxzX2N0eCAqY3R4KQ0KPiArew0KPiArCXJldHVybiAmYmxvZ19jdHhfY29udGFpbmVyKGN0 eCktPnBmOw0KPiArfQ0KPiArDQo+ICsvKg0KPiArICogTm8gZ2xvYmFsIGxvZ2dpbmcgbWFjcm9z IC0gYWxsIGxvZ2dpbmcgbXVzdCB1c2UgcGVyLW1vZHVsZSBjb250ZXh0cw0KPiArICogVXNlIEJM T0dfTE9HX0NUWCgpIGFuZCBCTE9HX0xPR19DTElFTlRfQ1RYKCkgZnJvbSBibG9nX21vZHVsZS5o IGluc3RlYWQNCj4gKyAqLw0KPiArDQo+ICsvKg0KPiArICogVGhlc2UgbG93LWxldmVsIGxvZ2dl ciBtYWNyb3MgYXJlIGRlcHJlY2F0ZWQuDQo+ICsgKiBVc2UgQkxPR19MT0dfQ1RYKCkgYW5kIEJM T0dfTE9HX0NMSUVOVF9DVFgoKSBmcm9tIGJsb2dfbW9kdWxlLmggaW5zdGVhZC4NCj4gKyAqLw0K DQpUaGVzZSBjb21tZW50cyBsb29rIHN0cmFuZ2UgaGVyZS4NCg0KPiArDQo+ICsjZW5kaWYgLyog X0xJTlVYX0JMT0dfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ibG9nL2Jsb2df YmF0Y2guaCBiL2luY2x1ZGUvbGludXgvYmxvZy9ibG9nX2JhdGNoLmgNCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi45NzUyMjcyYTY2ZmUNCj4gLS0tIC9kZXYv bnVsbA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19iYXRjaC5oDQo+IEBAIC0wLDAg KzEsNTQgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ICsv Kg0KPiArICogQmluYXJ5IExvZ2dpbmcgQmF0Y2ggTWFuYWdlbWVudA0KPiArICovDQo+ICsjaWZu ZGVmIF9MSU5VWF9CTE9HX0JBVENIX0gNCj4gKyNkZWZpbmUgX0xJTlVYX0JMT0dfQkFUQ0hfSA0K PiArDQo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wZXJj cHUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L2xpc3QuaD4NCj4gKw0KPiArLyogU2l6ZSBvZiBlYWNoIG1hZ2F6aW5lIChudW1iZXIgb2YgZWxl bWVudHMgaXQgY2FuIGhvbGQpICovDQo+ICsjZGVmaW5lIEJMT0dfTUFHQVpJTkVfU0laRSAxNg0K PiArDQo+ICsvKiBTdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgc2luZ2xlIG1hZ2F6aW5lICovDQo+ ICtzdHJ1Y3QgYmxvZ19tYWdhemluZSB7DQo+ICsJc3RydWN0IGxpc3RfaGVhZCBsaXN0OyAgICAg IC8qIEZvciBsaW5raW5nIGluIGdsb2JhbCBwb29scyAqLw0KPiArCXVuc2lnbmVkIGludCBjb3Vu dDsgICAgICAgICAvKiBOdW1iZXIgb2YgZWxlbWVudHMgY3VycmVudGx5IGluIG1hZ2F6aW5lICov DQo+ICsJdm9pZCAqZWxlbWVudHNbQkxPR19NQUdBWklORV9TSVpFXTsNCj4gK307DQo+ICsNCj4g Ky8qIFBlci1DUFUgbWFnYXppbmUgc3RhdGUgKi8NCj4gK3N0cnVjdCBibG9nX2NwdV9tYWdhemlu ZSB7DQo+ICsJc3RydWN0IGJsb2dfbWFnYXppbmUgKm1hZzsgIC8qIEN1cnJlbnQgbWFnYXppbmUg Zm9yIHRoaXMgQ1BVICovDQo+ICt9Ow0KPiArDQo+ICsvKiBHbG9iYWwgbWFnYXppbmUgcG9vbHMg Ki8NCj4gK3N0cnVjdCBibG9nX2JhdGNoIHsNCj4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGxfbWFn YXppbmVzOyAgIC8qIExpc3Qgb2YgZnVsbCBtYWdhemluZXMgKi8NCj4gKwlzdHJ1Y3QgbGlzdF9o ZWFkIGVtcHR5X21hZ2F6aW5lczsgIC8qIExpc3Qgb2YgZW1wdHkgbWFnYXppbmVzICovDQo+ICsJ c3BpbmxvY2tfdCBmdWxsX2xvY2s7ICAgICAgICAgICAgICAvKiBQcm90ZWN0cyBmdWxsIG1hZ2F6 aW5lIGxpc3QgYW5kIGNvdW50ICovDQo+ICsJc3BpbmxvY2tfdCBlbXB0eV9sb2NrOyAgICAgICAg ICAgICAvKiBQcm90ZWN0cyBlbXB0eSBtYWdhemluZSBsaXN0IGFuZCBjb3VudCAqLw0KPiArCXVu c2lnbmVkIGludCBucl9mdWxsOyAgICAgICAgICAgICAgLyogUHJvdGVjdGVkIGJ5IGZ1bGxfbG9j ayAqLw0KPiArCXVuc2lnbmVkIGludCBucl9lbXB0eTsgICAgICAgICAgICAgLyogUHJvdGVjdGVk IGJ5IGVtcHR5X2xvY2sgKi8NCj4gKwlzdHJ1Y3QgYmxvZ19jcHVfbWFnYXppbmUgX19wZXJjcHUg KmNwdV9tYWdhemluZXM7IC8qIFBlci1DUFUgbWFnYXppbmVzICovDQo+ICsJc3RydWN0IGttZW1f Y2FjaGUgKm1hZ2F6aW5lX2NhY2hlOyAvKiBDYWNoZSBmb3IgbWFnYXppbmUgc3RydWN0dXJlcyB0 aGVtc2VsdmVzICovDQoNCkRvZXMgaXQgcHJvdGVjdGVkIGJ5IHNvbWUgbG9jaz8NCg0KPiArCWJv b2wgZXh0ZXJuYWxfY2FjaGU7ICAgICAgICAgICAgICAgLyogVHJ1ZSB3aGVuIG1hZ2F6aW5lX2Nh Y2hlIG93bmVkIGJ5IGNhbGxlciAqLw0KPiArfTsNCg0KSXQgbG9va3MgbGlrZSB0aGVyZSBpcyBu ZWNlc3NpdHkgdG8gaW50cm9kdWNlIGF1eGlsaWFyeSBzdHJ1Y3R1cmUgaGVyZToNCg0Kc3RydWN0 IG1hZ2F6aW5lc19saXN0IHsNCiAgICBzcGlubG9ja190IGxvY2s7DQogICAgc3RydWN0IGxpc3Rf aGVhZCBtYWdhemluZXM7DQogICAgdW5zaWduZWQgaW50IG5yOw0KfTsNCg0Kc3RydWN0IGJsb2df YmF0Y2ggew0KICAgIHN0cnVjdCBtYWdhemluZXNfbGlzdCBmdWxsOw0KICAgIHN0cnVjdCBtYWdh emluZXNfbGlzdCBlbXB0eTsNCiAgICBzdHJ1Y3QgYmxvZ19jcHVfbWFnYXppbmUgX19wZXJjcHUg KmNwdV9tYWdhemluZXM7DQogICAgc3RydWN0IGttZW1fY2FjaGUgKm1hZ2F6aW5lX2NhY2hlOw0K ICAgIGJvb2wgZXh0ZXJuYWxfY2FjaGU7DQp9Ow0KDQo+ICsNCj4gKy8qIEluaXRpYWxpemUgdGhl IGJhdGNoaW5nIHN5c3RlbSAqLw0KPiAraW50IGJsb2dfYmF0Y2hfaW5pdChzdHJ1Y3QgYmxvZ19i YXRjaCAqYmF0Y2gsIHN0cnVjdCBrbWVtX2NhY2hlICptYWdfY2FjaGUsDQo+ICsJCSAgICBib29s IHByZXBvcHVsYXRlKTsNCj4gKw0KPiArLyogQ2xlYW4gdXAgdGhlIGJhdGNoaW5nIHN5c3RlbSAq Lw0KPiArdm9pZCBibG9nX2JhdGNoX2NsZWFudXAoc3RydWN0IGJsb2dfYmF0Y2ggKmJhdGNoKTsN Cj4gKw0KPiArLyogR2V0IGFuIGVsZW1lbnQgZnJvbSB0aGUgYmF0Y2ggKi8NCj4gK3ZvaWQgKmJs b2dfYmF0Y2hfZ2V0KHN0cnVjdCBibG9nX2JhdGNoICpiYXRjaCk7DQo+ICsNCj4gKy8qIFB1dCBh biBlbGVtZW50IGJhY2sgaW50byB0aGUgYmF0Y2ggKi8NCj4gK3ZvaWQgYmxvZ19iYXRjaF9wdXQo c3RydWN0IGJsb2dfYmF0Y2ggKmJhdGNoLCB2b2lkICplbGVtZW50KTsNCj4gKw0KPiArI2VuZGlm IC8qIF9MSU5VWF9CTE9HX0JBVENIX0ggKi8NCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgv YmxvZy9ibG9nX2Rlcy5oIGIvaW5jbHVkZS9saW51eC9ibG9nL2Jsb2dfZGVzLmgNCj4gbmV3IGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi5hOTA3NmU4OTkxN2MNCj4gLS0t IC9kZXYvbnVsbA0KPiArKysgYi9pbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19kZXMuaA0KPiBAQCAt MCwwICsxLDQ2IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0K PiArLyoNCj4gKyAqIEJpbmFyeSBMb2dnaW5nIERlc2VyaWFsaXphdGlvbg0KPiArICovDQo+ICsj aWZuZGVmIF9MSU5VWF9CTE9HX0RFU19IDQo+ICsjZGVmaW5lIF9MSU5VWF9CTE9HX0RFU19IDQo+ ICsNCj4gKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiAvKiBGb3Igc2l6ZV90ICovDQo+ICsNCj4g Ky8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovDQo+ICtzdHJ1Y3QgYmxvZ19sb2dfZW50cnk7DQo+ ICtzdHJ1Y3QgYmxvZ19sb2dnZXI7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19kZXNfcmVjb25z dHJ1Y3QgLSBSZWNvbnN0cnVjdHMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gc2VyaWFsaXplZCB2 YWx1ZXMNCj4gKyAqIEBmbXQ6IEZvcm1hdCBzdHJpbmcgY29udGFpbmluZyAlIHNwZWNpZmllcnMN Cj4gKyAqIEBidWZmZXI6IEJ1ZmZlciBjb250YWluaW5nIHNlcmlhbGl6ZWQgdmFsdWVzDQo+ICsg KiBAbnJfYXJnczogTnVtYmVyIG9mIGFyZ3VtZW50cyB0byBwcm9jZXNzDQo+ICsgKiBAc2l6ZTog U2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzDQo+ICsgKiBAb3V0OiBCdWZmZXIgdG8gc3RvcmUg dGhlIHJlY29uc3RydWN0ZWQgc3RyaW5nDQo+ICsgKiBAb3V0X3NpemU6IFNpemUgb2YgdGhlIG91 dHB1dCBidWZmZXINCj4gKyAqDQo+ICsgKiBUaGUgZnVuY3Rpb24gdXNlcyB0aGUgZm9ybWF0IHN0 cmluZyB0byBkZXRlcm1pbmUgdGhlIHR5cGVzIGFuZCBudW1iZXIgb2YgdmFsdWVzDQo+ICsgKiB0 byBleHRyYWN0IGZyb20gdGhlIGJ1ZmZlci4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IE51bWJlciBv ZiBieXRlcyB3cml0dGVuIHRvIG91dCBidWZmZXIsIG9yIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24g ZmFpbHVyZQ0KPiArICovDQo+ICtpbnQgYmxvZ19kZXNfcmVjb25zdHJ1Y3QoY29uc3QgY2hhciAq Zm10LCBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBucl9hcmdzLA0KPiArCQkJICBzaXplX3Qg c2l6ZSwgY2hhciAqb3V0LCBzaXplX3Qgb3V0X3NpemUpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJs b2dfbG9nX3JlY29uc3RydWN0IC0gUmVjb25zdHJ1Y3RzIGEgZm9ybWF0dGVkIHN0cmluZyBmcm9t IGEgbG9nIGVudHJ5DQo+ICsgKiBAZW50cnk6IExvZyBlbnRyeSBjb250YWluaW5nIHNlcmlhbGl6 ZWQgZGF0YQ0KPiArICogQG91dHB1dDogQnVmZmVyIHRvIHdyaXRlIHRoZSBmb3JtYXR0ZWQgc3Ry aW5nIHRvDQo+ICsgKiBAb3V0cHV0X3NpemU6IFNpemUgb2YgdGhlIG91dHB1dCBidWZmZXINCj4g KyAqDQo+ICsgKiBUaGlzIGlzIGEgd3JhcHBlciBhcm91bmQgYmxvZ19kZXNfcmVjb25zdHJ1Y3Qg dGhhdCBoYW5kbGVzIGxvZyBlbnRyeSBwYXJzaW5nLg0KPiArICogTm90ZTogVGhpcyBkb2VzIE5P VCBoYW5kbGUgY2xpZW50X2lkIC0gdGhlIGNhbGxlciBzaG91bGQgaGFuZGxlIHRoYXQgc2VwYXJh dGVseQ0KPiArICogdXNpbmcgdGhlaXIgbW9kdWxlLXNwZWNpZmljIGNhbGxiYWNrLg0KPiArICoN Cj4gKyAqIFJldHVybjogTGVuZ3RoIG9mIGZvcm1hdHRlZCBzdHJpbmcsIG9yIG5lZ2F0aXZlIGVy cm9yIGNvZGUgb24gZmFpbHVyZQ0KPiArICovDQo+ICtpbnQgYmxvZ19sb2dfcmVjb25zdHJ1Y3Qo c3RydWN0IGJsb2dfbG9nZ2VyICpsb2dnZXIsIGNvbnN0IHN0cnVjdCBibG9nX2xvZ19lbnRyeSAq ZW50cnksDQo+ICsJCQljaGFyICpvdXRwdXQsIHNpemVfdCBvdXRwdXRfc2l6ZSk7DQo+ICsNCj4g KyNlbmRpZiAvKiBfTElOVVhfQkxPR19ERVNfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9ibG9nL2Jsb2dfbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19tb2R1bGUu aA0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLjA2Mzk3MjA0 MDI3Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvYmxvZy9ibG9nX21v ZHVsZS5oDQo+IEBAIC0wLDAgKzEsMzI5IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmll cjogR1BMLTIuMCAqLw0KPiArLyoNCj4gKyAqIEJpbmFyeSBMb2dnaW5nIEluZnJhc3RydWN0dXJl IChCTE9HKSAtIFBlci1Nb2R1bGUgU3VwcG9ydA0KPiArICoNCj4gKyAqIFRoaXMgaGVhZGVyIGRl ZmluZXMgdGhlIHBlci1tb2R1bGUgY29udGV4dCBzdXBwb3J0IGZvciBCTE9HLg0KPiArICogRWFj aCBrZXJuZWwgbW9kdWxlIGNhbiBoYXZlIGl0cyBvd24gaXNvbGF0ZWQgbG9nZ2luZyBjb250ZXh0 Lg0KPiArICovDQo+ICsjaWZuZGVmIF9MSU5VWF9CTE9HX01PRFVMRV9IDQo+ICsjZGVmaW5lIF9M SU5VWF9CTE9HX01PRFVMRV9IDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9ibG9nL2Jsb2cuaD4N Cj4gKw0KPiArLyoqDQo+ICsgKiBzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAtIFBlci1tb2R1 bGUgQkxPRyBzdGF0ZQ0KPiArICogQG5hbWU6IE1vZHVsZSBuYW1lIChtYXggMzEgY2hhcnMgKyBu dWxsIHRlcm1pbmF0b3IpDQo+ICsgKiBAc2xvdF9pZDogQXNzaWduZWQgc2xvdCBJRCAoMC03KSBp biB0YXNrLT5ibG9nX2NvbnRleHRzIGFycmF5DQo+ICsgKiBAbG9nZ2VyOiBMb2dnZXIgaW5zdGFu Y2UgZm9yIHRoaXMgbW9kdWxlIChpc29sYXRlZCBmcm9tIG90aGVyIG1vZHVsZXMpDQo+ICsgKiBA bW9kdWxlX3ByaXZhdGU6IE9wYXF1ZSBwb2ludGVyIGZvciBtb2R1bGUtc3BlY2lmaWMgZGF0YQ0K PiArICogQGxpc3Q6IExpbmthZ2UgaW4gZ2xvYmFsIGxpc3Qgb2YgYWxsIG1vZHVsZSBjb250ZXh0 cw0KPiArICogQHJlZmNvdW50OiBSZWZlcmVuY2UgY291bnQgZm9yIG1vZHVsZSBjb250ZXh0IGxp ZmVjeWNsZQ0KPiArICogQGFsbG9jYXRlZF9jb250ZXh0czogTnVtYmVyIG9mIGNvbnRleHRzIGN1 cnJlbnRseSBhbGxvY2F0ZWQgKGluY2x1ZGVzIGZyZWVkIGJ1dCBub3QgeWV0IHJlY3ljbGVkKQ0K PiArICogQGluaXRpYWxpemVkOiBUcnVlIGFmdGVyIGJsb2dfbW9kdWxlX2luaXQoKSBzdWNjZWVk cw0KPiArICoNCj4gKyAqIFJlcHJlc2VudHMgYSByZWdpc3RlcmVkIEJMT0cgbW9kdWxlIHdpdGgg aXRzIG93biBpc29sYXRlZCBsb2dnZXIgaW5zdGFuY2UsDQo+ICsgKiBzbG90IElEIGZvciBPKDEp IHBlci10YXNrIGNvbnRleHQgYWNjZXNzLCBhbmQgaW5kZXBlbmRlbnQgc291cmNlIElEIG5hbWVz cGFjZS4NCj4gKyAqIENyZWF0ZWQgdmlhIGJsb2dfbW9kdWxlX2luaXQoKSBhbmQgZGVzdHJveWVk IHZpYSBibG9nX21vZHVsZV9jbGVhbnVwKCkuDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX21vZHVs ZV9jb250ZXh0IHsNCj4gKwljaGFyIG5hbWVbMzJdOw0KPiArCXU4IHNsb3RfaWQ7DQo+ICsJc3Ry dWN0IGJsb2dfbG9nZ2VyICpsb2dnZXI7DQo+ICsJdm9pZCAqbW9kdWxlX3ByaXZhdGU7DQo+ICsJ c3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KPiArCWF0b21pY190IHJlZmNvdW50Ow0KDQpXaHkgbm90 IHJlZmNvdW50X3Q/DQoNCj4gKwlhdG9taWNfdCBhbGxvY2F0ZWRfY29udGV4dHM7DQo+ICsJYm9v bCBpbml0aWFsaXplZDsNCj4gK307DQo+ICsNCj4gKy8qKg0KPiArICogc3RydWN0IGJsb2dfbW9k dWxlX3JlZ2lzdHJ5IC0gR2xvYmFsIHJlZ2lzdHJ5IG9mIGFsbCBCTE9HIG1vZHVsZXMNCj4gKyAq IEBtb2R1bGVzOiBBcnJheSBvZiByZWdpc3RlcmVkIG1vZHVsZSBjb250ZXh0cyAobWF4IDgpDQo+ ICsgKiBAYWxsb2NhdGVkX2JpdG1hcDogQml0bWFwIG9mIGFsbG9jYXRlZCBzbG90IElEcyAoOCBi aXRzKQ0KPiArICogQGxvY2s6IFByb3RlY3RzIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiBv cGVyYXRpb25zDQo+ICsgKiBAbW9kdWxlX2NvdW50OiBOdW1iZXIgb2YgY3VycmVudGx5IHJlZ2lz dGVyZWQgbW9kdWxlcw0KPiArICoNCj4gKyAqIEdsb2JhbCBzaW5nbGV0b24gdGhhdCB0cmFja3Mg YWxsIHJlZ2lzdGVyZWQgQkxPRyBtb2R1bGVzIGFuZCBhc3NpZ25zDQo+ICsgKiBzbG90IElEcy4g UHJvdGVjdGVkIGJ5IHNwaW5sb2NrIGZvciB0aHJlYWQtc2FmZSByZWdpc3RyYXRpb24uDQo+ICsg Ki8NCj4gK3N0cnVjdCBibG9nX21vZHVsZV9yZWdpc3RyeSB7DQo+ICsJc3RydWN0IGJsb2dfbW9k dWxlX2NvbnRleHQgKm1vZHVsZXNbQkxPR19NQVhfTU9EVUxFU107DQo+ICsJdTggYWxsb2NhdGVk X2JpdG1hcDsNCj4gKwlzcGlubG9ja190IGxvY2s7CQkvKiBwcm90ZWN0cyBtb2R1bGUgc3RhdGUg Ki8NCg0KRG9lcyBpdCBwcm90ZWN0IG1vZHVsZXM/IElmIHNvLCB3aHkgaXQgaXMgbm90IGxvY2F0 ZWQgYmVmb3JlIG1vZHVsZXM/DQoNCj4gKwlhdG9taWNfdCBtb2R1bGVfY291bnQ7DQo+ICt9Ow0K PiArDQo+ICsvKiBNb2R1bGUgcmVnaXN0cmF0aW9uIEFQSSAqLw0KPiArDQo+ICsvKioNCj4gKyAq IGJsb2dfbW9kdWxlX3JlZ2lzdGVyIC0gUmVnaXN0ZXIgYSBtb2R1bGUgYW5kIGFsbG9jYXRlIGEg c2xvdA0KPiArICogQG1vZHVsZV9uYW1lOiBOYW1lIG9mIHRoZSBtb2R1bGUgKG1heCAzMSBjaGFy cykNCj4gKyAqDQo+ICsgKiBSZWdpc3RlcnMgYSBtb2R1bGUgaW4gdGhlIGdsb2JhbCBCTE9HIHJl Z2lzdHJ5IGFuZCBhc3NpZ25zIGl0IGEgdW5pcXVlDQo+ICsgKiBzbG90IElEICgwLTcpLiBUaGUg c2xvdCBJRCBpcyB1c2VkIHRvIGluZGV4IGludG8gZWFjaCB0YXNrJ3MNCj4gKyAqIGJsb2dfY29u dGV4dHMgYXJyYXkgZm9yIE8oMSkgcGVyLXRhc2sgY29udGV4dCBhY2Nlc3MuDQo+ICsgKg0KPiAr ICogT25seSA4IG1vZHVsZXMgY2FuIGJlIHJlZ2lzdGVyZWQgc2ltdWx0YW5lb3VzbHkgKEJMT0df TUFYX01PRFVMRVMpLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3MgY29udGV4dCAodXNl cyBHRlBfS0VSTkVMIGFsbG9jYXRpb24pDQo+ICsgKiBSZXR1cm46IE1vZHVsZSBjb250ZXh0IG9u IHN1Y2Nlc3MsIE5VTEwgaWYgbm8gc2xvdHMgYXZhaWxhYmxlIG9yIGludmFsaWQgbmFtZQ0KPiAr ICovDQo+ICtzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqYmxvZ19tb2R1bGVfcmVnaXN0ZXIo Y29uc3QgY2hhciAqbW9kdWxlX25hbWUpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfbW9kdWxl X3VucmVnaXN0ZXIgLSBVbnJlZ2lzdGVyIGEgbW9kdWxlIGFuZCBmcmVlIGl0cyBzbG90DQo+ICsg KiBAY3R4OiBNb2R1bGUgY29udGV4dCB0byB1bnJlZ2lzdGVyDQo+ICsgKg0KPiArICogUmVtb3Zl cyB0aGUgbW9kdWxlIGZyb20gdGhlIGdsb2JhbCByZWdpc3RyeSBhbmQgZnJlZXMgaXRzIHNsb3Qg Zm9yIHJldXNlLg0KPiArICogTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYmxvZ19tb2R1bGVfY2xlYW51 cCgpIHRvIGVuc3VyZSBhbGwgY29udGV4dHMgYXJlIGZyZWVkLg0KPiArICoNCj4gKyAqIENvbnRl eHQ6IFByb2Nlc3MgY29udGV4dA0KPiArICogUmV0dXJuOiB2b2lkDQo+ICsgKi8NCj4gK3ZvaWQg YmxvZ19tb2R1bGVfdW5yZWdpc3RlcihzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4KTsN Cj4gKw0KPiArLyogTW9kdWxlIGNvbnRleHQgbWFuYWdlbWVudCBBUEkgKi8NCj4gKw0KPiArLyoq DQo+ICsgKiBibG9nX21vZHVsZV9pbml0IC0gSW5pdGlhbGl6ZSBhIHBlci1tb2R1bGUgQkxPRyBj b250ZXh0DQo+ICsgKiBAbW9kdWxlX25hbWU6IE5hbWUgb2YgdGhlIG1vZHVsZSAobWF4IDMxIGNo YXJzKQ0KPiArICoNCj4gKyAqIENyZWF0ZXMgYSBjb21wbGV0ZSBpc29sYXRlZCBsb2dnaW5nIGNv bnRleHQgZm9yIGEga2VybmVsIG1vZHVsZSwgaW5jbHVkaW5nOg0KPiArICogLSBNb2R1bGUgcmVn aXN0cmF0aW9uIGFuZCBzbG90IGFsbG9jYXRpb24NCj4gKyAqIC0gTG9nZ2VyIGluc3RhbmNlIHdp dGggYmF0Y2hpbmcgc3lzdGVtDQo+ICsgKiAtIFNvdXJjZSBJRCBtYXBwaW5nICg0MDk2IHNvdXJj ZXMpDQo+ICsgKiAtIFBlci1DUFUgTkFQSSBjb250ZXh0IHN1cHBvcnQNCj4gKyAqDQo+ICsgKiBU aGlzIGlzIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciBtb2R1bGVzIHRoYXQgd2FudCB0byB1c2Ug QkxPRy4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBQcm9jZXNzIGNvbnRleHQgKHVzZXMgR0ZQX0tF Uk5FTCBhbGxvY2F0aW9ucykNCj4gKyAqIFJldHVybjogTW9kdWxlIGNvbnRleHQgb24gc3VjY2Vz cywgTlVMTCBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX21vZHVsZV9jb250ZXh0 ICpibG9nX21vZHVsZV9pbml0KGNvbnN0IGNoYXIgKm1vZHVsZV9uYW1lKTsNCj4gKw0KPiArLyoq DQo+ICsgKiBibG9nX21vZHVsZV9jbGVhbnVwIC0gQ2xlYW4gdXAgYSBtb2R1bGUncyBCTE9HIGNv bnRleHQNCj4gKyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0IHRvIGNsZWFuIHVwDQo+ICsgKg0KPiAr ICogSXRlcmF0ZXMgdGhyb3VnaCBhbGwgdGFza3MgdGhhdCBoYXZlIGNvbnRleHRzIGZvciB0aGlz IG1vZHVsZSBhbmQNCj4gKyAqIGRldGFjaGVzL2ZyZWVzIHRoZW0uIEFsc28gY2xlYW5zIHVwIGJh dGNoaW5nIHN5c3RlbSBhbmQgcGVyLUNQVQ0KPiArICogTkFQSSBjb250ZXh0cy4gU2hvdWxkIGJl IGNhbGxlZCBkdXJpbmcgbW9kdWxlIHVubG9hZC4NCj4gKyAqDQo+ICsgKiBXYXJuaW5nOiBUaGlz IGFjcXVpcmVzIHRhc2tfbG9jayBmb3IgZXZlcnkgdGFzayB3aXRoIGEgY29udGV4dCwgd2hpY2gN Cj4gKyAqIGNhbiBiZSBzbG93IGlmIG1hbnkgdGFza3MgYXJlIHVzaW5nIHRoZSBtb2R1bGUuDQo+ ICsgKg0KPiArICogQ29udGV4dDogUHJvY2VzcyBjb250ZXh0DQo+ICsgKiBSZXR1cm46IHZvaWQN Cj4gKyAqLw0KPiArdm9pZCBibG9nX21vZHVsZV9jbGVhbnVwKHN0cnVjdCBibG9nX21vZHVsZV9j b250ZXh0ICpjdHgpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfbW9kdWxlX2dldCAtIEluY3Jl bWVudCBtb2R1bGUgY29udGV4dCByZWZlcmVuY2UgY291bnQNCj4gKyAqIEBjdHg6IE1vZHVsZSBj b250ZXh0DQo+ICsgKg0KPiArICogVGFrZXMgYSByZWZlcmVuY2Ugb24gdGhlIG1vZHVsZSBjb250 ZXh0IHRvIHByZXZlbnQgaXQgZnJvbSBiZWluZyBmcmVlZC4NCj4gKyAqIE11c3QgYmUgcGFpcmVk IHdpdGggYmxvZ19tb2R1bGVfcHV0KCkuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRl eHQNCj4gKyAqIFJldHVybjogdm9pZA0KPiArICovDQo+ICt2b2lkIGJsb2dfbW9kdWxlX2dldChz dHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9n X21vZHVsZV9wdXQgLSBEZWNyZW1lbnQgbW9kdWxlIGNvbnRleHQgcmVmZXJlbmNlIGNvdW50DQo+ ICsgKiBAY3R4OiBNb2R1bGUgY29udGV4dA0KPiArICoNCj4gKyAqIFJlbGVhc2VzIGEgcmVmZXJl bmNlIG9uIHRoZSBtb2R1bGUgY29udGV4dC4gV2hlbiB0aGUgbGFzdCByZWZlcmVuY2UNCj4gKyAq IGlzIGRyb3BwZWQsIHRoZSBjb250ZXh0IGlzIGF1dG9tYXRpY2FsbHkgY2xlYW5lZCB1cC4NCj4g KyAqDQo+ICsgKiBDb250ZXh0OiBBbnkgY29udGV4dA0KPiArICogUmV0dXJuOiB2b2lkDQo+ICsg Ki8NCj4gK3ZvaWQgYmxvZ19tb2R1bGVfcHV0KHN0cnVjdCBibG9nX21vZHVsZV9jb250ZXh0ICpj dHgpOw0KPiArDQo+ICsvKiBQZXItbW9kdWxlIEFQSSBmdW5jdGlvbnMgKi8NCj4gKw0KPiArLyoq DQo+ICsgKiBibG9nX2dldF9zb3VyY2VfaWRfY3R4IC0gR2V0IHNvdXJjZSBJRCBmb3IgYSBtb2R1 bGUncyBsb2cgbG9jYXRpb24NCj4gKyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0DQo+ICsgKiBAZmls ZTogU291cmNlIGZpbGUgbmFtZSAodHlwaWNhbGx5IGtiYXNlbmFtZShfX0ZJTEVfXykpDQo+ICsg KiBAZnVuYzogRnVuY3Rpb24gbmFtZSAodHlwaWNhbGx5IF9fZnVuY19fKQ0KPiArICogQGxpbmU6 IExpbmUgbnVtYmVyICh0eXBpY2FsbHkgX19MSU5FX18pDQo+ICsgKiBAZm10OiBQcmludGYtc3R5 bGUgZm9ybWF0IHN0cmluZw0KPiArICoNCj4gKyAqIFBlci1tb2R1bGUgd3JhcHBlciBhcm91bmQg YmxvZ19nZXRfc291cmNlX2lkKCkuIFNvdXJjZSBJRHMgYXJlDQo+ICsgKiBtb2R1bGUtbG9jYWwg KGRpZmZlcmVudCBtb2R1bGVzIGNhbiBoYXZlIHNhbWUgc291cmNlX2lkIHZhbHVlcykuDQo+ICsg Kg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQNCj4gKyAqIFJldHVybjogU291cmNlIElEIGZv ciB0aGlzIG1vZHVsZSdzIGxvZ2dlciwgb3IgMCBvbiBlcnJvcg0KPiArICovDQo+ICt1MzIgYmxv Z19nZXRfc291cmNlX2lkX2N0eChzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4LCBjb25z dCBjaGFyICpmaWxlLA0KPiArCQkJICAgY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgaW50IGxp bmUsIGNvbnN0IGNoYXIgKmZtdCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19nZXRfc291cmNl X2luZm9fY3R4IC0gR2V0IHNvdXJjZSBpbmZvIGZvciBhIG1vZHVsZS1sb2NhbCBzb3VyY2UgSUQN Cj4gKyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0DQo+ICsgKiBAaWQ6IFNvdXJjZSBJRCB0byBsb29r IHVwDQo+ICsgKg0KPiArICogUGVyLW1vZHVsZSB3cmFwcGVyIGFyb3VuZCBibG9nX2dldF9zb3Vy Y2VfaW5mbygpLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0DQo+ICsgKiBSZXR1 cm46IFNvdXJjZSBpbmZvIHBvaW50ZXIsIG9yIE5VTEwgaWYgaW52YWxpZA0KPiArICovDQo+ICtz dHJ1Y3QgYmxvZ19zb3VyY2VfaW5mbyAqYmxvZ19nZXRfc291cmNlX2luZm9fY3R4KHN0cnVjdCBi bG9nX21vZHVsZV9jb250ZXh0ICpjdHgsIHUzMiBpZCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxv Z19sb2dfY3R4IC0gTG9nIGEgbWVzc2FnZSB1c2luZyBtb2R1bGUgY29udGV4dA0KPiArICogQGN0 eDogTW9kdWxlIGNvbnRleHQNCj4gKyAqIEBzb3VyY2VfaWQ6IFNvdXJjZSBJRCAoZnJvbSBibG9n X2dldF9zb3VyY2VfaWRfY3R4KQ0KPiArICogQGNsaWVudF9pZDogTW9kdWxlLXNwZWNpZmljIGNs aWVudCBpZGVudGlmaWVyDQo+ICsgKiBAbmVlZGVkX3NpemU6IFNpemUgaW4gYnl0ZXMgZm9yIHNl cmlhbGl6ZWQgYXJndW1lbnRzDQo+ICsgKg0KPiArICogUGVyLW1vZHVsZSB3cmFwcGVyIGFyb3Vu ZCBibG9nX2xvZygpLiBVc2VzIHRoZSBtb2R1bGUncyBzbG90IElEIHRvDQo+ICsgKiBhY2Nlc3Mg dGhlIHBlci10YXNrIGNvbnRleHQgZnJvbSB0YXNrLT5ibG9nX2NvbnRleHRzW3Nsb3RfaWRdLg0K PiArICoNCj4gKyAqIENvbnRleHQ6IFByb2Nlc3Mgb3Igc29mdGlycQ0KPiArICogUmV0dXJuOiBC dWZmZXIgcG9pbnRlciBmb3Igc2VyaWFsaXphdGlvbiwgb3IgTlVMTCBvbiBmYWlsdXJlDQo+ICsg Ki8NCj4gK3ZvaWQgKmJsb2dfbG9nX2N0eChzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4 LCB1MzIgc291cmNlX2lkLA0KPiArCQkJdTggY2xpZW50X2lkLCBzaXplX3QgbmVlZGVkX3NpemUp Ow0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfZ2V0X3Rsc19jdHhfY3R4IC0gR2V0IG9yIGNyZWF0 ZSBwZXItdGFzayBjb250ZXh0IGZvciB0aGlzIG1vZHVsZQ0KPiArICogQGN0eDogTW9kdWxlIGNv bnRleHQNCj4gKyAqDQo+ICsgKiBHZXRzIHRoZSBsb2dnaW5nIGNvbnRleHQgZm9yIGN1cnJlbnQg dGFzayBhbmQgdGhpcyBzcGVjaWZpYyBtb2R1bGUuDQo+ICsgKiBVc2VzIHNsb3QtYmFzZWQgYWNj ZXNzOiB0YXNrLT5ibG9nX2NvbnRleHRzW2N0eC0+c2xvdF9pZF0uDQo+ICsgKiBDcmVhdGVzIHRo ZSBjb250ZXh0IG9uIGZpcnN0IHVzZSAobGF6eSBhbGxvY2F0aW9uKS4NCj4gKyAqDQo+ICsgKiBD b250ZXh0OiBQcm9jZXNzIGNvbnRleHQgb25seQ0KPiArICogUmV0dXJuOiBUTFMgY29udGV4dCBw b2ludGVyLCBvciBOVUxMIG9uIGFsbG9jYXRpb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdHJ1Y3Qg YmxvZ190bHNfY3R4ICpibG9nX2dldF90bHNfY3R4X2N0eChzdHJ1Y3QgYmxvZ19tb2R1bGVfY29u dGV4dCAqY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2dldF9uYXBpX2N0eF9jdHggLSBH ZXQgTkFQSSBjb250ZXh0IGZvciB0aGlzIG1vZHVsZQ0KPiArICogQGN0eDogTW9kdWxlIGNvbnRl eHQNCj4gKyAqDQo+ICsgKiBSZXR1cm5zIHRoZSBOQVBJIChzb2Z0aXJxKSBjb250ZXh0IGZvciBj dXJyZW50IENQVSBhbmQgdGhpcyBtb2R1bGUuDQo+ICsgKg0KPiArICogQ29udGV4dDogU29mdGly cSBjb250ZXh0DQo+ICsgKiBSZXR1cm46IE5BUEkgY29udGV4dCBwb2ludGVyLCBvciBOVUxMIGlm IG5vdCBzZXQNCj4gKyAqLw0KPiArc3RydWN0IGJsb2dfdGxzX2N0eCAqYmxvZ19nZXRfbmFwaV9j dHhfY3R4KHN0cnVjdCBibG9nX21vZHVsZV9jb250ZXh0ICpjdHgpOw0KPiArDQo+ICsvKioNCj4g KyAqIGJsb2dfc2V0X25hcGlfY3R4X2N0eCAtIFNldCBOQVBJIGNvbnRleHQgZm9yIHRoaXMgbW9k dWxlDQo+ICsgKiBAY3R4OiBNb2R1bGUgY29udGV4dA0KPiArICogQHRsc19jdHg6IENvbnRleHQg dG8gdXNlIGZvciBOQVBJIG9uIGN1cnJlbnQgQ1BVDQo+ICsgKg0KPiArICogQXNzb2NpYXRlcyBh IGNvbnRleHQgd2l0aCBjdXJyZW50IENQVSBmb3Igc29mdGlycSBsb2dnaW5nLg0KPiArICoNCj4g KyAqIENvbnRleHQ6IEFueSBjb250ZXh0DQo+ICsgKiBSZXR1cm46IHZvaWQNCj4gKyAqLw0KPiAr dm9pZCBibG9nX3NldF9uYXBpX2N0eF9jdHgoc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRleHQgKmN0 eCwgc3RydWN0IGJsb2dfdGxzX2N0eCAqdGxzX2N0eCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxv Z19nZXRfY3R4X2N0eCAtIEdldCBhcHByb3ByaWF0ZSBjb250ZXh0IGZvciB0aGlzIG1vZHVsZQ0K PiArICogQGN0eDogTW9kdWxlIGNvbnRleHQNCj4gKyAqDQo+ICsgKiBBdXRvbWF0aWNhbGx5IHNl bGVjdHMgTkFQSSBvciBUTFMgY29udGV4dCBiYXNlZCBvbiBleGVjdXRpb24gY29udGV4dC4NCj4g KyAqIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIGZ1bmN0aW9uIGZvciBwZXItbW9kdWxlIGNvbnRl eHQgYWNjZXNzLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0DQo+ICsgKiBSZXR1 cm46IENvbnRleHQgcG9pbnRlciwgb3IgTlVMTCBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3N0cnVj dCBibG9nX3Rsc19jdHggKmJsb2dfZ2V0X2N0eF9jdHgoc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRl eHQgKmN0eCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19sb2dfY29tbWl0X2N0eCAtIFB1Ymxp c2ggYSByZXNlcnZlZCBsb2cgZW50cnkNCj4gKyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0DQo+ICsg KiBAYWN0dWFsX3NpemU6IEFjdHVhbCBieXRlcyB3cml0dGVuIGR1cmluZyBzZXJpYWxpemF0aW9u DQo+ICsgKg0KPiArICogUHVibGlzaGVzIHRoZSBsb2cgZW50cnkgdGhhdCB3YXMgcmVzZXJ2ZWQg YnkgdGhlIGxhc3QgYmxvZ19sb2dfY3R4KCkgY2FsbCwNCj4gKyAqIG1ha2luZyBpdCB2aXNpYmxl IHRvIHJlYWRlcnMuIE11c3QgYmUgY2FsbGVkIGFmdGVyIHNlcmlhbGl6YXRpb24gaXMgY29tcGxl dGUuDQo+ICsgKg0KPiArICogVGhlIGFjdHVhbF9zaXplIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9m IGJ5dGVzIGFjdHVhbGx5IHdyaXR0ZW4sIHdoaWNoIG1heSBiZQ0KPiArICogbGVzcyB0aGFuIHRo ZSB3b3JzdC1jYXNlIHNpemUgcmVzZXJ2ZWQgKGUuZy4sIHN0cmluZ3MgbWF5IGJlIHNob3J0ZXIg dGhhbiAyNTUpLg0KPiArICoNCj4gKyAqIENvbnRleHQ6IFNhbWUgY29udGV4dCBhcyB0aGUgcHJl Y2VkaW5nIGJsb2dfbG9nX2N0eCgpIGNhbGwNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBu ZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCj4gKyAqLw0KPiAraW50IGJsb2dfbG9nX2Nv bW1pdF9jdHgoc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRleHQgKmN0eCwgc2l6ZV90IGFjdHVhbF9z aXplKTsNCj4gKw0KPiArLyoNCj4gKyAqIFBlci1tb2R1bGUgbG9nZ2luZyBtYWNyb3MNCj4gKyAq DQo+ICsgKiBUaGVzZSBtYWNyb3MgcHJvdmlkZSB0aGUgcHJpbWFyeSBsb2dnaW5nIGludGVyZmFj ZSBmb3IgbW9kdWxlcyB1c2luZyBCTE9HLg0KPiArICogVGhleSBoYW5kbGUgc291cmNlIElEIGNh Y2hpbmcsIHNpemUgY2FsY3VsYXRpb24sIHNlcmlhbGl6YXRpb24sIGFuZCB0cmltbWluZw0KPiAr ICogYXV0b21hdGljYWxseS4NCj4gKyAqLw0KPiArDQo+ICsvKioNCj4gKyAqIEJMT0dfTE9HX0NU WCAtIExvZyBhIG1lc3NhZ2UgdXNpbmcgbW9kdWxlIGNvbnRleHQgKG5vIGNsaWVudCBJRCkNCj4g KyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0IGZyb20gYmxvZ19tb2R1bGVfaW5pdCgpDQo+ICsgKiBA Zm10OiBQcmludGYtc3R5bGUgZm9ybWF0IHN0cmluZw0KPiArICogQC4uLjogQXJndW1lbnRzIG1h dGNoaW5nIGZvcm1hdCBzdHJpbmcNCj4gKyAqDQo+ICsgKiBQcmltYXJ5IGxvZ2dpbmcgbWFjcm8g Zm9yIHBlci1tb2R1bGUgQkxPRyB1c2FnZS4gQXV0b21hdGljYWxseSBoYW5kbGVzOg0KPiArICog LSBTb3VyY2UgSUQgYWxsb2NhdGlvbiBhbmQgY2FjaGluZyAoc3RhdGljIHZhcmlhYmxlIHBlciBj YWxsIHNpdGUpDQo+ICsgKiAtIFNpemUgY2FsY3VsYXRpb24gYXQgY29tcGlsZSB0aW1lDQo+ICsg KiAtIENvbnRleHQgYWNxdWlzaXRpb24gKHRhc2sgb3IgTkFQSSkNCj4gKyAqIC0gU2VyaWFsaXph dGlvbiBvZiBhcmd1bWVudHMNCj4gKyAqIC0gVHJpbW1pbmcgb2YgdW51c2VkIHNwYWNlDQo+ICsg Kg0KPiArICogRXhhbXBsZToNCj4gKyAqICAgQkxPR19MT0dfQ1RYKG15X21vZHVsZV9jdHgsICJQ cm9jZXNzaW5nIGlub2RlICVsbHUgc2l6ZSAlenVcbiIsDQo+ICsgKiAgICAgICAgICAgICAgICBp bm9kZV9udW0sIHNpemUpOw0KPiArICoNCj4gKyAqIENvbnRleHQ6IEFueSBjb250ZXh0IChhdXRv bWF0aWNhbGx5IHNlbGVjdHMgdGFzayBvciBOQVBJIGNvbnRleHQpDQo+ICsgKi8NCj4gKyNkZWZp bmUgQkxPR19MT0dfQ1RYKGN0eCwgZm10LCAuLi4pIFwNCj4gKwlfX0JMT0dfTE9HX0NUWChjdHgs IDAsIDAsIGZtdCwgIyNfX1ZBX0FSR1NfXykNCj4gKw0KPiArLyoqDQo+ICsgKiBCTE9HX0xPR19D TElFTlRfQ1RYIC0gTG9nIGEgbWVzc2FnZSB3aXRoIGNsaWVudCBpZGVudGlmaWVyDQo+ICsgKiBA Y3R4OiBNb2R1bGUgY29udGV4dCBmcm9tIGJsb2dfbW9kdWxlX2luaXQoKQ0KPiArICogQGNsaWVu dF9pZDogTW9kdWxlLXNwZWNpZmljIGNsaWVudCBpZGVudGlmaWVyIChlLmcuLCBjb25uZWN0aW9u IElEKQ0KPiArICogQGZtdDogUHJpbnRmLXN0eWxlIGZvcm1hdCBzdHJpbmcNCj4gKyAqIEAuLi46 IEFyZ3VtZW50cyBtYXRjaGluZyBmb3JtYXQgc3RyaW5nDQo+ICsgKg0KPiArICogTGlrZSBCTE9H X0xPR19DVFggYnV0IGluY2x1ZGVzIGEgY2xpZW50X2lkIGluIHRoZSBsb2cgZW50cnkuIFRoZSBj bGllbnRfaWQNCj4gKyAqIGlzIG1vZHVsZS1zcGVjaWZpYyBhbmQgY2FuIGJlIHVzZWQgdG8gYXNz b2NpYXRlIGxvZ3Mgd2l0aCBzcGVjaWZpYyBjbGllbnRzLA0KPiArICogY29ubmVjdGlvbnMsIG9y IHNlc3Npb25zLg0KPiArICoNCj4gKyAqIEV4YW1wbGU6DQo+ICsgKiAgIEJMT0dfTE9HX0NMSUVO VF9DVFgoY2VwaF9jdHgsIGNlcGhfY2xpZW50X2lkLA0KPiArICogICAgICAgICAgICAgICAgICAg ICAgICJDYXAgdXBkYXRlIGZvciBpbm9kZSAlbGx1XG4iLCBpbm9kZSk7DQo+ICsgKg0KPiArICog RHVyaW5nIGRlc2VyaWFsaXphdGlvbiwgdGhlIG1vZHVsZSdzIGNsaWVudCBjYWxsYmFjayBpcyBp bnZva2VkIHRvDQo+ICsgKiBmb3JtYXQgdGhlIGNsaWVudF9pZCAoZS5nLiwgIltmc2lkIGdsb2Jh bF9pZF0iIHByZWZpeCkuDQo+ICsgKg0KPiArICogQ29udGV4dDogQW55IGNvbnRleHQgKGF1dG9t YXRpY2FsbHkgc2VsZWN0cyB0YXNrIG9yIE5BUEkgY29udGV4dCkNCj4gKyAqLw0KPiArI2RlZmlu ZSBCTE9HX0xPR19DTElFTlRfQ1RYKGN0eCwgY2xpZW50X2lkLCBmbXQsIC4uLikgXA0KPiArCV9f QkxPR19MT0dfQ1RYKGN0eCwgMCwgY2xpZW50X2lkLCBmbXQsICMjX19WQV9BUkdTX18pDQo+ICsN Cj4gKy8qIEludGVybmFsIGltcGxlbWVudGF0aW9uIC0gZG8gbm90IHVzZSBkaXJlY3RseSAqLw0K PiArI2RlZmluZSBfX0JMT0dfTE9HX0NUWChfX2N0eCwgZGJnLCBfX2NsaWVudF9pZCwgZm10LCAu Li4pIFwNCg0KV2h5IHRoaXMgaW1wbGVtZW50YXRpb24gaXMgbm90IGRlY2xhcmVkIGJlZm9yZSBC TE9HX0xPR19DVFggYW5kDQpCTE9HX0xPR19DTElFTlRfQ1RYPw0KDQo+ICsJZG8geyBcDQo+ICsJ CXN0YXRpYyB1MzIgX19zb3VyY2VfaWQ7IFwNCj4gKwkJc3RhdGljIHNpemVfdCBfX3NpemU7IFwN Cj4gKwkJdm9pZCAqX19fYnVmZmVyID0gTlVMTDsgXA0KPiArCQkodm9pZCkoZGJnKTsgLyogUmVz ZXJ2ZWQgZm9yIGZ1dHVyZSBkZWJ1ZyBmdW5jdGlvbmFsaXR5ICovIFwNCj4gKwkJaWYgKHVubGlr ZWx5KF9fc291cmNlX2lkID09IDApKSB7IFwNCj4gKwkJCV9fc291cmNlX2lkID0gYmxvZ19nZXRf c291cmNlX2lkX2N0eChfX2N0eCwgXA0KPiArCQkJCWtiYXNlbmFtZShfX0ZJTEVfXyksIF9fZnVu Y19fLCBfX0xJTkVfXywgZm10KTsgXA0KPiArCQkJX19zaXplID0gYmxvZ19jbnQoX19WQV9BUkdT X18pOyBcDQo+ICsJCX0gXA0KPiArCQlfX19idWZmZXIgPSBibG9nX2xvZ19jdHgoX19jdHgsIF9f c291cmNlX2lkLCBfX2NsaWVudF9pZCwgX19zaXplKTsgXA0KPiArCQlpZiAobGlrZWx5KF9fX2J1 ZmZlcikpIHsJXA0KPiArCQkJdm9pZCAqX19fdG1wID0gX19fYnVmZmVyOyBcDQo+ICsJCQlpZiAo X19zaXplID4gMCkgXA0KPiArCQkJCWJsb2dfc2VyKF9fX2J1ZmZlciwgIyNfX1ZBX0FSR1NfXyk7 XA0KPiArCQkJYmxvZ19sb2dfY29tbWl0X2N0eChfX2N0eCwgX19fYnVmZmVyIC0gX19fdG1wKTsg XA0KPiArCQl9IFwNCj4gKwl9IHdoaWxlICgwKQ0KPiArDQo+ICsjZW5kaWYgLyogX0xJTlVYX0JM T0dfTU9EVUxFX0ggKi8NCj4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmxvZy9ibG9nX3Bh Z2VmcmFnLmggYi9pbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19wYWdlZnJhZy5oDQo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uZjQ4YzAyNjRmMTNiDQo+IC0tLSAv ZGV2L251bGwNCj4gKysrIGIvaW5jbHVkZS9saW51eC9ibG9nL2Jsb2dfcGFnZWZyYWcuaA0KPiBA QCAtMCwwICsxLDMzIEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lw0KPiArLyoNCj4gKyAqIEJpbmFyeSBMb2dnaW5nIFBhZ2UgRnJhZ21lbnQgTWFuYWdlbWVudA0K PiArICovDQo+ICsjaWZuZGVmIF9MSU5VWF9CTE9HX1BBR0VGUkFHX0gNCj4gKyNkZWZpbmUgX0xJ TlVYX0JMT0dfUEFHRUZSQUdfSA0KPiArDQo+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9tbS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+ ICsNCj4gKyNkZWZpbmUgQkxPR19QQUdFRlJBR19TSVpFICAoMTw8MTkpICAvKiA1MTJLQiAqLw0K DQpUaGlzIGlzIGNvbnN0YW50LiBXaHkgZG8gbm90IGRlY2xhcmUgaXQgaW4gbW9yZSBzaW1wbGUg d2F5PyBGb3IgZXhhbXBsZSwgKDUxMiAqDQoxMDI0KS4NCg0KPiArI2RlZmluZSBCTE9HX1BBR0VG UkFHX01BU0sgKEJMT0dfUEFHRUZSQUdfU0laRSAtIDEpDQo+ICsNCj4gKy8qIFBhZ2VmcmFnIGFs bG9jYXRvciBzdHJ1Y3R1cmUgKi8NCg0KU29tZWhvdyB0aGVyZSBpcyBubyBkZXRhaWxlZCBjb21t ZW50cyBoZXJlLiA6KQ0KDQo+ICtzdHJ1Y3QgYmxvZ19wYWdlZnJhZyB7DQo+ICsJc3RydWN0IHBh Z2UgKnBhZ2VzOw0KPiArCXZvaWQgKmJ1ZmZlcjsNCg0KRG9lcyBwYWdlcyBhbmQgYnVmZmVyIHJl cXVpcmUgYW55IGxvY2s/DQoNCj4gKwlzaXplX3QgY2FwYWNpdHk7ICAgICAgICAvKiBCdWZmZXIg Y2FwYWNpdHkgZm9yIGJvdW5kcyBjaGVja2luZyAqLw0KPiArCXNwaW5sb2NrX3QgbG9jazsgICAg ICAgIC8qIHByb3RlY3RzIGhlYWQgKi8NCj4gKwl1bnNpZ25lZCBpbnQgaGVhZDsNCj4gKwl1bnNp Z25lZCBpbnQgYWxsb2NfY291bnQ7DQo+ICsJaW50IGFjdGl2ZV9lbGVtZW50czsNCj4gKwl2b2lk ICpsYXN0X2VudHJ5OyAgICAgICAvKiBQb2ludGVyIHRvIHRoZSBsYXN0IGFsbG9jYXRlZCBlbnRy eSAqLw0KPiArfTsNCj4gKw0KPiAraW50IGJsb2dfcGFnZWZyYWdfaW5pdF93aXRoX2J1ZmZlcihz dHJ1Y3QgYmxvZ19wYWdlZnJhZyAqcGYsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IHNpemUpOw0KPiAr aW50IGJsb2dfcGFnZWZyYWdfcmVzZXJ2ZShzdHJ1Y3QgYmxvZ19wYWdlZnJhZyAqcGYsIHVuc2ln bmVkIGludCBuKTsNCj4gK3ZvaWQgYmxvZ19wYWdlZnJhZ19wdWJsaXNoKHN0cnVjdCBibG9nX3Bh Z2VmcmFnICpwZiwgdTY0IHB1Ymxpc2hfaGVhZCk7DQo+ICt2b2lkIGJsb2dfcGFnZWZyYWdfcmVz ZXQoc3RydWN0IGJsb2dfcGFnZWZyYWcgKnBmKTsNCj4gK3ZvaWQgKmJsb2dfcGFnZWZyYWdfZ2V0 X3B0cihzdHJ1Y3QgYmxvZ19wYWdlZnJhZyAqcGYsIHU2NCB2YWwpOw0KPiArDQo+ICsjZW5kaWYg LyogX0xJTlVYX0JMT0dfUEFHRUZSQUdfSCAqLw0KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51 eC9ibG9nL2Jsb2dfc2VyLmggYi9pbmNsdWRlL2xpbnV4L2Jsb2cvYmxvZ19zZXIuaA0KPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAuLmE0OTJhMWEwOGI1Mw0KPiAt LS0gL2Rldi9udWxsDQo+ICsrKyBiL2luY2x1ZGUvbGludXgvYmxvZy9ibG9nX3Nlci5oDQo+IEBA IC0wLDAgKzEsMjc1IEBADQo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lw0KPiArLyoNCj4gKyAqIEJpbmFyeSBMb2dnaW5nIFNlcmlhbGl6YXRpb24NCj4gKyAqLw0KPiAr I2lmbmRlZiBfTElOVVhfQkxPR19TRVJfSA0KPiArI2RlZmluZSBfTElOVVhfQkxPR19TRVJfSA0K PiArDQo+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+DQo+ICsNCj4gKyNkZWZpbmUgSVNfQ09OU1RfU1RSX1BUUih0KSBcDQo+ICsJX19idWls dGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YodCksIGNvbnN0IGNoYXIgKikNCj4gKw0KPiAr I2RlZmluZSBJU19TVFJfUFRSKHQpIFwNCj4gKwlfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9w KHR5cGVvZih0KSwgY2hhciAqKQ0KPiArDQo+ICsjZGVmaW5lIElTX1NUUih0KSBcDQo+ICsJKF9f YnVpbHRpbl90eXBlc19jb21wYXRpYmxlX3AodHlwZW9mKHQpLCBjb25zdCBjaGFyICopIHx8IFwN Cj4gKwlfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZih0KSwgY2hhciAqKSkNCj4g Kw0KPiArI2RlZmluZSBfX3N1cHByZXNzX2Nhc3Rfd2FybmluZyh0eXBlLCB2YWx1ZSkgXA0KPiAr KHsgXA0KPiArCV9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHB1c2giKSBcDQo+ICsJX1ByYWdtYSgi R0NDIGRpYWdub3N0aWMgaWdub3JlZCBcIi1XaW50LXRvLXBvaW50ZXItY2FzdFwiIikgXA0KPiAr CV9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3BvaW50ZXItdG8taW50LWNhc3Rc IiIpIFwNCj4gKwl0eXBlIF9fc2N3X3Jlc3VsdDsgXA0KPiArCV9fc2N3X3Jlc3VsdCA9ICgodHlw ZSkodmFsdWUpKTsgXA0KPiArCV9QcmFnbWEoIkdDQyBkaWFnbm9zdGljIHBvcCIpIFwNCj4gKwlf X3Njd19yZXN1bHQ7IFwNCj4gK30pDQo+ICsNCj4gKyNkZWZpbmUgX19fYmxvZ19jb25jYXQoX19h LCBfX2IpIF9fYSAjIyBfX2INCj4gKyNkZWZpbmUgX19fYmxvZ19hcHBseShfX2ZuLCBfX24pIF9f X2Jsb2dfY29uY2F0KF9fZm4sIF9fbikNCj4gKw0KPiArI2RlZmluZSBfX19ibG9nX250aChfLCBf XzEsIF9fMiwgX18zLCBfXzQsIF9fNSwgX182LCBfXzcsIF9fOCwgX185LCBcDQo+ICsJX18xMCwg X18xMSwgX18xMiwgX18xMywgX18xNCwgX18xNSwgX18xNiwgX18xNywgX18xOCwgX18xOSwgX18y MCwgXA0KPiArCV9fMjEsIF9fMjIsIF9fMjMsIF9fMjQsIF9fMjUsIF9fMjYsIF9fMjcsIF9fMjgs IF9fMjksIF9fMzAsIF9fMzEsIFwNCj4gKwlfXzMyLCBfX04sIC4uLikgX19ODQo+ICsjZGVmaW5l IF9fX2Jsb2dfbmFyZyguLi4pIF9fX2Jsb2dfbnRoKF8sICMjX19WQV9BUkdTX18sIFwNCj4gKwkz MiwgMzEsIDMwLCAyOSwgMjgsIDI3LCAyNiwgMjUsIDI0LCAyMywgMjIsIDIxLCAyMCwgMTksIDE4 LCAxNywgXA0KPiArCTE2LCAxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2LCA1LCA0 LCAzLCAyLCAxLCAwKQ0KPiArI2RlZmluZSBibG9nX25hcmcoLi4uKSBfX19ibG9nX25hcmcoX19W QV9BUkdTX18pDQo+ICsNCj4gKyNkZWZpbmUgU1RSX01BWF9TSVpFIDI1NQ0KPiArI2RlZmluZSBf X3NpemVvZih4KSBcDQo+ICsJKElTX1NUUih4KSA/IFNUUl9NQVhfU0laRSA6IFwNCj4gKwkgKHNp emVvZih4KSA8IDQpID8gNCA6IHNpemVvZih4KSkNCj4gKw0KPiArLyogU2l6ZSBjYWxjdWxhdGlv biBtYWNyb3MgKi8NCj4gKyNkZWZpbmUgX19fYmxvZ19jbnQwKCkJCSgwKQ0KPiArI2RlZmluZSBf X19ibG9nX2NudDEoX190KQkJKF9fc2l6ZW9mKF9fdCkpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250 MihfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250MShfX2FyZ3MpICsgX19zaXplb2YoX190KSkN Cj4gKyNkZWZpbmUgX19fYmxvZ19jbnQzKF9fdCwgX19hcmdzLi4uKQkoX19fYmxvZ19jbnQyKF9f YXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDQoX190LCBfX2Fy Z3MuLi4pCShfX19ibG9nX2NudDMoX19hcmdzKSArIF9fc2l6ZW9mKF9fdCkpDQo+ICsjZGVmaW5l IF9fX2Jsb2dfY250NShfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250NChfX2FyZ3MpICsgX19z aXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19jbnQ2KF9fdCwgX19hcmdzLi4uKQkoX19f YmxvZ19jbnQ1KF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2Nu dDcoX190LCBfX2FyZ3MuLi4pCShfX19ibG9nX2NudDYoX19hcmdzKSArIF9fc2l6ZW9mKF9fdCkp DQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250OChfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250Nyhf X2FyZ3MpICsgX19zaXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19jbnQ5KF9fdCwgX19h cmdzLi4uKQkoX19fYmxvZ19jbnQ4KF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmlu ZSBfX19ibG9nX2NudDEwKF9fdCwgX19hcmdzLi4uKQkoX19fYmxvZ19jbnQ5KF9fYXJncykgKyBf X3NpemVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDExKF9fdCwgX19hcmdzLi4uKQko X19fYmxvZ19jbnQxMChfX2FyZ3MpICsgX19zaXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxv Z19jbnQxMihfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250MTEoX19hcmdzKSArIF9fc2l6ZW9m KF9fdCkpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250MTMoX190LCBfX2FyZ3MuLi4pCShfX19ibG9n X2NudDEyKF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDE0 KF9fdCwgX19hcmdzLi4uKQkoX19fYmxvZ19jbnQxMyhfX2FyZ3MpICsgX19zaXplb2YoX190KSkN Cj4gKyNkZWZpbmUgX19fYmxvZ19jbnQxNShfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250MTQo X19hcmdzKSArIF9fc2l6ZW9mKF9fdCkpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250MTYoX190LCBf X2FyZ3MuLi4pCShfX19ibG9nX2NudDE1KF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2Rl ZmluZSBfX19ibG9nX2NudDE3KF9fdCwgX19hcmdzLi4uKQkoX19fYmxvZ19jbnQxNihfX2FyZ3Mp ICsgX19zaXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19jbnQxOChfX3QsIF9fYXJncy4u LikJKF9fX2Jsb2dfY250MTcoX19hcmdzKSArIF9fc2l6ZW9mKF9fdCkpDQo+ICsjZGVmaW5lIF9f X2Jsb2dfY250MTkoX190LCBfX2FyZ3MuLi4pCShfX19ibG9nX2NudDE4KF9fYXJncykgKyBfX3Np emVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDIwKF9fdCwgX19hcmdzLi4uKQkoX19f YmxvZ19jbnQxOShfX2FyZ3MpICsgX19zaXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19j bnQyMShfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250MjAoX19hcmdzKSArIF9fc2l6ZW9mKF9f dCkpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250MjIoX190LCBfX2FyZ3MuLi4pCShfX19ibG9nX2Nu dDIxKF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDIzKF9f dCwgX19hcmdzLi4uKQkoX19fYmxvZ19jbnQyMihfX2FyZ3MpICsgX19zaXplb2YoX190KSkNCj4g KyNkZWZpbmUgX19fYmxvZ19jbnQyNChfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250MjMoX19h cmdzKSArIF9fc2l6ZW9mKF9fdCkpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250MjUoX190LCBfX2Fy Z3MuLi4pCShfX19ibG9nX2NudDI0KF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmlu ZSBfX19ibG9nX2NudDI2KF9fdCwgX19hcmdzLi4uKQkoX19fYmxvZ19jbnQyNShfX2FyZ3MpICsg X19zaXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19jbnQyNyhfX3QsIF9fYXJncy4uLikJ KF9fX2Jsb2dfY250MjYoX19hcmdzKSArIF9fc2l6ZW9mKF9fdCkpDQo+ICsjZGVmaW5lIF9fX2Js b2dfY250MjgoX190LCBfX2FyZ3MuLi4pCShfX19ibG9nX2NudDI3KF9fYXJncykgKyBfX3NpemVv ZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDI5KF9fdCwgX19hcmdzLi4uKQkoX19fYmxv Z19jbnQyOChfX2FyZ3MpICsgX19zaXplb2YoX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19jbnQz MChfX3QsIF9fYXJncy4uLikJKF9fX2Jsb2dfY250MjkoX19hcmdzKSArIF9fc2l6ZW9mKF9fdCkp DQo+ICsjZGVmaW5lIF9fX2Jsb2dfY250MzEoX190LCBfX2FyZ3MuLi4pCShfX19ibG9nX2NudDMw KF9fYXJncykgKyBfX3NpemVvZihfX3QpKQ0KPiArI2RlZmluZSBfX19ibG9nX2NudDMyKF9fdCwg X19hcmdzLi4uKQkoX19fYmxvZ19jbnQzMShfX2FyZ3MpICsgX19zaXplb2YoX190KSkNCj4gKyNk ZWZpbmUgYmxvZ19jbnQoLi4uKQkgX19fYmxvZ19hcHBseShfX19ibG9nX2NudCwgYmxvZ19uYXJn KF9fVkFfQVJHU19fKSkoX19WQV9BUkdTX18pDQo+ICsNCj4gKyNkZWZpbmUgSVNfU1RSX0FSUkFZ KHQpIFwNCj4gKwlfX2J1aWx0aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZih0KSwgY2hhciBb XSkNCj4gKw0KPiArI2RlZmluZSBJU19EWU5BTUlDX0NIQVJfUFRSKHQpIFwNCj4gKwkoX19idWls dGluX2NsYXNzaWZ5X3R5cGUoKHQpKSA9PSAxNCAmJiBcDQo+ICsJIF9fYnVpbHRpbl90eXBlc19j b21wYXRpYmxlX3AodHlwZW9mKHQpLCBjaGFyICopICYmIFwNCj4gKwkgIV9fYnVpbHRpbl9jb25z dGFudF9wKCh0KSkpDQo+ICsNCj4gKyNkZWZpbmUgSVNfU1RBVElDX0NIQVJfQVJSQVkodCkgXA0K PiArCShfX2J1aWx0aW5fY2xhc3NpZnlfdHlwZSgodCkpID09IDUgJiYgXA0KPiArCSBfX2J1aWx0 aW5fdHlwZXNfY29tcGF0aWJsZV9wKHR5cGVvZih0KSwgY2hhcltdKSAmJiBcDQo+ICsJIF9fYnVp bHRpbl9jb25zdGFudF9wKCh0KSkpDQo+ICsNCj4gKyNkZWZpbmUgSVNfRFlOQU1JQ19DSEFSX0FS UkFZKHQpIFwNCj4gKwkoX19idWlsdGluX2NsYXNzaWZ5X3R5cGUoKHQpKSA9PSA1ICYmIFwNCj4g KwkgX19idWlsdGluX3R5cGVzX2NvbXBhdGlibGVfcCh0eXBlb2YodCksIGNoYXJbXSkgJiYgXA0K PiArCSAhX19idWlsdGluX2NvbnN0YW50X3AoKHQpKSkNCj4gKw0KPiArI2RlZmluZSBjaGFyX3B0 cihzdHIpIF9fc3VwcHJlc3NfY2FzdF93YXJuaW5nKGNoYXIgKiwgKHN0cikpDQo+ICsNCj4gKyNp Zm5kZWYgX0NFUEhfQkxPR19TRVJfSEVMUEVSU19ERUZJTkVEDQo+ICsjZGVmaW5lIF9DRVBIX0JM T0dfU0VSX0hFTFBFUlNfREVGSU5FRA0KPiArDQo+ICt1bmlvbiBudWxsX3N0cl91IHsNCj4gKwlj aGFyIHN0cls4XTsNCj4gKwl1bnNpZ25lZCBsb25nIGZvcmNlX2FsaWduOw0KPiArfTsNCj4gKw0K PiArc3RhdGljIGNvbnN0IHVuaW9uIG51bGxfc3RyX3UgbnVsbF9zdHIgPSB7DQo+ICsJLnN0ciA9 ICIoTlVMTCkgXDAiDQo+ICt9Ow0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHNpemVfdCB3cml0ZV9u dWxsX3N0cihjaGFyICpkc3QpDQo+ICt7DQo+ICsJKih1bmlvbiBudWxsX3N0cl91ICopZHN0ID0g bnVsbF9zdHI7DQo+ICsJc3RhdGljX2Fzc2VydChzaXplb2YobnVsbF9zdHIuc3RyKSA9PSBzaXpl b2YodW5zaWduZWQgbG9uZyksDQo+ICsJCSAgICAgIm51bGxfc3RyLnN0ciBzaXplIG11c3QgbWF0 Y2ggdW5zaWduZWQgbG9uZyBmb3IgcHJvcGVyIGFsaWdubWVudCIpOw0KPiArCXJldHVybiBfX2J1 aWx0aW5fc3RybGVuKG51bGxfc3RyLnN0cik7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUg c2l6ZV90IHN0cnNjcHlfbihjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYykNCg0KRG8gd2UgcmVh bGx5IGhhdmVuJ3Qgc3RhbmRhcmQgZnVuY3Rpb24gYWxyZWFkeT8NCg0KPiArew0KPiArCXNpemVf dCBjb3VudCA9IDA7DQo+ICsNCj4gKwl3aGlsZSAoY291bnQgPCBTVFJfTUFYX1NJWkUgLSAxKSB7 DQo+ICsJCWRzdFtjb3VudF0gPSBzcmNbY291bnRdOw0KPiArCQlpZiAoc3JjW2NvdW50XSA9PSAn XDAnKQ0KPiArCQkJZ290byBvdXQ7DQo+ICsJCWNvdW50Kys7DQo+ICsJfQ0KPiArDQo+ICsJZHN0 W2NvdW50XSA9ICdcMCc7DQo+ICsJcHJfd2FybigiYmxvZ19zZXI6IHN0cmluZyB0cnVuY2F0ZWQs IGV4Y2VlZGVkIG1heCBzaXplICVkXG4iLCBTVFJfTUFYX1NJWkUpOw0KPiArb3V0Og0KPiArCXJl dHVybiBjb3VudCArIDE7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBfX3N0 cnNjcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMpDQoNCkRvIHdlIHJlYWxseSBoYXZlbid0 IHN0YW5kYXJkIGZ1bmN0aW9uIGFscmVhZHk/DQoNCj4gK3sNCj4gKwlpZiAoc3JjICE9IE5VTEwp DQo+ICsJCXJldHVybiBzdHJzY3B5X24oZHN0LCBzcmMpOw0KPiArCXJldHVybiB3cml0ZV9udWxs X3N0cihkc3QpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5lIHZvaWQgKnN0cnNjcHlfbl91 cGRhdGUoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIGNvbnN0IGNoYXIgKmZpbGUsIGludCBs aW5lKQ0KPiArew0KPiArCXNzaXplX3QgcmV0ID0gX19zdHJzY3B5KGRzdCwgc3JjKTsNCj4gKw0K PiArCWlmICh1bmxpa2VseShyZXQgPD0gMCB8fCByZXQgPj0gU1RSX01BWF9TSVpFKSkgew0KPiAr CQlwcl9lcnIoImJsb2dfc2VyOiBzdHJpbmcgaGFuZGxpbmcgZXJyb3IgcmV0PSV6ZCBhdCAlczol ZCA6OiBkc3Q9JyVzJyBzcmM9JyVzJ1xuIiwNCj4gKwkJICAgICAgIHJldCwgZmlsZSwgbGluZSwg ZHN0LCBzcmMgPyBzcmMgOiAiKG51bGwpIik7DQo+ICsJCS8qIFJldHVybiBzYWZlbHkgaW5zdGVh ZCBvZiBwYW5pY2tpbmcgLSB0cnVuY2F0ZSBhbmQgY29udGludWUgKi8NCj4gKwkJaWYgKHJldCA+ PSBTVFJfTUFYX1NJWkUpIHsNCj4gKwkJCWRzdFtTVFJfTUFYX1NJWkUgLSAxXSA9ICdcMCc7DQo+ ICsJCQlyZXQgPSBTVFJfTUFYX1NJWkU7DQo+ICsJCX0gZWxzZSB7DQo+ICsJCQkvKiBIYW5kbGUg bnVsbCBvciBlbXB0eSBzdHJpbmcgY2FzZSAqLw0KPiArCQkJZHN0WzBdID0gJ1wwJzsNCj4gKwkJ CXJldCA9IDE7DQo+ICsJCX0NCj4gKwl9DQo+ICsJcmV0dXJuIGRzdCArIHJvdW5kX3VwKHJldCwg NCk7DQo+ICt9DQo+ICsNCj4gKyNlbmRpZiAvKiBfQ0VQSF9CTE9HX1NFUl9IRUxQRVJTX0RFRklO RUQgKi8NCj4gKw0KPiArLyogU2VyaWFsaXphdGlvbiB0eXBlIG1hY3JvICovDQo+ICsjZGVmaW5l IF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSAgICAgICAgICAgICAgICAgICAgICAgICAg XA0KPiArCShfX2J1aWx0aW5fY2hvb3NlX2V4cHIoSVNfU1RBVElDX0NIQVJfQVJSQVkoKF9fdCkp LCAgICAgICAgICAgICAgIFwNCj4gKwkJLyogRm9yIHN0YXRpYyBhcnJheXMgKGxpa2UgX19mdW5j X18pLCBjb3B5IGlubGluZSAqLyAgICAgICAgIFwNCj4gKwkJKChfX2J1ZmZlcikgPSAodm9pZCAq KXN0cnNjcHlfbl91cGRhdGUoKF9fYnVmZmVyKSwgICAgICAgICAgICBcDQo+ICsJCQkJCQljaGFy X3B0cihfX3QpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCQkJCQkJa2Jhc2Vu YW1lKF9fRklMRV9fKSwgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCQkJCQkJX19MSU5FX18p KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCV9fYnVpbHRpbl9jaG9vc2Vf ZXhwcihJU19TVFIoKF9fdCkpLCAgICAgICAgICAgICAgIFwNCj4gKwkJKChfX2J1ZmZlcikgPSAo dm9pZCAqKXN0cnNjcHlfbl91cGRhdGUoKF9fYnVmZmVyKSwgICAgICAgICAgICBcDQo+ICsJCQkJ CQljaGFyX3B0cihfX3QpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCQkJCQkJ a2Jhc2VuYW1lKF9fRklMRV9fKSwgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCQkJCQkJX19M SU5FX18pKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCV9fYnVpbHRpbl9j aG9vc2VfZXhwcihJU19TVFJfQVJSQVkoKF9fdCkpLCAgICAgICAgICAgICAgIFwNCj4gKwkJLyog Rm9yIGR5bmFtaWMgYXJyYXlzLCBzYXZlIE5VTEwgYW5kIHN0cmluZyBieXRlcyAqLyAgICAgICAg IFwNCj4gKwkJICgoX19idWZmZXIpID0gKHZvaWQgKilzdHJzY3B5X25fdXBkYXRlKChfX2J1ZmZl ciksICAgICAgICBcDQo+ICsJCQkJCQljaGFyX3B0cihfX3QpLCAgICAgICAgICAgICAgICAgICAg ICAgXA0KPiArCQkJCQkJa2Jhc2VuYW1lKF9fRklMRV9fKSwgICAgICAgICAgICAgICAgXA0KPiAr CQkJCQkJX19MSU5FX18pKSwgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKwlfX2J1aWx0 aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKChfX3QpKSA9PSAxLCAgICAgICAgICAgICAgICAgICAgICAg ICBcDQo+ICsJCSgqKHVpbnQzMl90ICopKF9fYnVmZmVyKSA9IF9fc3VwcHJlc3NfY2FzdF93YXJu aW5nKHVpbnQzMl90LCAoX190KSksIFwNCj4gKwkJIChfX2J1ZmZlcikgPSAodm9pZCAqKSgoY2hh ciAqKShfX2J1ZmZlcikgKyA0KSksICAgICAgICAgICAgXA0KPiArCV9fYnVpbHRpbl9jaG9vc2Vf ZXhwcihzaXplb2YoKF9fdCkpID09IDIsICAgICAgICAgICAgICAgICAgICAgICAgIFwNCj4gKwkJ KCoodWludDMyX3QgKikoX19idWZmZXIpID0gX19zdXBwcmVzc19jYXN0X3dhcm5pbmcodWludDMy X3QsIChfX3QpKSwgXA0KPiArCQkgKF9fYnVmZmVyKSA9ICh2b2lkICopKChjaGFyICopKF9fYnVm ZmVyKSArIDQpKSwgICAgICAgICAgICBcDQo+ICsJX19idWlsdGluX2Nob29zZV9leHByKHNpemVv ZigoX190KSkgPT0gNCwgICAgICAgICAgICAgICAgICAgICAgICAgXA0KPiArCQkoKih1aW50MzJf dCAqKShfX2J1ZmZlcikgPSBfX3N1cHByZXNzX2Nhc3Rfd2FybmluZyh1aW50MzJfdCwgKF9fdCkp LCBcDQo+ICsJCSAoX19idWZmZXIpID0gKHZvaWQgKikoKGNoYXIgKikoX19idWZmZXIpICsgNCkp LCAgICAgICAgICAgIFwNCj4gKwlfX2J1aWx0aW5fY2hvb3NlX2V4cHIoc2l6ZW9mKChfX3QpKSA9 PSA4LCAgICAgICAgICAgICAgICAgICAgICAgICBcDQo+ICsJCSgqKHVpbnQ2NF90ICopKF9fYnVm ZmVyKSA9IF9fc3VwcHJlc3NfY2FzdF93YXJuaW5nKHVpbnQ2NF90LCAoX190KSksIFwNCj4gKwkJ IChfX2J1ZmZlcikgPSAodm9pZCAqKSgoY2hhciAqKShfX2J1ZmZlcikgKyA4KSksICAgICAgICAg ICAgXA0KPiArCQkocHJfZXJyKCJVTlNVUFBPUlRFRF9UWVBFOiAlczolZDogdW5zdXBwb3J0ZWQg dHlwZSBzaXplICV6dVxuIiwgICAgICAgXA0KPiArCQkJa2Jhc2VuYW1lKF9fRklMRV9fKSwgX19M SU5FX18sIHNpemVvZihfX3QpKSkgICAgICAgICAgICAgIFwNCj4gKwkpKSkpKSkpKQ0KPiArDQo+ ICsvKiBTZXJpYWxpemF0aW9uIG1hY3JvcyAqLw0KPiArI2RlZmluZSBfX19ibG9nX3NlcjAoX19i dWZmZXIpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfc2VyMShfX2J1ZmZlciwgX190KSAgICAgICAgICAg KF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIy KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19i dWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyMShfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUg X19fYmxvZ19zZXIzKF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICAgXA0KPiArCShfX2Jsb2df c2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyMihfX2J1ZmZlciwgX19hcmdzKSkN Cj4gKyNkZWZpbmUgX19fYmxvZ19zZXI0KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICAgXA0K PiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyMyhfX2J1ZmZl ciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXI1KF9fYnVmZmVyLCBfX3QsIF9fYXJn cy4uLikgICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2df c2VyNChfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXI2KF9fYnVmZmVy LCBfX3QsIF9fYXJncy4uLikgICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9f dCksIF9fX2Jsb2dfc2VyNShfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19z ZXI3KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUo X19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyNihfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZp bmUgX19fYmxvZ19zZXI4KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICAgXA0KPiArCShfX2Js b2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyNyhfX2J1ZmZlciwgX19hcmdz KSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXI5KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICAg XA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyOChfX2J1 ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIxMChfX2J1ZmZlciwgX190LCBf X2FyZ3MuLi4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Js b2dfc2VyOShfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIxMShfX2J1 ZmZlciwgX190LCBfX2FyZ3MuLi4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIs IF9fdCksIF9fX2Jsb2dfc2VyMTAoX19idWZmZXIsIF9fYXJncykpDQo+ICsjZGVmaW5lIF9fX2Js b2dfc2VyMTIoX19idWZmZXIsIF9fdCwgX19hcmdzLi4uKSAgIFwNCj4gKwkoX19ibG9nX3Nlcl90 eXBlKF9fYnVmZmVyLCBfX3QpLCBfX19ibG9nX3NlcjExKF9fYnVmZmVyLCBfX2FyZ3MpKQ0KPiAr I2RlZmluZSBfX19ibG9nX3NlcjEzKF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICBcDQo+ICsJ KF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSwgX19fYmxvZ19zZXIxMihfX2J1ZmZlciwg X19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIxNChfX2J1ZmZlciwgX190LCBfX2FyZ3Mu Li4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2Vy MTMoX19idWZmZXIsIF9fYXJncykpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfc2VyMTUoX19idWZmZXIs IF9fdCwgX19hcmdzLi4uKSAgIFwNCj4gKwkoX19ibG9nX3Nlcl90eXBlKF9fYnVmZmVyLCBfX3Qp LCBfX19ibG9nX3NlcjE0KF9fYnVmZmVyLCBfX2FyZ3MpKQ0KPiArI2RlZmluZSBfX19ibG9nX3Nl cjE2KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICBcDQo+ICsJKF9fYmxvZ19zZXJfdHlwZShf X2J1ZmZlciwgX190KSwgX19fYmxvZ19zZXIxNShfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZp bmUgX19fYmxvZ19zZXIxNyhfX2J1ZmZlciwgX190LCBfX2FyZ3MuLi4pICAgXA0KPiArCShfX2Js b2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyMTYoX19idWZmZXIsIF9fYXJn cykpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfc2VyMTgoX19idWZmZXIsIF9fdCwgX19hcmdzLi4uKSAg IFwNCj4gKwkoX19ibG9nX3Nlcl90eXBlKF9fYnVmZmVyLCBfX3QpLCBfX19ibG9nX3NlcjE3KF9f YnVmZmVyLCBfX2FyZ3MpKQ0KPiArI2RlZmluZSBfX19ibG9nX3NlcjE5KF9fYnVmZmVyLCBfX3Qs IF9fYXJncy4uLikgICBcDQo+ICsJKF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSwgX19f YmxvZ19zZXIxOChfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIyMChf X2J1ZmZlciwgX190LCBfX2FyZ3MuLi4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZm ZXIsIF9fdCksIF9fX2Jsb2dfc2VyMTkoX19idWZmZXIsIF9fYXJncykpDQo+ICsjZGVmaW5lIF9f X2Jsb2dfc2VyMjEoX19idWZmZXIsIF9fdCwgX19hcmdzLi4uKSAgIFwNCj4gKwkoX19ibG9nX3Nl cl90eXBlKF9fYnVmZmVyLCBfX3QpLCBfX19ibG9nX3NlcjIwKF9fYnVmZmVyLCBfX2FyZ3MpKQ0K PiArI2RlZmluZSBfX19ibG9nX3NlcjIyKF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICBcDQo+ ICsJKF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSwgX19fYmxvZ19zZXIyMShfX2J1ZmZl ciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIyMyhfX2J1ZmZlciwgX190LCBfX2Fy Z3MuLi4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2df c2VyMjIoX19idWZmZXIsIF9fYXJncykpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfc2VyMjQoX19idWZm ZXIsIF9fdCwgX19hcmdzLi4uKSAgIFwNCj4gKwkoX19ibG9nX3Nlcl90eXBlKF9fYnVmZmVyLCBf X3QpLCBfX19ibG9nX3NlcjIzKF9fYnVmZmVyLCBfX2FyZ3MpKQ0KPiArI2RlZmluZSBfX19ibG9n X3NlcjI1KF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICBcDQo+ICsJKF9fYmxvZ19zZXJfdHlw ZShfX2J1ZmZlciwgX190KSwgX19fYmxvZ19zZXIyNChfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNk ZWZpbmUgX19fYmxvZ19zZXIyNihfX2J1ZmZlciwgX190LCBfX2FyZ3MuLi4pICAgXA0KPiArCShf X2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyMjUoX19idWZmZXIsIF9f YXJncykpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfc2VyMjcoX19idWZmZXIsIF9fdCwgX19hcmdzLi4u KSAgIFwNCj4gKwkoX19ibG9nX3Nlcl90eXBlKF9fYnVmZmVyLCBfX3QpLCBfX19ibG9nX3NlcjI2 KF9fYnVmZmVyLCBfX2FyZ3MpKQ0KPiArI2RlZmluZSBfX19ibG9nX3NlcjI4KF9fYnVmZmVyLCBf X3QsIF9fYXJncy4uLikgICBcDQo+ICsJKF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSwg X19fYmxvZ19zZXIyNyhfX2J1ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIy OShfX2J1ZmZlciwgX190LCBfX2FyZ3MuLi4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19i dWZmZXIsIF9fdCksIF9fX2Jsb2dfc2VyMjgoX19idWZmZXIsIF9fYXJncykpDQo+ICsjZGVmaW5l IF9fX2Jsb2dfc2VyMzAoX19idWZmZXIsIF9fdCwgX19hcmdzLi4uKSAgIFwNCj4gKwkoX19ibG9n X3Nlcl90eXBlKF9fYnVmZmVyLCBfX3QpLCBfX19ibG9nX3NlcjI5KF9fYnVmZmVyLCBfX2FyZ3Mp KQ0KPiArI2RlZmluZSBfX19ibG9nX3NlcjMxKF9fYnVmZmVyLCBfX3QsIF9fYXJncy4uLikgICBc DQo+ICsJKF9fYmxvZ19zZXJfdHlwZShfX2J1ZmZlciwgX190KSwgX19fYmxvZ19zZXIzMChfX2J1 ZmZlciwgX19hcmdzKSkNCj4gKyNkZWZpbmUgX19fYmxvZ19zZXIzMihfX2J1ZmZlciwgX190LCBf X2FyZ3MuLi4pICAgXA0KPiArCShfX2Jsb2dfc2VyX3R5cGUoX19idWZmZXIsIF9fdCksIF9fX2Js b2dfc2VyMzEoX19idWZmZXIsIF9fYXJncykpDQo+ICsjZGVmaW5lIF9fX2Jsb2dfc2VyKF9fYnVm ZmVyLCAuLi4pICAgXA0KPiArCV9fX2Jsb2dfYXBwbHkoX19fYmxvZ19zZXIsIGJsb2dfbmFyZyhf X1ZBX0FSR1NfXykpKF9fYnVmZmVyLCAjI19fVkFfQVJHU19fKQ0KPiArI2RlZmluZSBibG9nX3Nl ciguLi4pICBfX19ibG9nX3NlcihfX1ZBX0FSR1NfXykNCj4gKw0KPiArI2VuZGlmIC8qIF9MSU5V WF9CTE9HX1NFUl9IICovDQo+IGRpZmYgLS1naXQgYS9saWIvS2NvbmZpZyBiL2xpYi9LY29uZmln DQo+IGluZGV4IGU2Mjk0NDlkZDJhMy4uMjcyNjJhZjA3NDUzIDEwMDY0NA0KPiAtLS0gYS9saWIv S2NvbmZpZw0KPiArKysgYi9saWIvS2NvbmZpZw0KPiBAQCAtNTEyLDYgKzUxMiw4IEBAIHNvdXJj ZSAibGliL3Zkc28vS2NvbmZpZyINCj4gIA0KPiAgc291cmNlICJsaWIvZm9udHMvS2NvbmZpZyIN Cj4gIA0KPiArc291cmNlICJsaWIvYmxvZy9LY29uZmlnIg0KPiArDQo+ICBjb25maWcgU0dfU1BM SVQNCj4gIAlkZWZfYm9vbCBuDQo+ICAJaGVscA0KPiBkaWZmIC0tZ2l0IGEvbGliL01ha2VmaWxl IGIvbGliL01ha2VmaWxlDQo+IGluZGV4IDFhYjJjNGJlM2I2Ni4uOTEzYzU3OTBjZGQzIDEwMDY0 NA0KPiAtLS0gYS9saWIvTWFrZWZpbGUNCj4gKysrIGIvbGliL01ha2VmaWxlDQo+IEBAIC0yODMs NiArMjgzLDggQEAgb2JqLSQoQ09ORklHX0FTTjFfRU5DT0RFUikgKz0gYXNuMV9lbmNvZGVyLm8N Cj4gIA0KPiAgb2JqLSQoQ09ORklHX0ZPTlRfU1VQUE9SVCkgKz0gZm9udHMvDQo+ICANCj4gK29i ai0kKENPTkZJR19CTE9HKSArPSBibG9nLw0KPiArDQo+ICAjDQo+ICAjIEJ1aWxkIGEgZmFzdCBP SUQgbG9va2lwIHJlZ2lzdHJ5IGZyb20gaW5jbHVkZS9saW51eC9vaWRfcmVnaXN0cnkuaA0KPiAg Iw0KPiBkaWZmIC0tZ2l0IGEvbGliL2Jsb2cvS2NvbmZpZyBiL2xpYi9ibG9nL0tjb25maWcNCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zMjA3OTM0ZjUxYjgN Cj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvYmxvZy9LY29uZmlnDQo+IEBAIC0wLDAgKzEs NTYgQEANCj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KPiArIw0K PiArIyBCaW5hcnkgTG9nZ2luZyBJbmZyYXN0cnVjdHVyZSAoQkxPRykNCj4gKyMNCj4gKw0KPiAr Y29uZmlnIEJMT0cNCj4gKwl0cmlzdGF0ZSAiQmluYXJ5IExvZ2dpbmcgSW5mcmFzdHJ1Y3R1cmUi DQo+ICsJaGVscA0KPiArCSAgR2VuZXJpYyBiaW5hcnkgbG9nZ2luZyBpbmZyYXN0cnVjdHVyZSBm b3Iga2VybmVsIHN1YnN5c3RlbXMuDQo+ICsJICBQcm92aWRlcyBlZmZpY2llbnQgYmF0Y2hlZCBs b2dnaW5nIHdpdGggYmluYXJ5IHNlcmlhbGl6YXRpb24NCj4gKwkgIGFuZCBkZXNlcmlhbGl6YXRp b24gc3VwcG9ydC4gTW9kdWxlcyB1c2luZyBCTE9HIG1haW50YWluIHRoZWlyDQo+ICsJICBvd24g Y2xpZW50IG1hcHBpbmdzIGFuZCBkZWJ1Z2ZzIGludGVyZmFjZXMuDQo+ICsNCj4gKwkgIElmIHVu c3VyZSwgc2F5IE4uDQo+ICsNCj4gK2NvbmZpZyBCTE9HX0RFQlVHDQo+ICsJYm9vbCAiQmluYXJ5 IExvZ2dpbmcgRGVidWcgU3VwcG9ydCINCj4gKwlkZXBlbmRzIG9uIEJMT0cNCj4gKwlkZWZhdWx0 IG4NCj4gKwloZWxwDQo+ICsJICBFbmFibGUgZGVidWcgZmVhdHVyZXMgZm9yIHRoZSBiaW5hcnkg bG9nZ2luZyBpbmZyYXN0cnVjdHVyZSwNCj4gKwkgIGluY2x1ZGluZyBtZW1vcnkgcG9pc29uaW5n LCB2YWxpZGF0aW9uIGNoZWNrcywgYW5kIHVzYWdlIHRyYWNraW5nLg0KPiArCSAgVGhpcyBhZGRz IG92ZXJoZWFkIGFuZCBzaG91bGQgb25seSBiZSBlbmFibGVkIGZvciBkZWJ1Z2dpbmcuDQo+ICsN Cj4gKwkgIElmIHVuc3VyZSwgc2F5IE4uDQo+ICsNCj4gK2NvbmZpZyBCTE9HX01BWF9DTElFTlRT DQo+ICsJaW50ICJNYXhpbXVtIG51bWJlciBvZiBsb2dnaW5nIGNsaWVudHMiDQo+ICsJZGVwZW5k cyBvbiBCTE9HDQo+ICsJcmFuZ2UgMTYgMTAyNA0KPiArCWRlZmF1bHQgMjU2DQo+ICsJaGVscA0K PiArCSAgTWF4aW11bSBudW1iZXIgb2YgY2xpZW50IElEcyB0aGF0IGNhbiBiZSB1c2VkIGJ5IG1v ZHVsZXMuDQo+ICsJICBFYWNoIG1vZHVsZSB1c2luZyBCTE9HIGNhbiByZWdpc3RlciBtdWx0aXBs ZSBjbGllbnRzIHVwIHRvDQo+ICsJICB0aGlzIGxpbWl0LiBUaGUgY2xpZW50IElEIGlzIHN0b3Jl ZCBhcyB1OCwgc28gbWF4aW11bSBpcyAyNTYuDQo+ICsNCj4gK2NvbmZpZyBCTE9HX01BWF9TT1VS Q0VTDQo+ICsJaW50ICJNYXhpbXVtIG51bWJlciBvZiBzb3VyY2UgbG9jYXRpb25zIg0KPiArCWRl cGVuZHMgb24gQkxPRw0KPiArCXJhbmdlIDI1NiAxNjM4NA0KPiArCWRlZmF1bHQgNDA5Ng0KPiAr CWhlbHANCj4gKwkgIE1heGltdW0gbnVtYmVyIG9mIHVuaXF1ZSBzb3VyY2UgY29kZSBsb2NhdGlv bnMgKGZpbGUvZnVuY3Rpb24vbGluZSkNCj4gKwkgIHRoYXQgY2FuIGJlIHRyYWNrZWQuIEVhY2gg dW5pcXVlIGxvZ2dpbmcgY2FsbCBzaXRlIGdldHMgYSBzb3VyY2UgSUQuDQo+ICsNCj4gK2NvbmZp ZyBCTE9HX1RSQUNLX1VTQUdFDQo+ICsJYm9vbCAiVHJhY2sgdXNhZ2Ugc3RhdGlzdGljcyINCj4g KwlkZXBlbmRzIG9uIEJMT0dfREVCVUcNCj4gKwlkZWZhdWx0IG4NCj4gKwloZWxwDQo+ICsJICBU cmFjayB1c2FnZSBzdGF0aXN0aWNzIGZvciBsb2dnaW5nIG9wZXJhdGlvbnMsIGluY2x1ZGluZyBj b3VudHMNCj4gKwkgIGFuZCBieXRlcyB1c2VkIGluIGRpZmZlcmVudCBjb250ZXh0cyAodGFzayB2 cyBOQVBJKS4gVGhpcyBoZWxwcw0KPiArCSAgaWRlbnRpZnkgcGVyZm9ybWFuY2UgYm90dGxlbmVj a3MgYW5kIHVzYWdlIHBhdHRlcm5zIGluIHRoZSBsb2dnaW5nDQo+ICsJICBzeXN0ZW0gYnV0IGFk ZHMgb3ZlcmhlYWQgdG8gZWFjaCBsb2dnaW5nIG9wZXJhdGlvbi4NCj4gKw0KPiArCSAgSWYgdW5z dXJlLCBzYXkgTi4NCj4gZGlmZiAtLWdpdCBhL2xpYi9ibG9nL01ha2VmaWxlIGIvbGliL2Jsb2cv TWFrZWZpbGUNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi44 YzMzYTJhNmU5ZDUNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvYmxvZy9NYWtlZmlsZQ0K PiBAQCAtMCwwICsxLDE1IEBADQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4w DQo+ICsjDQo+ICsjIE1ha2VmaWxlIGZvciBCaW5hcnkgTG9nZ2luZyBJbmZyYXN0cnVjdHVyZSAo QkxPRykNCj4gKyMNCj4gKw0KPiArb2JqLSQoQ09ORklHX0JMT0cpICs9IGJsb2cubw0KPiArDQo+ ICtibG9nLXkgOj0gYmxvZ19jb3JlLm8gYmxvZ19iYXRjaC5vIGJsb2dfcGFnZWZyYWcubyBibG9n X2Rlcy5vIGJsb2dfbW9kdWxlLm8NCj4gKw0KPiArIyBEZWJ1ZyBzdXBwb3J0DQo+ICsjIGJsb2ct JChDT05GSUdfQkxPR19ERUJVRykgKz0gYmxvZ19kZWJ1Zy5vDQo+ICsNCj4gKyMgQ29tcGlsZXIg ZmxhZ3MNCj4gK2NjZmxhZ3MtJChDT05GSUdfQkxPR19ERUJVRykgKz0gLURCTE9HX0RFQlVHPTEN Cj4gK2NjZmxhZ3MtJChDT05GSUdfQkxPR19UUkFDS19VU0FHRSkgKz0gLURCTE9HX1RSQUNLX1VT QUdFPTENCj4gZGlmZiAtLWdpdCBhL2xpYi9ibG9nL2Jsb2dfYmF0Y2guYyBiL2xpYi9ibG9nL2Js b2dfYmF0Y2guYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwMDAwMDAu LmJlYjUxMjgzNmJiZQ0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2xpYi9ibG9nL2Jsb2dfYmF0 Y2guYw0KPiBAQCAtMCwwICsxLDMxMSBAQA0KPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBCaW5hcnkgTG9nZ2luZyBCYXRjaCBNYW5hZ2VtZW50DQo+ ICsgKg0KPiArICogTWlncmF0ZWQgZnJvbSBjZXBoX3Nhbl9iYXRjaC5jIHdpdGggYWxsIGFsZ29y aXRobXMgcHJlc2VydmVkDQo+ICsgKiBJbXBsZW1lbnRzIHBlci1DUFUgbWFnYXppbmUtYmFzZWQg YmF0Y2hpbmcgZm9yIGVmZmljaWVudCBvYmplY3QgcmVjeWNsaW5nDQo+ICsgKi8NCj4gKw0KPiAr I2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9saXN0 Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYmxvZy9ibG9nX2JhdGNoLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvYmxvZy9ibG9nLmg+DQo+ICsNCj4gKy8qIE51bWJlciBvZiBtYWdhemluZXMgdG8gcHJl YWxsb2NhdGUgZHVyaW5nIGluaXRpYWxpemF0aW9uICovDQo+ICsjZGVmaW5lIEJMT0dfSU5JVF9N QUdBWklORVMgNA0KPiArDQo+ICtzdGF0aWMgc3RydWN0IGJsb2dfbWFnYXppbmUgKmFsbG9jX21h Z2F6aW5lKHN0cnVjdCBibG9nX2JhdGNoICpiYXRjaCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ19t YWdhemluZSAqbWFnOw0KPiArDQo+ICsJLyogQWxsb2NhdGUgbWFnYXppbmUgc3RydWN0dXJlIGZy b20gY2FjaGUgKi8NCj4gKwltYWcgPSBrbWVtX2NhY2hlX3phbGxvYyhiYXRjaC0+bWFnYXppbmVf Y2FjaGUsIEdGUF9LRVJORUwpOw0KPiArCWlmICghbWFnKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4g Kw0KPiArCUlOSVRfTElTVF9IRUFEKCZtYWctPmxpc3QpOw0KPiArCW1hZy0+Y291bnQgPSAwOw0K PiArCXJldHVybiBtYWc7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGZyZWVfbWFnYXppbmUo c3RydWN0IGJsb2dfYmF0Y2ggKmJhdGNoLCBzdHJ1Y3QgYmxvZ19tYWdhemluZSAqbWFnKQ0KPiAr ew0KPiArCWludCBpOw0KPiArCXN0cnVjdCBibG9nX3Rsc19wYWdlZnJhZyAqY29tcG9zaXRlOw0K PiArDQo+ICsJLyogRnJlZSBhbGwgY29tcG9zaXRlcyBpbiB0aGlzIG1hZ2F6aW5lIGJlZm9yZSBm cmVlaW5nIG1hZ2F6aW5lIGl0c2VsZiAqLw0KPiArCWZvciAoaSA9IDA7IGkgPCBtYWctPmNvdW50 OyBpKyspIHsNCj4gKwkJY29tcG9zaXRlID0gbWFnLT5lbGVtZW50c1tpXTsNCj4gKwkJaWYgKGNv bXBvc2l0ZSkgew0KPiArCQkJLyogQ29tcG9zaXRlcyBhcmUgYWxsb2NhdGVkIHdpdGggYWxsb2Nf cGFnZXMoKSwgZnJlZSB3aXRoIF9fZnJlZV9wYWdlcygpICovDQo+ICsJCQlfX2ZyZWVfcGFnZXMo dmlydF90b19wYWdlKGNvbXBvc2l0ZSksDQo+ICsJCQkJICAgICBnZXRfb3JkZXIoQkxPR19UTFNf UEFHRUZSQUdfQUxMT0NfU0laRSkpOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJLyogRnJlZSB0 aGUgbWFnYXppbmUgc3RydWN0dXJlIGl0c2VsZiAqLw0KPiArCWttZW1fY2FjaGVfZnJlZShiYXRj aC0+bWFnYXppbmVfY2FjaGUsIG1hZyk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19i YXRjaF9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgYmF0Y2hpbmcgc3lzdGVtDQo+ICsgKiBAYmF0Y2g6 IEJhdGNoIHN0cnVjdHVyZSB0byBpbml0aWFsaXplDQo+ICsgKiBAcHJlcG9wdWxhdGU6IElmIHRy dWUsIHByZS1wb3B1bGF0ZSBtYWdhemluZXMgd2l0aCBjb21wb3NpdGVzDQo+ICsgKg0KPiArICog QWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyB0aGUgcGVyLUNQVSBtYWdhemluZXMgYW5kIGdsb2Jh bCBwb29scy4NCj4gKyAqIE1hZ2F6aW5lIHN0cnVjdHVyZXMgYXJlIGFsbG9jYXRlZCBmcm9tIGEg c2xhYiBjYWNoZS4NCj4gKyAqIENvbXBvc2l0ZXMgKDUxMktCIGVhY2gpIGFyZSBhbGxvY2F0ZWQg dmlhIGFsbG9jX3BhZ2VzKCkuDQo+ICsgKg0KPiArICogSWYgcHJlcG9wdWxhdGUgaXMgdHJ1ZSAo dHlwaWNhbGx5IGZvciBhbGxvY19iYXRjaCksIHByZS1hbGxvY2F0ZXMNCj4gKyAqIG1hZ2F6aW5l cyBmaWxsZWQgd2l0aCBjb21wb3NpdGVzLiBsb2dfYmF0Y2ggc2hvdWxkIHN0YXJ0IGVtcHR5Lg0K PiArICoNCj4gKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9u IGZhaWx1cmUNCj4gKyAqLw0KPiAraW50IGJsb2dfYmF0Y2hfaW5pdChzdHJ1Y3QgYmxvZ19iYXRj aCAqYmF0Y2gsIHN0cnVjdCBrbWVtX2NhY2hlICptYWdfY2FjaGUsDQo+ICsJCSAgICBib29sIHBy ZXBvcHVsYXRlKQ0KPiArew0KPiArCWludCBjcHUsIGksIGo7DQo+ICsJc3RydWN0IGJsb2dfY3B1 X21hZ2F6aW5lICpjcHVfbWFnOw0KPiArCXN0cnVjdCBibG9nX21hZ2F6aW5lICptYWc7DQo+ICsJ c3RydWN0IGJsb2dfdGxzX3BhZ2VmcmFnICpjb21wb3NpdGU7DQo+ICsJc3RydWN0IHBhZ2UgKnBh Z2VzOw0KPiArDQo+ICsJLyogSW5pdGlhbGl6ZSBjb3VudGVycyAqLw0KPiArCWJhdGNoLT5ucl9m dWxsID0gMDsNCj4gKwliYXRjaC0+bnJfZW1wdHkgPSAwOw0KPiArDQo+ICsJLyogVXNlIGNhbGxl ci1wcm92aWRlZCBjYWNoZSBvciBjcmVhdGUgb25lICovDQo+ICsJaWYgKG1hZ19jYWNoZSkgew0K PiArCQliYXRjaC0+bWFnYXppbmVfY2FjaGUgPSBtYWdfY2FjaGU7DQo+ICsJCWJhdGNoLT5leHRl cm5hbF9jYWNoZSA9IHRydWU7DQo+ICsJfSBlbHNlIHsNCj4gKwkJYmF0Y2gtPm1hZ2F6aW5lX2Nh Y2hlID0ga21lbV9jYWNoZV9jcmVhdGUoImJsb2dfbWFnYXppbmUiLA0KPiArCQkJCQkJICAgICAg IHNpemVvZihzdHJ1Y3QgYmxvZ19tYWdhemluZSksDQo+ICsJCQkJCQkgICAgICAgMCwgU0xBQl9I V0NBQ0hFX0FMSUdOLCBOVUxMKTsNCj4gKwkJaWYgKCFiYXRjaC0+bWFnYXppbmVfY2FjaGUpDQo+ ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4gKwkJYmF0Y2gtPmV4dGVybmFsX2NhY2hlID0gZmFsc2U7 DQo+ICsJfQ0KPiArDQo+ICsJLyogSW5pdGlhbGl6ZSBnbG9iYWwgbWFnYXppbmUgbGlzdHMgKi8N Cj4gKwlJTklUX0xJU1RfSEVBRCgmYmF0Y2gtPmZ1bGxfbWFnYXppbmVzKTsNCj4gKwlJTklUX0xJ U1RfSEVBRCgmYmF0Y2gtPmVtcHR5X21hZ2F6aW5lcyk7DQo+ICsJc3Bpbl9sb2NrX2luaXQoJmJh dGNoLT5mdWxsX2xvY2spOw0KPiArCXNwaW5fbG9ja19pbml0KCZiYXRjaC0+ZW1wdHlfbG9jayk7 DQo+ICsNCj4gKwkvKiBBbGxvY2F0ZSBwZXItQ1BVIG1hZ2F6aW5lcyAqLw0KPiArCWJhdGNoLT5j cHVfbWFnYXppbmVzID0gYWxsb2NfcGVyY3B1KHN0cnVjdCBibG9nX2NwdV9tYWdhemluZSk7DQo+ ICsJaWYgKCFiYXRjaC0+Y3B1X21hZ2F6aW5lcykNCj4gKwkJZ290byBjbGVhbnVwX2NhY2hlOw0K PiArDQo+ICsJLyogSW5pdGlhbGl6ZSBwZXItQ1BVIG1hZ2F6aW5lcyB0byBOVUxMIChtYWdhemlu ZXMgYWxsb2NhdGVkIG9uLWRlbWFuZCkgKi8NCj4gKwlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1 KSB7DQo+ICsJCWNwdV9tYWcgPSBwZXJfY3B1X3B0cihiYXRjaC0+Y3B1X21hZ2F6aW5lcywgY3B1 KTsNCj4gKwkJY3B1X21hZy0+bWFnID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBQcmUtcG9w dWxhdGUgbWFnYXppbmVzIGlmIHJlcXVlc3RlZCAodHlwaWNhbGx5IGZvciBhbGxvY19iYXRjaCkg Ki8NCj4gKwlpZiAocHJlcG9wdWxhdGUpIHsNCj4gKwkJZm9yIChpID0gMDsgaSA8IEJMT0dfSU5J VF9NQUdBWklORVM7IGkrKykgew0KPiArCQkJbWFnID0gYWxsb2NfbWFnYXppbmUoYmF0Y2gpOw0K PiArCQkJaWYgKCFtYWcpDQo+ICsJCQkJZ290byBjbGVhbnVwOw0KPiArDQo+ICsJCQkvKiBQb3B1 bGF0ZSBtYWdhemluZSB3aXRoIGNvbXBvc2l0ZXMgYWxsb2NhdGVkIHZpYSBhbGxvY19wYWdlcygp ICovDQo+ICsJCQlmb3IgKGogPSAwOyBqIDwgQkxPR19NQUdBWklORV9TSVpFOyBqKyspIHsNCj4g KwkJCQkvKiBBbGxvY2F0ZSA1MTJLQiBjb21wb3NpdGUgdmlhIHBhZ2UgYWxsb2NhdG9yICovDQo+ ICsJCQkJcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywNCj4gKwkJ CQkJCSAgICBnZXRfb3JkZXIoQkxPR19UTFNfUEFHRUZSQUdfQUxMT0NfU0laRSkpOw0KPiArCQkJ CWlmICghcGFnZXMpIHsNCj4gKwkJCQkJLyogRnJlZSBwYXJ0aWFsbHkgZmlsbGVkIG1hZ2F6aW5l ICovDQo+ICsJCQkJCWZyZWVfbWFnYXppbmUoYmF0Y2gsIG1hZyk7DQo+ICsJCQkJCWdvdG8gY2xl YW51cDsNCj4gKwkJCQl9DQo+ICsJCQkJY29tcG9zaXRlID0gcGFnZV9hZGRyZXNzKHBhZ2VzKTsN Cj4gKwkJCQkvKiBDb21wb3NpdGUgaXMgemVyb2VkIC0gY3R4LT5pZCA9PSAwLCB3aWxsIGJlIGlu aXRpYWxpemVkIG9uIGZpcnN0IHVzZSAqLw0KPiArCQkJCW1hZy0+ZWxlbWVudHNbal0gPSBjb21w b3NpdGU7DQo+ICsJCQkJbWFnLT5jb3VudCsrOw0KPiArCQkJfQ0KPiArDQo+ICsJCQkvKiBBZGQg ZnVsbCBtYWdhemluZSB0byB0aGUgZnVsbCBwb29sICovDQo+ICsJCQlzcGluX2xvY2soJmJhdGNo LT5mdWxsX2xvY2spOw0KPiArCQkJbGlzdF9hZGQoJm1hZy0+bGlzdCwgJmJhdGNoLT5mdWxsX21h Z2F6aW5lcyk7DQo+ICsJCQliYXRjaC0+bnJfZnVsbCsrOw0KPiArCQkJc3Bpbl91bmxvY2soJmJh dGNoLT5mdWxsX2xvY2spOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICsN Cj4gK2NsZWFudXA6DQo+ICsJYmxvZ19iYXRjaF9jbGVhbnVwKGJhdGNoKTsNCj4gKwlyZXR1cm4g LUVOT01FTTsNCj4gKw0KPiArY2xlYW51cF9jYWNoZToNCj4gKwlpZiAoIWJhdGNoLT5leHRlcm5h bF9jYWNoZSAmJiBiYXRjaC0+bWFnYXppbmVfY2FjaGUpDQo+ICsJCWttZW1fY2FjaGVfZGVzdHJv eShiYXRjaC0+bWFnYXppbmVfY2FjaGUpOw0KPiArCXJldHVybiAtRU5PTUVNOw0KPiArfQ0KPiAr RVhQT1JUX1NZTUJPTChibG9nX2JhdGNoX2luaXQpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2df YmF0Y2hfY2xlYW51cCAtIENsZWFuIHVwIHRoZSBiYXRjaGluZyBzeXN0ZW0NCj4gKyAqIEBiYXRj aDogQmF0Y2ggc3RydWN0dXJlIHRvIGNsZWFuIHVwDQo+ICsgKg0KPiArICogRnJlZXMgYWxsIG1h Z2F6aW5lcyBhbmQgY29tcG9zaXRlcywgYW5kIGRlc3Ryb3lzIHRoZSBtYWdhemluZSBjYWNoZS4N Cj4gKyAqLw0KPiArdm9pZCBibG9nX2JhdGNoX2NsZWFudXAoc3RydWN0IGJsb2dfYmF0Y2ggKmJh dGNoKQ0KPiArew0KPiArCWludCBjcHU7DQo+ICsJc3RydWN0IGJsb2dfbWFnYXppbmUgKm1hZywg KnRtcDsNCj4gKwlzdHJ1Y3QgYmxvZ19jcHVfbWFnYXppbmUgKmNwdV9tYWc7DQo+ICsNCj4gKwkv KiBGcmVlIHBlci1DUFUgbWFnYXppbmVzICovDQo+ICsJaWYgKGJhdGNoLT5jcHVfbWFnYXppbmVz KSB7DQo+ICsJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsNCj4gKwkJCWNwdV9tYWcgPSBw ZXJfY3B1X3B0cihiYXRjaC0+Y3B1X21hZ2F6aW5lcywgY3B1KTsNCj4gKwkJCWlmIChjcHVfbWFn LT5tYWcpDQo+ICsJCQkJZnJlZV9tYWdhemluZShiYXRjaCwgY3B1X21hZy0+bWFnKTsNCj4gKwkJ fQ0KPiArCQlmcmVlX3BlcmNwdShiYXRjaC0+Y3B1X21hZ2F6aW5lcyk7DQo+ICsJfQ0KPiArDQo+ ICsJLyogRnJlZSBtYWdhemluZXMgaW4gdGhlIGZ1bGwgcG9vbCAqLw0KPiArCXNwaW5fbG9jaygm YmF0Y2gtPmZ1bGxfbG9jayk7DQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKG1hZywgdG1w LCAmYmF0Y2gtPmZ1bGxfbWFnYXppbmVzLCBsaXN0KSB7DQo+ICsJCWxpc3RfZGVsKCZtYWctPmxp c3QpOw0KPiArCQliYXRjaC0+bnJfZnVsbC0tOw0KPiArCQlmcmVlX21hZ2F6aW5lKGJhdGNoLCBt YWcpOw0KPiArCX0NCj4gKwlzcGluX3VubG9jaygmYmF0Y2gtPmZ1bGxfbG9jayk7DQo+ICsNCj4g KwkvKiBGcmVlIG1hZ2F6aW5lcyBpbiB0aGUgZW1wdHkgcG9vbCAqLw0KPiArCXNwaW5fbG9jaygm YmF0Y2gtPmVtcHR5X2xvY2spOw0KPiArCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShtYWcsIHRt cCwgJmJhdGNoLT5lbXB0eV9tYWdhemluZXMsIGxpc3QpIHsNCj4gKwkJbGlzdF9kZWwoJm1hZy0+ bGlzdCk7DQo+ICsJCWJhdGNoLT5ucl9lbXB0eS0tOw0KPiArCQlmcmVlX21hZ2F6aW5lKGJhdGNo LCBtYWcpOw0KPiArCX0NCj4gKwlzcGluX3VubG9jaygmYmF0Y2gtPmVtcHR5X2xvY2spOw0KPiAr DQo+ICsJLyogRGVzdHJveSBtYWdhemluZSBjYWNoZSAqLw0KPiArCWlmICghYmF0Y2gtPmV4dGVy bmFsX2NhY2hlICYmIGJhdGNoLT5tYWdhemluZV9jYWNoZSkNCj4gKwkJa21lbV9jYWNoZV9kZXN0 cm95KGJhdGNoLT5tYWdhemluZV9jYWNoZSk7DQo+ICsNCj4gKwliYXRjaC0+bWFnYXppbmVfY2Fj aGUgPSBOVUxMOw0KPiArCWJhdGNoLT5leHRlcm5hbF9jYWNoZSA9IGZhbHNlOw0KPiArfQ0KPiAr RVhQT1JUX1NZTUJPTChibG9nX2JhdGNoX2NsZWFudXApOw0KPiArDQo+ICsvKioNCj4gKyAqIGJs b2dfYmF0Y2hfZ2V0IC0gR2V0IGFuIGVsZW1lbnQgZnJvbSB0aGUgYmF0Y2gNCj4gKyAqIEBiYXRj aDogQmF0Y2ggdG8gZ2V0IGVsZW1lbnQgZnJvbQ0KPiArICoNCj4gKyAqIFJldHVybjogRWxlbWVu dCBmcm9tIHRoZSBtYWdhemluZSwgb3IgTlVMTCBpZiBub25lIGF2YWlsYWJsZQ0KPiArICovDQo+ ICt2b2lkICpibG9nX2JhdGNoX2dldChzdHJ1Y3QgYmxvZ19iYXRjaCAqYmF0Y2gpDQo+ICt7DQo+ ICsJc3RydWN0IGJsb2dfY3B1X21hZ2F6aW5lICpjcHVfbWFnOw0KPiArCXN0cnVjdCBibG9nX21h Z2F6aW5lICpvbGRfbWFnLCAqbmV3X21hZzsNCj4gKwl2b2lkICplbGVtZW50ID0gTlVMTDsNCj4g Kw0KPiArCXByZWVtcHRfZGlzYWJsZSgpOw0KPiArCWNwdV9tYWcgPSB0aGlzX2NwdV9wdHIoYmF0 Y2gtPmNwdV9tYWdhemluZXMpOw0KPiArDQo+ICsJLyogSWYgd2UgaGF2ZSBhIG1hZ2F6aW5lIGFu ZCBpdCBoYXMgZWxlbWVudHMsIHVzZSBpdCAqLw0KPiArCWlmIChjcHVfbWFnLT5tYWcgJiYgY3B1 X21hZy0+bWFnLT5jb3VudCA+IDApIHsNCj4gKwkJZWxlbWVudCA9IGNwdV9tYWctPm1hZy0+ZWxl bWVudHNbLS1jcHVfbWFnLT5tYWctPmNvdW50XTsNCj4gKwkJZ290byBvdXQ7DQo+ICsJfQ0KPiAr DQo+ICsJLyogQ3VycmVudCBtYWdhemluZSBpcyBlbXB0eSwgdHJ5IHRvIGdldCBhIGZ1bGwgb25l ICovDQo+ICsJb2xkX21hZyA9IGNwdV9tYWctPm1hZzsNCj4gKw0KPiArCS8qIFJldHVybiBvbGQg bWFnYXppbmUgdG8gZW1wdHkgcG9vbCBpZiB3ZSBoYXZlIG9uZSAqLw0KPiArCWlmIChvbGRfbWFn KSB7DQo+ICsJCXNwaW5fbG9jaygmYmF0Y2gtPmVtcHR5X2xvY2spOw0KPiArCQlsaXN0X2FkZCgm b2xkX21hZy0+bGlzdCwgJmJhdGNoLT5lbXB0eV9tYWdhemluZXMpOw0KPiArCQliYXRjaC0+bnJf ZW1wdHkrKzsNCj4gKwkJc3Bpbl91bmxvY2soJmJhdGNoLT5lbXB0eV9sb2NrKTsNCj4gKwkJY3B1 X21hZy0+bWFnID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoYmF0Y2gtPm5yX2Z1bGwgPiAw KSB7DQo+ICsJCS8qIFRyeSB0byBnZXQgYSBmdWxsIG1hZ2F6aW5lICovDQo+ICsJCXNwaW5fbG9j aygmYmF0Y2gtPmZ1bGxfbG9jayk7DQo+ICsJCWlmICghbGlzdF9lbXB0eSgmYmF0Y2gtPmZ1bGxf bWFnYXppbmVzKSkgew0KPiArCQkJbmV3X21hZyA9IGxpc3RfZmlyc3RfZW50cnkoJmJhdGNoLT5m dWxsX21hZ2F6aW5lcywNCj4gKwkJCQkJCSAgIHN0cnVjdCBibG9nX21hZ2F6aW5lLCBsaXN0KTsN Cj4gKwkJCWxpc3RfZGVsKCZuZXdfbWFnLT5saXN0KTsNCj4gKwkJCWJhdGNoLT5ucl9mdWxsLS07 DQo+ICsJCQlzcGluX3VubG9jaygmYmF0Y2gtPmZ1bGxfbG9jayk7DQo+ICsNCj4gKwkJCWNwdV9t YWctPm1hZyA9IG5ld19tYWc7DQo+ICsJCQlpZiAobmV3X21hZy0+Y291bnQgPiAwKQ0KPiArCQkJ CWVsZW1lbnQgPSBuZXdfbWFnLT5lbGVtZW50c1stLW5ld19tYWctPmNvdW50XTsNCj4gKwkJfSBl bHNlIHsNCj4gKwkJCXNwaW5fdW5sb2NrKCZiYXRjaC0+ZnVsbF9sb2NrKTsNCj4gKwkJfQ0KPiAr CX0NCj4gK291dDoNCj4gKwlwcmVlbXB0X2VuYWJsZSgpOw0KPiArCXJldHVybiBlbGVtZW50Ow0K PiArfQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX2JhdGNoX2dldCk7DQo+ICsNCj4gKy8qKg0KPiAr ICogYmxvZ19iYXRjaF9wdXQgLSBQdXQgYW4gZWxlbWVudCBiYWNrIGludG8gdGhlIGJhdGNoDQo+ ICsgKiBAYmF0Y2g6IEJhdGNoIHRvIHB1dCBlbGVtZW50IGludG8NCj4gKyAqIEBlbGVtZW50OiBF bGVtZW50IHRvIHB1dCBiYWNrDQo+ICsgKi8NCj4gK3ZvaWQgYmxvZ19iYXRjaF9wdXQoc3RydWN0 IGJsb2dfYmF0Y2ggKmJhdGNoLCB2b2lkICplbGVtZW50KQ0KPiArew0KPiArCXN0cnVjdCBibG9n X2NwdV9tYWdhemluZSAqY3B1X21hZzsNCj4gKwlzdHJ1Y3QgYmxvZ19tYWdhemluZSAqbWFnOw0K PiArDQo+ICsJcHJlZW1wdF9kaXNhYmxlKCk7DQo+ICsJY3B1X21hZyA9IHRoaXNfY3B1X3B0cihi YXRjaC0+Y3B1X21hZ2F6aW5lcyk7DQo+ICsNCj4gKwkvKiBPcHRpbWlzdGljYWxseSB0cnkgdG8g YWRkIHRvIGN1cnJlbnQgbWFnYXppbmUgKi8NCj4gKwlpZiAobGlrZWx5KGNwdV9tYWctPm1hZyAm JiBjcHVfbWFnLT5tYWctPmNvdW50IDwgQkxPR19NQUdBWklORV9TSVpFKSkgew0KPiArCQljcHVf bWFnLT5tYWctPmVsZW1lbnRzW2NwdV9tYWctPm1hZy0+Y291bnQrK10gPSBlbGVtZW50Ow0KPiAr CQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBJZiBjdXJyZW50IG1hZ2F6aW5lIGlzIGZ1 bGwsIG1vdmUgaXQgdG8gZnVsbCBwb29sICovDQo+ICsJaWYgKGxpa2VseShjcHVfbWFnLT5tYWcg JiYgY3B1X21hZy0+bWFnLT5jb3VudCA+PSBCTE9HX01BR0FaSU5FX1NJWkUpKSB7DQo+ICsJCXNw aW5fbG9jaygmYmF0Y2gtPmZ1bGxfbG9jayk7DQo+ICsJCWxpc3RfYWRkX3RhaWwoJmNwdV9tYWct Pm1hZy0+bGlzdCwgJmJhdGNoLT5mdWxsX21hZ2F6aW5lcyk7DQo+ICsJCWJhdGNoLT5ucl9mdWxs Kys7DQo+ICsJCXNwaW5fdW5sb2NrKCZiYXRjaC0+ZnVsbF9sb2NrKTsNCj4gKwkJY3B1X21hZy0+ bWFnID0gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBHZXQgbmV3IG1hZ2F6aW5lIGlmIG5lZWRl ZCAqLw0KPiArCWlmIChsaWtlbHkoIWNwdV9tYWctPm1hZykpIHsNCj4gKwkJLyogVHJ5IHRvIGdl dCBmcm9tIGVtcHR5IHBvb2wgZmlyc3QgKi8NCj4gKwkJc3Bpbl9sb2NrKCZiYXRjaC0+ZW1wdHlf bG9jayk7DQo+ICsJCWlmICghbGlzdF9lbXB0eSgmYmF0Y2gtPmVtcHR5X21hZ2F6aW5lcykpIHsN Cj4gKwkJCW1hZyA9IGxpc3RfZmlyc3RfZW50cnkoJmJhdGNoLT5lbXB0eV9tYWdhemluZXMsDQo+ ICsJCQkJCSAgICAgICBzdHJ1Y3QgYmxvZ19tYWdhemluZSwgbGlzdCk7DQo+ICsJCQlsaXN0X2Rl bCgmbWFnLT5saXN0KTsNCj4gKwkJCWJhdGNoLT5ucl9lbXB0eS0tOw0KPiArCQkJc3Bpbl91bmxv Y2soJmJhdGNoLT5lbXB0eV9sb2NrKTsNCj4gKwkJCWNwdV9tYWctPm1hZyA9IG1hZzsNCj4gKwkJ fSBlbHNlIHsNCj4gKwkJCXNwaW5fdW5sb2NrKCZiYXRjaC0+ZW1wdHlfbG9jayk7DQo+ICsJCQlj cHVfbWFnLT5tYWcgPSBhbGxvY19tYWdhemluZShiYXRjaCk7DQo+ICsJCX0NCj4gKw0KPiArCQlp ZiAodW5saWtlbHkoIWNwdV9tYWctPm1hZykpDQo+ICsJCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsJ LyogQWRkIGVsZW1lbnQgdG8gbWFnYXppbmUgKi8NCj4gKwljcHVfbWFnLT5tYWctPmVsZW1lbnRz W2NwdV9tYWctPm1hZy0+Y291bnQrK10gPSBlbGVtZW50Ow0KPiArb3V0Og0KPiArCXByZWVtcHRf ZW5hYmxlKCk7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9saWIvYmxvZy9ibG9nX2NvcmUuYyBiL2xp Yi9ibG9nL2Jsb2dfY29yZS5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAw MDAwMDAwMC4uZWRlMzgyZjBjZTVlDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2Jsb2cv YmxvZ19jb3JlLmMNCj4gQEAgLTAsMCArMSw3NzIgQEANCj4gKy8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQo+ICsvKg0KPiArICogQmluYXJ5IExvZ2dpbmcgSW5mcmFzdHJ1Y3R1 cmUgLSBDb3JlIEltcGxlbWVudGF0aW9uDQo+ICsgKg0KPiArICogTWlncmF0ZWQgZnJvbSBjZXBo X3Nhbl9sb2dnZXIuYyB3aXRoIGFsZ29yaXRobXMgcHJlc2VydmVkDQo+ICsgKiBDbGllbnQgSUQg bWFuYWdlbWVudCByZW1vdmVkIC0gbW9kdWxlcyBoYW5kbGUgdGhlaXIgb3duIG1hcHBpbmdzDQo+ ICsgKi8NCj4gKw0KPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxp bnV4L2tlcm5lbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gKyNpbmNsdWRlIDxs aW51eC9zbGFiLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQo+ICsjaW5jbHVkZSA8 bGludXgvcHJpbnRrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdGltZS5oPg0KPiArI2luY2x1ZGUg PGxpbnV4L3BlcmNwdS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvbGlzdC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQo+ICsjaW5j bHVkZSA8bGludXgvc2NoZWQvdGFzay5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+ DQo+ICsjaW5jbHVkZSA8bGludXgvYXRvbWljLmg+DQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9i bG9nL2Jsb2cuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ibG9nL2Jsb2dfYmF0Y2guaD4NCj4gKyNp bmNsdWRlIDxsaW51eC9ibG9nL2Jsb2dfcGFnZWZyYWcuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9i bG9nL2Jsb2dfc2VyLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvYmxvZy9ibG9nX2Rlcy5oPg0KPiAr I2luY2x1ZGUgPGxpbnV4L2Jsb2cvYmxvZ19tb2R1bGUuaD4NCj4gKw0KPiArc3RhdGljIHZvaWQg YmxvZ190bHNfcmVsZWFzZV92ZXJib3NlKHZvaWQgKnB0cik7DQo+ICsjZGVmaW5lIE5VTExfU1RS ICIoTlVMTCkiDQo+ICsjZGVmaW5lIEJMT0dfTE9HX0JBVENIX01BWF9GVUxMIDE2DQo+ICsNCj4g Ky8qIENvcmUgQkxPRyBmdW5jdGlvbnMgLSBhbGwgcmVxdWlyZSBhIHZhbGlkIGxvZ2dlciBwYXJh bWV0ZXIgKi8NCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2lzX3ZhbGlkX2tlcm5lbF9hZGRyIC0g Q2hlY2sgaWYgYWRkcmVzcyBpcyBpbiB2YWxpZCBrZXJuZWwgYWRkcmVzcyByYW5nZQ0KPiArICog QGFkZHI6IEFkZHJlc3MgdG8gY2hlY2sNCj4gKyAqDQo+ICsgKiBSZXR1cm5zIHRydWUgaWYgYWRk cmVzcyBpcyBpbiB2YWxpZCBrZXJuZWwgYWRkcmVzcyByYW5nZQ0KPiArICovDQo+ICtib29sIGJs b2dfaXNfdmFsaWRfa2VybmVsX2FkZHIoY29uc3Qgdm9pZCAqYWRkcikNCj4gK3sNCj4gKwlpZiAo dmlydF9hZGRyX3ZhbGlkKGFkZHIpKQ0KPiArCQlyZXR1cm4gdHJ1ZTsNCj4gKwlyZXR1cm4gZmFs c2U7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfaXNfdmFsaWRfa2VybmVsX2FkZHIpOw0K PiArDQo+ICsvKioNCj4gKyAqIGdldF9jb250ZXh0X2lkIC0gR2V0IGEgdW5pcXVlIGNvbnRleHQg SUQNCj4gKyAqIEBsb2dnZXI6IExvZ2dlciBpbnN0YW5jZSB0byB1c2UNCj4gKyAqDQo+ICsgKiBB Y3F1aXJlcyBhIHVuaXF1ZSBJRCBmb3IgYSBUTFMgY29udGV4dCB1c2luZyB0aGUgbG9nZ2VyJ3Mg Y291bnRlcg0KPiArICoNCj4gKyAqIFJldHVybnMgYSB1bmlxdWUgY29udGV4dCBJRA0KPiArICov DQo+ICtzdGF0aWMgdTY0IGdldF9jb250ZXh0X2lkKHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2Vy KQ0KPiArew0KPiArCXU2NCBpZDsNCj4gKw0KPiArCXNwaW5fbG9jaygmbG9nZ2VyLT5jdHhfaWRf bG9jayk7DQo+ICsJaWQgPSBsb2dnZXItPm5leHRfY3R4X2lkKys7DQo+ICsJc3Bpbl91bmxvY2so JmxvZ2dlci0+Y3R4X2lkX2xvY2spOw0KPiArCXJldHVybiBpZDsNCj4gK30NCj4gKw0KPiArLyoq DQo+ICsgKiB2YWxpZGF0ZV90bHNfY3R4IC0gVmFsaWRhdGUgYSBUTFMgY29udGV4dA0KPiArICog QGN0eDogQ29udGV4dCB0byB2YWxpZGF0ZQ0KPiArICoNCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBj b250ZXh0IGlzIHZhbGlkLCBmYWxzZSBvdGhlcndpc2UNCj4gKyAqLw0KPiArc3RhdGljIGlubGlu ZSBib29sIHZhbGlkYXRlX3Rsc19jdHgoc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4KQ0KPiArew0K PiArCWlmICghY3R4KQ0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsNCj4gKyNpZiBCTE9HX0RFQlVH X1BPSVNPTg0KPiArCWlmIChjdHgtPmRlYnVnX3BvaXNvbiAhPSBCTE9HX0NUWF9QT0lTT04pIHsN Cj4gKwkJcHJfZXJyKCJCVUc6IFRMUyBjb250ZXh0IGlkPSVsbHUgKCVsbHgpIGhhcyBpbnZhbGlk IGRlYnVnX3BvaXNvbiB2YWx1ZSAweCVsbHhcbiIsDQo+ICsJCSAgICAgICBjdHgtPmlkLCAodW5z aWduZWQgbG9uZyBsb25nKWN0eCwNCj4gKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpY3R4 LT5kZWJ1Z19wb2lzb24pOw0KPiArCQlyZXR1cm4gZmFsc2U7DQo+ICsJfQ0KPiArI2VuZGlmDQo+ ICsNCj4gKwlpZiAoYXRvbWljX3JlYWQoJmN0eC0+cmVmY291bnQpICE9IDEpIHsNCj4gKwkJcHJf ZXJyKCJCVUc6IFRMUyBjb250ZXh0IGlkPSVsbHUgKCVsbHgpIHJlZmNvdW50ICVkLCBleHBlY3Rl ZCAxXG4iLA0KPiArCQkgICAgICAgY3R4LT5pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyljdHgsDQo+ ICsJCSAgICAgICBhdG9taWNfcmVhZCgmY3R4LT5yZWZjb3VudCkpOw0KPiArCQlyZXR1cm4gZmFs c2U7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIHRydWU7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICogYWRkX2NvbnRleHRfdG9fZ2xvYmFsX2xpc3QgLSBBZGQgYSBjb250ZXh0IHRvIHRoZSBnbG9i YWwgbGlzdA0KPiArICogQGN0eDogVGhlIGNvbnRleHQgdG8gYWRkIHRvIHRoZSBnbG9iYWwgbGlz dA0KPiArICoNCj4gKyAqIEFkZHMgdGhlIGNvbnRleHQgdG8gdGhlIGdsb2JhbCBsaXN0IG9mIGNv bnRleHRzIGFuZCB1cGRhdGVzIHN0YXRzDQo+ICsgKi8NCj4gK3N0YXRpYyB2b2lkIGFkZF9jb250 ZXh0X3RvX2xvZ2dlcl9saXN0KHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyLCBzdHJ1Y3QgYmxv Z190bHNfY3R4ICpjdHgpDQo+ICt7DQo+ICsJaWYgKCFsb2dnZXIpDQo+ICsJCXJldHVybjsNCj4g Kw0KPiArCXNwaW5fbG9jaygmbG9nZ2VyLT5sb2NrKTsNCj4gKwlsaXN0X2FkZCgmY3R4LT5saXN0 LCAmbG9nZ2VyLT5jb250ZXh0cyk7DQo+ICsJbG9nZ2VyLT50b3RhbF9jb250ZXh0c19hbGxvY2F0 ZWQrKzsNCj4gKwlzcGluX3VubG9jaygmbG9nZ2VyLT5sb2NrKTsNCj4gK30NCj4gKw0KPiArc3Rh dGljIHZvaWQgcmVtb3ZlX2NvbnRleHRfZnJvbV9sb2dnZXJfbGlzdChzdHJ1Y3QgYmxvZ19sb2dn ZXIgKmxvZ2dlciwNCj4gKwkJCQkJICAgICAgc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4KQ0KPiAr ew0KPiArCWlmICghbG9nZ2VyKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlzcGluX2xvY2soJmxv Z2dlci0+bG9jayk7DQo+ICsJaWYgKCFsaXN0X2VtcHR5KCZjdHgtPmxpc3QpKSB7DQo+ICsJCWxp c3RfZGVsX2luaXQoJmN0eC0+bGlzdCk7DQo+ICsJCWlmIChsb2dnZXItPnRvdGFsX2NvbnRleHRz X2FsbG9jYXRlZCkNCj4gKwkJCWxvZ2dlci0+dG90YWxfY29udGV4dHNfYWxsb2NhdGVkLS07DQo+ ICsJfQ0KPiArCXNwaW5fdW5sb2NrKCZsb2dnZXItPmxvY2spOw0KPiArfQ0KPiArDQo+ICtzdGF0 aWMgdm9pZCBibG9nX3Rsc19jbGVhcl90YXNrKHN0cnVjdCBibG9nX3Rsc19jdHggKmN0eCkNCj4g K3sNCj4gKwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7DQo+ICsNCj4gKwlpZiAoIWN0eCkNCj4g KwkJcmV0dXJuOw0KPiArDQo+ICsJdGFzayA9IFJFQURfT05DRShjdHgtPnRhc2spOw0KPiArCWlm ICh0YXNrKSB7DQo+ICsJCVdSSVRFX09OQ0UoY3R4LT50YXNrLCBOVUxMKTsNCj4gKwkJcHV0X3Rh c2tfc3RydWN0KHRhc2spOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSBzdHJ1 Y3QgYmxvZ190bHNfY3R4ICpnZXRfbmV3X2N0eChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcikN Cj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ190bHNfcGFnZWZyYWcgKmNvbXBvc2l0ZTsNCj4gKwlzdHJ1 Y3QgYmxvZ190bHNfY3R4ICpjdHg7DQo+ICsJc3RydWN0IGJsb2dfcGFnZWZyYWcgKnBmOw0KPiAr CWJvb2wgaXNfbmV3ID0gZmFsc2U7DQo+ICsNCj4gKwlpZiAoIWxvZ2dlcikNCj4gKwkJcmV0dXJu IE5VTEw7DQo+ICsNCj4gKwkvKiBQb3AgYSBjb21wb3NpdGUgZnJvbSB0aGUgYWxsb2NfYmF0Y2gg Ki8NCj4gKwljb21wb3NpdGUgPSBibG9nX2JhdGNoX2dldCgmbG9nZ2VyLT5hbGxvY19iYXRjaCk7 DQo+ICsJaWYgKCFjb21wb3NpdGUpIHsNCj4gKwkJLyogSWYgYmF0Y2ggaXMgZW1wdHksIGFsbG9j YXRlIGEgbmV3IGNvbXBvc2l0ZSB2aWEgcGFnZSBhbGxvY2F0b3IgKDUxMktCKSAqLw0KPiArCQlz dHJ1Y3QgcGFnZSAqcGFnZXM7DQo+ICsNCj4gKwkJcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VS TkVMIHwgX19HRlBfWkVSTywNCj4gKwkJCQkgICAgZ2V0X29yZGVyKEJMT0dfVExTX1BBR0VGUkFH X0FMTE9DX1NJWkUpKTsNCj4gKwkJaWYgKCFwYWdlcykgew0KPiArCQkJcHJfZXJyKCIlczogRmFp bGVkIHRvIGFsbG9jYXRlIGNvbXBvc2l0ZSB2aWEgYWxsb2NfcGFnZXNcbiIsIF9fZnVuY19fKTsN Cj4gKwkJCXJldHVybiBOVUxMOw0KPiArCQl9DQo+ICsJCWNvbXBvc2l0ZSA9IHBhZ2VfYWRkcmVz cyhwYWdlcyk7DQo+ICsJCWlzX25ldyA9IHRydWU7DQo+ICsJfQ0KPiArDQo+ICsJY3R4ID0gJmNv bXBvc2l0ZS0+Y3R4Ow0KPiArDQo+ICsJLyogQ2hlY2sgaWYgdGhpcyBjb21wb3NpdGUgbmVlZHMg aW5pdGlhbGl6YXRpb24gKG5ldyBvciBmaXJzdCB1c2UgZnJvbSBiYXRjaCkgKi8NCj4gKwlpZiAo aXNfbmV3IHx8IGN0eC0+aWQgPT0gMCkgew0KPiArCQkvKiBJbml0aWFsaXplIGNvbnRleHQgZmll bGRzIGZvciBuZXcgY29tcG9zaXRlIG9yIHVuaW5pdGlhbGl6ZWQgb25lICovDQo+ICsJCUlOSVRf TElTVF9IRUFEKCZjdHgtPmxpc3QpOw0KPiArCQlhdG9taWNfc2V0KCZjdHgtPnJlZmNvdW50LCAw KTsNCj4gKwkJY3R4LT5pZCA9IGdldF9jb250ZXh0X2lkKGxvZ2dlcik7DQo+ICsNCj4gKyNpZiBC TE9HX0RFQlVHX1BPSVNPTg0KPiArCQljdHgtPmRlYnVnX3BvaXNvbiA9IEJMT0dfQ1RYX1BPSVNP TjsNCj4gKyNlbmRpZg0KPiArDQo+ICsJCXByX2RlYnVnKCJbJWRdYmxvZzogaW5pdGlhbGl6ZWQg bmV3IGNvbXBvc2l0ZSBpZD0lbGx1ICglbGx4KVxuIiwNCj4gKwkJCSBzbXBfcHJvY2Vzc29yX2lk KCksIGN0eC0+aWQsICh1bnNpZ25lZCBsb25nIGxvbmcpY3R4KTsNCj4gKwl9DQo+ICsNCj4gKwkv KiBBbHdheXMgcmVmcmVzaCB0aGVzZSBmaWVsZHMgb24gcmV1c2UgKi8NCj4gKwljdHgtPmxvZ2dl ciA9IGxvZ2dlcjsNCj4gKwljdHgtPnJlbGVhc2UgPSBibG9nX3Rsc19yZWxlYXNlX3ZlcmJvc2U7 DQo+ICsNCj4gKyNpZiBCTE9HX0RFQlVHX1BPSVNPTg0KPiArCS8qIFZlcmlmeSBkZWJ1ZyBwb2lz b24gKi8NCj4gKwlpZiAoY3R4LT5kZWJ1Z19wb2lzb24gIT0gQkxPR19DVFhfUE9JU09OKSB7DQo+ ICsJCXByX2VycigiJXM6IENvbnRleHQgaWQ9JWxsdSBoYXMgaW52YWxpZCBkZWJ1Z19wb2lzb24g dmFsdWUgMHglbGx4XG4iLA0KPiArCQkgICAgICAgX19mdW5jX18sIGN0eC0+aWQsICh1bnNpZ25l ZCBsb25nIGxvbmcpY3R4LT5kZWJ1Z19wb2lzb24pOw0KPiArCQlXQVJOX09OX09OQ0UoMSk7DQo+ ICsJCXJldHVybiBOVUxMOw0KPiArCX0NCj4gKyNlbmRpZg0KPiArDQo+ICsJLyogSW5pdGlhbGl6 ZSB0aGUgZW1iZWRkZWQgcGFnZWZyYWcgdG8gcG9pbnQgdG8gaW5saW5lIGJ1ZmZlciAqLw0KPiAr CXBmID0gJmNvbXBvc2l0ZS0+cGY7DQo+ICsJcGYtPnBhZ2VzID0gTlVMTDsgIC8qIE5vIHNlcGFy YXRlIHBhZ2VzLCB1c2luZyBpbmxpbmUgYnVmZmVyICovDQo+ICsJcGYtPmJ1ZmZlciA9IGNvbXBv c2l0ZS0+YnVmOyAgLyogUG9pbnQgdG8gaW5saW5lIGJ1ZmZlciAqLw0KPiArCXBmLT5jYXBhY2l0 eSA9IEJMT0dfVExTX1BBR0VGUkFHX0JVRkZFUl9TSVpFOyAgLyogSW5saW5lIGJ1ZmZlciBzaXpl ICg1MTJLQiAtIGhlYWRlcikgKi8NCj4gKwlzcGluX2xvY2tfaW5pdCgmcGYtPmxvY2spOw0KPiAr CXBmLT5oZWFkID0gMDsNCj4gKwlwZi0+YWxsb2NfY291bnQgPSAwOw0KPiArCXBmLT5hY3RpdmVf ZWxlbWVudHMgPSAwOw0KPiArCXBmLT5sYXN0X2VudHJ5ID0gTlVMTDsNCj4gKw0KPiArCS8qIERl YnVnOiBXcml0ZSBidWZmZXIgb2Zmc2V0IG1hcmtlcnMgKi8NCj4gKwl7DQo+ICsJCXNpemVfdCBl eHBlY3RlZF9vZmZzZXQgPSBzaXplb2Yoc3RydWN0IGJsb2dfdGxzX2N0eCkgKyBzaXplb2Yoc3Ry dWN0IGJsb2dfcGFnZWZyYWcpOw0KPiArCQlzaXplX3QgYWN0dWFsX29mZnNldCA9IChjaGFyICop Y29tcG9zaXRlLT5idWYgLSAoY2hhciAqKWNvbXBvc2l0ZTsNCj4gKwkJKih1NjQgKiljb21wb3Np dGUtPmJ1ZiA9IGV4cGVjdGVkX29mZnNldDsNCj4gKwkJcHJfZXJyKCJibG9nOiBjb21wb3NpdGU9 JXAsIGN0eD0lcCwgcGY9JXAsIGJ1Zj0lcCwgZXhwZWN0ZWRfb2Zmc2V0PSV6dSwgYWN0dWFsX29m ZnNldD0lenVcbiIsDQo+ICsJCQljb21wb3NpdGUsICZjb21wb3NpdGUtPmN0eCwgJmNvbXBvc2l0 ZS0+cGYsIGNvbXBvc2l0ZS0+YnVmLA0KPiArCQkJZXhwZWN0ZWRfb2Zmc2V0LCBhY3R1YWxfb2Zm c2V0KTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBBZGQgdG8gbG9nZ2VyJ3MgY29udGV4dCBsaXN0ICov DQo+ICsJYWRkX2NvbnRleHRfdG9fbG9nZ2VyX2xpc3QobG9nZ2VyLCBjdHgpOw0KPiArDQo+ICsJ LyogU2V0IGJhc2UgdGltZXN0YW1wICovDQo+ICsJY3R4LT5iYXNlX2ppZmZpZXMgPSBqaWZmaWVz Ow0KPiArDQo+ICsJYmxvZ19sb2dnZXJfcHJpbnRfc3RhdHMobG9nZ2VyKTsNCj4gKwlyZXR1cm4g Y3R4OyAvKiBDb250ZXh0IHJldHVybmVkIHdpdGggcmVmY291bnQgPSAwICovDQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICogaXNfdmFsaWRfYWN0aXZlX2N0eCAtIFZhbGlkYXRlIGFuIGFjdGl2ZSBU TFMgY29udGV4dA0KPiArICogQGN0eDogQ29udGV4dCB0byB2YWxpZGF0ZQ0KPiArICogQGNvbnRl eHRfZGVzY3JpcHRpb246IFN0cmluZyBkZXNjcmliaW5nIHRoZSBjb250ZXh0IGZvciBlcnJvciBt ZXNzYWdlcw0KPiArICoNCj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBjb250ZXh0IGlzIHZhbGlkIChw b2lzb24gT0ssIHJlZmNvdW50ID09IDEpLCBmYWxzZSBvdGhlcndpc2UNCj4gKyAqLw0KPiArc3Rh dGljIGlubGluZSBib29sIGlzX3ZhbGlkX2FjdGl2ZV9jdHgoc3RydWN0IGJsb2dfdGxzX2N0eCAq Y3R4LA0KPiArCQkJCSAgICAgICBjb25zdCBjaGFyICpjb250ZXh0X2Rlc2NyaXB0aW9uKQ0KPiAr ew0KPiArCWlmICghY3R4KSB7DQo+ICsJCXByX2VycigiQlVHOiAlcyBjb250ZXh0IGlzIE5VTEwu XG4iLCBjb250ZXh0X2Rlc2NyaXB0aW9uKTsNCj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCX0NCj4g Kw0KPiArI2lmIEJMT0dfREVCVUdfUE9JU09ODQo+ICsJaWYgKGN0eC0+ZGVidWdfcG9pc29uICE9 IEJMT0dfQ1RYX1BPSVNPTikgew0KPiArCQlwcl9lcnIoIkJVRzogJXMgY29udGV4dCBpZD0lbGx1 ICglbGx4KSBoYXMgaW52YWxpZCBkZWJ1Z19wb2lzb24gdmFsdWUgMHglbGx4XG4iLA0KPiArCQkg ICAgICAgY29udGV4dF9kZXNjcmlwdGlvbiwgY3R4LT5pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZylj dHgsDQo+ICsJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWN0eC0+ZGVidWdfcG9pc29uKTsN Cj4gKwkJcmV0dXJuIGZhbHNlOw0KPiArCX0NCj4gKyNlbmRpZg0KPiArDQo+ICsJaWYgKGF0b21p Y19yZWFkKCZjdHgtPnJlZmNvdW50KSAhPSAxKSB7DQo+ICsJCXByX2VycigiQlVHOiAlcyBjb250 ZXh0IGlkPSVsbHUgKCVsbHgpIHJlZmNvdW50ICVkLCBleHBlY3RlZCAxXG4iLA0KPiArCQkgICAg ICAgY29udGV4dF9kZXNjcmlwdGlvbiwgY3R4LT5pZCwgKHVuc2lnbmVkIGxvbmcgbG9uZyljdHgs DQo+ICsJCSAgICAgICBhdG9taWNfcmVhZCgmY3R4LT5yZWZjb3VudCkpOw0KPiArCQlyZXR1cm4g ZmFsc2U7DQo+ICsJfQ0KPiArCXJldHVybiB0cnVlOw0KPiArfQ0KPiArDQo+ICsvKiBSZWxlYXNl IGZ1bmN0aW9uIGZvciBUTFMgc3RvcmFnZSAqLw0KPiArc3RhdGljIHZvaWQgYmxvZ190bHNfcmVs ZWFzZSh2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4ID0gcHRy Ow0KPiArCXN0cnVjdCBibG9nX3Rsc19wYWdlZnJhZyAqY29tcG9zaXRlOw0KPiArDQo+ICsJaWYg KCFjdHgpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWlmIChhdG9taWNfZGVjX3JldHVybigmY3R4 LT5yZWZjb3VudCkgIT0gMCkgew0KPiArCQlwcl9lcnIoIkJVRzogVExTIGNvbnRleHQgaWQ9JWxs dSByZWZjb3VudCAlZCBhZnRlciByZWxlYXNlXG4iLA0KPiArCQkgICAgICAgY3R4LT5pZCwgYXRv bWljX3JlYWQoJmN0eC0+cmVmY291bnQpKTsNCj4gKwkJcGFuaWMoImJsb2c6IFRMUyBjb250ZXh0 IGlkPSVsbHUgcmVmY291bnQgJWQgYWZ0ZXIgcmVsZWFzZVxuIiwNCj4gKwkJICAgICAgY3R4LT5p ZCwgYXRvbWljX3JlYWQoJmN0eC0+cmVmY291bnQpKTsNCj4gKwl9DQo+ICsJcHJfZGVidWcoImJs b2c6IGRlY3JlbWVudGVkIHJlZmNvdW50PTAgZm9yIGNvbnRleHQgaWQ9JWxsdVxuIiwgY3R4LT5p ZCk7DQo+ICsNCj4gKwkvKiBDbGVhciB0YXNrIGFzc29jaWF0aW9uICovDQo+ICsJYmxvZ190bHNf Y2xlYXJfdGFzayhjdHgpOw0KPiArCXByX2RlYnVnKCJibG9nOiByZWxlYXNpbmcgVExTIGNvbnRl eHQgZm9yIHBpZCAlZCBbJXNdXG4iLCBjdHgtPnBpZCwNCj4gKwkJIGN0eC0+Y29tbSk7DQo+ICsN Cj4gKwlpZiAoY3R4LT5sb2dnZXIpIHsNCj4gKwkJLyogUmVtb3ZlIGZyb20gbG9nZ2VyJ3MgY29u dGV4dCBsaXN0ICovDQo+ICsJCXJlbW92ZV9jb250ZXh0X2Zyb21fbG9nZ2VyX2xpc3QoY3R4LT5s b2dnZXIsIGN0eCk7DQo+ICsNCj4gKwkJLyogUmVjeWNsZSBjb21wb3NpdGUgdG8gbG9nX2JhdGNo IC0gbG9ncyByZW1haW4gcmVhZGFibGUhDQo+ICsJCSAqIENvbXBvc2l0ZSB3aWxsIGZsb3c6IGxv Z19iYXRjaCDihpIgZHJhaW4g4oaSIHJlc2V0IOKGkiBhbGxvY19iYXRjaCAqLw0KPiArCQljb21w b3NpdGUgPSBibG9nX2N0eF9jb250YWluZXIoY3R4KTsNCj4gKwkJYmxvZ19iYXRjaF9wdXQoJmN0 eC0+bG9nZ2VyLT5sb2dfYmF0Y2gsIGNvbXBvc2l0ZSk7DQo+ICsNCj4gKwkJLyogSWYgbG9nX2Jh dGNoIGhhcyB0b28gbWFueSBmdWxsIG1hZ2F6aW5lcywgbW92ZSBvbmUgdG8gYWxsb2NfYmF0Y2gg Ki8NCj4gKwkJaWYgKGN0eC0+bG9nZ2VyLT5sb2dfYmF0Y2gubnJfZnVsbCA+IEJMT0dfTE9HX0JB VENIX01BWF9GVUxMKSB7DQo+ICsJCQlzdHJ1Y3QgYmxvZ19tYWdhemluZSAqbWFnOw0KPiArDQo+ ICsJCQlzcGluX2xvY2soJmN0eC0+bG9nZ2VyLT5sb2dfYmF0Y2guZnVsbF9sb2NrKTsNCj4gKwkJ CWlmICghbGlzdF9lbXB0eSgmY3R4LT5sb2dnZXItPmxvZ19iYXRjaC5mdWxsX21hZ2F6aW5lcykp IHsNCj4gKwkJCQltYWcgPSBsaXN0X2ZpcnN0X2VudHJ5KA0KPiArCQkJCQkmY3R4LT5sb2dnZXIt PmxvZ19iYXRjaC5mdWxsX21hZ2F6aW5lcywNCj4gKwkJCQkJc3RydWN0IGJsb2dfbWFnYXppbmUs IGxpc3QpOw0KPiArCQkJCWxpc3RfZGVsKCZtYWctPmxpc3QpOw0KPiArCQkJCWN0eC0+bG9nZ2Vy LT5sb2dfYmF0Y2gubnJfZnVsbC0tOw0KPiArCQkJCXNwaW5fdW5sb2NrKCZjdHgtPmxvZ2dlci0+ bG9nX2JhdGNoLmZ1bGxfbG9jayk7DQo+ICsNCj4gKwkJCQlzcGluX2xvY2soJmN0eC0+bG9nZ2Vy LT5hbGxvY19iYXRjaC5mdWxsX2xvY2spOw0KPiArCQkJCWxpc3RfYWRkKCZtYWctPmxpc3QsDQo+ ICsJCQkJCSAmY3R4LT5sb2dnZXItPmFsbG9jX2JhdGNoLmZ1bGxfbWFnYXppbmVzKTsNCj4gKwkJ CQljdHgtPmxvZ2dlci0+YWxsb2NfYmF0Y2gubnJfZnVsbCsrOw0KPiArCQkJCXNwaW5fdW5sb2Nr KCZjdHgtPmxvZ2dlci0+YWxsb2NfYmF0Y2guZnVsbF9sb2NrKTsNCj4gKwkJCX0gZWxzZSB7DQo+ ICsJCQkJc3Bpbl91bmxvY2soJmN0eC0+bG9nZ2VyLT5sb2dfYmF0Y2guZnVsbF9sb2NrKTsNCj4g KwkJCX0NCj4gKwkJfQ0KPiArCX0gZWxzZSB7DQo+ICsJCXByX2VycigiQlVHOiBUTFMgY29udGV4 dCBpZD0lbGx1IGhhcyBubyBsb2dnZXIgZm9yIGJhdGNoIHJlbGVhc2VcbiIsDQo+ICsJCSAgICAg ICBjdHgtPmlkKTsNCj4gKwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGJsb2dfdGxzX3Jl bGVhc2VfdmVyYm9zZSh2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2dfdGxzX2N0eCAq Y3R4ID0gKHN0cnVjdCBibG9nX3Rsc19jdHggKilwdHI7DQo+ICsNCj4gKwlpZiAoIWN0eCkgew0K PiArCQlwcl9lcnIoImJsb2cgLS0gQ2FsbGJhY2sgOiBpbnZhbGlkIFRMUyBjb250ZXh0IHBvaW50 ZXIgJWRcbiIsDQo+ICsJCSAgICAgICBjdXJyZW50LT5waWQpOw0KPiArCQlyZXR1cm47DQo+ICsJ fQ0KPiArI2lmIEJMT0dfREVCVUdfUE9JU09ODQo+ICsJaWYgKGN0eC0+ZGVidWdfcG9pc29uICE9 IEJMT0dfQ1RYX1BPSVNPTikgew0KPiArCQlwcl9lcnIoIiVzOiBpbnZhbGlkIFRMUyBjb250ZXh0 IGlkPSVsbHUgaGFzIGludmFsaWQgZGVidWdfcG9pc29uIHZhbHVlIDB4JWxseFxuIiwNCj4gKwkJ ICAgICAgIF9fZnVuY19fLCBjdHgtPmlkLCAodW5zaWduZWQgbG9uZyBsb25nKWN0eC0+ZGVidWdf cG9pc29uKTsNCj4gKwkJV0FSTl9PTl9PTkNFKDEpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiAr I2VuZGlmDQo+ICsJaWYgKGF0b21pY19yZWFkKCZjdHgtPnJlZmNvdW50KSAhPSAxKSB7DQo+ICsJ CXByX2VycigiJXM6IGludmFsaWQgVExTIGNvbnRleHQgcmVmY291bnQgJWQgZm9yIHBpZCAlZCBb JXNdXG4iLA0KPiArCQkgICAgICAgX19mdW5jX18sIGF0b21pY19yZWFkKCZjdHgtPnJlZmNvdW50 KSwgY3R4LT5waWQsIGN0eC0+Y29tbSk7DQo+ICsJCVdBUk5fT05fT05DRSgxKTsNCj4gKwkJcmV0 dXJuOw0KPiArCX0NCj4gKwlibG9nX3Rsc19yZWxlYXNlKGN0eCk7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBzdHJ1Y3QgYmxvZ190bHNfY3R4ICpsb29rdXBfYWN0aXZlX2N0eChzdHJ1Y3QgYmxvZ19s b2dnZXIgKmxvZ2dlcikNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ190bHNfY3R4ICpjdHg7DQo+ICsN Cj4gKwlpZiAoIWxvZ2dlcikNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlpZiAobG9nZ2Vy LT5oYXNfc2xvdCkgew0KPiArCQl1OCBzbG90ID0gbG9nZ2VyLT5zbG90X2lkOw0KPiArCQlzdHJ1 Y3QgYmxvZ190bHNfY3R4ICpzbG90X2N0eDsNCj4gKw0KPiArCQlpZiAoc2xvdCA8IEJMT0dfTUFY X01PRFVMRVMpIHsNCj4gKwkJCXNsb3RfY3R4ID0gUkVBRF9PTkNFKGN1cnJlbnQtPmJsb2dfY29u dGV4dHNbc2xvdF0pOw0KPiArCQkJaWYgKHNsb3RfY3R4KQ0KPiArCQkJCXJldHVybiBzbG90X2N0 eDsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCXNwaW5fbG9jaygmbG9nZ2VyLT5sb2NrKTsNCj4g KwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0eCwgJmxvZ2dlci0+Y29udGV4dHMsIGxpc3QpIHsNCj4g KwkJaWYgKGN0eC0+dGFzayA9PSBjdXJyZW50KSB7DQo+ICsJCQlzcGluX3VubG9jaygmbG9nZ2Vy LT5sb2NrKTsNCj4gKwkJCXJldHVybiBjdHg7DQo+ICsJCX0NCj4gKwl9DQo+ICsJc3Bpbl91bmxv Y2soJmxvZ2dlci0+bG9jayk7DQo+ICsJcmV0dXJuIE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICogYmxvZ19nZXRfdGxzX2N0eCAtIEdldCBvciBjcmVhdGUgVExTIGNvbnRleHQgZm9yIGN1 cnJlbnQgdGFzaw0KPiArICogQGxvZ2dlcjogTG9nZ2VyIGluc3RhbmNlIHRvIHVzZQ0KPiArICoN Cj4gKyAqIFJldHVybnMgcG9pbnRlciB0byBUTFMgY29udGV4dCBvciBOVUxMIG9uIGVycm9yDQo+ ICsgKi8NCj4gK3N0cnVjdCBibG9nX3Rsc19jdHggKmJsb2dfZ2V0X3Rsc19jdHgoc3RydWN0IGJs b2dfbG9nZ2VyICpsb2dnZXIpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4ID0g bG9va3VwX2FjdGl2ZV9jdHgobG9nZ2VyKTsNCj4gKw0KPiArCS8qIENvbnRleHQgYWxyZWFkeSBl eGlzdHMgLSBoYW5kbGVkIGJ5IHNsb3QtYmFzZWQgc3lzdGVtICovDQo+ICsJaWYgKGN0eCkNCj4g KwkJcmV0dXJuIGN0eDsNCj4gKw0KPiArCWlmIChsb2dnZXIgJiYgbG9nZ2VyLT5oYXNfc2xvdCAm JiBsb2dnZXItPm93bmVyX2N0eCkNCj4gKwkJcmV0dXJuIGJsb2dfZ2V0X3Rsc19jdHhfY3R4KGxv Z2dlci0+b3duZXJfY3R4KTsNCj4gKw0KPiArCS8qIENyZWF0ZSBuZXcgY29udGV4dCAqLw0KPiAr CXByX2RlYnVnKCJibG9nOiBjcmVhdGluZyBuZXcgVExTIGNvbnRleHQgZm9yIHBpZCAlZCBbJXNd XG4iLA0KPiArCQkgY3VycmVudC0+cGlkLCBjdXJyZW50LT5jb21tKTsNCj4gKw0KPiArCWN0eCA9 IGdldF9uZXdfY3R4KGxvZ2dlcik7DQo+ICsJaWYgKCFjdHgpDQo+ICsJCXJldHVybiBOVUxMOw0K PiArDQo+ICsJYmxvZ190bHNfY2xlYXJfdGFzayhjdHgpOw0KPiArCWdldF90YXNrX3N0cnVjdChj dXJyZW50KTsNCj4gKw0KPiArCS8qIFNldCB1cCBUTFMgc3BlY2lmaWMgcGFydHMgKi8NCj4gKwkv KiBOb3RlOiBzbG90LWJhc2VkIHN0b3JhZ2UgaXMgaGFuZGxlZCBieSBibG9nX21vZHVsZSBsYXll ciAqLw0KPiArCWN0eC0+dGFzayA9IGN1cnJlbnQ7DQo+ICsJY3R4LT5waWQgPSBjdXJyZW50LT5w aWQ7DQo+ICsJc3Ryc2NweShjdHgtPmNvbW0sIGN1cnJlbnQtPmNvbW0sIFRBU0tfQ09NTV9MRU4p Ow0KPiArDQo+ICsJLyogSW5jcmVtZW50IHJlZmNvdW50IGZyb20gMCB0byAxICovDQo+ICsJaWYg KGF0b21pY19pbmNfcmV0dXJuKCZjdHgtPnJlZmNvdW50KSAhPSAxKSB7DQo+ICsJCXByX2Vycigi JXM6IEZhaWxlZCB0byBzZXQgcmVmY291bnQ9MSBmb3IgbmV3IFRMUyBjb250ZXh0IGlkPSVsbHUg KHdhcyAlZCBiZWZvcmUgaW5jKVxuIiwNCj4gKwkJICAgICAgIF9fZnVuY19fLCBjdHgtPmlkLCBh dG9taWNfcmVhZCgmY3R4LT5yZWZjb3VudCkgLSAxKTsNCj4gKwkJV0FSTl9PTl9PTkNFKDEpOw0K PiArCX0NCj4gKw0KPiArCXByX2RlYnVnKA0KPiArCQkiYmxvZzogc3VjY2Vzc2Z1bGx5IGNyZWF0 ZWQgbmV3IFRMUyBjb250ZXh0IGlkPSVsbHUgZm9yIHBpZCAlZCBbJXNdXG4iLA0KPiArCQljdHgt PmlkLCBjdHgtPnBpZCwgY3R4LT5jb21tKTsNCj4gKwlyZXR1cm4gY3R4Ow0KPiArfQ0KPiArRVhQ T1JUX1NZTUJPTChibG9nX2dldF90bHNfY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2dl dF9zb3VyY2VfaWQgLSBHZXQgb3IgY3JlYXRlIGEgc291cmNlIElEIGZvciB0aGUgZ2l2ZW4gbG9j YXRpb24NCj4gKyAqIEBsb2dnZXI6IExvZ2dlciBpbnN0YW5jZSB0byB1c2UgKE5VTEwgZm9yIGds b2JhbCkNCj4gKyAqIEBmaWxlOiBTb3VyY2UgZmlsZSBuYW1lDQo+ICsgKiBAZnVuYzogRnVuY3Rp b24gbmFtZQ0KPiArICogQGxpbmU6IExpbmUgbnVtYmVyDQo+ICsgKiBAZm10OiBGb3JtYXQgc3Ry aW5nDQo+ICsgKg0KPiArICogUmV0dXJucyBhIHVuaXF1ZSBJRCBmb3IgdGhpcyBzb3VyY2UgbG9j YXRpb24NCj4gKyAqLw0KPiArdTMyIGJsb2dfZ2V0X3NvdXJjZV9pZChzdHJ1Y3QgYmxvZ19sb2dn ZXIgKmxvZ2dlciwgY29uc3QgY2hhciAqZmlsZSwNCj4gKwkJICAgICAgIGNvbnN0IGNoYXIgKmZ1 bmMsIHVuc2lnbmVkIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQpDQo+ICt7DQo+ICsJdTMyIGlk Ow0KPiArDQo+ICsJaWYgKCFsb2dnZXIpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJaWQgPSBh dG9taWNfaW5jX3JldHVybigmbG9nZ2VyLT5uZXh0X3NvdXJjZV9pZCk7DQo+ICsNCj4gKwlpZiAo aWQgPj0gQkxPR19NQVhfU09VUkNFX0lEUykgew0KPiArCQkvKiBJZiB3ZSBydW4gb3V0IG9mIElE cywganVzdCB1c2UgdGhlIGZpcnN0IG9uZSAqLw0KPiArCQlwcl93YXJuKCJibG9nOiBzb3VyY2Ug SUQgb3ZlcmZsb3csIHJldXNpbmcgSUQgMVxuIik7DQo+ICsJCWlkID0gMTsNCj4gKwl9DQo+ICsN Cj4gKwkvKiBTdG9yZSB0aGUgc291cmNlIGluZm9ybWF0aW9uIGluIHRoZSBsb2dnZXIncyBtYXAg Ki8NCj4gKwlsb2dnZXItPnNvdXJjZV9tYXBbaWRdLmZpbGUgPSBmaWxlOw0KPiArCWxvZ2dlci0+ c291cmNlX21hcFtpZF0uZnVuYyA9IGZ1bmM7DQo+ICsJbG9nZ2VyLT5zb3VyY2VfbWFwW2lkXS5s aW5lID0gbGluZTsNCj4gKwlsb2dnZXItPnNvdXJjZV9tYXBbaWRdLmZtdCA9IGZtdDsNCj4gKwls b2dnZXItPnNvdXJjZV9tYXBbaWRdLndhcm5fY291bnQgPSAwOw0KPiArDQo+ICsJcHJfZXJyKCJi bG9nX2dldF9zb3VyY2VfaWQ6IGlkPSV1LCBmaWxlPSVzLCBmdW5jPSVzLCBsaW5lPSV1LCBmbXQ9 JXAgKCVzKVxuIiwNCj4gKwkJaWQsIGZpbGUsIGZ1bmMsIGxpbmUsIGZtdCwgZm10ID8gZm10IDog Ik5VTEwiKTsNCg0KRG8gd2UgcmVhbGx5IG5lZWQgcHJfZXJyKCkgaGVyZT8gTWF5YmUsIHByX2Rl YnVnKCk/DQoNCj4gKw0KPiArCXJldHVybiBpZDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woYmxv Z19nZXRfc291cmNlX2lkKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2dldF9zb3VyY2VfaW5m byAtIEdldCBzb3VyY2UgaW5mbyBmb3IgYSBnaXZlbiBJRA0KPiArICogQGlkOiBTb3VyY2UgSUQN Cj4gKyAqDQo+ICsgKiBSZXR1cm5zIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24gZm9yIHRoaXMgSUQN Cj4gKyAqLw0KPiArc3RydWN0IGJsb2dfc291cmNlX2luZm8gKmJsb2dfZ2V0X3NvdXJjZV9pbmZv KHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyLCB1MzIgaWQpDQo+ICt7DQo+ICsJaWYgKCFsb2dn ZXIgfHwgdW5saWtlbHkoaWQgPT0gMCB8fCBpZCA+PSBCTE9HX01BWF9TT1VSQ0VfSURTKSkNCj4g KwkJcmV0dXJuIE5VTEw7DQo+ICsJcmV0dXJuICZsb2dnZXItPnNvdXJjZV9tYXBbaWRdOw0KPiAr fQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX2dldF9zb3VyY2VfaW5mbyk7DQo+ICsNCj4gKy8qKg0K PiArICogYmxvZ19sb2cgLSBMb2cgYSBtZXNzYWdlDQo+ICsgKiBAc291cmNlX2lkOiBTb3VyY2Ug SUQgZm9yIHRoaXMgbG9jYXRpb24NCj4gKyAqIEBjbGllbnRfaWQ6IENsaWVudCBJRCBmb3IgdGhp cyBtZXNzYWdlIChtb2R1bGUtc3BlY2lmaWMpDQo+ICsgKiBAbmVlZGVkX3NpemU6IFNpemUgbmVl ZGVkIGZvciB0aGUgbWVzc2FnZQ0KPiArICoNCj4gKyAqIFJldHVybnMgYSBidWZmZXIgdG8gd3Jp dGUgdGhlIG1lc3NhZ2UgaW50bw0KPiArICovDQo+ICt2b2lkICpibG9nX2xvZyhzdHJ1Y3QgYmxv Z19sb2dnZXIgKmxvZ2dlciwgdTMyIHNvdXJjZV9pZCwgdTggY2xpZW50X2lkLCBzaXplX3QgbmVl ZGVkX3NpemUpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4Ow0KPiArCXN0cnVj dCBibG9nX2xvZ19lbnRyeSAqZW50cnkgPSBOVUxMOw0KPiArCWludCBhbGxvYzsNCj4gKwlpbnQg cmV0cnlfY291bnQgPSAwOw0KPiArDQo+ICsjaWYgQkxPR19UUkFDS19VU0FHRQ0KPiArCXN0cnVj dCBibG9nX3NvdXJjZV9pbmZvICpzb3VyY2U7DQo+ICsjZW5kaWYNCj4gKwkvKiBQcmVzZXJ2ZSBw YXlsb2FkIGxlbmd0aDsgY29tcHV0ZSByb3VuZGVkIHRvdGFsIGFsbG9jYXRpb24gc2VwYXJhdGVs eSAqLw0KPiArCXNpemVfdCBwYXlsb2FkX2xlbiA9IG5lZWRlZF9zaXplOw0KPiArDQo+ICsJaWYg KHBheWxvYWRfbGVuID4gQkxPR19NQVhfUEFZTE9BRCkgew0KPiArCQlwcl93YXJuX29uY2UoIiVz OiBwYXlsb2FkICV6dSBleGNlZWRzIG1heCAldVxuIiwNCj4gKwkJCQlfX2Z1bmNfXywgcGF5bG9h ZF9sZW4sIEJMT0dfTUFYX1BBWUxPQUQpOw0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsN Cj4gKwluZWVkZWRfc2l6ZSA9IHJvdW5kX3VwKHBheWxvYWRfbGVuICsgc2l6ZW9mKHN0cnVjdCBi bG9nX2xvZ19lbnRyeSksIDgpOw0KDQpXaHkgbmFtZWx5IDggaGFzIGJlZW4gaGFyZGNvZGVkPyBN YXliZSwgaXQgbWFrZXMgc2Vuc2UgdG8gaW50cm9kdWNlIHRoZSBuYW1lZA0KY29uc3RhbnQ/DQoN Cj4gKyNpZiBCTE9HX1RSQUNLX1VTQUdFDQo+ICsJLyogR2V0IHNvdXJjZSBpbmZvIHRvIHVwZGF0 ZSBzdGF0cyAqLw0KPiArCXNvdXJjZSA9IGJsb2dfZ2V0X3NvdXJjZV9pbmZvKGxvZ2dlciwgc291 cmNlX2lkKTsNCj4gKwlpZiAodW5saWtlbHkoc291cmNlKSkgew0KPiArCQlpZiAoaW5fc2Vydmlu Z19zb2Z0aXJxKCkpIHsNCj4gKwkJCWF0b21pY19pbmMoJnNvdXJjZS0+bmFwaV91c2FnZSk7DQo+ ICsJCQlhdG9taWNfYWRkKG5lZWRlZF9zaXplLCAmc291cmNlLT5uYXBpX2J5dGVzKTsNCj4gKwkJ fSBlbHNlIHsNCj4gKwkJCWF0b21pY19pbmMoJnNvdXJjZS0+dGFza191c2FnZSk7DQo+ICsJCQlh dG9taWNfYWRkKG5lZWRlZF9zaXplLCAmc291cmNlLT50YXNrX2J5dGVzKTsNCj4gKwkJfQ0KPiAr CX0NCj4gKyNlbmRpZg0KPiArDQo+ICsJd2hpbGUgKGVudHJ5ID09IE5VTEwpIHsNCj4gKwkJc3Ry dWN0IGJsb2dfcGFnZWZyYWcgKnBmOw0KPiArDQo+ICsJCWN0eCA9IGJsb2dfZ2V0X2N0eChsb2dn ZXIpOw0KPiArCQlpZiAoIWN0eCkgew0KPiArCQkJcHJfZXJyKCJGYWlsZWQgdG8gZ2V0IFRMUyBj b250ZXh0XG4iKTsNCj4gKwkJCXJldHVybiBOVUxMOw0KPiArCQl9DQo+ICsJCWlmICghYmxvZ19p c192YWxpZF9rZXJuZWxfYWRkcihjdHgpKSB7DQo+ICsJCQlwcl9lcnIoIiVzOiBpbnZhbGlkIFRM UyBjb250ZXh0IGFkZHJlc3M6ICVwS1xuIiwNCj4gKwkJCSAgICAgICBfX2Z1bmNfXywgY3R4KTsN Cj4gKwkJCXJldHVybiBOVUxMOw0KPiArCQl9DQo+ICsJCWlmICh1bmxpa2VseShyZXRyeV9jb3Vu dCkpIHsNCj4gKwkJCXByX2RlYnVnKA0KDQpXaHkgZG8gd2UgcGxhY2UgdGhlIGZvcm1hdCBzdHJp bmcgb24gdGhlIG5leHQgbGluZT8NCg0KPiArCQkJCSJbJWRdUmV0cnlpbmcgYWxsb2NhdGlvbiB3 aXRoIGN0eCAlbGx1ICglcywgcGlkICVkKSAocmV0cnkgJWQsIG5lZWRlZF9zaXplPSV6dSBAICVk KVxuIiwNCj4gKwkJCQlzbXBfcHJvY2Vzc29yX2lkKCksIGN0eC0+aWQsIGN0eC0+Y29tbSwNCj4g KwkJCQljdHgtPnBpZCwgcmV0cnlfY291bnQsIG5lZWRlZF9zaXplLCBzb3VyY2VfaWQpOw0KPiAr CQl9DQo+ICsNCj4gKwkJcGYgPSBibG9nX2N0eF9wZihjdHgpOw0KPiArCQlhbGxvYyA9IGJsb2df cGFnZWZyYWdfcmVzZXJ2ZShwZiwgbmVlZGVkX3NpemUpOw0KPiArCQlpZiAoYWxsb2MgPT0gLUVO T01FTSkgew0KPiArCQkJcHJfZGVidWcoIiVzOiBhbGxvY2F0aW9uIGZhaWxlZCAobmVlZGVkICV6 dSksIHJlc2V0dGluZyBjb250ZXh0XG4iLA0KPiArCQkJCSBfX2Z1bmNfXywgbmVlZGVkX3NpemUp Ow0KPiArCQkJYmxvZ19wYWdlZnJhZ19yZXNldChwZik7DQo+ICsJCQlyZXRyeV9jb3VudCsrOw0K PiArCQkJaWYgKHJldHJ5X2NvdW50ID4gMykgew0KPiArCQkJCXByX2VycigiJXM6IGZhaWxlZCB0 byBhbGxvY2F0ZSBhZnRlciAzIHJldHJpZXNcbiIsIF9fZnVuY19fKTsNCj4gKwkJCQlyZXR1cm4g TlVMTDsNCj4gKwkJCX0NCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJZW50cnkg PSBibG9nX3BhZ2VmcmFnX2dldF9wdHIocGYsIGFsbG9jKTsNCj4gKwkJaWYgKCFlbnRyeSkgew0K PiArCQkJcHJfZXJyKCIlczogZmFpbGVkIHRvIGdldCBwb2ludGVyIGZyb20gcGFnZWZyYWdcbiIs IF9fZnVuY19fKTsNCj4gKwkJCXJldHVybiBOVUxMOw0KPiArCQl9DQo+ICsJCXBmLT5sYXN0X2Vu dHJ5ID0gZW50cnk7DQo+ICsNCj4gKwkJLyogU3RvcmUgcGVuZGluZyBwdWJsaXNoIGluZm8gZm9y IGJsb2dfbG9nX2NvbW1pdCgpICovDQo+ICsJCWN0eC0+cGVuZGluZ19vZmZzZXQgPSBhbGxvYzsN Cj4gKwkJY3R4LT5wZW5kaW5nX3NpemUgPSBuZWVkZWRfc2l6ZTsNCj4gKwl9DQo+ICsNCj4gKyNp ZiBCTE9HX0RFQlVHX1BPSVNPTg0KPiArCWVudHJ5LT5kZWJ1Z19wb2lzb24gPSBCTE9HX0xPR19F TlRSWV9QT0lTT047DQo+ICsjZW5kaWYNCj4gKwllbnRyeS0+dHNfZGVsdGEgPSAodTMyKShqaWZm aWVzIC0gY3R4LT5iYXNlX2ppZmZpZXMpOw0KPiArCWVudHJ5LT5zb3VyY2VfaWQgPSAodTE2KXNv dXJjZV9pZDsNCj4gKwllbnRyeS0+bGVuID0gKHU4KXBheWxvYWRfbGVuOw0KPiArCWVudHJ5LT5j bGllbnRfaWQgPSBjbGllbnRfaWQ7DQo+ICsJZW50cnktPmZsYWdzID0gMDsNCj4gKw0KPiArCXBy X2VycigiYmxvZ19sb2c6IHNvdXJjZV9pZD0ldSwgcGF5bG9hZF9sZW49JXp1LCBuZWVkZWRfc2l6 ZT0lenUsIG9mZnNldD0lZFxuIiwNCj4gKwkJc291cmNlX2lkLCBwYXlsb2FkX2xlbiwgbmVlZGVk X3NpemUsIGN0eC0+cGVuZGluZ19vZmZzZXQpOw0KDQpEaXR0by4gV2h5IHByX2VycigpIGhlcmU/ DQoNCj4gKw0KPiArCS8qIERlYnVnOiBTaG93IGVudHJ5IGxvY2F0aW9uIHJlbGF0aXZlIHRvIGNv bXBvc2l0ZSAqLw0KDQpJZiBpdCBpcyBkZWJ1ZywgdGhlbiBzaG91bGQgaXQgYmUgdW5kZXIgQ09O RklHX0JMT0dfREVCVUc/DQoNCj4gKwl7DQo+ICsJCXN0cnVjdCBibG9nX3Rsc19wYWdlZnJhZyAq Y29tcG9zaXRlID0gYmxvZ19jdHhfY29udGFpbmVyKGN0eCk7DQo+ICsJCXNpemVfdCBlbnRyeV9v ZmZzZXRfZnJvbV9jb21wb3NpdGUgPSAoY2hhciAqKWVudHJ5IC0gKGNoYXIgKiljb21wb3NpdGU7 DQo+ICsJCXNpemVfdCBidWZmZXJfb2Zmc2V0X2Zyb21fY29tcG9zaXRlID0gKGNoYXIgKiljb21w b3NpdGUtPmJ1ZiAtIChjaGFyICopY29tcG9zaXRlOw0KPiArCQlwcl9lcnIoImJsb2dfbG9nOiBj b21wb3NpdGU9JXAsIGVudHJ5PSVwLCBlbnRyeV9vZmZzZXQ9JXp1LCBidWZmZXJfc3RhcnRfb2Zm c2V0PSV6dVxuIiwNCj4gKwkJCWNvbXBvc2l0ZSwgZW50cnksIGVudHJ5X29mZnNldF9mcm9tX2Nv bXBvc2l0ZSwgYnVmZmVyX29mZnNldF9mcm9tX2NvbXBvc2l0ZSk7DQo+ICsJfQ0KPiArDQo+ICsJ cmV0dXJuIGVudHJ5LT5idWZmZXI7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfbG9nKTsN Cj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2xvZ19jb21taXQgLSBQdWJsaXNoIGEgcmVzZXJ2ZWQg bG9nIGVudHJ5DQo+ICsgKiBAbG9nZ2VyOiBMb2dnZXIgaW5zdGFuY2UNCj4gKyAqIEBhY3R1YWxf c2l6ZTogQWN0dWFsIGJ5dGVzIHdyaXR0ZW4gZHVyaW5nIHNlcmlhbGl6YXRpb24NCj4gKyAqDQo+ ICsgKiBQdWJsaXNoZXMgdGhlIGxvZyBlbnRyeSB0aGF0IHdhcyByZXNlcnZlZCBieSB0aGUgbGFz dCBibG9nX2xvZygpIGNhbGwuDQo+ICsgKiBNdXN0IGJlIGNhbGxlZCBhZnRlciBzZXJpYWxpemF0 aW9uIGlzIGNvbXBsZXRlIHRvIG1ha2UgdGhlIGVudHJ5IHZpc2libGUNCj4gKyAqIHRvIHJlYWRl cnMuDQo+ICsgKg0KPiArICogQ29udGV4dDogU2FtZSBjb250ZXh0IGFzIHRoZSBwcmVjZWRpbmcg YmxvZ19sb2coKSBjYWxsDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJy b3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK2ludCBibG9nX2xvZ19jb21taXQoc3RydWN0 IGJsb2dfbG9nZ2VyICpsb2dnZXIsIHNpemVfdCBhY3R1YWxfc2l6ZSkNCj4gK3sNCj4gKwlzdHJ1 Y3QgYmxvZ190bHNfY3R4ICpjdHggPSBibG9nX2dldF9jdHgobG9nZ2VyKTsNCj4gKwlzdHJ1Y3Qg YmxvZ19wYWdlZnJhZyAqcGY7DQo+ICsJc3RydWN0IGJsb2dfbG9nX2VudHJ5ICplbnRyeTsNCj4g KwlzaXplX3QgdG90YWxfc2l6ZTsNCj4gKw0KPiArCWlmICghY3R4KQ0KPiArCQlyZXR1cm4gLUVJ TlZBTDsNCj4gKw0KPiArCXBmID0gYmxvZ19jdHhfcGYoY3R4KTsNCj4gKw0KPiArCS8qIEdldCB0 aGUgZW50cnkgd2UncmUgY29tbWl0dGluZyBhbmQgdXBkYXRlIGl0cyBsZW5ndGggdG8gYWN0dWFs IHNpemUgKi8NCj4gKwllbnRyeSA9IGJsb2dfcGFnZWZyYWdfZ2V0X3B0cihwZiwgY3R4LT5wZW5k aW5nX29mZnNldCk7DQo+ICsJaWYgKGVudHJ5KQ0KPiArCQllbnRyeS0+bGVuID0gKHU4KWFjdHVh bF9zaXplOw0KPiArDQo+ICsJLyogYWN0dWFsX3NpemUgaXMgcGF5bG9hZCBvbmx5LCBuZWVkIHRv IGFkZCBoZWFkZXIgKyBhbGlnbm1lbnQgKi8NCj4gKwl0b3RhbF9zaXplID0gcm91bmRfdXAoc2l6 ZW9mKHN0cnVjdCBibG9nX2xvZ19lbnRyeSkgKyBhY3R1YWxfc2l6ZSwgOCk7DQoNCkRpdHRvLiBI YXJkY29kZWQgOD8NCg0KPiArDQo+ICsJcHJfZXJyKCJibG9nX2xvZ19jb21taXQ6IHBlbmRpbmdf b2Zmc2V0PSVkLCBhY3R1YWxfc2l6ZT0lenUsIHRvdGFsX3NpemU9JXp1LCBwZW5kaW5nX3NpemU9 JXp1XG4iLA0KPiArCQljdHgtPnBlbmRpbmdfb2Zmc2V0LCBhY3R1YWxfc2l6ZSwgdG90YWxfc2l6 ZSwgY3R4LT5wZW5kaW5nX3NpemUpOw0KDQpEaXR0by4gcHJfZXJyKCk/DQoNCj4gKw0KPiArCWJs b2dfcGFnZWZyYWdfcHVibGlzaChwZiwgY3R4LT5wZW5kaW5nX29mZnNldCArIHRvdGFsX3NpemUp Ow0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfbG9nX2Nv bW1pdCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19nZXRfbmFwaV9jdHggLSBHZXQgTkFQSSBj b250ZXh0IGZvciBjdXJyZW50IENQVQ0KPiArICovDQo+ICtzdHJ1Y3QgYmxvZ190bHNfY3R4ICpi bG9nX2dldF9uYXBpX2N0eChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcikNCj4gK3sNCj4gKwlz dHJ1Y3QgYmxvZ190bHNfY3R4ICoqbmFwaV9jdHhfcHRyOw0KPiArDQo+ICsJaWYgKCFsb2dnZXIg fHwgIWxvZ2dlci0+bmFwaV9jdHhzKQ0KPiArCQlyZXR1cm4gTlVMTDsNCj4gKw0KPiArCW5hcGlf Y3R4X3B0ciA9IHBlcl9jcHVfcHRyKGxvZ2dlci0+bmFwaV9jdHhzLCBzbXBfcHJvY2Vzc29yX2lk KCkpOw0KPiArCXJldHVybiBuYXBpX2N0eF9wdHIgPyAqbmFwaV9jdHhfcHRyIDogTlVMTDsNCj4g K30NCj4gK0VYUE9SVF9TWU1CT0woYmxvZ19nZXRfbmFwaV9jdHgpOw0KPiArDQo+ICsvKioNCj4g KyAqIGJsb2dfc2V0X25hcGlfY3R4IC0gU2V0IE5BUEkgY29udGV4dCBmb3IgY3VycmVudCBDUFUN Cj4gKyAqLw0KPiArdm9pZCBibG9nX3NldF9uYXBpX2N0eChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxv Z2dlciwgc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4KQ0KPiArew0KPiArCXN0cnVjdCBibG9nX3Rs c19jdHggKipuYXBpX2N0eF9wdHI7DQo+ICsNCj4gKwlpZiAoIWxvZ2dlciB8fCAhbG9nZ2VyLT5u YXBpX2N0eHMpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCW5hcGlfY3R4X3B0ciA9IHBlcl9jcHVf cHRyKGxvZ2dlci0+bmFwaV9jdHhzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOw0KPiArCWlmIChuYXBp X2N0eF9wdHIpDQo+ICsJCSpuYXBpX2N0eF9wdHIgPSBjdHg7DQo+ICt9DQo+ICtFWFBPUlRfU1lN Qk9MKGJsb2dfc2V0X25hcGlfY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2dldF9jdHgg LSBHZXQgYXBwcm9wcmlhdGUgY29udGV4dCBiYXNlZCBvbiBjb250ZXh0IHR5cGUNCj4gKyAqLw0K PiArc3RydWN0IGJsb2dfdGxzX2N0eCAqYmxvZ19nZXRfY3R4KHN0cnVjdCBibG9nX2xvZ2dlciAq bG9nZ2VyKQ0KPiArew0KPiArCWlmIChpbl9zZXJ2aW5nX3NvZnRpcnEoKSkgew0KPiArCQlzdHJ1 Y3QgYmxvZ190bHNfY3R4ICpuID0gYmxvZ19nZXRfbmFwaV9jdHgobG9nZ2VyKTsNCj4gKw0KPiAr CQlpZiAobikNCj4gKwkJCXJldHVybiBuOw0KPiArCQkvKiBGYWxsYmFjayB0byBUTFMgY29udGV4 dCBpZiBubyBOQVBJIGNvbnRleHQgc2V0ICovDQo+ICsJfQ0KPiArCXJldHVybiBibG9nX2dldF90 bHNfY3R4KGxvZ2dlcik7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfZ2V0X2N0eCk7DQo+ ICsNCj4gKy8qKg0KPiArICogYmxvZ19sb2dfaXRlcl9pbml0IC0gSW5pdGlhbGl6ZSB0aGUgaXRl cmF0b3IgZm9yIGEgc3BlY2lmaWMgcGFnZWZyYWcNCj4gKyAqLw0KPiArdm9pZCBibG9nX2xvZ19p dGVyX2luaXQoc3RydWN0IGJsb2dfbG9nX2l0ZXIgKml0ZXIsIHN0cnVjdCBibG9nX3BhZ2VmcmFn ICpwZiwNCj4gKwkJCXU2NCBoZWFkX3NuYXBzaG90KQ0KPiArew0KPiArCWlmICghaXRlciB8fCAh cGYpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWl0ZXItPnBmID0gcGY7DQo+ICsJaXRlci0+Y3Vy cmVudF9vZmZzZXQgPSAwOw0KPiArCWl0ZXItPmVuZF9vZmZzZXQgPSBoZWFkX3NuYXBzaG90Ow0K PiArCWl0ZXItPnByZXZfb2Zmc2V0ID0gMDsNCj4gKwlpdGVyLT5zdGVwcyA9IDA7DQo+ICt9DQo+ ICtFWFBPUlRfU1lNQk9MKGJsb2dfbG9nX2l0ZXJfaW5pdCk7DQo+ICsNCj4gKy8qKg0KPiArICog YmxvZ19sb2dfaXRlcl9uZXh0IC0gR2V0IG5leHQgbG9nIGVudHJ5DQo+ICsgKi8NCj4gK3N0cnVj dCBibG9nX2xvZ19lbnRyeSAqYmxvZ19sb2dfaXRlcl9uZXh0KHN0cnVjdCBibG9nX2xvZ19pdGVy ICppdGVyKQ0KPiArew0KPiArCXN0cnVjdCBibG9nX2xvZ19lbnRyeSAqZW50cnk7DQo+ICsNCj4g KwlpZiAoIWl0ZXIgfHwgaXRlci0+Y3VycmVudF9vZmZzZXQgPj0gaXRlci0+ZW5kX29mZnNldCkN Cj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwllbnRyeSA9IGJsb2dfcGFnZWZyYWdfZ2V0X3B0 cihpdGVyLT5wZiwgaXRlci0+Y3VycmVudF9vZmZzZXQpOw0KPiArCWlmICghZW50cnkpDQo+ICsJ CXJldHVybiBOVUxMOw0KPiArDQo+ICsJaXRlci0+cHJldl9vZmZzZXQgPSBpdGVyLT5jdXJyZW50 X29mZnNldDsNCj4gKwlpdGVyLT5jdXJyZW50X29mZnNldCArPQ0KPiArCQlyb3VuZF91cChzaXpl b2Yoc3RydWN0IGJsb2dfbG9nX2VudHJ5KSArIGVudHJ5LT5sZW4sIDgpOw0KDQpEaXR0by4gSGFy ZGNvZGVkIDg/DQoNCj4gKwlpdGVyLT5zdGVwcysrOw0KPiArDQo+ICsJcmV0dXJuIGVudHJ5Ow0K PiArfQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX2xvZ19pdGVyX25leHQpOw0KPiArDQo+ICsvKioN Cj4gKyAqIGJsb2dfZGVzX2VudHJ5IC0gRGVzZXJpYWxpemUgZW50cnkgd2l0aCBjYWxsYmFjaw0K PiArICovDQo+ICtpbnQgYmxvZ19kZXNfZW50cnkoc3RydWN0IGJsb2dfbG9nZ2VyICpsb2dnZXIs IHN0cnVjdCBibG9nX2xvZ19lbnRyeSAqZW50cnksDQo+ICsJCSAgIGNoYXIgKm91dHB1dCwgc2l6 ZV90IG91dF9zaXplLCBibG9nX2NsaWVudF9kZXNfZm4gY2xpZW50X2NiKQ0KPiArew0KPiArCWlu dCBsZW4gPSAwOw0KPiArCXN0cnVjdCBibG9nX3NvdXJjZV9pbmZvICpzb3VyY2U7DQo+ICsNCj4g KwlpZiAoIWVudHJ5IHx8ICFvdXRwdXQpDQo+ICsJCXJldHVybiAtRUlOVkFMOw0KPiArDQo+ICsJ LyogTGV0IG1vZHVsZSBoYW5kbGUgY2xpZW50X2lkIGlmIGNhbGxiYWNrIHByb3ZpZGVkICovDQo+ ICsJaWYgKGNsaWVudF9jYikgew0KPiArCQlsZW4gPSBjbGllbnRfY2Iob3V0cHV0LCBvdXRfc2l6 ZSwgZW50cnktPmNsaWVudF9pZCk7DQo+ICsJCWlmIChsZW4gPCAwKQ0KPiArCQkJcmV0dXJuIGxl bjsNCj4gKwl9DQo+ICsNCj4gKwkvKiBHZXQgc291cmNlIGluZm8gKi8NCj4gKwlzb3VyY2UgPSBi bG9nX2dldF9zb3VyY2VfaW5mbyhsb2dnZXIsIGVudHJ5LT5zb3VyY2VfaWQpOw0KPiArCWlmICgh c291cmNlKSB7DQo+ICsJCWxlbiArPSBzbnByaW50ZihvdXRwdXQgKyBsZW4sIG91dF9zaXplIC0g bGVuLA0KDQpJIHNlZSBvdXRwdXQgKyBsZW4gYW5kIG91dF9zaXplIC0gbGVuIG11bHRpcGxlIHRp bWVzIGluIGZ1bmN0aW9uLiBNYXliZSwgaXQNCm1ha2VzIHNlbnNlIHRvIGNhbGN1bGF0ZSBiZWZv cmUgcHJvdmlkaW5nIGFzIGFyZ3VtZW50PyBBbHNvLCBJIGFtIHdvcnJpZWQgYWJvdXQNCmltcHJv cGVyIGxlbiB2YWx1ZXMuIERvZXMgaXQgbWFrZSBzZW5zZSB0byBjaGVjayB0aGUgbGVuIHZhbHVl Pw0KDQo+ICsJCQkJIlt1bmtub3duIHNvdXJjZSAldV0iLCBlbnRyeS0+c291cmNlX2lkKTsNCj4g KwkJcmV0dXJuIGxlbjsNCj4gKwl9DQo+ICsNCj4gKwlwcl9lcnIoImJsb2dfZGVzX2VudHJ5OiBz b3VyY2VfaWQ9JXUsIHNvdXJjZT0lcCwgZm10PSVwICglcyksIGVudHJ5LT5sZW49JXVcbiIsDQo+ ICsJCWVudHJ5LT5zb3VyY2VfaWQsIHNvdXJjZSwgc291cmNlLT5mbXQsIHNvdXJjZS0+Zm10ID8g c291cmNlLT5mbXQgOiAiTlVMTCIsIGVudHJ5LT5sZW4pOw0KDQpEaXR0by4gcHJfZXJyKCk/DQoN Cj4gKw0KPiArCS8qIERlYnVnOiBTaG93IGVudHJ5IHBvaW50ZXIgYW5kIHBheWxvYWQgcG9pbnRl ciAqLw0KPiArCXByX2VycigiYmxvZ19kZXNfZW50cnk6IGVudHJ5PSVwLCBlbnRyeS0+YnVmZmVy PSVwLCBidWZmZXJfb2Zmc2V0PSVsZFxuIiwNCj4gKwkJZW50cnksIGVudHJ5LT5idWZmZXIsIChj aGFyICopZW50cnktPmJ1ZmZlciAtIChjaGFyICopZW50cnkpOw0KDQpEaXR0by4gcHJfZXJyKCk/ IElmIGl0IGlzIGRlYnVnLCB0aGVuLCBtYXliZSwgaXQgc2hvdWxkIGJlIHVuZGVyDQpDT05GSUdf QkxPR19ERUJVRz8NCg0KPiArDQo+ICsJLyogQWRkIHNvdXJjZSBsb2NhdGlvbiAqLw0KPiArCWxl biArPSBzbnByaW50ZihvdXRwdXQgKyBsZW4sIG91dF9zaXplIC0gbGVuLCAiWyVzOiVzOiV1XSAi LA0KPiArCQkJc291cmNlLT5maWxlLCBzb3VyY2UtPmZ1bmMsIHNvdXJjZS0+bGluZSk7DQo+ICsN Cj4gKwkvKiBEZXNlcmlhbGl6ZSB0aGUgYnVmZmVyIGNvbnRlbnQgKi8NCj4gKwlsZW4gKz0gYmxv Z19kZXNfcmVjb25zdHJ1Y3Qoc291cmNlLT5mbXQsIGVudHJ5LT5idWZmZXIsIDAsIGVudHJ5LT5s ZW4sDQo+ICsJCQkJICAgIG91dHB1dCArIGxlbiwgb3V0X3NpemUgLSBsZW4pOw0KPiArDQo+ICsJ cmV0dXJuIGxlbjsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woYmxvZ19kZXNfZW50cnkpOw0KPiAr DQo+ICsvKiBObyBnbG9iYWwgaW5pdC9leGl0OiBjb25zdW1lcnMgaW5pdGlhbGl6ZSBwZXLigJFt b2R1bGUgY29udGV4dHMgZXhwbGljaXRseSAqLw0KPiArDQo+ICtNT0RVTEVfTElDRU5TRSgiR1BM Iik7DQo+ICtNT0RVTEVfREVTQ1JJUFRJT04oIkJpbmFyeSBMb2dnaW5nIEluZnJhc3RydWN0dXJl IChCTE9HKSIpOw0KDQpNT0RVTEVfQVVUSE9SKCk/DQoNCj4gZGlmZiAtLWdpdCBhL2xpYi9ibG9n L2Jsb2dfZGVzLmMgYi9saWIvYmxvZy9ibG9nX2Rlcy5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjYxZDViN2MyZjEwDQo+IC0tLSAvZGV2L251bGwNCj4g KysrIGIvbGliL2Jsb2cvYmxvZ19kZXMuYw0KPiBAQCAtMCwwICsxLDM4NSBAQA0KPiArLy8gU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gKy8qDQo+ICsgKiBCaW5hcnkgTG9nZ2lu ZyBEZXNlcmlhbGl6YXRpb24NCj4gKyAqDQo+ICsgKiBNaWdyYXRlZCBmcm9tIGNlcGhfc2FuX2Rl cy5jIHdpdGggYWxsIGFsZ29yaXRobXMgcHJlc2VydmVkDQo+ICsgKi8NCj4gKw0KPiArI2luY2x1 ZGUgPGxpbnV4L2Jsb2cvYmxvZ19kZXMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ibG9nL2Jsb2cu aD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9jdHlw ZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+ICsjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+DQo+ICsjaW5jbHVkZSA8bGludXgvcHJpbnRrLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv YWxpZ24uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC91bmFsaWduZWQuaD4NCj4gKw0KPiArLyoqDQo+ ICsgKiBibG9nX2Rlc19yZWNvbnN0cnVjdCAtIFJlY29uc3RydWN0cyBhIGZvcm1hdHRlZCBzdHJp bmcgZnJvbSBzZXJpYWxpemVkIHZhbHVlcw0KPiArICogQGZtdDogRm9ybWF0IHN0cmluZyBjb250 YWluaW5nICUgc3BlY2lmaWVycw0KPiArICogQGJ1ZmZlcjogQnVmZmVyIGNvbnRhaW5pbmcgc2Vy aWFsaXplZCB2YWx1ZXMNCj4gKyAqIEBucl9hcmdzOiBOdW1iZXIgb2YgYXJndW1lbnRzIHRvIHBy b2Nlc3MgKG5vdCB1c2VkIHlldCwgZm9yIGZ1dHVyZSkNCj4gKyAqIEBzaXplOiBTaXplIG9mIHRo ZSBidWZmZXIgaW4gYnl0ZXMNCj4gKyAqIEBvdXQ6IEJ1ZmZlciB0byBzdG9yZSB0aGUgcmVjb25z dHJ1Y3RlZCBzdHJpbmcNCj4gKyAqIEBvdXRfc2l6ZTogU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZl cg0KPiArICoNCj4gKyAqIFJldHVybjogTnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gdG8gb3V0IGJ1 ZmZlciwgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK2ludCBi bG9nX2Rlc19yZWNvbnN0cnVjdChjb25zdCBjaGFyICpmbXQsIGNvbnN0IHZvaWQgKmJ1ZmZlciwg c2l6ZV90IG5yX2FyZ3MsDQo+ICsJCQkgIHNpemVfdCBzaXplLCBjaGFyICpvdXQsIHNpemVfdCBv dXRfc2l6ZSkNCj4gK3sNCj4gKwljb25zdCBjaGFyICpidWZfc3RhcnQgPSAoY29uc3QgY2hhciAq KWJ1ZmZlcjsNCj4gKwljb25zdCBjaGFyICpidWZfcHRyID0gYnVmX3N0YXJ0Ow0KPiArCWNvbnN0 IGNoYXIgKmJ1Zl9lbmQgPSBidWZfc3RhcnQgKyBzaXplOw0KPiArCWNvbnN0IGNoYXIgKmZtdF9w dHIgPSBmbXQ7DQo+ICsJY2hhciAqb3V0X3B0ciA9IG91dDsNCj4gKwlzaXplX3QgcmVtYWluaW5n ID0gb3V0X3NpemUgLSAxOyAvKiBSZXNlcnZlIHNwYWNlIGZvciBudWxsIHRlcm1pbmF0b3IgKi8N Cj4gKwlzaXplX3QgYXJnX2NvdW50ID0gMDsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJaWYgKCFm bXQgfHwgIWJ1ZmZlciB8fCAhb3V0IHx8ICFvdXRfc2l6ZSkgew0KPiArCQlwcl9lcnIoImJsb2df ZGVzX3JlY29uc3RydWN0OiBpbnZhbGlkIHBhcmFtcyBmbXQ9JXAgYnVmZmVyPSVwIG91dD0lcCBv dXRfc2l6ZT0lenVcbiIsDQo+ICsJCQlmbXQsIGJ1ZmZlciwgb3V0LCBvdXRfc2l6ZSk7DQo+ICsJ CXJldHVybiAtRUlOVkFMOw0KPiArCX0NCj4gKw0KPiArCSpvdXRfcHRyID0gJ1wwJzsNCj4gKw0K PiArCS8qIFByb2Nlc3MgdGhlIGZvcm1hdCBzdHJpbmcgKi8NCj4gKwl3aGlsZSAoKmZtdF9wdHIg JiYgcmVtYWluaW5nID4gMCkgew0KPiArCQlpbnQgaXNfbG9uZzsNCj4gKwkJaW50IGlzX2xvbmdf bG9uZzsNCj4gKw0KPiArCQlpZiAoKmZtdF9wdHIgIT0gJyUnKSB7DQo+ICsJCQkvKiBDb3B5IGxp dGVyYWwgY2hhcmFjdGVyICovDQo+ICsJCQkqb3V0X3B0cisrID0gKmZtdF9wdHIrKzsNCj4gKwkJ CXJlbWFpbmluZy0tOw0KPiArCQkJY29udGludWU7DQo+ICsJCX0NCj4gKw0KPiArCQkvKiBTa2lw IHRoZSAnJScgKi8NCj4gKwkJZm10X3B0cisrOw0KPiArDQo+ICsJCS8qIEhhbmRsZSAlJSAqLw0K PiArCQlpZiAoKmZtdF9wdHIgPT0gJyUnKSB7DQo+ICsJCQkqb3V0X3B0cisrID0gJyUnOw0KPiAr CQkJZm10X3B0cisrOw0KPiArCQkJcmVtYWluaW5nLS07DQo+ICsJCQljb250aW51ZTsNCj4gKwkJ fQ0KPiArDQo+ICsJCS8qIFNraXAgZmxhZ3MgKC0rIzAgc3BhY2UpICovDQo+ICsJCXdoaWxlICgq Zm10X3B0ciAmJiAoKmZtdF9wdHIgPT0gJy0nIHx8ICpmbXRfcHRyID09ICcrJyB8fCAqZm10X3B0 ciA9PSAnIycgfHwNCj4gKwkJCQkgICAqZm10X3B0ciA9PSAnMCcgfHwgKmZtdF9wdHIgPT0gJyAn KSkgew0KPiArCQkJZm10X3B0cisrOw0KPiArCQl9DQo+ICsNCj4gKwkJLyogU2tpcCBmaWVsZCB3 aWR0aCAoZGlnaXRzIG9yICopICovDQo+ICsJCXdoaWxlICgqZm10X3B0ciAmJiAoKmZtdF9wdHIg Pj0gJzAnICYmICpmbXRfcHRyIDw9ICc5JykpDQo+ICsJCQlmbXRfcHRyKys7DQo+ICsJCWlmICgq Zm10X3B0ciA9PSAnKicpDQo+ICsJCQlmbXRfcHRyKys7DQo+ICsNCj4gKwkJLyogU2tpcCBwcmVj aXNpb24gKC5kaWdpdHMgb3IgLiopICovDQo+ICsJCWlmICgqZm10X3B0ciA9PSAnLicpIHsNCj4g KwkJCWZtdF9wdHIrKzsNCj4gKwkJCXdoaWxlICgqZm10X3B0ciAmJiAoKmZtdF9wdHIgPj0gJzAn ICYmICpmbXRfcHRyIDw9ICc5JykpDQo+ICsJCQkJZm10X3B0cisrOw0KPiArCQkJaWYgKCpmbXRf cHRyID09ICcqJykNCj4gKwkJCQlmbXRfcHRyKys7DQo+ICsJCX0NCj4gKw0KPiArCQkvKiBQYXJz ZSBsZW5ndGggbW9kaWZpZXJzIChsLCBsbCwgaCwgaGgsIHopICovDQo+ICsJCWlzX2xvbmcgPSAw Ow0KPiArCQlpc19sb25nX2xvbmcgPSAwOw0KPiArDQo+ICsJCWlmICgqZm10X3B0ciA9PSAnbCcp IHsNCj4gKwkJCWZtdF9wdHIrKzsNCj4gKwkJCWlzX2xvbmcgPSAxOw0KPiArCQkJaWYgKCpmbXRf cHRyID09ICdsJykgew0KPiArCQkJCWZtdF9wdHIrKzsNCj4gKwkJCQlpc19sb25nX2xvbmcgPSAx Ow0KPiArCQkJCWlzX2xvbmcgPSAwOw0KPiArCQkJfQ0KPiArCQl9IGVsc2UgaWYgKCpmbXRfcHRy ID09ICdoJykgew0KPiArCQkJZm10X3B0cisrOw0KPiArCQkJaWYgKCpmbXRfcHRyID09ICdoJykN Cj4gKwkJCQlmbXRfcHRyKys7DQo+ICsJCX0gZWxzZSBpZiAoKmZtdF9wdHIgPT0gJ3onKSB7DQo+ ICsJCQlmbXRfcHRyKys7DQo+ICsJCX0NCj4gKw0KPiArCQkvKiBQYXJzZSBhbmQgaGFuZGxlIGZv cm1hdCBzcGVjaWZpZXIgKi8NCj4gKwkJc3dpdGNoICgqZm10X3B0cikgew0KPiArCQljYXNlICdz JzogeyAvKiBTdHJpbmcgKGlubGluZSkgKi8NCj4gKwkJCWNvbnN0IGNoYXIgKnN0cjsNCj4gKwkJ CXNpemVfdCBzdHJfbGVuOw0KPiArCQkJc2l6ZV90IG1heF9zY2FuX2xlbjsNCj4gKw0KPiArCQkJ aWYgKGJ1Zl9wdHIgPj0gYnVmX2VuZCkgew0KPiArCQkJCXByX2VycigiYmxvZ19kZXNfcmVjb25z dHJ1Y3Q6IHN0cmluZyBhcmcgJXp1IG92ZXJydW5zIGJ1ZmZlciAobm8gc3BhY2UpXG4iLA0KPiAr CQkJCQlhcmdfY291bnQpOw0KPiArCQkJCXJldHVybiAtRUZBVUxUOw0KPiArCQkJfQ0KPiArDQo+ ICsJCQkvKiBTdHJpbmcgaXMgc3RvcmVkIGlubGluZSBpbiBidWZmZXIgKi8NCj4gKwkJCXN0ciA9 IGJ1Zl9wdHI7DQo+ICsNCj4gKwkJCS8qIENhbGN1bGF0ZSBtYXhpbXVtIHNhZmUgbGVuZ3RoIHRv IHNjYW4gZm9yIG51bGwgdGVybWluYXRvciAqLw0KPiArCQkJbWF4X3NjYW5fbGVuID0gYnVmX2Vu ZCAtIGJ1Zl9wdHI7DQo+ICsNCj4gKwkJCS8qIEZpbmQgc3RyaW5nIGxlbmd0aCB3aXRoIGJvdW5k cyBjaGVja2luZyAqLw0KPiArCQkJc3RyX2xlbiA9IHN0cm5sZW4oc3RyLCBtYXhfc2Nhbl9sZW4p Ow0KPiArCQkJaWYgKHN0cl9sZW4gPT0gbWF4X3NjYW5fbGVuICYmIHN0cltzdHJfbGVuIC0gMV0g IT0gJ1wwJykgew0KPiArCQkJCXByX2VycigiYmxvZ19kZXNfcmVjb25zdHJ1Y3Q6IHVudGVybWlu YXRlZCBzdHJpbmcgYXQgYXJnICV6dSAoZm10PSVzKVxuIiwNCj4gKwkJCQkJYXJnX2NvdW50LCBm bXQpOw0KPiArCQkJCXJldHVybiAtRUZBVUxUOw0KPiArCQkJfQ0KPiArDQo+ICsJCQkvKiBBZHZh bmNlIGJ1ZmZlciBwb2ludGVyIHdpdGggcHJvcGVyIGFsaWdubWVudCAqLw0KPiArCQkJYnVmX3B0 ciArPSByb3VuZF91cChzdHJfbGVuICsgMSwgNCk7DQo+ICsNCj4gKwkJCWlmIChidWZfcHRyID4g YnVmX2VuZCkgew0KPiArCQkJCXByX2VycigiYmxvZ19kZXNfcmVjb25zdHJ1Y3Q6IHN0cmluZyBh cmcgJXp1IG92ZXJydW5zIGJ1ZmZlciBhZnRlciBjb3B5IChmbXQ9JXMpXG4iLA0KPiArCQkJCQlh cmdfY291bnQsIGZtdCk7DQo+ICsJCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ICsJCQl9DQo+ICsNCj4g KwkJCS8qIENvcHkgc3RyaW5nIHRvIG91dHB1dCB3aXRoIGJvdW5kcyBjaGVja2luZyAqLw0KPiAr CQkJaWYgKHN0cl9sZW4gPiByZW1haW5pbmcpDQo+ICsJCQkJc3RyX2xlbiA9IHJlbWFpbmluZzsN Cj4gKwkJCW1lbWNweShvdXRfcHRyLCBzdHIsIHN0cl9sZW4pOw0KPiArCQkJb3V0X3B0ciArPSBz dHJfbGVuOw0KPiArCQkJcmVtYWluaW5nIC09IHN0cl9sZW47DQo+ICsJCQlicmVhazsNCj4gKwkJ fQ0KPiArDQo+ICsJY2FzZSAnZCc6IGNhc2UgJ2knOiB7IC8qIEludGVnZXIgKi8NCj4gKwkJaWYg KGlzX2xvbmdfbG9uZykgew0KPiArCQkJbG9uZyBsb25nIHZhbDsNCj4gKw0KPiArCQkJaWYgKGJ1 Zl9wdHIgKyBzaXplb2YobG9uZyBsb25nKSA+IGJ1Zl9lbmQpIHsNCj4gKwkJCQlwcl9lcnIoImJs b2dfZGVzX3JlY29uc3RydWN0OiBsb25nIGxvbmcgYXJnICV6dSBvdmVycnVucyBidWZmZXJcbiIs DQo+ICsJCQkJCWFyZ19jb3VudCk7DQo+ICsJCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ICsJCQl9DQo+ ICsJCQl2YWwgPSBnZXRfdW5hbGlnbmVkKChsb25nIGxvbmcgKilidWZfcHRyKTsNCj4gKwkJCWJ1 Zl9wdHIgKz0gc2l6ZW9mKGxvbmcgbG9uZyk7DQo+ICsJCQlyZXQgPSBzbnByaW50ZihvdXRfcHRy LCByZW1haW5pbmcsICIlbGxkIiwgdmFsKTsNCj4gKwkJfSBlbHNlIGlmIChpc19sb25nKSB7DQo+ ICsJCQlsb25nIHZhbDsNCj4gKw0KPiArCQkJaWYgKGJ1Zl9wdHIgKyBzaXplb2YobG9uZykgPiBi dWZfZW5kKSB7DQo+ICsJCQkJcHJfZXJyKCJibG9nX2Rlc19yZWNvbnN0cnVjdDogbG9uZyBhcmcg JXp1IG92ZXJydW5zIGJ1ZmZlclxuIiwNCj4gKwkJCQkJYXJnX2NvdW50KTsNCj4gKwkJCQlyZXR1 cm4gLUVGQVVMVDsNCj4gKwkJCX0NCj4gKwkJCXZhbCA9IGdldF91bmFsaWduZWQoKGxvbmcgKili dWZfcHRyKTsNCj4gKwkJCWJ1Zl9wdHIgKz0gc2l6ZW9mKGxvbmcpOw0KPiArCQkJcmV0ID0gc25w cmludGYob3V0X3B0ciwgcmVtYWluaW5nLCAiJWxkIiwgdmFsKTsNCj4gKwkJfSBlbHNlIHsNCj4g KwkJCWludCB2YWw7DQo+ICsNCj4gKwkJCWlmIChidWZfcHRyICsgc2l6ZW9mKGludCkgPiBidWZf ZW5kKSB7DQo+ICsJCQkJcHJfZXJyKCJibG9nX2Rlc19yZWNvbnN0cnVjdDogaW50IGFyZyAlenUg b3ZlcnJ1bnMgYnVmZmVyXG4iLA0KPiArCQkJCQlhcmdfY291bnQpOw0KPiArCQkJCXJldHVybiAt RUZBVUxUOw0KPiArCQkJfQ0KPiArCQkJdmFsID0gZ2V0X3VuYWxpZ25lZCgoaW50ICopYnVmX3B0 cik7DQo+ICsJCQlidWZfcHRyICs9IHNpemVvZihpbnQpOw0KPiArCQkJcmV0ID0gc25wcmludGYo b3V0X3B0ciwgcmVtYWluaW5nLCAiJWQiLCB2YWwpOw0KPiArCQl9DQo+ICsNCj4gKwkJCWlmIChy ZXQgPiAwKSB7DQo+ICsJCQkJaWYgKHJldCA+IHJlbWFpbmluZykNCj4gKwkJCQkJcmV0ID0gcmVt YWluaW5nOw0KPiArCQkJCW91dF9wdHIgKz0gcmV0Ow0KPiArCQkJCXJlbWFpbmluZyAtPSByZXQ7 DQo+ICsJCQl9DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArDQo+ICsJY2FzZSAndSc6IHsgLyog VW5zaWduZWQgaW50ZWdlciAqLw0KPiArCQlpZiAoaXNfbG9uZ19sb25nKSB7DQo+ICsJCQl1bnNp Z25lZCBsb25nIGxvbmcgdmFsOw0KPiArDQo+ICsJCQlpZiAoYnVmX3B0ciArIHNpemVvZih1bnNp Z25lZCBsb25nIGxvbmcpID4gYnVmX2VuZCkgew0KPiArCQkJCXByX2VycigiYmxvZ19kZXNfcmVj b25zdHJ1Y3Q6IHVuc2lnbmVkIGxvbmcgbG9uZyBhcmcgJXp1IG92ZXJydW5zIGJ1ZmZlclxuIiwN Cj4gKwkJCQkJYXJnX2NvdW50KTsNCj4gKwkJCQlyZXR1cm4gLUVGQVVMVDsNCj4gKwkJCX0NCj4g KwkJCXZhbCA9IGdldF91bmFsaWduZWQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWJ1Zl9wdHIpOw0K PiArCQkJYnVmX3B0ciArPSBzaXplb2YodW5zaWduZWQgbG9uZyBsb25nKTsNCj4gKwkJCXJldCA9 IHNucHJpbnRmKG91dF9wdHIsIHJlbWFpbmluZywgIiVsbHUiLCB2YWwpOw0KPiArCQl9IGVsc2Ug aWYgKGlzX2xvbmcpIHsNCj4gKwkJCXVuc2lnbmVkIGxvbmcgdmFsOw0KPiArDQo+ICsJCQlpZiAo YnVmX3B0ciArIHNpemVvZih1bnNpZ25lZCBsb25nKSA+IGJ1Zl9lbmQpIHsNCj4gKwkJCQlwcl9l cnIoImJsb2dfZGVzX3JlY29uc3RydWN0OiB1bnNpZ25lZCBsb25nIGFyZyAlenUgb3ZlcnJ1bnMg YnVmZmVyXG4iLA0KPiArCQkJCQlhcmdfY291bnQpOw0KPiArCQkJCXJldHVybiAtRUZBVUxUOw0K PiArCQkJfQ0KPiArCQkJdmFsID0gZ2V0X3VuYWxpZ25lZCgodW5zaWduZWQgbG9uZyAqKWJ1Zl9w dHIpOw0KPiArCQkJYnVmX3B0ciArPSBzaXplb2YodW5zaWduZWQgbG9uZyk7DQo+ICsJCQlyZXQg PSBzbnByaW50ZihvdXRfcHRyLCByZW1haW5pbmcsICIlbHUiLCB2YWwpOw0KPiArCQl9IGVsc2Ug ew0KPiArCQkJdW5zaWduZWQgaW50IHZhbDsNCj4gKw0KPiArCQkJaWYgKGJ1Zl9wdHIgKyBzaXpl b2YodW5zaWduZWQgaW50KSA+IGJ1Zl9lbmQpIHsNCj4gKwkJCQlwcl9lcnIoImJsb2dfZGVzX3Jl Y29uc3RydWN0OiB1bnNpZ25lZCBpbnQgYXJnICV6dSBvdmVycnVucyBidWZmZXJcbiIsDQo+ICsJ CQkJCWFyZ19jb3VudCk7DQo+ICsJCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ICsJCQl9DQo+ICsJCQl2 YWwgPSBnZXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBpbnQgKilidWZfcHRyKTsNCj4gKwkJCWJ1Zl9w dHIgKz0gc2l6ZW9mKHVuc2lnbmVkIGludCk7DQo+ICsJCQlyZXQgPSBzbnByaW50ZihvdXRfcHRy LCByZW1haW5pbmcsICIldSIsIHZhbCk7DQo+ICsJCX0NCj4gKw0KPiArCQkJaWYgKHJldCA+IDAp IHsNCj4gKwkJCQlpZiAocmV0ID4gcmVtYWluaW5nKQ0KPiArCQkJCQlyZXQgPSByZW1haW5pbmc7 DQo+ICsJCQkJb3V0X3B0ciArPSByZXQ7DQo+ICsJCQkJcmVtYWluaW5nIC09IHJldDsNCj4gKwkJ CX0NCj4gKwkJCWJyZWFrOw0KPiArCQl9DQo+ICsNCj4gKwljYXNlICd4JzogY2FzZSAnWCc6IHsg LyogSGV4IGludGVnZXIgKi8NCj4gKwkJY29uc3QgY2hhciAqaGV4X2ZtdDsNCj4gKw0KPiArCQlp ZiAoKmZtdF9wdHIgPT0gJ3gnKQ0KPiArCQkJaGV4X2ZtdCA9IGlzX2xvbmdfbG9uZyA/ICIlbGx4 IiA6IGlzX2xvbmcgPyAiJWx4IiA6ICIleCI7DQo+ICsJCWVsc2UNCj4gKwkJCWhleF9mbXQgPSBp c19sb25nX2xvbmcgPyAiJWxsWCIgOiBpc19sb25nID8gIiVsWCIgOiAiJVgiOw0KPiArDQo+ICsJ CWlmIChpc19sb25nX2xvbmcpIHsNCj4gKwkJCXVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7DQo+ICsN Cj4gKwkJCWlmIChidWZfcHRyICsgc2l6ZW9mKHVuc2lnbmVkIGxvbmcgbG9uZykgPiBidWZfZW5k KSB7DQo+ICsJCQkJcHJfZXJyKCJibG9nX2Rlc19yZWNvbnN0cnVjdDogaGV4IHVuc2lnbmVkIGxv bmcgbG9uZyBhcmcgJXp1IG92ZXJydW5zIGJ1ZmZlclxuIiwNCj4gKwkJCQkJYXJnX2NvdW50KTsN Cj4gKwkJCQlyZXR1cm4gLUVGQVVMVDsNCj4gKwkJCX0NCj4gKwkJCXZhbCA9IGdldF91bmFsaWdu ZWQoKHVuc2lnbmVkIGxvbmcgbG9uZyAqKWJ1Zl9wdHIpOw0KPiArCQkJYnVmX3B0ciArPSBzaXpl b2YodW5zaWduZWQgbG9uZyBsb25nKTsNCj4gKwkJCXJldCA9IHNucHJpbnRmKG91dF9wdHIsIHJl bWFpbmluZywgaGV4X2ZtdCwgdmFsKTsNCj4gKwkJfSBlbHNlIGlmIChpc19sb25nKSB7DQo+ICsJ CQl1bnNpZ25lZCBsb25nIHZhbDsNCj4gKw0KPiArCQkJaWYgKGJ1Zl9wdHIgKyBzaXplb2YodW5z aWduZWQgbG9uZykgPiBidWZfZW5kKSB7DQo+ICsJCQkJcHJfZXJyKCJibG9nX2Rlc19yZWNvbnN0 cnVjdDogaGV4IHVuc2lnbmVkIGxvbmcgYXJnICV6dSBvdmVycnVucyBidWZmZXJcbiIsDQo+ICsJ CQkJCWFyZ19jb3VudCk7DQo+ICsJCQkJcmV0dXJuIC1FRkFVTFQ7DQo+ICsJCQl9DQo+ICsJCQl2 YWwgPSBnZXRfdW5hbGlnbmVkKCh1bnNpZ25lZCBsb25nICopYnVmX3B0cik7DQo+ICsJCQlidWZf cHRyICs9IHNpemVvZih1bnNpZ25lZCBsb25nKTsNCj4gKwkJCXJldCA9IHNucHJpbnRmKG91dF9w dHIsIHJlbWFpbmluZywgaGV4X2ZtdCwgdmFsKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXVuc2ln bmVkIGludCB2YWw7DQo+ICsNCj4gKwkJCWlmIChidWZfcHRyICsgc2l6ZW9mKHVuc2lnbmVkIGlu dCkgPiBidWZfZW5kKSB7DQo+ICsJCQkJcHJfZXJyKCJibG9nX2Rlc19yZWNvbnN0cnVjdDogaGV4 IHVuc2lnbmVkIGludCBhcmcgJXp1IG92ZXJydW5zIGJ1ZmZlclxuIiwNCj4gKwkJCQkJYXJnX2Nv dW50KTsNCj4gKwkJCQlyZXR1cm4gLUVGQVVMVDsNCj4gKwkJCX0NCj4gKwkJCXZhbCA9IGdldF91 bmFsaWduZWQoKHVuc2lnbmVkIGludCAqKWJ1Zl9wdHIpOw0KPiArCQkJYnVmX3B0ciArPSBzaXpl b2YodW5zaWduZWQgaW50KTsNCj4gKwkJCXJldCA9IHNucHJpbnRmKG91dF9wdHIsIHJlbWFpbmlu ZywgaGV4X2ZtdCwgdmFsKTsNCj4gKwkJfQ0KPiArDQo+ICsJCQlpZiAocmV0ID4gMCkgew0KPiAr CQkJCWlmIChyZXQgPiByZW1haW5pbmcpDQo+ICsJCQkJCXJldCA9IHJlbWFpbmluZzsNCj4gKwkJ CQlvdXRfcHRyICs9IHJldDsNCj4gKwkJCQlyZW1haW5pbmcgLT0gcmV0Ow0KPiArCQkJfQ0KPiAr CQkJYnJlYWs7DQo+ICsJCX0NCj4gKw0KPiArCWNhc2UgJ3AnOiB7IC8qIFBvaW50ZXIgKi8NCj4g KwkJdm9pZCAqcHRyOw0KPiArDQo+ICsJCWlmIChidWZfcHRyICsgc2l6ZW9mKHZvaWQgKikgPiBi dWZfZW5kKSB7DQo+ICsJCQlwcl9lcnIoImJsb2dfZGVzX3JlY29uc3RydWN0OiBwb2ludGVyIGFy ZyAlenUgb3ZlcnJ1bnMgYnVmZmVyXG4iLA0KPiArCQkJCWFyZ19jb3VudCk7DQo+ICsJCQlyZXR1 cm4gLUVGQVVMVDsNCj4gKwkJfQ0KPiArDQo+ICsJCXB0ciA9ICh2b2lkICopKHVuc2lnbmVkIGxv bmcpZ2V0X3VuYWxpZ25lZCgodW5zaWduZWQgbG9uZyAqKWJ1Zl9wdHIpOw0KPiArCQlidWZfcHRy ICs9IHNpemVvZih2b2lkICopOw0KPiArDQo+ICsJCXJldCA9IHNucHJpbnRmKG91dF9wdHIsIHJl bWFpbmluZywgIiVwIiwgcHRyKTsNCj4gKwkJaWYgKHJldCA+IDApIHsNCj4gKwkJCWlmIChyZXQg PiByZW1haW5pbmcpDQo+ICsJCQkJcmV0ID0gcmVtYWluaW5nOw0KPiArCQkJb3V0X3B0ciArPSBy ZXQ7DQo+ICsJCQlyZW1haW5pbmcgLT0gcmV0Ow0KPiArCQl9DQo+ICsJCWJyZWFrOw0KPiArCX0N Cj4gKw0KPiArCWNhc2UgJ2MnOiB7IC8qIENoYXJhY3RlciAqLw0KPiArCQljaGFyIHZhbDsNCj4g Kw0KPiArCQlpZiAoYnVmX3B0ciArIHNpemVvZihpbnQpID4gYnVmX2VuZCkgeyAvKiBjaGFycyBh cmUgcHJvbW90ZWQgdG8gaW50ICovDQo+ICsJCQlwcl9lcnIoImJsb2dfZGVzX3JlY29uc3RydWN0 OiBjaGFyIGFyZyAlenUgb3ZlcnJ1bnMgYnVmZmVyXG4iLA0KPiArCQkJCWFyZ19jb3VudCk7DQo+ ICsJCQlyZXR1cm4gLUVGQVVMVDsNCj4gKwkJfQ0KPiArDQo+ICsJCXZhbCA9IChjaGFyKWdldF91 bmFsaWduZWQoKGludCAqKWJ1Zl9wdHIpOw0KPiArCQlidWZfcHRyICs9IHNpemVvZihpbnQpOw0K PiArDQo+ICsJCWlmIChyZW1haW5pbmcgPiAwKSB7DQo+ICsJCQkqb3V0X3B0cisrID0gdmFsOw0K PiArCQkJcmVtYWluaW5nLS07DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJ CWRlZmF1bHQ6DQo+ICsJCQlwcl9lcnIoIiVzOiB1bnN1cHBvcnRlZCBmb3JtYXQgc3BlY2lmaWVy ICclJSVjJyBhdCBhcmd1bWVudCAlenVcbiIsDQo+ICsJCSAgICAgICBfX2Z1bmNfXywgKmZtdF9w dHIsIGFyZ19jb3VudCk7DQo+ICsJCQlyZXR1cm4gLUVJTlZBTDsNCj4gKwkJfQ0KPiArDQo+ICsJ CWZtdF9wdHIrKzsNCj4gKwkJYXJnX2NvdW50Kys7DQo+ICsJfQ0KPiArDQo+ICsJLyogTnVsbC10 ZXJtaW5hdGUgdGhlIG91dHB1dCAqLw0KPiArCSpvdXRfcHRyID0gJ1wwJzsNCj4gKw0KPiArCXJl dHVybiBvdXRfcHRyIC0gb3V0Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX2Rlc19yZWNv bnN0cnVjdCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19sb2dfcmVjb25zdHJ1Y3QgLSBSZWNv bnN0cnVjdHMgYSBmb3JtYXR0ZWQgc3RyaW5nIGZyb20gYSBsb2cgZW50cnkNCj4gKyAqIEBlbnRy eTogTG9nIGVudHJ5IGNvbnRhaW5pbmcgc2VyaWFsaXplZCBkYXRhDQo+ICsgKiBAb3V0cHV0OiBC dWZmZXIgdG8gd3JpdGUgdGhlIGZvcm1hdHRlZCBzdHJpbmcgdG8NCj4gKyAqIEBvdXRwdXRfc2l6 ZTogU2l6ZSBvZiB0aGUgb3V0cHV0IGJ1ZmZlcg0KPiArICoNCj4gKyAqIFRoaXMgcmVjb25zdHJ1 Y3RzIHRoZSBsb2cgbWVzc2FnZSBidXQgZG9lcyBOT1QgaGFuZGxlIGNsaWVudF9pZC4NCj4gKyAq IFRoZSBjYWxsZXIgc2hvdWxkIGhhbmRsZSBjbGllbnRfaWQgc2VwYXJhdGVseSB1c2luZyB0aGVp ciBtb2R1bGUtc3BlY2lmaWMgY2FsbGJhY2suDQo+ICsgKg0KPiArICogUmV0dXJuOiBMZW5ndGgg b2YgZm9ybWF0dGVkIHN0cmluZywgb3IgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ ICsgKi8NCj4gK2ludCBibG9nX2xvZ19yZWNvbnN0cnVjdChzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxv Z2dlciwgY29uc3Qgc3RydWN0IGJsb2dfbG9nX2VudHJ5ICplbnRyeSwNCj4gKwkJCWNoYXIgKm91 dHB1dCwgc2l6ZV90IG91dHB1dF9zaXplKQ0KPiArew0KPiArCXN0cnVjdCBibG9nX3NvdXJjZV9p bmZvICpzb3VyY2U7DQo+ICsNCj4gKwlpZiAoIWVudHJ5IHx8ICFvdXRwdXQgfHwgIWxvZ2dlcikN Cj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4gKwkvKiBHZXQgc291cmNlIGluZm8gKi8NCj4g Kwlzb3VyY2UgPSBibG9nX2dldF9zb3VyY2VfaW5mbyhsb2dnZXIsIGVudHJ5LT5zb3VyY2VfaWQp Ow0KPiArCWlmICghc291cmNlKQ0KPiArCQlyZXR1cm4gc25wcmludGYob3V0cHV0LCBvdXRwdXRf c2l6ZSwgIlt1bmtub3duIHNvdXJjZSAldV0iLCBlbnRyeS0+c291cmNlX2lkKTsNCj4gKw0KPiAr CS8qIFJlY29uc3RydWN0IHVzaW5nIHRoZSBmb3JtYXQgc3RyaW5nIGZyb20gc291cmNlICovDQo+ ICsJcmV0dXJuIGJsb2dfZGVzX3JlY29uc3RydWN0KHNvdXJjZS0+Zm10LCBlbnRyeS0+YnVmZmVy LCAwLCBlbnRyeS0+bGVuLA0KPiArCQkJCSAgIG91dHB1dCwgb3V0cHV0X3NpemUpOw0KPiArfQ0K PiBkaWZmIC0tZ2l0IGEvbGliL2Jsb2cvYmxvZ19tb2R1bGUuYyBiL2xpYi9ibG9nL2Jsb2dfbW9k dWxlLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAwMDAwMDAwMDAwLi45NDYz OTM2NTkwMzYNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9saWIvYmxvZy9ibG9nX21vZHVsZS5j DQo+IEBAIC0wLDAgKzEsNzgxIEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiArLyoNCj4gKyAqIEJpbmFyeSBMb2dnaW5nIEluZnJhc3RydWN0dXJlIChCTE9HKSAt IFBlci1Nb2R1bGUgU3VwcG9ydA0KPiArICoNCj4gKyAqIEltcGxlbWVudHMgcGVyLW1vZHVsZSBj b250ZXh0IG1hbmFnZW1lbnQgZm9yIGlzb2xhdGVkIGxvZ2dpbmcuDQo+ICsgKi8NCj4gKw0KPiAr I2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4g KyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4N Cj4gKyNpbmNsdWRlIDxsaW51eC9hdG9taWMuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5o Pg0KPiArI2luY2x1ZGUgPGxpbnV4L3NjaGVkL3NpZ25hbC5oPg0KPiArI2luY2x1ZGUgPGxpbnV4 L3NjaGVkL3Rhc2suaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4NCj4gKyNpbmNsdWRl IDxsaW51eC9ibG9nL2Jsb2cuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9ibG9nL2Jsb2dfbW9kdWxl Lmg+DQo+ICsNCj4gKy8qIEdsb2JhbCBsaXN0IG9mIGFsbCBtb2R1bGUgY29udGV4dHMgKi8NCj4g K3N0YXRpYyBMSVNUX0hFQUQoYmxvZ19tb2R1bGVfY29udGV4dHMpOw0KPiArc3RhdGljIERFRklO RV9TUElOTE9DSyhibG9nX21vZHVsZXNfbG9jayk7DQo+ICsNCj4gKy8qIEtlZXAgaW4gc3luYyB3 aXRoIGJsb2dfY29yZS5jICovDQo+ICsjZGVmaW5lIEJMT0dfTE9HX0JBVENIX01BWF9GVUxMIDE2 DQo+ICsNCj4gKy8qIEdsb2JhbCBtb2R1bGUgcmVnaXN0cnkgKi8NCj4gK3N0YXRpYyBzdHJ1Y3Qg YmxvZ19tb2R1bGVfcmVnaXN0cnkgYmxvZ19yZWdpc3RyeSA9IHsNCj4gKwkubW9kdWxlcyA9IHsg TlVMTCB9LA0KPiArCS5hbGxvY2F0ZWRfYml0bWFwID0gMCwNCj4gKwkubG9jayA9IF9fU1BJTl9M T0NLX1VOTE9DS0VEKGJsb2dfcmVnaXN0cnkubG9jayksDQo+ICsJLm1vZHVsZV9jb3VudCA9IEFU T01JQ19JTklUKDApLA0KPiArfTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX21vZHVsZV9yZWdp c3RlciAtIFJlZ2lzdGVyIGEgbW9kdWxlIGFuZCBhbGxvY2F0ZSBhIHNsb3QNCj4gKyAqIEBtb2R1 bGVfbmFtZTogTmFtZSBvZiB0aGUgbW9kdWxlDQo+ICsgKg0KPiArICogUmVnaXN0ZXJzIGEgbW9k dWxlIGluIHRoZSBnbG9iYWwgcmVnaXN0cnkgYW5kIGFzc2lnbnMgaXQgYSBzbG90IElEICgwLTcp Lg0KPiArICogVGhlIHNsb3QgSUQgaXMgdXNlZCB0byBpbmRleCBpbnRvIGVhY2ggdGFzaydzIGJs b2dfY29udGV4dHMgYXJyYXkuDQo+ICsgKg0KPiArICogUmV0dXJuOiBNb2R1bGUgY29udGV4dCBv biBzdWNjZXNzLCBOVUxMIGlmIG5vIHNsb3RzIGF2YWlsYWJsZQ0KPiArICovDQo+ICtzdHJ1Y3Qg YmxvZ19tb2R1bGVfY29udGV4dCAqYmxvZ19tb2R1bGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbW9k dWxlX25hbWUpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRleHQgKmN0eDsNCj4g Kwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KPiArCWludCBzbG90Ow0KPiArCXNpemVfdCBuYW1lX2xl bjsNCj4gKw0KPiArCWlmICghbW9kdWxlX25hbWUpIHsNCj4gKwkJcHJfZXJyKCJibG9nOiBtb2R1 bGUgbmFtZSBpcyBOVUxMXG4iKTsNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJ bmFtZV9sZW4gPSBzdHJsZW4obW9kdWxlX25hbWUpOw0KPiArCWlmIChuYW1lX2xlbiA9PSAwKSB7 DQo+ICsJCXByX2VycigiYmxvZzogbW9kdWxlIG5hbWUgaXMgZW1wdHlcbiIpOw0KPiArCQlyZXR1 cm4gTlVMTDsNCj4gKwl9DQo+ICsNCj4gKwlpZiAobmFtZV9sZW4gPj0gMzIpIHsgIC8qIHNpemVv ZihibG9nX21vZHVsZV9jb250ZXh0Lm5hbWUpICovDQoNCldoYXQncyBhYm91dCBpbnRyb2R1Y2Ug dGhlIG5hbWVkIGNvbnN0YW50IGluc3RlYWQgb2YgaGFyZGNvZGVkIDMyIHZhbHVlPw0KDQo+ICsJ CXByX2VycigiYmxvZzogbW9kdWxlIG5hbWUgdG9vIGxvbmc6ICclcycgKG1heCAzMSBjaGFycylc biIsDQo+ICsJCSAgICAgICBtb2R1bGVfbmFtZSk7DQo+ICsJCXJldHVybiBOVUxMOw0KPiArCX0N Cj4gKw0KPiArCWN0eCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VSTkVMKTsNCj4gKwlp ZiAoIWN0eCkNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ICsNCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgm YmxvZ19yZWdpc3RyeS5sb2NrLCBmbGFncyk7DQo+ICsNCj4gKwkvKiBGaW5kIGZpcnN0IGZyZWUg c2xvdCAqLw0KPiArCXNsb3QgPSBmaW5kX2ZpcnN0X3plcm9fYml0KCh1bnNpZ25lZCBsb25nICop JmJsb2dfcmVnaXN0cnkuYWxsb2NhdGVkX2JpdG1hcCwNCj4gKwkJCQkgICAgQkxPR19NQVhfTU9E VUxFUyk7DQo+ICsJaWYgKHNsb3QgPj0gQkxPR19NQVhfTU9EVUxFUykgew0KPiArCQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZibG9nX3JlZ2lzdHJ5LmxvY2ssIGZsYWdzKTsNCj4gKwkJa2ZyZWUo Y3R4KTsNCj4gKwkJcHJfZXJyKCJibG9nOiBubyBmcmVlIHNsb3RzIGF2YWlsYWJsZSAobWF4ICVk IG1vZHVsZXMpXG4iLA0KPiArCQkgICAgICAgQkxPR19NQVhfTU9EVUxFUyk7DQo+ICsJCXJldHVy biBOVUxMOw0KPiArCX0NCj4gKw0KPiArCS8qIENsYWltIHRoZSBzbG90ICovDQo+ICsJc2V0X2Jp dChzbG90LCAodW5zaWduZWQgbG9uZyAqKSZibG9nX3JlZ2lzdHJ5LmFsbG9jYXRlZF9iaXRtYXAp Ow0KPiArCWJsb2dfcmVnaXN0cnkubW9kdWxlc1tzbG90XSA9IGN0eDsNCj4gKwlhdG9taWNfaW5j KCZibG9nX3JlZ2lzdHJ5Lm1vZHVsZV9jb3VudCk7DQo+ICsNCj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZibG9nX3JlZ2lzdHJ5LmxvY2ssIGZsYWdzKTsNCj4gKw0KPiArCS8qIEluaXRpYWxp emUgdGhlIGNvbnRleHQgKi8NCj4gKwlzdHJzY3B5KGN0eC0+bmFtZSwgbW9kdWxlX25hbWUsIHNp emVvZihjdHgtPm5hbWUpKTsNCj4gKwljdHgtPnNsb3RfaWQgPSBzbG90Ow0KPiArCWF0b21pY19z ZXQoJmN0eC0+cmVmY291bnQsIDEpOw0KPiArCWF0b21pY19zZXQoJmN0eC0+YWxsb2NhdGVkX2Nv bnRleHRzLCAwKTsNCj4gKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5saXN0KTsNCj4gKw0KPiArCXBy X2luZm8oImJsb2c6IG1vZHVsZSAnJXMnIHJlZ2lzdGVyZWQgd2l0aCBzbG90ICVkXG4iLCBtb2R1 bGVfbmFtZSwgc2xvdCk7DQo+ICsNCj4gKwlyZXR1cm4gY3R4Ow0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTChibG9nX21vZHVsZV9yZWdpc3Rlcik7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19tb2R1 bGVfdW5yZWdpc3RlciAtIFVucmVnaXN0ZXIgYSBtb2R1bGUgYW5kIGZyZWUgaXRzIHNsb3QNCj4g KyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0IHRvIHVucmVnaXN0ZXINCj4gKyAqDQo+ICsgKiBSZW1v dmVzIHRoZSBtb2R1bGUgZnJvbSB0aGUgZ2xvYmFsIHJlZ2lzdHJ5IGFuZCBmcmVlcyBpdHMgc2xv dC4NCj4gKyAqIEFsc28gY2xlYW5zIHVwIGFueSBhY3RpdmUgdGFzayBjb250ZXh0cyBmb3IgdGhp cyBtb2R1bGUuDQo+ICsgKi8NCj4gK3ZvaWQgYmxvZ19tb2R1bGVfdW5yZWdpc3RlcihzdHJ1Y3Qg YmxvZ19tb2R1bGVfY29udGV4dCAqY3R4KQ0KPiArew0KPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQo+ICsJaW50IHNsb3Q7DQo+ICsNCj4gKwlpZiAoIWN0eCkNCj4gKwkJcmV0dXJuOw0KPiArDQo+ ICsJc2xvdCA9IGN0eC0+c2xvdF9pZDsNCj4gKwlpZiAoc2xvdCA+PSBCTE9HX01BWF9NT0RVTEVT KQ0KPiArCQlnb3RvIG91dF9mcmVlOw0KPiArDQo+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmJsb2df cmVnaXN0cnkubG9jaywgZmxhZ3MpOw0KPiArCWlmICh0ZXN0X2JpdChzbG90LCAodW5zaWduZWQg bG9uZyAqKSZibG9nX3JlZ2lzdHJ5LmFsbG9jYXRlZF9iaXRtYXApKSB7DQo+ICsJCWNsZWFyX2Jp dChzbG90LCAodW5zaWduZWQgbG9uZyAqKSZibG9nX3JlZ2lzdHJ5LmFsbG9jYXRlZF9iaXRtYXAp Ow0KPiArCQlibG9nX3JlZ2lzdHJ5Lm1vZHVsZXNbc2xvdF0gPSBOVUxMOw0KPiArCQlhdG9taWNf ZGVjKCZibG9nX3JlZ2lzdHJ5Lm1vZHVsZV9jb3VudCk7DQo+ICsJfQ0KPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmJsb2dfcmVnaXN0cnkubG9jaywgZmxhZ3MpOw0KPiArDQo+ICsJcHJfaW5m bygiYmxvZzogbW9kdWxlICclcycgdW5yZWdpc3RlcmVkIGZyb20gc2xvdCAlZFxuIiwgY3R4LT5u YW1lLCBzbG90KTsNCj4gKw0KPiArb3V0X2ZyZWU6DQo+ICsJa2ZyZWUoY3R4KTsNCj4gK30NCj4g K0VYUE9SVF9TWU1CT0woYmxvZ19tb2R1bGVfdW5yZWdpc3Rlcik7DQo+ICsNCj4gKy8qIFJlbGVh c2UgaG9vayBmb3IgcGVyLW1vZHVsZSBUTFMgY29udGV4dHMgKi8NCj4gK3N0YXRpYyB2b2lkIGJs b2dfbW9kdWxlX2NsZWFyX3Rhc2soc3RydWN0IGJsb2dfdGxzX2N0eCAqY3R4KQ0KPiArew0KPiAr CXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzazsNCj4gKw0KPiArCWlmICghY3R4KQ0KPiArCQlyZXR1 cm47DQo+ICsNCj4gKwl0YXNrID0gUkVBRF9PTkNFKGN0eC0+dGFzayk7DQo+ICsJaWYgKHRhc2sp IHsNCj4gKwkJV1JJVEVfT05DRShjdHgtPnRhc2ssIE5VTEwpOw0KPiArCQlwdXRfdGFza19zdHJ1 Y3QodGFzayk7DQo+ICsJfQ0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBibG9nX21vZHVsZV9y ZWJhbGFuY2VfbG9nX2JhdGNoKHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyKQ0KPiArew0KPiAr CXN0cnVjdCBibG9nX21hZ2F6aW5lICptYWc7DQo+ICsNCj4gKwlpZiAoIWxvZ2dlcikNCj4gKwkJ cmV0dXJuOw0KPiArDQo+ICsJaWYgKGxvZ2dlci0+bG9nX2JhdGNoLm5yX2Z1bGwgPD0gQkxPR19M T0dfQkFUQ0hfTUFYX0ZVTEwpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCXNwaW5fbG9jaygmbG9n Z2VyLT5sb2dfYmF0Y2guZnVsbF9sb2NrKTsNCj4gKwlpZiAobGlzdF9lbXB0eSgmbG9nZ2VyLT5s b2dfYmF0Y2guZnVsbF9tYWdhemluZXMpKSB7DQo+ICsJCXNwaW5fdW5sb2NrKCZsb2dnZXItPmxv Z19iYXRjaC5mdWxsX2xvY2spOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJbWFnID0g bGlzdF9maXJzdF9lbnRyeSgmbG9nZ2VyLT5sb2dfYmF0Y2guZnVsbF9tYWdhemluZXMsDQo+ICsJ CQkgICAgICBzdHJ1Y3QgYmxvZ19tYWdhemluZSwgbGlzdCk7DQo+ICsJbGlzdF9kZWwoJm1hZy0+ bGlzdCk7DQo+ICsJbG9nZ2VyLT5sb2dfYmF0Y2gubnJfZnVsbC0tOw0KPiArCXNwaW5fdW5sb2Nr KCZsb2dnZXItPmxvZ19iYXRjaC5mdWxsX2xvY2spOw0KPiArDQo+ICsJc3Bpbl9sb2NrKCZsb2dn ZXItPmFsbG9jX2JhdGNoLmZ1bGxfbG9jayk7DQo+ICsJbGlzdF9hZGQoJm1hZy0+bGlzdCwgJmxv Z2dlci0+YWxsb2NfYmF0Y2guZnVsbF9tYWdhemluZXMpOw0KPiArCWxvZ2dlci0+YWxsb2NfYmF0 Y2gubnJfZnVsbCsrOw0KPiArCXNwaW5fdW5sb2NrKCZsb2dnZXItPmFsbG9jX2JhdGNoLmZ1bGxf bG9jayk7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkIGJsb2dfbW9kdWxlX3F1ZXVlX3RvX2Fs bG9jX2JhdGNoKHN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyLA0KPiArCQkJCQkJIHN0cnVjdCBi bG9nX3Rsc19jdHggKmN0eCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ190bHNfcGFnZWZyYWcgKmNv bXBvc2l0ZTsNCj4gKw0KPiArCWlmICghbG9nZ2VyIHx8ICFjdHgpDQo+ICsJCXJldHVybjsNCj4g Kw0KPiArCWNvbXBvc2l0ZSA9IGJsb2dfY3R4X2NvbnRhaW5lcihjdHgpOw0KPiArCWF0b21pY19z ZXQoJmN0eC0+cmVmY291bnQsIDApOw0KPiArCWJsb2dfYmF0Y2hfcHV0KCZsb2dnZXItPmFsbG9j X2JhdGNoLCBjb21wb3NpdGUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBibG9nX21vZHVs ZV9xdWV1ZV90b19sb2dfYmF0Y2goc3RydWN0IGJsb2dfbG9nZ2VyICpsb2dnZXIsDQo+ICsJCQkJ CSAgICAgICBzdHJ1Y3QgYmxvZ190bHNfY3R4ICpjdHgpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2df dGxzX3BhZ2VmcmFnICpjb21wb3NpdGU7DQo+ICsNCj4gKwlpZiAoIWxvZ2dlciB8fCAhY3R4KQ0K PiArCQlyZXR1cm47DQo+ICsNCj4gKwljb21wb3NpdGUgPSBibG9nX2N0eF9jb250YWluZXIoY3R4 KTsNCj4gKwlhdG9taWNfc2V0KCZjdHgtPnJlZmNvdW50LCAwKTsNCj4gKwlibG9nX2JhdGNoX3B1 dCgmbG9nZ2VyLT5sb2dfYmF0Y2gsIGNvbXBvc2l0ZSk7DQo+ICsJYmxvZ19tb2R1bGVfcmViYWxh bmNlX2xvZ19iYXRjaChsb2dnZXIpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZCBibG9nX21v ZHVsZV90bHNfcmVsZWFzZSh2b2lkICpwdHIpDQo+ICt7DQo+ICsJc3RydWN0IGJsb2dfdGxzX2N0 eCAqY3R4ID0gcHRyOw0KPiArCXN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyOw0KPiArDQo+ICsJ aWYgKCFjdHgpDQo+ICsJCXJldHVybjsNCj4gKw0KPiArCWxvZ2dlciA9IGN0eC0+bG9nZ2VyOw0K PiArCWlmICghbG9nZ2VyKSB7DQo+ICsJCXByX2VycigiQlVHOiBUTFMgY29udGV4dCBpZD0lbGx1 IGhhcyBubyBsb2dnZXIgZm9yIHJlbGVhc2VcbiIsDQo+ICsJCSAgICAgICBjdHgtPmlkKTsNCj4g KwkJcmV0dXJuOw0KPiArCX0NCj4gKw0KPiArCS8qIENsZWFyIHRhc2sgYXNzb2NpYXRpb24gKi8N Cj4gKwlibG9nX21vZHVsZV9jbGVhcl90YXNrKGN0eCk7DQo+ICsNCj4gKwkvKiBSZWN5Y2xlIGNv bXBvc2l0ZSB0byBsb2dfYmF0Y2ggLSBubyBmcmVlaW5nIQ0KPiArCSAqIFRoZSBjb21wb3NpdGUg d2lsbCBiZSByZWN5Y2xlZCBiYWNrIHRvIGFsbG9jX2JhdGNoIGFuZCByZXVzZWQuICovDQo+ICsJ YmxvZ19tb2R1bGVfcXVldWVfdG9fbG9nX2JhdGNoKGxvZ2dlciwgY3R4KTsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgKiBibG9nX21vZHVsZV9pbml0IC0gSW5pdGlhbGl6ZSBhIHBlci1tb2R1bGUg QkxPRyBjb250ZXh0DQo+ICsgKiBAbW9kdWxlX25hbWU6IE5hbWUgb2YgdGhlIG1vZHVsZQ0KPiAr ICoNCj4gKyAqIENyZWF0ZXMgYW4gaXNvbGF0ZWQgbG9nZ2luZyBjb250ZXh0IGZvciBhIHNwZWNp ZmljIG1vZHVsZS4NCj4gKyAqDQo+ICsgKiBSZXR1cm46IE1vZHVsZSBjb250ZXh0IG9uIHN1Y2Nl c3MsIE5VTEwgb24gZmFpbHVyZQ0KPiArICovDQo+ICtzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4 dCAqYmxvZ19tb2R1bGVfaW5pdChjb25zdCBjaGFyICptb2R1bGVfbmFtZSkNCj4gK3sNCj4gKwlz dHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4Ow0KPiArCXN0cnVjdCBibG9nX2xvZ2dlciAq bG9nZ2VyOw0KPiArCWludCBpOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwljdHggPSBibG9nX21v ZHVsZV9yZWdpc3Rlcihtb2R1bGVfbmFtZSk7DQo+ICsJaWYgKCFjdHgpDQo+ICsJCXJldHVybiBO VUxMOw0KPiArDQo+ICsJbG9nZ2VyID0ga3phbGxvYyhzaXplb2YoKmxvZ2dlciksIEdGUF9LRVJO RUwpOw0KPiArCWlmICghbG9nZ2VyKQ0KPiArCQlnb3RvIGVycl91bnJlZ2lzdGVyOw0KPiArDQo+ ICsJbG9nZ2VyLT5tYWdhemluZV9jYWNoZSA9IGttZW1fY2FjaGVfY3JlYXRlKCJibG9nX21hZ2F6 aW5lIiwNCj4gKwkJCQkJICAgICAgc2l6ZW9mKHN0cnVjdCBibG9nX21hZ2F6aW5lKSwNCj4gKwkJ CQkJICAgICAgMCwgU0xBQl9IV0NBQ0hFX0FMSUdOLCBOVUxMKTsNCj4gKwlpZiAoIWxvZ2dlci0+ bWFnYXppbmVfY2FjaGUpDQo+ICsJCWdvdG8gZXJyX2xvZ2dlcjsNCj4gKw0KPiArCS8qIEluaXRp YWxpemUgbW9kdWxlIGNvbnRleHQgKi8NCj4gKwlzdHJzY3B5KGN0eC0+bmFtZSwgbW9kdWxlX25h bWUsIHNpemVvZihjdHgtPm5hbWUpKTsNCj4gKwljdHgtPmxvZ2dlciA9IGxvZ2dlcjsNCj4gKwlh dG9taWNfc2V0KCZjdHgtPnJlZmNvdW50LCAxKTsNCj4gKwlJTklUX0xJU1RfSEVBRCgmY3R4LT5s aXN0KTsNCj4gKw0KPiArCS8qIEluaXRpYWxpemUgbG9nZ2VyIGluc3RhbmNlICovDQo+ICsJSU5J VF9MSVNUX0hFQUQoJmxvZ2dlci0+Y29udGV4dHMpOw0KPiArCXNwaW5fbG9ja19pbml0KCZsb2dn ZXItPmxvY2spOw0KPiArCXNwaW5fbG9ja19pbml0KCZsb2dnZXItPnNvdXJjZV9sb2NrKTsNCj4g KwlzcGluX2xvY2tfaW5pdCgmbG9nZ2VyLT5jdHhfaWRfbG9jayk7DQo+ICsJYXRvbWljX3NldCgm bG9nZ2VyLT5uZXh0X3NvdXJjZV9pZCwgMSk7DQo+ICsJbG9nZ2VyLT5uZXh0X2N0eF9pZCA9IDE7 DQo+ICsJbG9nZ2VyLT50b3RhbF9jb250ZXh0c19hbGxvY2F0ZWQgPSAwOw0KPiArCWxvZ2dlci0+ c2xvdF9pZCA9IGN0eC0+c2xvdF9pZDsNCj4gKwlsb2dnZXItPmhhc19zbG90ID0gdHJ1ZTsNCj4g Kwlsb2dnZXItPm93bmVyX2N0eCA9IGN0eDsNCj4gKw0KPiArCS8qIEluaXRpYWxpemUgYWxsb2Nf YmF0Y2ggd2l0aCBwcmVhbGxvY2F0aW9uIChyZWFkeS10by11c2UgY29tcG9zaXRlcykgKi8NCj4g KwlyZXQgPSBibG9nX2JhdGNoX2luaXQoJmxvZ2dlci0+YWxsb2NfYmF0Y2gsIGxvZ2dlci0+bWFn YXppbmVfY2FjaGUsIHRydWUpOw0KPiArCWlmIChyZXQpDQo+ICsJCWdvdG8gZXJyX2NhY2hlOw0K PiArDQo+ICsJLyogSW5pdGlhbGl6ZSBsb2dfYmF0Y2ggZW1wdHkgKG5vIHByZWFsbG9jYXRpb24g LSByZWNlaXZlcyB1c2VkIGNvbXBvc2l0ZXMpICovDQo+ICsJcmV0ID0gYmxvZ19iYXRjaF9pbml0 KCZsb2dnZXItPmxvZ19iYXRjaCwgbG9nZ2VyLT5tYWdhemluZV9jYWNoZSwgZmFsc2UpOw0KPiAr CWlmIChyZXQpDQo+ICsJCWdvdG8gZXJyX2JhdGNoX2FsbG9jOw0KPiArDQo+ICsJLyogSW5pdGlh bGl6ZSBzb3VyY2UgbWFwICovDQo+ICsJZm9yIChpID0gMDsgaSA8IEJMT0dfTUFYX1NPVVJDRV9J RFM7IGkrKykNCj4gKwkJbWVtc2V0KCZsb2dnZXItPnNvdXJjZV9tYXBbaV0sIDAsIHNpemVvZihs b2dnZXItPnNvdXJjZV9tYXBbaV0pKTsNCj4gKw0KPiArCS8qIEFsbG9jYXRlIHBlci1DUFUgTkFQ SSBjb250ZXh0IHBvaW50ZXJzICovDQo+ICsJbG9nZ2VyLT5uYXBpX2N0eHMgPSBhbGxvY19wZXJj cHUoc3RydWN0IGJsb2dfdGxzX2N0eCAqKTsNCj4gKwlpZiAoIWxvZ2dlci0+bmFwaV9jdHhzKQ0K PiArCQlnb3RvIGVycl9iYXRjaGVzOw0KPiArDQo+ICsJLyogQWRkIHRvIGdsb2JhbCBsaXN0ICov DQo+ICsJc3Bpbl9sb2NrKCZibG9nX21vZHVsZXNfbG9jayk7DQo+ICsJbGlzdF9hZGQoJmN0eC0+ bGlzdCwgJmJsb2dfbW9kdWxlX2NvbnRleHRzKTsNCj4gKwlzcGluX3VubG9jaygmYmxvZ19tb2R1 bGVzX2xvY2spOw0KPiArDQo+ICsJcHJfaW5mbygiQkxPRzogTW9kdWxlIGNvbnRleHQgaW5pdGlh bGl6ZWQgZm9yICVzXG4iLCBtb2R1bGVfbmFtZSk7DQo+ICsJY3R4LT5pbml0aWFsaXplZCA9IHRy dWU7DQo+ICsJcmV0dXJuIGN0eDsNCj4gKw0KPiArZXJyX2JhdGNoZXM6DQo+ICsJYmxvZ19iYXRj aF9jbGVhbnVwKCZsb2dnZXItPmxvZ19iYXRjaCk7DQo+ICtlcnJfYmF0Y2hfYWxsb2M6DQo+ICsJ YmxvZ19iYXRjaF9jbGVhbnVwKCZsb2dnZXItPmFsbG9jX2JhdGNoKTsNCj4gK2Vycl9jYWNoZToN Cj4gKwlpZiAobG9nZ2VyLT5tYWdhemluZV9jYWNoZSkgew0KPiArCQlrbWVtX2NhY2hlX2Rlc3Ry b3kobG9nZ2VyLT5tYWdhemluZV9jYWNoZSk7DQo+ICsJCWxvZ2dlci0+bWFnYXppbmVfY2FjaGUg PSBOVUxMOw0KPiArCX0NCj4gK2Vycl9sb2dnZXI6DQo+ICsJa2ZyZWUobG9nZ2VyKTsNCj4gK2Vy cl91bnJlZ2lzdGVyOg0KPiArCWJsb2dfbW9kdWxlX3VucmVnaXN0ZXIoY3R4KTsNCj4gKwlyZXR1 cm4gTlVMTDsNCj4gK30NCj4gK0VYUE9SVF9TWU1CT0woYmxvZ19tb2R1bGVfaW5pdCk7DQo+ICsN Cj4gKy8qKg0KPiArICogYmxvZ19tb2R1bGVfY2xlYW51cCAtIENsZWFuIHVwIGEgbW9kdWxlJ3Mg QkxPRyBjb250ZXh0DQo+ICsgKiBAY3R4OiBNb2R1bGUgY29udGV4dCB0byBjbGVhbiB1cA0KPiAr ICovDQo+ICt2b2lkIGJsb2dfbW9kdWxlX2NsZWFudXAoc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRl eHQgKmN0eCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcjsNCj4gKwlzdHJ1 Y3QgYmxvZ190bHNfY3R4ICp0bHNfY3R4LCAqdG1wOw0KPiArCUxJU1RfSEVBRChwZW5kaW5nKTsN Cj4gKwlpbnQgc2xvdDsNCj4gKw0KPiArCWlmICghY3R4IHx8ICFjdHgtPmluaXRpYWxpemVkKQ0K PiArCQlyZXR1cm47DQo+ICsNCj4gKwlsb2dnZXIgPSBjdHgtPmxvZ2dlcjsNCj4gKwlpZiAoIWxv Z2dlcikNCj4gKwkJcmV0dXJuOw0KPiArDQo+ICsJc2xvdCA9IGN0eC0+c2xvdF9pZDsNCj4gKw0K PiArCS8qIFJlbW92ZSBmcm9tIGdsb2JhbCBsaXN0ICovDQo+ICsJc3Bpbl9sb2NrKCZibG9nX21v ZHVsZXNfbG9jayk7DQo+ICsJbGlzdF9kZWwoJmN0eC0+bGlzdCk7DQo+ICsJc3Bpbl91bmxvY2so JmJsb2dfbW9kdWxlc19sb2NrKTsNCj4gKw0KPiArCS8qIERldGFjaCBjb250ZXh0cyB1bmRlciBs b2NrLCByZWxlYXNlIG91dHNpZGUgKi8NCj4gKwlzcGluX2xvY2soJmxvZ2dlci0+bG9jayk7DQo+ ICsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHRsc19jdHgsIHRtcCwgJmxvZ2dlci0+Y29udGV4 dHMsIGxpc3QpDQo+ICsJCWxpc3RfbW92ZSgmdGxzX2N0eC0+bGlzdCwgJnBlbmRpbmcpOw0KPiAr CXNwaW5fdW5sb2NrKCZsb2dnZXItPmxvY2spOw0KPiArDQo+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eV9zYWZlKHRsc19jdHgsIHRtcCwgJnBlbmRpbmcsIGxpc3QpIHsNCj4gKwkJc3RydWN0IHRhc2tf c3RydWN0ICp0YXNrID0gdGxzX2N0eC0+dGFzazsNCj4gKw0KPiArCQlsaXN0X2RlbF9pbml0KCZ0 bHNfY3R4LT5saXN0KTsNCj4gKwkJaWYgKHRhc2sgJiYgc2xvdCA8IEJMT0dfTUFYX01PRFVMRVMp IHsNCj4gKwkJCXRhc2tfbG9jayh0YXNrKTsNCj4gKwkJCWlmIChSRUFEX09OQ0UodGFzay0+Ymxv Z19jb250ZXh0c1tzbG90XSkgPT0gdGxzX2N0eCkNCj4gKwkJCQlXUklURV9PTkNFKHRhc2stPmJs b2dfY29udGV4dHNbc2xvdF0sIE5VTEwpOw0KPiArCQkJdGFza191bmxvY2sodGFzayk7DQo+ICsJ CX0NCj4gKwkJaWYgKGF0b21pY19kZWNfaWZfcG9zaXRpdmUoJmN0eC0+YWxsb2NhdGVkX2NvbnRl eHRzKSA8IDApDQo+ICsJCQlhdG9taWNfc2V0KCZjdHgtPmFsbG9jYXRlZF9jb250ZXh0cywgMCk7 DQo+ICsNCj4gKwkJLyogQ2xlYXIgdGFzayBhc3NvY2lhdGlvbiAqLw0KPiArCQlibG9nX21vZHVs ZV9jbGVhcl90YXNrKHRsc19jdHgpOw0KPiArDQo+ICsJCS8qIFJlY3ljbGUgY29tcG9zaXRlIHRv IGxvZ19iYXRjaCBpbnN0ZWFkIG9mIGZyZWVpbmcgKi8NCj4gKwkJaWYgKHRsc19jdHgtPnJlbGVh c2UpIHsNCj4gKwkJCXRsc19jdHgtPnJlbGVhc2UodGxzX2N0eCk7DQo+ICsJCX0gZWxzZSBpZiAo bG9nZ2VyKSB7DQo+ICsJCQlibG9nX21vZHVsZV9xdWV1ZV90b19sb2dfYmF0Y2gobG9nZ2VyLCB0 bHNfY3R4KTsNCj4gKwkJfQ0KPiArCX0NCj4gKw0KPiArCS8qIENsZWFuIHVwIGJhdGNoZXMgKGVh Y2ggaGFzIGl0cyBvd24gbWFnYXppbmVfY2FjaGUsIHdpbGwgYmUgZGVzdHJveWVkKSAqLw0KPiAr CWJsb2dfYmF0Y2hfY2xlYW51cCgmbG9nZ2VyLT5hbGxvY19iYXRjaCk7DQo+ICsJYmxvZ19iYXRj aF9jbGVhbnVwKCZsb2dnZXItPmxvZ19iYXRjaCk7DQo+ICsNCj4gKwkvKiBEZXN0cm95IHNoYXJl ZCBtYWdhemluZSBjYWNoZSAqLw0KPiArCWlmIChsb2dnZXItPm1hZ2F6aW5lX2NhY2hlKSB7DQo+ ICsJCWttZW1fY2FjaGVfZGVzdHJveShsb2dnZXItPm1hZ2F6aW5lX2NhY2hlKTsNCj4gKwkJbG9n Z2VyLT5tYWdhemluZV9jYWNoZSA9IE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJLyogRnJlZSBwZXIt Q1BVIE5BUEkgY29udGV4dHMgKi8NCj4gKwlpZiAobG9nZ2VyLT5uYXBpX2N0eHMpDQo+ICsJCWZy ZWVfcGVyY3B1KGxvZ2dlci0+bmFwaV9jdHhzKTsNCj4gKw0KPiArCXByX2luZm8oIkJMT0c6IE1v ZHVsZSBjb250ZXh0IGNsZWFuZWQgdXAgZm9yICVzXG4iLCBjdHgtPm5hbWUpOw0KPiArDQo+ICsJ a2ZyZWUobG9nZ2VyKTsNCj4gKwljdHgtPmxvZ2dlciA9IE5VTEw7DQo+ICsJY3R4LT5pbml0aWFs aXplZCA9IGZhbHNlOw0KPiArCWN0eC0+c2xvdF9pZCA9IDA7DQo+ICsNCj4gKwkvKiBVbnJlZ2lz dGVyIHRvIGZyZWUgdGhlIHNsb3QgKi8NCj4gKwlibG9nX21vZHVsZV91bnJlZ2lzdGVyKGN0eCk7 DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfbW9kdWxlX2NsZWFudXApOw0KPiArDQo+ICsv KioNCj4gKyAqIGJsb2dfbW9kdWxlX2dldCAtIEluY3JlbWVudCBtb2R1bGUgY29udGV4dCByZWZl cmVuY2UgY291bnQNCj4gKyAqIEBjdHg6IE1vZHVsZSBjb250ZXh0DQo+ICsgKi8NCj4gK3ZvaWQg YmxvZ19tb2R1bGVfZ2V0KHN0cnVjdCBibG9nX21vZHVsZV9jb250ZXh0ICpjdHgpDQo+ICt7DQo+ ICsJaWYgKGN0eCkNCj4gKwkJYXRvbWljX2luYygmY3R4LT5yZWZjb3VudCk7DQo+ICt9DQo+ICtF WFBPUlRfU1lNQk9MKGJsb2dfbW9kdWxlX2dldCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19t b2R1bGVfcHV0IC0gRGVjcmVtZW50IG1vZHVsZSBjb250ZXh0IHJlZmVyZW5jZSBjb3VudA0KPiAr ICogQGN0eDogTW9kdWxlIGNvbnRleHQNCj4gKyAqLw0KPiArdm9pZCBibG9nX21vZHVsZV9wdXQo c3RydWN0IGJsb2dfbW9kdWxlX2NvbnRleHQgKmN0eCkNCj4gK3sNCj4gKwlpZiAoY3R4ICYmIGF0 b21pY19kZWNfYW5kX3Rlc3QoJmN0eC0+cmVmY291bnQpKQ0KPiArCQlibG9nX21vZHVsZV9jbGVh bnVwKGN0eCk7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfbW9kdWxlX3B1dCk7DQo+ICsN Cj4gKy8qIFBlci1tb2R1bGUgQVBJIGltcGxlbWVudGF0aW9ucyAqLw0KPiArDQo+ICsvKioNCj4g KyAqIGJsb2dfZ2V0X3NvdXJjZV9pZF9jdHggLSBHZXQgb3IgYWxsb2NhdGUgc291cmNlIElEIGZv ciBhIG1vZHVsZSBjb250ZXh0DQo+ICsgKiBAY3R4OiBNb2R1bGUgY29udGV4dA0KPiArICogQGZp bGU6IFNvdXJjZSBmaWxlIG5hbWUNCj4gKyAqIEBmdW5jOiBGdW5jdGlvbiBuYW1lDQo+ICsgKiBA bGluZTogTGluZSBudW1iZXINCj4gKyAqIEBmbXQ6IEZvcm1hdCBzdHJpbmcNCj4gKyAqDQo+ICsg KiBSZXR1cm46IFNvdXJjZSBJRA0KPiArICovDQo+ICt1MzIgYmxvZ19nZXRfc291cmNlX2lkX2N0 eChzdHJ1Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4LCBjb25zdCBjaGFyICpmaWxlLA0KPiAr CQkJICAgY29uc3QgY2hhciAqZnVuYywgdW5zaWduZWQgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZt dCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcjsNCj4gKwlzdHJ1Y3QgYmxv Z19zb3VyY2VfaW5mbyAqaW5mbzsNCj4gKwl1MzIgaWQ7DQo+ICsNCj4gKwlpZiAoIWN0eCB8fCAh Y3R4LT5sb2dnZXIpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJbG9nZ2VyID0gY3R4LT5sb2dn ZXI7DQo+ICsNCj4gKwkvKiBHZXQgbmV4dCBJRCAqLw0KPiArCWlkID0gYXRvbWljX2ZldGNoX2lu YygmbG9nZ2VyLT5uZXh0X3NvdXJjZV9pZCk7DQo+ICsJaWYgKGlkID49IEJMT0dfTUFYX1NPVVJD RV9JRFMpIHsNCj4gKwkJcHJfd2FybigiQkxPRzogU291cmNlIElEIG92ZXJmbG93IGluIG1vZHVs ZSAlc1xuIiwgY3R4LT5uYW1lKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJLyog RmlsbCBpbiBzb3VyY2UgaW5mbyAqLw0KPiArCXNwaW5fbG9jaygmbG9nZ2VyLT5zb3VyY2VfbG9j ayk7DQo+ICsJaW5mbyA9ICZsb2dnZXItPnNvdXJjZV9tYXBbaWRdOw0KPiArCWluZm8tPmZpbGUg PSBmaWxlOw0KPiArCWluZm8tPmZ1bmMgPSBmdW5jOw0KPiArCWluZm8tPmxpbmUgPSBsaW5lOw0K PiArCWluZm8tPmZtdCA9IGZtdDsNCj4gKwlpbmZvLT53YXJuX2NvdW50ID0gMDsNCj4gKyNpZiBC TE9HX1RSQUNLX1VTQUdFDQo+ICsJYXRvbWljX3NldCgmaW5mby0+bmFwaV91c2FnZSwgMCk7DQo+ ICsJYXRvbWljX3NldCgmaW5mby0+dGFza191c2FnZSwgMCk7DQo+ICsJYXRvbWljX3NldCgmaW5m by0+bmFwaV9ieXRlcywgMCk7DQo+ICsJYXRvbWljX3NldCgmaW5mby0+dGFza19ieXRlcywgMCk7 DQo+ICsjZW5kaWYNCj4gKwlzcGluX3VubG9jaygmbG9nZ2VyLT5zb3VyY2VfbG9jayk7DQo+ICsN Cj4gKwlyZXR1cm4gaWQ7DQo+ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfZ2V0X3NvdXJjZV9p ZF9jdHgpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfZ2V0X3NvdXJjZV9pbmZvX2N0eCAtIEdl dCBzb3VyY2UgaW5mbyBmb3IgYW4gSUQgaW4gYSBtb2R1bGUgY29udGV4dA0KPiArICogQGN0eDog TW9kdWxlIGNvbnRleHQNCj4gKyAqIEBpZDogU291cmNlIElEDQo+ICsgKg0KPiArICogUmV0dXJu OiBTb3VyY2UgaW5mbyBvciBOVUxMDQo+ICsgKi8NCj4gK3N0cnVjdCBibG9nX3NvdXJjZV9pbmZv ICpibG9nX2dldF9zb3VyY2VfaW5mb19jdHgoc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRleHQgKmN0 eCwgdTMyIGlkKQ0KPiArew0KPiArCXN0cnVjdCBibG9nX2xvZ2dlciAqbG9nZ2VyOw0KPiArDQo+ ICsJaWYgKCFjdHggfHwgIWN0eC0+bG9nZ2VyIHx8IGlkID49IEJMT0dfTUFYX1NPVVJDRV9JRFMp DQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJbG9nZ2VyID0gY3R4LT5sb2dnZXI7DQo+ICsJ cmV0dXJuICZsb2dnZXItPnNvdXJjZV9tYXBbaWRdOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChi bG9nX2dldF9zb3VyY2VfaW5mb19jdHgpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfZ2V0X3Rs c19jdHhfY3R4IC0gR2V0IG9yIGNyZWF0ZSBUTFMgY29udGV4dCBmb3IgYSBtb2R1bGUNCj4gKyAq IEBjdHg6IE1vZHVsZSBjb250ZXh0DQo+ICsgKg0KPiArICogVXNlcyBzbG90LWJhc2VkIGFjY2Vz cyBpbnRvIHRhc2tfc3RydWN0J3MgYmxvZ19jb250ZXh0cyBhcnJheS4NCj4gKyAqIEFsbG9jYXRl cyBjb21wb3NpdGVzIGZyb20gdGhlIG1hZ2F6aW5lIGJhdGNoIHN5c3RlbS4NCj4gKyAqDQo+ICsg KiBSZXR1cm46IFRMUyBjb250ZXh0IG9yIE5VTEwNCj4gKyAqLw0KPiArc3RydWN0IGJsb2dfdGxz X2N0eCAqYmxvZ19nZXRfdGxzX2N0eF9jdHgoc3RydWN0IGJsb2dfbW9kdWxlX2NvbnRleHQgKmN0 eCkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcjsNCj4gKwlzdHJ1Y3QgYmxv Z190bHNfY3R4ICp0bHNfY3R4Ow0KPiArCXN0cnVjdCBibG9nX3Rsc19wYWdlZnJhZyAqY29tcG9z aXRlOw0KPiArCXN0cnVjdCBibG9nX3BhZ2VmcmFnICpwZjsNCj4gKwlzdHJ1Y3QgdGFza19zdHJ1 Y3QgKnRhc2sgPSBjdXJyZW50Ow0KPiArCXU4IHNsb3RfaWQ7DQo+ICsNCj4gKwlpZiAoIWN0eCB8 fCAhY3R4LT5sb2dnZXIpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJbG9nZ2VyID0gY3R4 LT5sb2dnZXI7DQo+ICsJc2xvdF9pZCA9IGN0eC0+c2xvdF9pZDsNCj4gKw0KPiArCWlmIChzbG90 X2lkID49IEJMT0dfTUFYX01PRFVMRVMpIHsNCj4gKwkJcHJfZXJyKCJibG9nOiBpbnZhbGlkIHNs b3RfaWQgJWQgZm9yIG1vZHVsZSAlc1xuIiwgc2xvdF9pZCwgY3R4LT5uYW1lKTsNCj4gKwkJcmV0 dXJuIE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJLyogRmFzdCBwYXRoOiBjaGVjayBpZiBjb250ZXh0 IGFscmVhZHkgZXhpc3RzICovDQo+ICsJdGxzX2N0eCA9IFJFQURfT05DRSh0YXNrLT5ibG9nX2Nv bnRleHRzW3Nsb3RfaWRdKTsNCj4gKwlpZiAodGxzX2N0eCkNCj4gKwkJcmV0dXJuIHRsc19jdHg7 DQo+ICsNCj4gKwkvKiBTbG93IHBhdGg6IGdldCBjb21wb3NpdGUgZnJvbSBiYXRjaCBvciBhbGxv Y2F0ZSBuZXcgb25lICovDQo+ICsJY29tcG9zaXRlID0gYmxvZ19iYXRjaF9nZXQoJmxvZ2dlci0+ YWxsb2NfYmF0Y2gpOw0KPiArCWlmICghY29tcG9zaXRlKSB7DQo+ICsJCS8qIEFsbG9jYXRlIG5l dyBjb21wb3NpdGUgdmlhIHBhZ2UgYWxsb2NhdG9yICg1MTJLQikgKi8NCj4gKwkJc3RydWN0IHBh Z2UgKnBhZ2VzOw0KPiArDQo+ICsJCXBhZ2VzID0gYWxsb2NfcGFnZXMoR0ZQX0tFUk5FTCB8IF9f R0ZQX1pFUk8sDQo+ICsJCQkJICAgIGdldF9vcmRlcihCTE9HX1RMU19QQUdFRlJBR19BTExPQ19T SVpFKSk7DQo+ICsJCWlmICghcGFnZXMpDQo+ICsJCQlyZXR1cm4gTlVMTDsNCj4gKwkJY29tcG9z aXRlID0gcGFnZV9hZGRyZXNzKHBhZ2VzKTsNCj4gKwl9DQo+ICsNCj4gKwl0bHNfY3R4ID0gJmNv bXBvc2l0ZS0+Y3R4Ow0KPiArDQo+ICsJLyogSW5pdGlhbGl6ZSBpZiB0aGlzIGlzIGEgbmV3IG9y IHVuaW5pdGlhbGl6ZWQgY29tcG9zaXRlICovDQo+ICsJaWYgKHRsc19jdHgtPmlkID09IDApIHsN Cj4gKwkJSU5JVF9MSVNUX0hFQUQoJnRsc19jdHgtPmxpc3QpOw0KPiArDQo+ICsJCS8qIEdldCB1 bmlxdWUgY29udGV4dCBJRCAqLw0KPiArCQlzcGluX2xvY2soJmxvZ2dlci0+Y3R4X2lkX2xvY2sp Ow0KPiArCQl0bHNfY3R4LT5pZCA9IGxvZ2dlci0+bmV4dF9jdHhfaWQrKzsNCj4gKwkJc3Bpbl91 bmxvY2soJmxvZ2dlci0+Y3R4X2lkX2xvY2spOw0KPiArDQo+ICsjaWYgQkxPR19ERUJVR19QT0lT T04NCj4gKwkJdGxzX2N0eC0+ZGVidWdfcG9pc29uID0gQkxPR19DVFhfUE9JU09OOw0KPiArI2Vu ZGlmDQo+ICsJfQ0KPiArDQo+ICsJLyogSW5pdGlhbGl6ZSBUTFMgY29udGV4dCBmaWVsZHMgKi8N Cj4gKwlhdG9taWNfc2V0KCZ0bHNfY3R4LT5yZWZjb3VudCwgMSk7DQo+ICsJZ2V0X3Rhc2tfc3Ry dWN0KHRhc2spOw0KPiArCXRsc19jdHgtPnRhc2sgPSB0YXNrOw0KPiArCXRsc19jdHgtPnBpZCA9 IHRhc2stPnBpZDsNCj4gKwlnZXRfdGFza19jb21tKHRsc19jdHgtPmNvbW0sIHRhc2spOw0KPiAr CXRsc19jdHgtPmJhc2VfamlmZmllcyA9IGppZmZpZXM7DQo+ICsJdGxzX2N0eC0+cmVsZWFzZSA9 IGJsb2dfbW9kdWxlX3Rsc19yZWxlYXNlOw0KPiArCXRsc19jdHgtPmxvZ2dlciA9IGxvZ2dlcjsN Cj4gKw0KPiArCS8qIEluaXRpYWxpemUgZW1iZWRkZWQgcGFnZWZyYWcgdG8gcG9pbnQgdG8gaW5s aW5lIGJ1ZmZlciAqLw0KPiArCXBmID0gJmNvbXBvc2l0ZS0+cGY7DQo+ICsJcGYtPnBhZ2VzID0g TlVMTDsgIC8qIE5vIHNlcGFyYXRlIHBhZ2VzLCB1c2luZyBpbmxpbmUgYnVmZmVyICovDQo+ICsJ cGYtPmJ1ZmZlciA9IGNvbXBvc2l0ZS0+YnVmOyAgLyogUG9pbnQgdG8gaW5saW5lIGJ1ZmZlciAq Lw0KPiArCXBmLT5jYXBhY2l0eSA9IEJMT0dfVExTX1BBR0VGUkFHX0JVRkZFUl9TSVpFOyAgLyog SW5saW5lIGJ1ZmZlciBzaXplICg1MTJLQiAtIGhlYWRlcikgKi8NCj4gKwlzcGluX2xvY2tfaW5p dCgmcGYtPmxvY2spOw0KPiArCXBmLT5oZWFkID0gMDsNCj4gKwlwZi0+YWxsb2NfY291bnQgPSAw Ow0KPiArCXBmLT5hY3RpdmVfZWxlbWVudHMgPSAwOw0KPiArCXBmLT5sYXN0X2VudHJ5ID0gTlVM TDsNCj4gKw0KPiArCS8qIEVuc3VyZSBjb250ZXh0IGlzIGxpbmtlZCBpbnRvIGxvZ2dlciBsaXN0 IGV4YWN0bHkgb25jZSAqLw0KPiArCXNwaW5fbG9jaygmbG9nZ2VyLT5sb2NrKTsNCj4gKwlpZiAo bGlzdF9lbXB0eSgmdGxzX2N0eC0+bGlzdCkpIHsNCj4gKwkJbGlzdF9hZGQoJnRsc19jdHgtPmxp c3QsICZsb2dnZXItPmNvbnRleHRzKTsNCj4gKwkJbG9nZ2VyLT50b3RhbF9jb250ZXh0c19hbGxv Y2F0ZWQrKzsNCj4gKwl9DQo+ICsJc3Bpbl91bmxvY2soJmxvZ2dlci0+bG9jayk7DQo+ICsNCj4g KwkvKiBJbnN0YWxsIGluIHRhc2sncyBjb250ZXh0IGFycmF5IC0gdXNlIGNtcHhjaGcgZm9yIGF0 b21pY2l0eSAqLw0KPiArCWlmIChjbXB4Y2hnKCZ0YXNrLT5ibG9nX2NvbnRleHRzW3Nsb3RfaWRd LCBOVUxMLCB0bHNfY3R4KSAhPSBOVUxMKSB7DQo+ICsJCS8qIEFub3RoZXIgdGhyZWFkIGJlYXQg dXMgdG8gaXQgLSByZWN5Y2xlIG91ciBjb21wb3NpdGUgKi8NCj4gKwkJYmxvZ19tb2R1bGVfY2xl YXJfdGFzayh0bHNfY3R4KTsNCj4gKwkJYmxvZ19tb2R1bGVfcXVldWVfdG9fYWxsb2NfYmF0Y2go bG9nZ2VyLCB0bHNfY3R4KTsNCj4gKwkJcmV0dXJuIHRhc2stPmJsb2dfY29udGV4dHNbc2xvdF9p ZF07DQo+ICsJfQ0KPiArDQo+ICsJLyogQ29udGV4dCBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkICov DQo+ICsJYXRvbWljX2luYygmY3R4LT5hbGxvY2F0ZWRfY29udGV4dHMpOw0KPiArDQo+ICsJcHJf ZGVidWcoImJsb2c6IGNyZWF0ZWQgVExTIGNvbnRleHQgZm9yIG1vZHVsZSAlcyAoc2xvdCAlZCks IHRhc2sgJWQgWyVzXVxuIiwNCj4gKwkJIGN0eC0+bmFtZSwgc2xvdF9pZCwgdGFzay0+cGlkLCB0 YXNrLT5jb21tKTsNCj4gKw0KPiArCXJldHVybiB0bHNfY3R4Ow0KPiArfQ0KPiArRVhQT1JUX1NZ TUJPTChibG9nX2dldF90bHNfY3R4X2N0eCk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19sb2df Y3R4IC0gTG9nIGEgbWVzc2FnZSB3aXRoIG1vZHVsZSBjb250ZXh0DQo+ICsgKiBAY3R4OiBNb2R1 bGUgY29udGV4dA0KPiArICogQHNvdXJjZV9pZDogU291cmNlIElEDQo+ICsgKiBAY2xpZW50X2lk OiBDbGllbnQgSUQNCj4gKyAqIEBuZWVkZWRfc2l6ZTogU2l6ZSBuZWVkZWQgZm9yIHRoZSBsb2cg ZW50cnkNCj4gKyAqDQo+ICsgKiBSZXR1cm46IEJ1ZmZlciB0byB3cml0ZSBsb2cgZGF0YSB0bywg b3IgTlVMTCBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK3ZvaWQgKmJsb2dfbG9nX2N0eChzdHJ1Y3Qg YmxvZ19tb2R1bGVfY29udGV4dCAqY3R4LCB1MzIgc291cmNlX2lkLA0KPiArCQkgICB1OCBjbGll bnRfaWQsIHNpemVfdCBuZWVkZWRfc2l6ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ190bHNfY3R4 ICp0bHNfY3R4Ow0KPiArCXN0cnVjdCBibG9nX3BhZ2VmcmFnICpwZjsNCj4gKwlzdHJ1Y3QgYmxv Z19sb2dfZW50cnkgKmVudHJ5Ow0KPiArCWludCBhbGxvYzsNCj4gKwlzaXplX3QgdG90YWxfc2l6 ZTsNCj4gKw0KPiArCWlmICghY3R4IHx8ICFjdHgtPmxvZ2dlcikNCj4gKwkJcmV0dXJuIE5VTEw7 DQo+ICsNCj4gKwkvKiBHZXQgVExTIGNvbnRleHQgKi8NCj4gKwl0bHNfY3R4ID0gYmxvZ19nZXRf dGxzX2N0eF9jdHgoY3R4KTsNCj4gKwlpZiAoIXRsc19jdHgpDQo+ICsJCXJldHVybiBOVUxMOw0K PiArDQo+ICsJLyogVmFsaWRhdGUgcGF5bG9hZCBzaXplICovDQo+ICsJaWYgKG5lZWRlZF9zaXpl ID4gQkxPR19NQVhfUEFZTE9BRCkgew0KPiArCQlwcl93YXJuX29uY2UoIkJMT0c6IHBheWxvYWQg dG9vIGxhcmdlICglenUgPiAldSkgaW4gbW9kdWxlICVzXG4iLA0KPiArCQkJICAgICBuZWVkZWRf c2l6ZSwgQkxPR19NQVhfUEFZTE9BRCwgY3R4LT5uYW1lKTsNCj4gKwkJcmV0dXJuIE5VTEw7DQo+ ICsJfQ0KPiArDQo+ICsJLyogQ2FsY3VsYXRlIHRvdGFsIHNpemUgbmVlZGVkICh3aXRoIGFsaWdu bWVudCkgKi8NCj4gKwl0b3RhbF9zaXplID0gcm91bmRfdXAoc2l6ZW9mKCplbnRyeSkgKyBuZWVk ZWRfc2l6ZSwgOCk7DQoNCkRpdHRvLiBIYXJkY29kZWQgOCB2YWx1ZT8gTWF5YmUsIG5hbWVkIGNv bnN0YW50Pw0KDQo+ICsNCj4gKwkvKiBHZXQgcGFnZWZyYWcgZnJvbSBjb21wb3NpdGUgKi8NCj4g KwlwZiA9IGJsb2dfY3R4X3BmKHRsc19jdHgpOw0KPiArDQo+ICsJLyogUmVzZXJ2ZSBzcGFjZSBm cm9tIHBhZ2VmcmFnICovDQo+ICsJYWxsb2MgPSBibG9nX3BhZ2VmcmFnX3Jlc2VydmUocGYsIHRv dGFsX3NpemUpOw0KPiArCWlmIChhbGxvYyA9PSAtRU5PTUVNKSB7DQo+ICsJCXByX2RlYnVnKCIl czogYWxsb2NhdGlvbiBmYWlsZWQgZm9yIG1vZHVsZSAlc1xuIiwNCj4gKwkJICAgICAgIF9fZnVu Y19fLCBjdHgtPm5hbWUpOw0KDQpUaGUgcHJfZGVidWcoKSBvciBwcl9lcnIoKT8gV2UgaGF2ZSBm YWlsZWQgaGVyZS4NCg0KPiArCQlibG9nX3BhZ2VmcmFnX3Jlc2V0KHBmKTsNCj4gKwkJcmV0dXJu IE5VTEw7DQo+ICsJfQ0KPiArDQo+ICsJLyogR2V0IHBvaW50ZXIgZnJvbSBhbGxvY2F0aW9uICov DQo+ICsJZW50cnkgPSBibG9nX3BhZ2VmcmFnX2dldF9wdHIocGYsIGFsbG9jKTsNCj4gKwlpZiAo IWVudHJ5KSB7DQo+ICsJCXByX2VycigiJXM6IGZhaWxlZCB0byBnZXQgcG9pbnRlciBmcm9tIHBh Z2VmcmFnXG4iLCBfX2Z1bmNfXyk7DQo+ICsJCXJldHVybiBOVUxMOw0KPiArCX0NCj4gKw0KPiAr CS8qIFN0b3JlIHBlbmRpbmcgcHVibGlzaCBpbmZvIGZvciBibG9nX2xvZ19jb21taXRfY3R4KCkg Ki8NCj4gKwl0bHNfY3R4LT5wZW5kaW5nX29mZnNldCA9IGFsbG9jOw0KPiArCXRsc19jdHgtPnBl bmRpbmdfc2l6ZSA9IHRvdGFsX3NpemU7DQo+ICsNCj4gKwkvKiBGaWxsIGluIGVudHJ5IGhlYWRl ciAqLw0KPiArI2lmIEJMT0dfREVCVUdfUE9JU09ODQo+ICsJZW50cnktPmRlYnVnX3BvaXNvbiA9 IEJMT0dfTE9HX0VOVFJZX1BPSVNPTjsNCj4gKyNlbmRpZg0KPiArCWVudHJ5LT50c19kZWx0YSA9 IGppZmZpZXMgLSB0bHNfY3R4LT5iYXNlX2ppZmZpZXM7DQo+ICsJZW50cnktPnNvdXJjZV9pZCA9 IHNvdXJjZV9pZDsNCj4gKwllbnRyeS0+bGVuID0gKHU4KW5lZWRlZF9zaXplOw0KDQpDb3VsZCBu ZWVkZWRfc2l6ZSBvdmVyZmxvdyBoZXJlPw0KDQo+ICsJZW50cnktPmNsaWVudF9pZCA9IGNsaWVu dF9pZDsNCj4gKwllbnRyeS0+ZmxhZ3MgPSAwOw0KPiArDQo+ICsJLyogUmV0dXJuIHBvaW50ZXIg dG8gYnVmZmVyIGFyZWEgKi8NCj4gKwlyZXR1cm4gZW50cnktPmJ1ZmZlcjsNCj4gK30NCj4gK0VY UE9SVF9TWU1CT0woYmxvZ19sb2dfY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2xvZ19j b21taXRfY3R4IC0gUHVibGlzaCBhIHJlc2VydmVkIGxvZyBlbnRyeQ0KPiArICogQGN0eDogTW9k dWxlIGNvbnRleHQNCj4gKyAqIEBhY3R1YWxfc2l6ZTogQWN0dWFsIGJ5dGVzIHdyaXR0ZW4gZHVy aW5nIHNlcmlhbGl6YXRpb24NCj4gKyAqDQo+ICsgKiBQdWJsaXNoZXMgdGhlIGxvZyBlbnRyeSB0 aGF0IHdhcyByZXNlcnZlZCBieSB0aGUgbGFzdCBibG9nX2xvZ19jdHgoKSBjYWxsLA0KPiArICog bWFraW5nIGl0IHZpc2libGUgdG8gcmVhZGVycy4gTXVzdCBiZSBjYWxsZWQgYWZ0ZXIgc2VyaWFs aXphdGlvbiBpcyBjb21wbGV0ZS4NCj4gKyAqDQo+ICsgKiBDb250ZXh0OiBTYW1lIGNvbnRleHQg YXMgdGhlIHByZWNlZGluZyBibG9nX2xvZ19jdHgoKSBjYWxsDQo+ICsgKiBSZXR1cm46IDAgb24g c3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQo+ICsgKi8NCj4gK2ludCBi bG9nX2xvZ19jb21taXRfY3R4KHN0cnVjdCBibG9nX21vZHVsZV9jb250ZXh0ICpjdHgsIHNpemVf dCBhY3R1YWxfc2l6ZSkNCj4gK3sNCj4gKwlzdHJ1Y3QgYmxvZ190bHNfY3R4ICp0bHNfY3R4Ow0K PiArCXN0cnVjdCBibG9nX3BhZ2VmcmFnICpwZjsNCj4gKwlzdHJ1Y3QgYmxvZ19sb2dfZW50cnkg KmVudHJ5Ow0KPiArCXNpemVfdCB0b3RhbF9zaXplOw0KPiArDQo+ICsJaWYgKCFjdHggfHwgIWN0 eC0+bG9nZ2VyKQ0KPiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gKw0KPiArCXRsc19jdHggPSBibG9n X2dldF9jdHhfY3R4KGN0eCk7DQo+ICsJaWYgKCF0bHNfY3R4KQ0KPiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gKw0KPiArCXBmID0gYmxvZ19jdHhfcGYodGxzX2N0eCk7DQo+ICsNCj4gKwkvKiBHZXQg dGhlIGVudHJ5IHdlJ3JlIGNvbW1pdHRpbmcgYW5kIHVwZGF0ZSBpdHMgbGVuZ3RoIHRvIGFjdHVh bCBzaXplICovDQo+ICsJZW50cnkgPSBibG9nX3BhZ2VmcmFnX2dldF9wdHIocGYsIHRsc19jdHgt PnBlbmRpbmdfb2Zmc2V0KTsNCj4gKwlpZiAoZW50cnkpDQo+ICsJCWVudHJ5LT5sZW4gPSAodTgp YWN0dWFsX3NpemU7DQoNCkRpdHRvLiBDb3VsZCBhY3R1YWxfc2l6ZSBvdmVyZmxvdyBoZXJlPw0K DQo+ICsNCj4gKwkvKiBhY3R1YWxfc2l6ZSBpcyBwYXlsb2FkIG9ubHksIG5lZWQgdG8gYWRkIGhl YWRlciArIGFsaWdubWVudCAqLw0KPiArCXRvdGFsX3NpemUgPSByb3VuZF91cChzaXplb2Yoc3Ry dWN0IGJsb2dfbG9nX2VudHJ5KSArIGFjdHVhbF9zaXplLCA4KTsNCg0KRGl0dG8uIE1heWJlLCBu YW1lZCBjb25zdGFudCBpbnN0ZWFkIG9mIGhhcmRjb2RlZCA4IHZhbHVlPw0KDQo+ICsNCj4gKwlw cl9lcnIoImJsb2dfbG9nX2NvbW1pdF9jdHg6IHBlbmRpbmdfb2Zmc2V0PSVkLCBhY3R1YWxfc2l6 ZT0lenUsIHRvdGFsX3NpemU9JXp1LCBwZW5kaW5nX3NpemU9JXp1XG4iLA0KPiArCQl0bHNfY3R4 LT5wZW5kaW5nX29mZnNldCwgYWN0dWFsX3NpemUsIHRvdGFsX3NpemUsIHRsc19jdHgtPnBlbmRp bmdfc2l6ZSk7DQoNClRoZSBwcl9lcnIoKSBvciBwcl9kZWJ1ZygpPw0KDQpUaGFua3MsDQpTbGF2 YS4NCg0KPiArDQo+ICsJYmxvZ19wYWdlZnJhZ19wdWJsaXNoKHBmLCB0bHNfY3R4LT5wZW5kaW5n X29mZnNldCArIHRvdGFsX3NpemUpOw0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICtFWFBP UlRfU1lNQk9MKGJsb2dfbG9nX2NvbW1pdF9jdHgpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2df Z2V0X2N0eF9jdHggLSBHZXQgYXBwcm9wcmlhdGUgY29udGV4dCBiYXNlZCBvbiBleGVjdXRpb24g Y29udGV4dA0KPiArICogQGN0eDogTW9kdWxlIGNvbnRleHQNCj4gKyAqDQo+ICsgKiBSZXR1cm46 IFRMUyBjb250ZXh0IG9yIE5BUEkgY29udGV4dCBkZXBlbmRpbmcgb24gZXhlY3V0aW9uIGNvbnRl eHQNCj4gKyAqLw0KPiArc3RydWN0IGJsb2dfdGxzX2N0eCAqYmxvZ19nZXRfY3R4X2N0eChzdHJ1 Y3QgYmxvZ19tb2R1bGVfY29udGV4dCAqY3R4KQ0KPiArew0KPiArCWlmIChpbl9zZXJ2aW5nX3Nv ZnRpcnEoKSkNCj4gKwkJcmV0dXJuIGJsb2dfZ2V0X25hcGlfY3R4X2N0eChjdHgpOw0KPiArCXJl dHVybiBibG9nX2dldF90bHNfY3R4X2N0eChjdHgpOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChi bG9nX2dldF9jdHhfY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX2dldF9uYXBpX2N0eF9j dHggLSBHZXQgTkFQSSBjb250ZXh0IGZvciBjdXJyZW50IENQVQ0KPiArICogQGN0eDogTW9kdWxl IGNvbnRleHQNCj4gKyAqDQo+ICsgKiBSZXR1cm46IE5BUEkgY29udGV4dCBvciBOVUxMDQo+ICsg Ki8NCj4gK3N0cnVjdCBibG9nX3Rsc19jdHggKmJsb2dfZ2V0X25hcGlfY3R4X2N0eChzdHJ1Y3Qg YmxvZ19tb2R1bGVfY29udGV4dCAqY3R4KQ0KPiArew0KPiArCXN0cnVjdCBibG9nX2xvZ2dlciAq bG9nZ2VyOw0KPiArCXN0cnVjdCBibG9nX3Rsc19jdHggKipuYXBpX2N0eF9wdHI7DQo+ICsNCj4g KwlpZiAoIWN0eCB8fCAhY3R4LT5sb2dnZXIpDQo+ICsJCXJldHVybiBOVUxMOw0KPiArDQo+ICsJ bG9nZ2VyID0gY3R4LT5sb2dnZXI7DQo+ICsJaWYgKCFsb2dnZXItPm5hcGlfY3R4cykNCj4gKwkJ cmV0dXJuIE5VTEw7DQo+ICsNCj4gKwkvKiBHZXQgcG9pbnRlciB0byB0aGUgcGVyY3B1IHBvaW50 ZXIgKi8NCj4gKwluYXBpX2N0eF9wdHIgPSBwZXJfY3B1X3B0cihsb2dnZXItPm5hcGlfY3R4cywg c21wX3Byb2Nlc3Nvcl9pZCgpKTsNCj4gKwlyZXR1cm4gKm5hcGlfY3R4X3B0cjsNCj4gK30NCj4g K0VYUE9SVF9TWU1CT0woYmxvZ19nZXRfbmFwaV9jdHhfY3R4KTsNCj4gKw0KPiArLyoqDQo+ICsg KiBibG9nX3NldF9uYXBpX2N0eF9jdHggLSBTZXQgTkFQSSBjb250ZXh0IGZvciBjdXJyZW50IENQ VQ0KPiArICogQGN0eDogTW9kdWxlIGNvbnRleHQNCj4gKyAqIEB0bHNfY3R4OiBUTFMgY29udGV4 dCB0byBzZXQNCj4gKyAqLw0KPiArdm9pZCBibG9nX3NldF9uYXBpX2N0eF9jdHgoc3RydWN0IGJs b2dfbW9kdWxlX2NvbnRleHQgKmN0eCwgc3RydWN0IGJsb2dfdGxzX2N0eCAqdGxzX2N0eCkNCj4g K3sNCj4gKwlzdHJ1Y3QgYmxvZ19sb2dnZXIgKmxvZ2dlcjsNCj4gKwlzdHJ1Y3QgYmxvZ190bHNf Y3R4ICoqbmFwaV9jdHhfcHRyOw0KPiArDQo+ICsJaWYgKCFjdHggfHwgIWN0eC0+bG9nZ2VyIHx8 ICFjdHgtPmxvZ2dlci0+bmFwaV9jdHhzKQ0KPiArCQlyZXR1cm47DQo+ICsNCj4gKwlsb2dnZXIg PSBjdHgtPmxvZ2dlcjsNCj4gKwkvKiBHZXQgcG9pbnRlciB0byB0aGUgcGVyY3B1IHBvaW50ZXIg YW5kIHNldCBpdCAqLw0KPiArCW5hcGlfY3R4X3B0ciA9IHBlcl9jcHVfcHRyKGxvZ2dlci0+bmFw aV9jdHhzLCBzbXBfcHJvY2Vzc29yX2lkKCkpOw0KPiArCSpuYXBpX2N0eF9wdHIgPSB0bHNfY3R4 Ow0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX3NldF9uYXBpX2N0eF9jdHgpOw0KPiBkaWZm IC0tZ2l0IGEvbGliL2Jsb2cvYmxvZ19wYWdlZnJhZy5jIGIvbGliL2Jsb2cvYmxvZ19wYWdlZnJh Zy5jDQo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IDAwMDAwMDAwMDAwMC4uNTk4ZGU5 MTQ1NjAxDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvbGliL2Jsb2cvYmxvZ19wYWdlZnJhZy5j DQo+IEBAIC0wLDAgKzEsMTI0IEBADQo+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KPiArLyoNCj4gKyAqIEJpbmFyeSBMb2dnaW5nIFBhZ2UgRnJhZ21lbnQgTWFuYWdlbWVu dA0KPiArICoNCj4gKyAqIE1pZ3JhdGVkIGZyb20gY2VwaF9zYW5fcGFnZWZyYWcuYyB3aXRoIGFs bCBhbGdvcml0aG1zIHByZXNlcnZlZA0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRlIDxsaW51eC9w cmludGsuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ICsjaW5jbHVkZSA8bGludXgv bW0uaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gKyNpbmNsdWRlIDxsaW51eC9i bG9nL2Jsb2dfcGFnZWZyYWcuaD4NCj4gKw0KPiArLyoqDQo+ICsgKiBibG9nX3BhZ2VmcmFnX2lu aXRfd2l0aF9idWZmZXIgLSBJbml0aWFsaXplIHBhZ2VmcmFnIHdpdGggYW4gZXhpc3RpbmcgYnVm ZmVyDQo+ICsgKiBAcGY6IHBhZ2VmcmFnIGFsbG9jYXRvciB0byBpbml0aWFsaXplDQo+ICsgKiBA YnVmZmVyOiBwcmUtYWxsb2NhdGVkIGJ1ZmZlciB0byB1c2UNCj4gKyAqIEBzaXplOiBzaXplIG9m IHRoZSBidWZmZXINCj4gKyAqDQo+ICsgKiBSZXR1cm46IDAgb24gc3VjY2Vzcw0KPiArICovDQo+ ICtpbnQgYmxvZ19wYWdlZnJhZ19pbml0X3dpdGhfYnVmZmVyKHN0cnVjdCBibG9nX3BhZ2VmcmFn ICpwZiwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkNCj4gK3sNCj4gKwlzcGluX2xvY2tfaW5p dCgmcGYtPmxvY2spOw0KPiArCXBmLT5wYWdlcyA9IE5VTEw7IC8qIE5vIHBhZ2VzIGFsbG9jYXRl ZCwgdXNpbmcgcHJvdmlkZWQgYnVmZmVyICovDQo+ICsJcGYtPmJ1ZmZlciA9IGJ1ZmZlcjsNCj4g KwlwZi0+Y2FwYWNpdHkgPSBzaXplOyAgLyogU3RvcmUgc2l6ZSBmb3IgYm91bmRzIGNoZWNraW5n ICovDQo+ICsJcGYtPmhlYWQgPSAwOw0KPiArCXBmLT5hY3RpdmVfZWxlbWVudHMgPSAwOw0KPiAr CXBmLT5hbGxvY19jb3VudCA9IDA7DQo+ICsJcGYtPmxhc3RfZW50cnkgPSBOVUxMOw0KPiArCXJl dHVybiAwOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX3BhZ2VmcmFnX2luaXRfd2l0aF9i dWZmZXIpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfcGFnZWZyYWdfcmVzZXJ2ZSAtIFJlc2Vy dmUgc3BhY2UgaW4gdGhlIHBhZ2VmcmFnIGJ1ZmZlcg0KPiArICogQHBmOiBwYWdlZnJhZyBhbGxv Y2F0b3INCj4gKyAqIEBuOiBudW1iZXIgb2YgYnl0ZXMgdG8gcmVzZXJ2ZQ0KPiArICoNCj4gKyAq IENoZWNrcyBpZiB0aGVyZSBpcyBzdWZmaWNpZW50IHNwYWNlIGFuZCByZXR1cm5zIHRoZSBjdXJy ZW50IGhlYWQgb2Zmc2V0DQo+ICsgKiBXSVRIT1VUIGFkdmFuY2luZyB0aGUgaGVhZCBwb2ludGVy LiBUaGlzIGFsbG93cyB0aGUgY2FsbGVyIHRvIHdyaXRlIGRhdGENCj4gKyAqIGJlZm9yZSBtYWtp bmcgaXQgdmlzaWJsZSB2aWEgYmxvZ19wYWdlZnJhZ19wdWJsaXNoKCkuDQo+ICsgKg0KPiArICog VGhpcyBpcyBsb2NrbGVzcyAtIG9ubHkgb25lIHdyaXRlciBwZXIgcGFnZWZyYWcgKHBlci10YXNr IGNvbnRleHQpLg0KPiArICoNCj4gKyAqIFJldHVybjogb2Zmc2V0IHRvIHJlc2VydmVkIG1lbW9y eSwgb3IgbmVnYXRpdmUgZXJyb3IgaWYgbm90IGVub3VnaCBzcGFjZQ0KPiArICovDQo+ICtpbnQg YmxvZ19wYWdlZnJhZ19yZXNlcnZlKHN0cnVjdCBibG9nX3BhZ2VmcmFnICpwZiwgdW5zaWduZWQg aW50IG4pDQo+ICt7DQo+ICsJaWYgKHBmLT5oZWFkICsgbiA+IHBmLT5jYXBhY2l0eSkNCj4gKwkJ cmV0dXJuIC1FTk9NRU07IC8qIE5vIHNwYWNlIGxlZnQgKi8NCj4gKwlyZXR1cm4gcGYtPmhlYWQ7 ICAvKiBSZXR1cm4gb2Zmc2V0IHdpdGhvdXQgYWR2YW5jaW5nICovDQo+ICt9DQo+ICtFWFBPUlRf U1lNQk9MKGJsb2dfcGFnZWZyYWdfcmVzZXJ2ZSk7DQo+ICsNCj4gKy8qKg0KPiArICogYmxvZ19w YWdlZnJhZ19wdWJsaXNoIC0gUHVibGlzaCByZXNlcnZlZCBzcGFjZSBieSBhZHZhbmNpbmcgaGVh ZCBwb2ludGVyDQo+ICsgKiBAcGY6IHBhZ2VmcmFnIGFsbG9jYXRvcg0KPiArICogQHB1Ymxpc2hf aGVhZDogbmV3IGhlYWQgdmFsdWUgKG9mZnNldCArIGJ5dGVzX3dyaXR0ZW4pDQo+ICsgKg0KPiAr ICogQXRvbWljYWxseSBhZHZhbmNlcyB0aGUgaGVhZCBwb2ludGVyIHRvIG1ha2UgcHJldmlvdXNs eSB3cml0dGVuIGRhdGEgdmlzaWJsZQ0KPiArICogdG8gcmVhZGVycy4gTXVzdCBiZSBjYWxsZWQg YWZ0ZXIgYmxvZ19wYWdlZnJhZ19yZXNlcnZlKCkgYW5kIHdyaXRpbmcgZGF0YS4NCj4gKyAqDQo+ ICsgKiBVc2VzIG1lbW9yeSBiYXJyaWVyIHRvIGVuc3VyZSBhbGwgd3JpdGVzIGFyZSB2aXNpYmxl IGJlZm9yZSBoZWFkIGlzIHVwZGF0ZWQuDQo+ICsgKiBUaGlzIHByZXZlbnRzIHJlYWRlcnMgZnJv bSBzZWVpbmcgcGFydGlhbGx5LXdyaXR0ZW4gZW50cmllcy4NCj4gKyAqDQo+ICsgKiBUaGlzIGlz IGxvY2tsZXNzIC0gb25seSBvbmUgd3JpdGVyIHBlciBwYWdlZnJhZyAocGVyLXRhc2sgY29udGV4 dCkuDQo+ICsgKi8NCj4gK3ZvaWQgYmxvZ19wYWdlZnJhZ19wdWJsaXNoKHN0cnVjdCBibG9nX3Bh Z2VmcmFnICpwZiwgdTY0IHB1Ymxpc2hfaGVhZCkNCj4gK3sNCj4gKwkvKiBFbnN1cmUgYWxsIHBy aW9yIHdyaXRlcyBhcmUgdmlzaWJsZSBiZWZvcmUgdXBkYXRpbmcgaGVhZCAqLw0KPiArCXNtcF93 bWIoKTsNCj4gKw0KPiArCS8qIEF0b21pY2FsbHkgdXBkYXRlIGhlYWQgdG8gbWFrZSBkYXRhIHZp c2libGUgdG8gcmVhZGVycyAqLw0KPiArCXBmLT5oZWFkID0gcHVibGlzaF9oZWFkOw0KPiArCXBm LT5hbGxvY19jb3VudCsrOw0KPiArCXBmLT5hY3RpdmVfZWxlbWVudHMrKzsNCj4gK30NCj4gK0VY UE9SVF9TWU1CT0woYmxvZ19wYWdlZnJhZ19wdWJsaXNoKTsNCj4gKw0KPiArLyoqDQo+ICsgKiBi bG9nX3BhZ2VmcmFnX2dldF9wdHIgLSBHZXQgYnVmZmVyIHBvaW50ZXIgZnJvbSBwYWdlZnJhZyBy ZXNlcnZlIHJlc3VsdA0KPiArICogQHBmOiBwYWdlZnJhZyBhbGxvY2F0b3INCj4gKyAqIEB2YWw6 IHJldHVybiB2YWx1ZSBmcm9tIGJsb2dfcGFnZWZyYWdfcmVzZXJ2ZQ0KPiArICoNCj4gKyAqIFJl dHVybjogcG9pbnRlciB0byByZXNlcnZlZCBidWZmZXIgcmVnaW9uDQo+ICsgKi8NCj4gK3ZvaWQg KmJsb2dfcGFnZWZyYWdfZ2V0X3B0cihzdHJ1Y3QgYmxvZ19wYWdlZnJhZyAqcGYsIHU2NCB2YWwp DQo+ICt7DQo+ICsJdm9pZCAqcmMgPSAodm9pZCAqKShwZi0+YnVmZmVyICsgdmFsKTsNCj4gKw0K PiArCWlmICh1bmxpa2VseShwZi0+cGFnZXMgJiYgcGYtPmJ1ZmZlciAhPSBwYWdlX2FkZHJlc3Mo cGYtPnBhZ2VzKSkpIHsNCj4gKwkJcHJfZXJyKCIlczogaW52YWxpZCBidWZmZXIgcG9pbnRlciAl bGx4IEAgJXNcbiIsIF9fZnVuY19fLA0KPiArCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylw Zi0+YnVmZmVyLCBjdXJyZW50LT5jb21tKTsNCj4gKwkJV0FSTl9PTl9PTkNFKDEpOw0KPiArCQly ZXR1cm4gTlVMTDsNCj4gKwl9DQo+ICsJaWYgKHVubGlrZWx5KChyYykgPCBwZi0+YnVmZmVyIHx8 IChyYykgPj0gKHBmLT5idWZmZXIgKyBwZi0+Y2FwYWNpdHkpKSkgew0KPiArCQlwcl9lcnIoIiVz OiBpbnZhbGlkIHBvaW50ZXIgJWxseFxuIiwgX19mdW5jX18sDQo+ICsJCSAgICAgICAodW5zaWdu ZWQgbG9uZyBsb25nKXJjKTsNCj4gKwkJV0FSTl9PTl9PTkNFKDEpOw0KPiArCQlyZXR1cm4gTlVM TDsNCj4gKwl9DQo+ICsJcmV0dXJuIHJjOw0KPiArfQ0KPiArRVhQT1JUX1NZTUJPTChibG9nX3Bh Z2VmcmFnX2dldF9wdHIpOw0KPiArDQo+ICsvKioNCj4gKyAqIGJsb2dfcGFnZWZyYWdfcmVzZXQg LSBSZXNldCB0aGUgcGFnZWZyYWcgYWxsb2NhdG9yLg0KPiArICoNCj4gKyAqIFJlc2V0cyB0aGUg aGVhZCBhbmQgdGFpbCBwb2ludGVycyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBidWZmZXIuDQo+ ICsgKi8NCj4gK3ZvaWQgYmxvZ19wYWdlZnJhZ19yZXNldChzdHJ1Y3QgYmxvZ19wYWdlZnJhZyAq cGYpDQo+ICt7DQo+ICsJc3Bpbl9sb2NrKCZwZi0+bG9jayk7DQo+ICsJcGYtPmhlYWQgPSAwOw0K PiArCXBmLT5hY3RpdmVfZWxlbWVudHMgPSAwOw0KPiArCXBmLT5hbGxvY19jb3VudCA9IDA7DQo+ ICsJcGYtPmxhc3RfZW50cnkgPSBOVUxMOw0KPiArCXNwaW5fdW5sb2NrKCZwZi0+bG9jayk7DQo+ ICt9DQo+ICtFWFBPUlRfU1lNQk9MKGJsb2dfcGFnZWZyYWdfcmVzZXQpOw0KPiArDQo=