From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0B81642CC0; Thu, 15 Jun 2023 07:21:47 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id CFBF540EE3; Thu, 15 Jun 2023 07:21:46 +0200 (CEST) Received: from mx0b-0016f401.pphosted.com (mx0b-0016f401.pphosted.com [67.231.156.173]) by mails.dpdk.org (Postfix) with ESMTP id C172340E0F for ; Thu, 15 Jun 2023 07:21:45 +0200 (CEST) Received: from pps.filterd (m0045851.ppops.net [127.0.0.1]) by mx0b-0016f401.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 35EJuvGC004340; Wed, 14 Jun 2023 22:21:45 -0700 Received: from nam12-dm6-obe.outbound.protection.outlook.com (mail-dm6nam12lp2175.outbound.protection.outlook.com [104.47.59.175]) by mx0b-0016f401.pphosted.com (PPS) with ESMTPS id 3r7ky1sgfw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 14 Jun 2023 22:21:44 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eDzIzwPq9CdKlO69lGpIFV8G0TeprGGQP8IGeT0RTraBvUVrt6zNhMXlPNg6JuNFwIPwtJBTN6CuAKf5HP4x5bSxMZIQg6JGNH7hx9oJWxh1S5T4JM+FXSO2JPkP2s6hD50ER+RTPPz1Qw43pYwzlTbpEc5ylR1EFIu/J7FKBrI67q7VwY952+CL23OxqyT/5AqwS23+HxAH4JBQSPZtGEI4fQFEIYLdOJ/hvdvbb9EQJJsALYKhAxTLLsHr9Mw+OZt6Fnb+vA/4/ARReDxN4/udGvIi0UTD/GwpX43EYDzXmcp5YDZ3osxT4nywNMeuH6HqMaJpd636UlWKX6wgsw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Z2rDtmaqJeZv5nFFEsDTBqSwPIfHFpuMr/NUiBMX620=; b=JV3vsSOqT3O1kZGrDlSepNib4WP+rcDG006xhWXZEV/6gR6TQqwNSCCy1al2GgWJAg+T9FQd8ivrHtlSgqbspyIG+Zm9KM2EdGpt2N1Qe2bV3hJohoA3+YOVBPGNGi02tnfcjwwGm3a/6RVtuFNoMI3f/qK2UEDhWB3RKUuag6EUYgaNm9LwxzpolRC1lw7EO3X94+gFJBeFjpT7VhhRJpwFs3PZwWnRHW8pHuRycqU0f0Sy3ZViOo+dIMcfMU7OxCus51KIbPdPNXsi+LAMyQzN4atwr61H4tZZ4MYEWGxER07EhAtpHsGKB62MgnXf/Riqt1P/HC46gx8anZuwvw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=marvell.com; dmarc=pass action=none header.from=marvell.com; dkim=pass header.d=marvell.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=marvell.onmicrosoft.com; s=selector1-marvell-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Z2rDtmaqJeZv5nFFEsDTBqSwPIfHFpuMr/NUiBMX620=; b=NbjvUR0KE+QL9OqDqOtXInX6dmTMyyWg1btsAT+3nG7ajs7m7xHF21M9gt4DzTmc5LW/4mhD6xUkCjxQaG7V2ohUs6lfvlrssGX31TrnxhQkHZES4gNU7k07HoIn9AUc3ZeHA6NbGqyBb8G/t9v5tM+yFQr53aK0Eq3ddrcQQCI= Received: from PH0PR18MB4672.namprd18.prod.outlook.com (2603:10b6:510:c9::16) by PH0PR18MB4922.namprd18.prod.outlook.com (2603:10b6:510:121::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6455.33; Thu, 15 Jun 2023 05:21:39 +0000 Received: from PH0PR18MB4672.namprd18.prod.outlook.com ([fe80::d578:1759:9d2c:9dfa]) by PH0PR18MB4672.namprd18.prod.outlook.com ([fe80::d578:1759:9d2c:9dfa%4]) with mapi id 15.20.6477.037; Thu, 15 Jun 2023 05:21:37 +0000 From: Anoob Joseph To: Cheng Jiang , "thomas@monjalon.net" , "bruce.richardson@intel.com" , "mb@smartsharesystems.com" , "chenbo.xia@intel.com" , Amit Prakash Shukla CC: "dev@dpdk.org" , "jiayu.hu@intel.com" , "xuan.ding@intel.com" , "wenwux.ma@intel.com" , "yuanx.wang@intel.com" , "xingguang.he@intel.com" Subject: RE: [EXT] [PATCH v6] app/dma-perf: introduce dma-perf application Thread-Topic: [EXT] [PATCH v6] app/dma-perf: introduce dma-perf application Thread-Index: AQHZnbUBqZgjiRauVUmHTZ2wKSjZda+Jzqzg Date: Thu, 15 Jun 2023 05:21:36 +0000 Message-ID: References: <20230420072215.19069-1-cheng1.jiang@intel.com> <20230613043140.18101-1-cheng1.jiang@intel.com> In-Reply-To: <20230613043140.18101-1-cheng1.jiang@intel.com> Accept-Language: en-IN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-dg-rorf: true x-dg-ref: =?utf-8?B?UEcxbGRHRStQR0YwSUc1dFBTSmliMlI1TG5SNGRDSWdjRDBpWXpwY2RYTmxj?= =?utf-8?B?bk5jWVc1dmIySnFYR0Z3Y0dSaGRHRmNjbTloYldsdVoxd3dPV1E0TkRsaU5p?= =?utf-8?B?MHpNbVF6TFRSaE5EQXRPRFZsWlMwMllqZzBZbUV5T1dVek5XSmNiWE5uYzF4?= =?utf-8?B?dGMyY3ROMk14TkRRM1lUY3RNR0l6WXkweE1XVmxMVGxqTlRRdE5HTXdNelJt?= =?utf-8?B?TldZNVlqUm1YR0Z0WlMxMFpYTjBYRGRqTVRRME4yRTRMVEJpTTJNdE1URmxa?= =?utf-8?B?UzA1WXpVMExUUmpNRE0wWmpWbU9XSTBabUp2WkhrdWRIaDBJaUJ6ZWowaU5E?= =?utf-8?B?QXlNREVpSUhROUlqRXpNek14TWpnd01Ea3lNakEwTVRFMU5pSWdhRDBpTDBa?= =?utf-8?B?cWRtWldOM2hTTWpJeGRteHlRMlZFY21nMVUwMUVaM1paUFNJZ2FXUTlJaUln?= =?utf-8?B?WW13OUlqQWlJR0p2UFNJeElpQmphVDBpWTBGQlFVRkZVa2hWTVZKVFVsVkdU?= =?utf-8?B?a05uVlVGQlRqUlFRVUZDUldVdlp5dFRXaTlhUVZOVWNVVXdZbHBQYkdaMlNr?= =?utf-8?B?OXZWRkowYXpaV0t6aGFRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVaEJRVUZCUW5WRWQwRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVWQlFWRkZRa0ZCUVVGSk4zRlVjRUZEUVVGUlFVRkJRVUZCUVVGQlFVRktO?= =?utf-8?B?RUZCUVVKb1FVZFJRVnBCUW5sQlIxVkJZM2RDZWtGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUlVGQlFVRkJRVUZCUVVG?= =?utf-8?B?blFVRkJRVUZCYm1kQlFVRkhUVUZrVVVKNlFVaFJRV0ozUW5SQlJqaEJZMEZD?= =?utf-8?B?YkVGSVNVRmpkMEoyUVVjMFFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFWRkJR?= =?utf-8?B?VUZCUVVGQlFVRkRRVUZCUVVGQlEyVkJRVUZCV1hkQ01VRklUVUZrUVVKMlFV?= =?utf-8?B?Y3dRVmgzUW5kQlIyZEJZbmRDZFVGSFZVRmlaMEl4UVVjd1FWbG5RbXhCU0Vs?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUjBGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUpCUVVGQlFVRkJRVUZCU1VGQlFVRkJRVW8wUVVGQlFtcEJTRlZC?= =?utf-8?B?WTNkQ01FRkhPRUZpVVVKbVFVaE5RV04zUW5WQlJqaEJXa0ZDYUVGSVRVRmhR?= =?utf-8?B?VUptUVVoWlFVMUJRWGxCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?Q?FBQUFB?= x-dg-refone: =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGRlFVRkJRVUZCUVVGQlFXZEJRVUZCUVVGdVowRkJRVWRO?= =?utf-8?B?UVdSUlFucEJTRkZCWW5kQ2RFRkdPRUZqZDBKNlFVYzBRVmgzUW5KQlIxVkJa?= =?utf-8?B?VkZDTTBGSE9FRmpaMEpyUVVoTlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJVVUZCUVVGQlFVRkJRVU5CUVVGQlFV?= =?utf-8?B?RkRaVUZCUVVGWmQwSXhRVWhOUVdSQlFuWkJSekJCV0hkQ2VrRklUVUZpWjBK?= =?utf-8?B?bVFVYzBRV0ozUW10QlIxVkJZa0ZDY0VGSE1FRmhVVUl3UVVkVlFXTm5RbVpC?= =?utf-8?B?U0ZsQlRVRkJlVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUWtGQlFVRkJRVUZC?= =?utf-8?B?UVVGSlFVRkJRVUZCU2pSQlFVRkNha0ZJVlVGamQwSXdRVWM0UVdKUlFtWkJT?= =?utf-8?B?RTFCWTNkQ2RVRkdPRUZqZDBKM1FVZEZRVmwzUW14QlJqaEJaR2RCZDBGRVNV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?VkJRVUZCUVVGQlFVRkJaMEZCUVVGQlFXNW5RVUZCUjFGQllrRkNkMEZHT0VG?= =?utf-8?B?amQwSnlRVWhyUVdOQlFteEJSamhCV1hkQ2IwRkhSVUZrUVVKbVFVY3dRVnBS?= =?utf-8?B?UW5wQlNFMUJXVkZDYmtGSFZVRllkMEl5UVVSQlFVMW5RVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZSUVVGQlFVRkJRVUZCUTBGQlFVRkJRVU5sUVVGQlFWcEJR?= =?utf-8?B?bk5CU0VGQldIZENla0ZIZDBGWlVVSnFRVWR6UVZoM1FtcEJSMmRCV1ZGQ01F?= =?utf-8?B?RkdPRUZpVVVKc1FVaE5RV04zUW1oQlIyTkJXbEZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?Q?FBQUFB?= x-dg-reftwo: =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQ1FVRkJRVUZCUVVGQlFVbEJRVUZCUVVGS05FRkJR?= =?utf-8?B?VUpyUVVkM1FXTkJRbVpCU0ZGQldsRkNhRUZITUVGamQwSm1RVWM0UVdKblFt?= =?utf-8?B?eEJSMUZCWTJkQ2NFRklXVUZhVVVKbVFVZFpRV0ZSUW5OQlIxVkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJSVUZCUVVGQlFVRkJRVUZuUVVG?= =?utf-8?B?QlFVRkJibWRCUVVGSFZVRmlVVUpvUVVkclFXSkJRbVpCUjBWQldrRkNhMEZJ?= =?utf-8?B?U1VGYVVVSjZRVWhOUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGRmQwRkJRVUZCUVVGQlFVRkJRVUZCUVZGQlFVRkJR?= =?utf-8?B?VUZCUVVGRFFVRkJRVUZCUTJWQlFVRkJZbEZDYUVGSVNVRmtaMEpzUVVkM1FW?= =?utf-8?B?aDNRbmRCU0VsQlluZENjVUZIVlVGWmQwSXdRVVk0UVdKblFtaEJSekJCV2xG?= =?utf-8?B?Q2VrRkdPRUZaZDBKMlFVYzBRVnBuUW5CQlIxRkJXbEZDZFVGSVVVRmhVVUpv?= =?utf-8?B?UVVkM1FWaDNRbWhCUjNkQlluZENkVUZIVlVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVSkJRVUZCUVVGQlFVRkJTVUZCUVVGQlFVbzBRVUZCUW5SQlIwVkJZMmRD?= =?utf-8?B?TWtGSFZVRmlRVUptUVVoQlFXTm5RblpCUjI5QldsRkNha0ZJVVVGWWQwSjFR?= =?utf-8?B?VWRGUVdKUlFteEJTRTFCV0hkQ2VVRkhWVUZqZDBJd1FVaEpRV0ZSUW1wQlNG?= =?utf-8?B?RkJXbEZDYTBGR09FRlpVVUp6UVVjNFFXSm5RbXhCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZGUVVGQlFVRkJRVUZCUVdkQlFVRkJRVUZ1WjBGQlFV?= =?utf-8?B?Y3dRVmxSUW5sQlNGbEJXbEZDYzBGR09FRmpRVUo1UVVjNFFXRm5RbXhCUjAx?= =?utf-8?B?QlpFRkNaa0ZITkVGWlVVSjBRVWRWUVdOM1FtWkJTRWxCV2xGQ2VrRklVVUZq?= =?utf-8?B?WjBKd1FVZE5RV1JCUW14QlIxRkJXSGRDYjBGSFZVRmxRVUpxUVVjNFFWcEJR?= =?utf-8?B?bXhCU0UxQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlVVRkJRVUZCUVVGQlFVTkJRVUZC?= =?utf-8?B?UVVGRFpVRkJRVUZpVVVKb1FVaEpRV1JuUW14QlIzZEJZa0ZDWmtGSFJVRmpa?= =?utf-8?B?MEowUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?Q?FBQUFB?= x-dg-refthree: =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRa0ZCUVVGQlFVRkJRVUZK?= =?utf-8?B?UVVGQlFVRkJTalJCUVVGQ2RFRkhSVUZqWjBJeVFVZFZRV0pCUW5OQlJqaEJX?= =?utf-8?B?bmRDZGtGSE9FRmFkMEp6UVVkVlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVWQlFV?= =?utf-8?B?RkJRVUZCUVVGQlowRkJRVUZCUVc1blFVRkJSekJCV1ZGQ2VVRklXVUZhVVVK?= =?utf-8?B?elFVZDNRVmgzUW5kQlNFbEJZbmRDY1VGSFZVRlpkMEl3UVVZNFFWbDNRblpC?= =?utf-8?B?UjFGQldsRkNla0ZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRlJRVUZCUVVGQlFVRkJRMEZCUVVGQlFVTmxRVUZCUVdKUlFtaEJT?= =?utf-8?B?RWxCWkdkQ2JFRkhkMEZpUVVKbVFVaEJRV05uUW5aQlIyOUJXbEZDYWtGSVVV?= =?utf-8?B?RllkMEpxUVVjNFFWcEJRbXhCU0UxQldIZENhMEZIYTBGWmQwSXdRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZDUVVGQlFVRkJRVUZCUVVsQlFVRkJRVUZLTkVG?= =?utf-8?B?QlFVSjBRVWRGUVdOblFqSkJSMVZCWWtGQ2MwRkdPRUZqUVVKNVFVYzRRV0Zu?= =?utf-8?B?UW14QlIwMUJaRUZDWmtGSE5FRlpVVUowUVVkVlFXTjNRbVpCUjAxQlluZENk?= =?utf-8?B?VUZIV1VGaFVVSnJRVWRWUVdKblFqQkJSMnRCV1ZGQ2MwRkdPRUZpVVVKb1FV?= =?utf-8?B?aEpRV1JuUW14QlIzZEJZa0ZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlJVRkJRVUZCUVVGQlFVRm5R?= =?utf-8?B?VUZCUVVGQmJtZEJRVUZITUVGWlVVSjVRVWhaUVZwUlFuTkJSM2RCV0hkQ2Qw?= =?utf-8?B?RklTVUZpZDBKeFFVZFZRVmwzUWpCQlJqaEJZbWRDYUVGSE1FRmFVVUo2UVVZ?= =?utf-8?B?NFFWbDNRblpCUnpSQldtZENjRUZIVVVGYVVVSjFRVWhSUVdGUlFtaEJSM2RC?= =?utf-8?B?V0hkQ2RFRkhSVUZqWjBJeVFVZFZRV0pCUW5OQlJqaEJZbmRDZVVGR09FRlpV?= =?utf-8?B?VUo1UVVjd1FVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?Q?FBQUFB?= x-dg-reffour: =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVkZCUVVGQlFVRkJR?= =?utf-8?B?VUZEUVVGQlFVRkJRMlZCUVVGQllsRkNhRUZJU1VGa1owSnNRVWQzUVdKQlFt?= =?utf-8?B?WkJTRUZCWTJkQ2RrRkhiMEZhVVVKcVFVaFJRVmgzUW5WQlIwVkJZbEZDYkVG?= =?utf-8?B?SVRVRllkMEpxUVVjNFFXSm5RbTFCUjJ0QldrRkNiRUZITkVGa1FVSndRVWRG?= =?utf-8?B?UVdKQlFtWkJSekJCV1ZGQ2VVRklXVUZhVVVKelFVZDNRVmgzUW5aQlNFbEJX?= =?utf-8?B?SGRDYmtGSE9FRmlkMEp1UVVkM1FWcFJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVK?= =?utf-8?B?QlFVRkJRVUZCUVVGQlNVRkJRVUZCUVVvMFFVRkJRblJCUjBWQlkyZENNa0ZI?= =?utf-8?B?VlVGaVFVSnpRVVk0UVdOQlFubEJSemhCWVdkQ2JFRkhUVUZrUVVKbVFVYzBR?= =?utf-8?B?VmxSUW5SQlIxVkJZM2RDWmtGSVNVRmFVVUo2UVVoUlFXTm5RbkJCUjAxQlpF?= =?utf-8?B?RkNiRUZIVVVGWWQwSjBRVWRGUVdOblFqSkJSMVZCWWtGQ2MwRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkZRVUZCUVVGQlFVRkJRV2RCUVVGQlFVRnVaMEZCUVVjd1FW?= =?utf-8?B?bFJRbmxCU0ZsQldsRkNjMEZIZDBGWWQwSjNRVWhKUVdKM1FuRkJSMVZCV1hk?= =?utf-8?B?Q01FRkdPRUZpWjBKb1FVY3dRVnBSUW5wQlJqaEJZMmRDYkVGSVRVRmtRVUo1?= =?utf-8?B?UVVkclFWbDNRakJCUjFWQldrRkNaa0ZITUVGWlVVSjVRVWhaUVZwUlFuTkJS?= =?utf-8?B?M2RCV0hkQ2RrRklTVUZZZDBKb1FVaEpRV0pSUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCVVVGQlFVRkJRVUZCUVVOQlFVRkJRVUZE?= =?utf-8?B?WlVGQlFVRmlVVUpvUVVoSlFXUm5RbXhCUjNkQllrRkNaa0ZJVVVGYVVVSjVR?= =?utf-8?B?VWN3UVdGUlFuVkJTRlZCWTNkQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFrRkJRVUZCUVVGQlFV?= =?utf-8?B?RkpRVUZCUVVGQlNqUkJRVUZDZEVGSFJVRmpaMEl5UVVkVlFXSkJRbk5CUmpo?= =?utf-8?B?QlpIZENka0ZJU1VGYVFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZC?= =?utf-8?B?UVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJR?= =?utf-8?B?VUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFV?= =?utf-8?B?RkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVG?= =?utf-8?B?QlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVUZCUVVGQlFVRkJRVVZC?= =?utf-8?Q?QUFBQUFBQUFBZ0FBQUFBQSIvPjwvbWV0YT4=3D?= x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR18MB4672:EE_|PH0PR18MB4922:EE_ x-ms-office365-filtering-correlation-id: 28c44a84-870b-4718-7bb0-08db6d606451 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: l/pAO/PzdpRCA5CUJUiM84zrJs9B09W4kyFHrEzYGjbRi4iyFRnWoVKGowSpajHmddcZ4T2RpzFxZn5dVlx8PNFKWx+slWiUT7+0DyMstocrSAlvb7ISyymxGj/z95qAc6uDPoSHwJZnwefhYB/Mo+QfTEF6oEKmzFwLOxYa5bAMlamZoVryU6B91vG6clDpnJ7sMe3v1dwLoMhB9oc+vYgyHzEuQlZevdCEXhnJWpCD2NGOma/8XZmhBnMgQCnZ4chv+T0bOIavY3Pz3jtYK4TupQwHvAfJEWsMSiWQLdCXkkqZm05RnYtkAvNRnsSL0MQR3s32MaPiAcdGpek/+WpHDmUK7QRyU31J7wFklI/RG0WM5My1vU2p5xZisQkFmWH+k1tZPGczi9XJ2JzagMH+t5hrZKo7aTT6XgZtyJV331EzRGc3ZUcCPwvlSFq/KDIa6tTamOP8mcLEqlbDO5Dm3zD+NUTCku0QPGQ4QEXpImO9SRds2lmt+GzKu19wgs/RE6C+03U7LjWSUj8pNhBep6fTcuTTg/dRY45eX9P8VIQ77A6m0VXOCkBBJQLb0OdAdWGfdNxKAZJEuS8UXIhoiZm3LbwQMOIrNssJCmFshWMkDAQBqEoBcHDjDGlw x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:PH0PR18MB4672.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230028)(4636009)(396003)(346002)(376002)(39860400002)(366004)(136003)(451199021)(7416002)(55016003)(76116006)(66556008)(66446008)(8936002)(8676002)(4326008)(64756008)(66946007)(6636002)(66476007)(316002)(5660300002)(41300700001)(54906003)(52536014)(110136005)(2906002)(122000001)(478600001)(30864003)(38100700002)(53546011)(6506007)(9686003)(186003)(86362001)(26005)(71200400001)(83380400001)(66574015)(7696005)(33656002)(38070700005)(579004)(559001); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RlNEQUZuTWxKTnpPQXphUGw1cnVRWDdHZVdiR1h0eTd3NXY4TjI0K2s5TWZH?= =?utf-8?B?Nkx2cVMyL3lmSldSOER3d2UxaFY0SmIwS2tqSjFvcEVjTEZ2QkJISFZOdmZJ?= =?utf-8?B?L0hKT0N1SzJ3WHcvRThIeFdra29XMzFudHh2bjJWZGNwZ2FkbkYvbDhISWtC?= =?utf-8?B?cXdTUTlJVlVlKzVNdEFhWVlXLy9wKzJFUzRmOFg5alBjWWN6OVdpMGlqdTFl?= =?utf-8?B?VW5VMXdPSGpmZVZWZC8reUIzdzUrM3pBTkcwNGhFbFloclpDNEhubGU0Vk1i?= =?utf-8?B?amJBdENMcXFWaHF0d3FCSEt2eXdzWUo0a0JOYnAxaXhqcmhaZnBqRm53aE5m?= =?utf-8?B?K0k4aVVOZ2xJRnhNZFovMWJ1SjhKMThBQUhWaDJOSmMyU05LL1hUdXNRZjJ4?= =?utf-8?B?ZzB6eTNicWpiM01mQlAxN3ZCK29MMnZPSTFYRTNHYXN2clpTbVRIMEpLcHdl?= =?utf-8?B?cHV2cmJ2NjNHZXZPSVFiWk1OKzh2ZFlxcndmOFlPTkFQUitRZVZDTWs3Ui91?= =?utf-8?B?cVZPM1FoZEF1aldRTEVNazltQkV2eTVRakNmelloZ1UvUVNPeDM5VUN2NXBu?= =?utf-8?B?TzZSdksxbHh5dUVWKzZ1dDdJSXdsTXU1bFdyaDllMmdpWnBMNDlqbTZKcjB2?= =?utf-8?B?bTBoSjBZT0NyNmdxVHNiakRFQ1ZiUWoyUFNoVUJwVXVFRG1yUDRuQ3dYTkps?= =?utf-8?B?U2QwYWVKOTJ3bDgveTJxZWFWcmw0eHIralJWVDIvUnd3VTdxSytHL0NIc3ph?= =?utf-8?B?aG5qVCtIMUJFdWNBcDFKSGhGT0VmU0pyQUFrQ3lIK2hPRWVaQTVqdmljYWs0?= =?utf-8?B?WjdhaExCcE9MNjQ2NWpiUVFBNG4rMVNIZDRLK3I2eFhYeUVJWS82dlFJbGkw?= =?utf-8?B?RnpLUTdWbWdLYTA2MjE1OW1EZzhXdStuaEx4dmFrV1pldEwzRmEvNDl1cjRo?= =?utf-8?B?em9LMjUvM2RmUjZZY2pwV3FGNFdGenlPeHNLUWpnSUlGb2FsVm9rLzNESDFz?= =?utf-8?B?WkpUMDM1OUFvK1ljQndrUm5nQi9IeHZsMjJ1R0kybEtsVlB4NzJsTHVzUnZG?= =?utf-8?B?N2N1UHJqQVMxb0RXRTRPMG9NdUdEUVMyNlcwb1oyMW1icng4T21OQ2NGY1F6?= =?utf-8?B?WlpZSlprTURGZmZmNXErRXAyYmY5SHdzQTNjVDVacVh3MS9tcXpOc1hkTjRH?= =?utf-8?B?QnlKS3VoWFU5VE5MNXo3M3dUdTFrU3NUM0xVRmRiK1hKd3Mwc0U5YS9OT2lL?= =?utf-8?B?N3NRTGJOcFNIeWpkTEdIZDUyS29TTkhDQ3J6Nk5HeVdNSFVvRG96ZTQ1cERy?= =?utf-8?B?OElhVWM4UmMzQjJQOWFJVlVrVWRabTNleVpkM0d0UjY4S0hGY0swNEgrbGNN?= =?utf-8?B?YlZWZjd0WVFjaVVDWjROUEwxOUljaXJHWGI4SlMzMHlZcWxKdXE1bnVKc1dy?= =?utf-8?B?TnRXS0hCRElHRkV6RFRBckUvVFNZbDV2OUxDRm5rUElpMVFkSWU4WDczNDVQ?= =?utf-8?B?dTF1RjEweEUzQkZUeHpMUnpTNDlyVUdvZFlIZWtpYU9helhPRy9BZUtiR29G?= =?utf-8?B?Nm1XajhKTlAvR1VQNmRqQllzOGx5cGQvODlxck5zb0FoYTlUdmlWTjBLcG9w?= =?utf-8?B?Q1JnOENhZ2dMQkFxbUltbTZWbk5aSzBGSG1zcisxOThlNm9oMnExVE5GYzNL?= =?utf-8?B?clNQUmdZdjVCWHEvQWJaTXNTeWx1V1pOL0swakV5cSs3Sm15NU83TVlCbDUw?= =?utf-8?B?ai9ScllrU0sveXkzbFp5Y3JKMWY4VmIxOVVQYU9uOG9Na1N3MUlncm9mVXlB?= =?utf-8?B?QXRpMndyRmN2U0grRndCb0NmOEhaTS9XeTUya1JIbWhXV2hNVjNRdjROU3Jy?= =?utf-8?B?VkdoRHlkK1JBeDh2TFpJdDluZ2VabS8zaWQ3UEtXZzZiNmZLbGNEcUZPRWRk?= =?utf-8?B?RGRHK3cvaDcwTXJFdTBaUmpqMTBFb2lkRVFqdzd1bVlTQVo5ZGNCVDAzMkxV?= =?utf-8?B?dGlrYyt5VnR5bXZCYWxRUlNJSmxYVnVlOThoWEg3ZHgramNDNGdNNHVHdmtO?= =?utf-8?B?ZXN6THMzMWR5c2JZYmFWK1JmWmpzVURnbUo2MVNyeWRLQStta1VJWjlmTWp0?= =?utf-8?Q?Ayj0=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: marvell.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR18MB4672.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 28c44a84-870b-4718-7bb0-08db6d606451 X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Jun 2023 05:21:37.0115 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 70e1fb47-1155-421d-87fc-2e58f638b6e0 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: zCByOYX6wsBrcECwTMHooyaxmwhknxLjJVTx3rMW7wksPh3yUA+Z9VO+7N72nNBRfhvaCnWDzf5ZxeMnsDA7gA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR18MB4922 X-Proofpoint-GUID: CprTbSqAwbt3YLu5usOJ33YQQK24fE1E X-Proofpoint-ORIG-GUID: CprTbSqAwbt3YLu5usOJ33YQQK24fE1E X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.254,Aquarius:18.0.957,Hydra:6.0.573,FMLib:17.11.176.26 definitions=2023-06-15_02,2023-06-14_02,2023-05-22_02 X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org SGksDQoNClRoYW5rcyBmb3Igd29ya2luZyBvbiB0aGUgY29tbWVudHMuIEZldyBtb3JlIHRvcCBs ZXZlbCBjb21tZW50IGlubGluZS4NCg0KVGhhbmtzLA0KQW5vb2INCg0KPiAtLS0tLU9yaWdpbmFs IE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBDaGVuZyBKaWFuZyA8Y2hlbmcxLmppYW5nQGludGVsLmNv bT4NCj4gU2VudDogVHVlc2RheSwgSnVuZSAxMywgMjAyMyAxMDowMiBBTQ0KPiBUbzogdGhvbWFz QG1vbmphbG9uLm5ldDsgYnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb207DQo+IG1iQHNtYXJ0c2hh cmVzeXN0ZW1zLmNvbTsgY2hlbmJvLnhpYUBpbnRlbC5jb207IEFtaXQgUHJha2FzaCBTaHVrbGEN Cj4gPGFtaXRwcmFrYXNoc0BtYXJ2ZWxsLmNvbT47IEFub29iIEpvc2VwaCA8YW5vb2JqQG1hcnZl bGwuY29tPg0KPiBDYzogZGV2QGRwZGsub3JnOyBqaWF5dS5odUBpbnRlbC5jb207IHh1YW4uZGlu Z0BpbnRlbC5jb207DQo+IHdlbnd1eC5tYUBpbnRlbC5jb207IHl1YW54LndhbmdAaW50ZWwuY29t OyB4aW5nZ3VhbmcuaGVAaW50ZWwuY29tOw0KPiBDaGVuZyBKaWFuZyA8Y2hlbmcxLmppYW5nQGlu dGVsLmNvbT4NCj4gU3ViamVjdDogW0VYVF0gW1BBVENIIHY2XSBhcHAvZG1hLXBlcmY6IGludHJv ZHVjZSBkbWEtcGVyZiBhcHBsaWNhdGlvbg0KPiANCj4gRXh0ZXJuYWwgRW1haWwNCj4gDQo+IC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCj4gVGhlcmUgYXJlIG1hbnkgaGlnaC1wZXJmb3JtYW5jZSBETUEgZGV2aWNl cyBzdXBwb3J0ZWQgaW4gRFBESyBub3csDQo+IGFuZCB0aGVzZSBETUEgZGV2aWNlcyBjYW4gYWxz byBiZSBpbnRlZ3JhdGVkIGludG8gb3RoZXIgbW9kdWxlcyBvZiBEUERLIGFzDQo+IGFjY2VsZXJh dG9ycywgc3VjaCBhcyBWaG9zdC4gQmVmb3JlIGludGVncmF0aW5nIERNQSBpbnRvIGFwcGxpY2F0 aW9ucywNCj4gZGV2ZWxvcGVycyBuZWVkIHRvIGtub3cgdGhlIHBlcmZvcm1hbmNlIG9mIHRoZXNl IERNQSBkZXZpY2VzIGluIHZhcmlvdXMNCj4gc2NlbmFyaW9zIGFuZCB0aGUgcGVyZm9ybWFuY2Ug b2YgQ1BVcyBpbiB0aGUgc2FtZSBzY2VuYXJpbywgc3VjaCBhcw0KPiBkaWZmZXJlbnQgYnVmZmVy IGxlbmd0aHMuIE9ubHkgaW4gdGhpcyB3YXkgY2FuIHdlIGtub3cgdGhlIHRhcmdldA0KPiBwZXJm b3JtYW5jZSBvZiB0aGUgYXBwbGljYXRpb24gYWNjZWxlcmF0ZWQgYnkgdXNpbmcgdGhlbS4gVGhp cyBwYXRjaA0KPiBpbnRyb2R1Y2VzIGEgaGlnaC1wZXJmb3JtYW5jZSB0ZXN0aW5nIHRvb2wsIHdo aWNoIHN1cHBvcnRzIGNvbXBhcmluZyB0aGUNCj4gcGVyZm9ybWFuY2Ugb2YgQ1BVIGFuZCBETUEg aW4gZGlmZmVyZW50IHNjZW5hcmlvcyBhdXRvbWF0aWNhbGx5IHdpdGggYSBwcmUtDQo+IHNldCBj b25maWcgZmlsZS4gTWVtb3J5IENvcHkgcGVyZm9ybWFuY2UgdGVzdCBhcmUgc3VwcG9ydGVkIGZv ciBub3cuDQo+IA0KPiBTaWduZWQtb2ZmLWJ5OiBDaGVuZyBKaWFuZyA8Y2hlbmcxLmppYW5nQGlu dGVsLmNvbT4NCj4gU2lnbmVkLW9mZi1ieTogSmlheXUgSHUgPGppYXl1Lmh1QGludGVsLmNvbT4N Cj4gU2lnbmVkLW9mZi1ieTogWXVhbiBXYW5nIDx5dWFueC53YW5nQGludGVsLmNvbT4NCj4gQWNr ZWQtYnk6IE1vcnRlbiBCcsO4cnVwIDxtYkBzbWFydHNoYXJlc3lzdGVtcy5jb20+DQo+IEFja2Vk LWJ5OiBDaGVuYm8gWGlhIDxjaGVuYm8ueGlhQGludGVsLmNvbT4NCj4gLS0tDQo+IHY2Og0KPiAg IGltcHJvdmVkIGNvZGUgYmFzZWQgb24gQW5vb2IncyBjb21tZW50czsNCj4gICBmaXhlZCBzb21l IGNvZGUgc3RydWN0dXJlIGlzc3VlczsNCj4gdjU6DQo+ICAgZml4ZWQgc29tZSBMT05HX0xJTkUg d2FybmluZ3M7DQo+IHY0Og0KPiAgIGZpeGVkIGluYWNjdXJhY3kgb2YgdGhlIG1lbW9yeSBmb290 cHJpbnQgZGlzcGxheTsNCj4gdjM6DQo+ICAgZml4ZWQgc29tZSB0eXBvczsNCj4gdjI6DQo+ICAg YWRkZWQgbGNvcmUvZG1hZGV2IGRlc2lnbmF0aW9uOw0KPiAgIGFkZGVkIGVycm9yIGNhc2UgcHJv Y2VzczsNCj4gICByZW1vdmVkIHdvcmtlcl90aHJlYWRzIHBhcmFtZXRlciBmcm9tIGNvbmZpZy5p bmk7DQo+ICAgaW1wcm92ZWQgdGhlIGxvZ3M7DQo+ICAgaW1wcm92ZWQgY29uZmlnIGZpbGU7DQo+ IA0KPiAgYXBwL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgfCAgIDEgKw0KPiAgYXBwL3Rlc3Qt ZG1hLXBlcmYvYmVuY2htYXJrLmMgfCA0NzcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0K PiBhcHAvdGVzdC1kbWEtcGVyZi9jb25maWcuaW5pICB8ICA1OSArKysrDQo+ICBhcHAvdGVzdC1k bWEtcGVyZi9tYWluLmMgICAgICB8IDU2OQ0KPiArKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrDQo+ICBhcHAvdGVzdC1kbWEtcGVyZi9tYWluLmggICAgICB8ICA2OSArKysrKw0KPiAg YXBwL3Rlc3QtZG1hLXBlcmYvbWVzb24uYnVpbGQgfCAgMTcgKw0KPiAgNiBmaWxlcyBjaGFuZ2Vk LCAxMTkyIGluc2VydGlvbnMoKykNCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcHAvdGVzdC1kbWEt cGVyZi9iZW5jaG1hcmsuYyAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+IGFwcC90ZXN0LWRtYS1wZXJm L2NvbmZpZy5pbmkgIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcHAvdGVzdC1kbWEtDQo+IHBlcmYvbWFp bi5jICBjcmVhdGUgbW9kZSAxMDA2NDQgYXBwL3Rlc3QtZG1hLXBlcmYvbWFpbi5oICBjcmVhdGUg bW9kZQ0KPiAxMDA2NDQgYXBwL3Rlc3QtZG1hLXBlcmYvbWVzb24uYnVpbGQNCj4gDQo+IGRpZmYg LS1naXQgYS9hcHAvbWVzb24uYnVpbGQgYi9hcHAvbWVzb24uYnVpbGQgaW5kZXgNCj4gNzRkMjQy MGY2Ny4uNGZjMWE4M2ViYSAxMDA2NDQNCj4gLS0tIGEvYXBwL21lc29uLmJ1aWxkDQo+ICsrKyBi L2FwcC9tZXNvbi5idWlsZA0KPiBAQCAtMTksNiArMTksNyBAQCBhcHBzID0gWw0KPiAgICAgICAg ICAndGVzdC1jbWRsaW5lJywNCj4gICAgICAgICAgJ3Rlc3QtY29tcHJlc3MtcGVyZicsDQo+ICAg ICAgICAgICd0ZXN0LWNyeXB0by1wZXJmJywNCj4gKyAgICAgICAgJ3Rlc3QtZG1hLXBlcmYnLA0K PiAgICAgICAgICAndGVzdC1ldmVudGRldicsDQo+ICAgICAgICAgICd0ZXN0LWZpYicsDQo+ICAg ICAgICAgICd0ZXN0LWZsb3ctcGVyZicsDQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1kbWEtcGVy Zi9iZW5jaG1hcmsuYyBiL2FwcC90ZXN0LWRtYS0NCj4gcGVyZi9iZW5jaG1hcmsuYyBuZXcgZmls ZSBtb2RlIDEwMDY0NCBpbmRleCAwMDAwMDAwMDAwLi5iYzFjYTgyMjk3DQo+IC0tLSAvZGV2L251 bGwNCj4gKysrIGIvYXBwL3Rlc3QtZG1hLXBlcmYvYmVuY2htYXJrLmMNCj4gQEAgLTAsMCArMSw0 NzcgQEANCj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UNCj4gKyAq IENvcHlyaWdodChjKSAyMDIzIEludGVsIENvcnBvcmF0aW9uDQo+ICsgKi8NCj4gKw0KPiArI2lu Y2x1ZGUgPGludHR5cGVzLmg+DQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4gKyNpbmNsdWRlIDxz dGRsaWIuaD4NCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4NCj4gKw0KPiArI2luY2x1ZGUgPHJ0ZV90 aW1lLmg+DQo+ICsjaW5jbHVkZSA8cnRlX21idWYuaD4NCj4gKyNpbmNsdWRlIDxydGVfZG1hZGV2 Lmg+DQo+ICsjaW5jbHVkZSA8cnRlX21hbGxvYy5oPg0KPiArI2luY2x1ZGUgPHJ0ZV9sY29yZS5o Pg0KPiArDQo+ICsjaW5jbHVkZSAibWFpbi5oIg0KPiArDQo+ICsjZGVmaW5lIE1BWF9ETUFfQ1BM X05CIDI1NQ0KPiArDQo+ICsjZGVmaW5lIFRFU1RfV0FJVF9VX1NFQ09ORCAxMDAwMA0KPiArDQo+ ICsjZGVmaW5lIENTVl9MSU5FX0RNQV9GTVQgIlNjZW5hcmlvICV1LCV1LCVzLCV1LCV1LCUuMmxm LCUiIFBSSXU2NA0KPiAiLCUuM2xmLCUuM2xmXG4iDQo+ICsjZGVmaW5lIENTVl9MSU5FX0NQVV9G TVQgIlNjZW5hcmlvICV1LCV1LE5BLCV1LCV1LCUuMmxmLCUiIFBSSXU2NA0KPiAiLCUuM2xmLCUu M2xmXG4iDQo+ICsNCj4gK3N0cnVjdCB3b3JrZXJfaW5mbyB7DQo+ICsJYm9vbCByZWFkeV9mbGFn Ow0KPiArCWJvb2wgc3RhcnRfZmxhZzsNCj4gKwlib29sIHN0b3BfZmxhZzsNCj4gKwl1aW50MzJf dCB0b3RhbF9jcGw7DQo+ICsJdWludDMyX3QgdGVzdF9jcGw7DQo+ICt9Ow0KPiArDQo+ICtzdHJ1 Y3QgbGNvcmVfcGFyYW1zIHsNCj4gKwl1aW50OF90IHNjZW5hcmlvX2lkOw0KPiArCXVuc2lnbmVk IGludCBsY29yZV9pZDsNCj4gKwljaGFyICpkbWFfbmFtZTsNCj4gKwl1aW50MTZfdCB3b3JrZXJf aWQ7DQo+ICsJdWludDE2X3QgZGV2X2lkOw0KPiArCXVpbnQzMl90IG5yX2J1ZjsNCj4gKwl1aW50 MTZfdCBraWNrX2JhdGNoOw0KPiArCXVpbnQzMl90IGJ1Zl9zaXplOw0KPiArCXVpbnQxNl90IHRl c3Rfc2VjczsNCj4gKwlzdHJ1Y3QgcnRlX21idWYgKipzcmNzOw0KPiArCXN0cnVjdCBydGVfbWJ1 ZiAqKmRzdHM7DQo+ICsJc3RydWN0IHdvcmtlcl9pbmZvIHdvcmtlcl9pbmZvOw0KPiArfTsNCj4g Kw0KPiArc3RhdGljIHN0cnVjdCBydGVfbWVtcG9vbCAqc3JjX3Bvb2w7DQo+ICtzdGF0aWMgc3Ry dWN0IHJ0ZV9tZW1wb29sICpkc3RfcG9vbDsNCj4gKw0KPiArc3RhdGljIHZvbGF0aWxlIHN0cnVj dCBsY29yZV9wYXJhbXMgKndvcmtlcl9wYXJhbXNbTUFYX1dPUktFUl9OQl07DQo+ICsNCj4gKyNk ZWZpbmUgUFJJTlRfRVJSKC4uLikgcHJpbnRfZXJyKF9fZnVuY19fLCBfX0xJTkVfXywgX19WQV9B UkdTX18pDQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ICtfX3J0ZV9mb3JtYXRfcHJpbnRm KDMsIDQpDQo+ICtwcmludF9lcnIoY29uc3QgY2hhciAqZnVuYywgaW50IGxpbmVubywgY29uc3Qg Y2hhciAqZm9ybWF0LCAuLi4pIHsNCj4gKwl2YV9saXN0IGFwOw0KPiArCWludCByZXQ7DQo+ICsN Cj4gKwlyZXQgPSBmcHJpbnRmKHN0ZGVyciwgIkluICVzOiVkIC0gIiwgZnVuYywgbGluZW5vKTsN Cj4gKwl2YV9zdGFydChhcCwgZm9ybWF0KTsNCj4gKwlyZXQgKz0gdmZwcmludGYoc3RkZXJyLCBm b3JtYXQsIGFwKTsNCj4gKwl2YV9lbmQoYXApOw0KPiArDQo+ICsJcmV0dXJuIHJldDsNCj4gK30N Cj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtjYWxjX3Jlc3VsdCh1aW50MzJfdCBidWZf c2l6ZSwgdWludDMyX3QgbnJfYnVmLCB1aW50MTZfdCBuYl93b3JrZXJzLA0KPiB1aW50MTZfdCB0 ZXN0X3NlY3MsDQo+ICsJCQkJdWludDMyX3QgdG90YWxfY250LCBmbG9hdCAqbWVtb3J5LCB1aW50 MzJfdA0KPiAqYXZlX2N5Y2xlLA0KPiArCQkJCWZsb2F0ICpiYW5kd2lkdGgsIGZsb2F0ICptb3Bz KQ0KPiArew0KPiArCSptZW1vcnkgPSAoZmxvYXQpKGJ1Zl9zaXplICogKG5yX2J1ZiAvIG5iX3dv cmtlcnMpICogMikgLyAoMTAyNCAqDQo+IDEwMjQpOw0KPiArCSphdmVfY3ljbGUgPSB0ZXN0X3Nl Y3MgKiBydGVfZ2V0X3RpbWVyX2h6KCkgLyB0b3RhbF9jbnQ7DQo+ICsJKmJhbmR3aWR0aCA9IChi dWZfc2l6ZSAqIDggKiAocnRlX2dldF90aW1lcl9oeigpIC8NCj4gKGZsb2F0KSphdmVfY3ljbGUp KSAvIDEwMDAwMDAwMDA7DQo+ICsJKm1vcHMgPSAoZmxvYXQpcnRlX2dldF90aW1lcl9oeigpIC8g KmF2ZV9jeWNsZSAvIDEwMDAwMDA7IH0NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK291dHB1dF9y ZXN1bHQodWludDhfdCBzY2VuYXJpb19pZCwgdWludDMyX3QgbGNvcmVfaWQsIGNoYXIgKmRtYV9u YW1lLA0KPiB1aW50NjRfdCBhdmVfY3ljbGUsDQo+ICsJCQl1aW50MzJfdCBidWZfc2l6ZSwgdWlu dDMyX3QgbnJfYnVmLCBmbG9hdCBtZW1vcnksDQo+ICsJCQlmbG9hdCBiYW5kd2lkdGgsIGZsb2F0 IG1vcHMsIGJvb2wgaXNfZG1hKSB7DQo+ICsJaWYgKGlzX2RtYSkNCj4gKwkJcHJpbnRmKCJsY29y ZSAldSwgRE1BICVzOlxuIiwgbGNvcmVfaWQsIGRtYV9uYW1lKTsNCj4gKwllbHNlDQo+ICsJCXBy aW50ZigibGNvcmUgJXVcbiIsIGxjb3JlX2lkKTsNCj4gKw0KPiArCXByaW50ZigiYXZlcmFnZSBj eWNsZXMvb3A6ICUiIFBSSXU2NCAiLCBidWZmZXIgc2l6ZTogJXUsIG5yX2J1ZjogJXUsDQo+IG1l bW9yeTogJS4ybGZNQiwgZnJlcXVlbmN5OiAlIiBQUkl1NjQgIi5cbiIsDQo+ICsJCQlhdmVfY3lj bGUsIGJ1Zl9zaXplLCBucl9idWYsIG1lbW9yeSwNCj4gcnRlX2dldF90aW1lcl9oeigpKTsNCj4g KwlwcmludGYoIkF2ZXJhZ2UgYmFuZHdpZHRoOiAlLjNsZkdicHMsIE1PcHM6ICUuM2xmXG4iLCBi YW5kd2lkdGgsDQo+ICttb3BzKTsNCj4gKw0KPiArCWlmIChpc19kbWEpDQo+ICsJCXNucHJpbnRm KG91dHB1dF9zdHJbbGNvcmVfaWRdLCBNQVhfT1VUUFVUX1NUUl9MRU4sDQo+IENTVl9MSU5FX0RN QV9GTVQsDQo+ICsJCQlzY2VuYXJpb19pZCwgbGNvcmVfaWQsIGRtYV9uYW1lLCBidWZfc2l6ZSwN Cj4gKwkJCW5yX2J1ZiwgbWVtb3J5LCBhdmVfY3ljbGUsIGJhbmR3aWR0aCwgbW9wcyk7DQo+ICsJ ZWxzZQ0KPiArCQlzbnByaW50ZihvdXRwdXRfc3RyW2xjb3JlX2lkXSwgTUFYX09VVFBVVF9TVFJf TEVOLA0KPiBDU1ZfTElORV9DUFVfRk1ULA0KPiArCQkJc2NlbmFyaW9faWQsIGxjb3JlX2lkLCBi dWZfc2l6ZSwNCj4gKwkJCW5yX2J1ZiwgbWVtb3J5LCBhdmVfY3ljbGUsIGJhbmR3aWR0aCwgbW9w cyk7IH0NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtjYWNoZV9mbHVzaF9idWYoX19t YXliZV91bnVzZWQgc3RydWN0IHJ0ZV9tYnVmICoqYXJyYXksDQo+ICsJCV9fbWF5YmVfdW51c2Vk IHVpbnQzMl90IGJ1Zl9zaXplLA0KPiArCQlfX21heWJlX3VudXNlZCB1aW50MzJfdCBucl9idWYp DQo+ICt7DQo+ICsjaWZkZWYgUlRFX0FSQ0hfWDg2XzY0DQo+ICsJY2hhciAqZGF0YTsNCj4gKwlz dHJ1Y3QgcnRlX21idWYgKipzcmNzID0gYXJyYXk7DQo+ICsJdWludDMyX3QgaSwgb2Zmc2V0Ow0K PiArDQo+ICsJZm9yIChpID0gMDsgaSA8IG5yX2J1ZjsgaSsrKSB7DQo+ICsJCWRhdGEgPSBydGVf cGt0bWJ1Zl9tdG9kKHNyY3NbaV0sIGNoYXIgKik7DQo+ICsJCWZvciAob2Zmc2V0ID0gMDsgb2Zm c2V0IDwgYnVmX3NpemU7IG9mZnNldCArPSA2NCkNCj4gKwkJCV9fYnVpbHRpbl9pYTMyX2NsZmx1 c2goZGF0YSArIG9mZnNldCk7DQo+ICsJfQ0KPiArI2VuZGlmDQo+ICt9DQo+ICsNCj4gKy8qIENv bmZpZ3VyYXRpb24gb2YgZGV2aWNlLiAqLw0KPiArc3RhdGljIHZvaWQNCj4gK2NvbmZpZ3VyZV9k bWFkZXZfcXVldWUodWludDMyX3QgZGV2X2lkLCB1aW50MzJfdCByaW5nX3NpemUpIHsNCj4gKwl1 aW50MTZfdCB2Y2hhbiA9IDA7DQo+ICsJc3RydWN0IHJ0ZV9kbWFfaW5mbyBpbmZvOw0KPiArCXN0 cnVjdCBydGVfZG1hX2NvbmYgZGV2X2NvbmZpZyA9IHsgLm5iX3ZjaGFucyA9IDEgfTsNCj4gKwlz dHJ1Y3QgcnRlX2RtYV92Y2hhbl9jb25mIHFjb25mID0gew0KPiArCQkuZGlyZWN0aW9uID0gUlRF X0RNQV9ESVJfTUVNX1RPX01FTSwNCj4gKwkJLm5iX2Rlc2MgPSByaW5nX3NpemUNCj4gKwl9Ow0K PiArDQo+ICsJaWYgKHJ0ZV9kbWFfY29uZmlndXJlKGRldl9pZCwgJmRldl9jb25maWcpICE9IDAp DQo+ICsJCXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwgIkVycm9yIHdpdGggZG1hIGNvbmZpZ3VyZS5c biIpOw0KPiArDQo+ICsJaWYgKHJ0ZV9kbWFfdmNoYW5fc2V0dXAoZGV2X2lkLCB2Y2hhbiwgJnFj b25mKSAhPSAwKQ0KPiArCQlydGVfZXhpdChFWElUX0ZBSUxVUkUsICJFcnJvciB3aXRoIHF1ZXVl IGNvbmZpZ3VyYXRpb24uXG4iKTsNCj4gKw0KPiArCXJ0ZV9kbWFfaW5mb19nZXQoZGV2X2lkLCAm aW5mbyk7DQo+ICsJaWYgKGluZm8ubmJfdmNoYW5zICE9IDEpDQo+ICsJCXJ0ZV9leGl0KEVYSVRf RkFJTFVSRSwgIkVycm9yLCBubyBjb25maWd1cmVkIHF1ZXVlcw0KPiByZXBvcnRlZCBvbiBkZXZp Y2UgaWQuICV1XG4iLA0KPiArCQkJCWRldl9pZCk7DQo+ICsNCj4gKwlpZiAocnRlX2RtYV9zdGFy dChkZXZfaWQpICE9IDApDQo+ICsJCXJ0ZV9leGl0KEVYSVRfRkFJTFVSRSwgIkVycm9yIHdpdGgg ZG1hIHN0YXJ0LlxuIik7IH0NCj4gKw0KPiArc3RhdGljIGludA0KPiArY29uZmlnX2RtYWRldnMo c3RydWN0IHRlc3RfY29uZmlndXJlICpjZmcpIHsNCj4gKwl1aW50MzJfdCByaW5nX3NpemUgPSBj ZmctPnJpbmdfc2l6ZS5jdXI7DQo+ICsJc3RydWN0IGxjb3JlX2RtYV9tYXBfdCAqbGRtID0gJmNm Zy0+bGNvcmVfZG1hX21hcDsNCj4gKwl1aW50MzJfdCBuYl93b3JrZXJzID0gbGRtLT5jbnQ7DQo+ ICsJdWludDMyX3QgaTsNCj4gKwlpbnQgZGV2X2lkOw0KPiArCXVpbnQxNl90IG5iX2RtYWRldnMg PSAwOw0KPiArCWNoYXIgKmRtYV9uYW1lOw0KPiArDQo+ICsJZm9yIChpID0gMDsgaSA8IGxkbS0+ Y250OyBpKyspIHsNCj4gKwkJZG1hX25hbWUgPSBsZG0tPmRtYV9uYW1lc1tpXTsNCj4gKwkJZGV2 X2lkID0gcnRlX2RtYV9nZXRfZGV2X2lkX2J5X25hbWUoZG1hX25hbWUpOw0KPiArCQlpZiAoZGV2 X2lkID09IC0xKSB7DQo+ICsJCQlmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBGYWlsIHRvIGZpbmQg RE1BICVzLlxuIiwNCj4gZG1hX25hbWUpOw0KPiArCQkJZ290byBlbmQ7DQo+ICsJCX0NCj4gKw0K PiArCQlsZG0tPmRtYV9pZHNbaV0gPSBkZXZfaWQ7DQo+ICsJCWNvbmZpZ3VyZV9kbWFkZXZfcXVl dWUoZGV2X2lkLCByaW5nX3NpemUpOw0KPiArCQkrK25iX2RtYWRldnM7DQo+ICsJfQ0KPiArDQo+ ICtlbmQ6DQo+ICsJaWYgKG5iX2RtYWRldnMgPCBuYl93b3JrZXJzKSB7DQo+ICsJCXByaW50Zigi Tm90IGVub3VnaCBkbWFkZXZzICgldSkgZm9yIGFsbCB3b3JrZXJzICgldSkuXG4iLA0KPiBuYl9k bWFkZXZzLCBuYl93b3JrZXJzKTsNCj4gKwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKw0KPiArCXBy aW50ZigiTnVtYmVyIG9mIHVzZWQgZG1hZGV2czogJXUuXG4iLCBuYl9kbWFkZXZzKTsNCj4gKw0K PiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsjZGVmaW5lIFBPTExfTUFYIDEwMDANCj4gKw0K PiArDQoNCltBbm9vYl0gRXh0cmEgYmxhbmsgbGluZS4gWW91IGNhbiBjb25zaWRlciByZW1vdmlu Zy4NCg0KPiArc3RhdGljIGlubGluZSB2b2lkDQo+ICtkb19kbWFfc3VibWl0X2FuZF9wb2xsKHVp bnQxNl90IGRldl9pZCwgdWludDY0X3QgKmFzeW5jX2NudCwNCj4gKwkJCXZvbGF0aWxlIHN0cnVj dCB3b3JrZXJfaW5mbyAqd29ya2VyX2luZm8pIHsNCj4gKwlpbnQgcmV0Ow0KPiArCXVpbnQxNl90 IG5yX2NwbDsNCj4gKw0KPiArCXJldCA9IHJ0ZV9kbWFfc3VibWl0KGRldl9pZCwgMCk7DQo+ICsJ aWYgKHJldCA8IDApIHsNCj4gKwkJcnRlX2RtYV9zdG9wKGRldl9pZCk7DQo+ICsJCXJ0ZV9kbWFf Y2xvc2UoZGV2X2lkKTsNCj4gKwkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAiRXJyb3Igd2l0aCBk bWEgc3VibWl0LlxuIik7DQo+ICsJfQ0KPiArDQo+ICsJbnJfY3BsID0gcnRlX2RtYV9jb21wbGV0 ZWQoZGV2X2lkLCAwLCBNQVhfRE1BX0NQTF9OQiwgTlVMTCwNCj4gTlVMTCk7DQo+ICsJKmFzeW5j X2NudCAtPSBucl9jcGw7DQo+ICsJd29ya2VyX2luZm8tPnRvdGFsX2NwbCArPSBucl9jcGw7DQo+ ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgaW50DQo+ICtkb19kbWFfbWVtX2NvcHkodm9pZCAq cCkNCj4gK3sNCj4gKwljb25zdCB1aW50MTZfdCAqcGFyYV9pZHggPSAodWludDE2X3QgKilwOw0K PiArCXZvbGF0aWxlIHN0cnVjdCBsY29yZV9wYXJhbXMgKnBhcmEgPSB3b3JrZXJfcGFyYW1zWypw YXJhX2lkeF07DQo+ICsJdm9sYXRpbGUgc3RydWN0IHdvcmtlcl9pbmZvICp3b3JrZXJfaW5mbyA9 ICYocGFyYS0+d29ya2VyX2luZm8pOw0KPiArCWNvbnN0IHVpbnQxNl90IGRldl9pZCA9IHBhcmEt PmRldl9pZDsNCj4gKwljb25zdCB1aW50MzJfdCBucl9idWYgPSBwYXJhLT5ucl9idWY7DQo+ICsJ Y29uc3QgdWludDE2X3Qga2lja19iYXRjaCA9IHBhcmEtPmtpY2tfYmF0Y2g7DQo+ICsJY29uc3Qg dWludDMyX3QgYnVmX3NpemUgPSBwYXJhLT5idWZfc2l6ZTsNCj4gKwlzdHJ1Y3QgcnRlX21idWYg KipzcmNzID0gcGFyYS0+c3JjczsNCj4gKwlzdHJ1Y3QgcnRlX21idWYgKipkc3RzID0gcGFyYS0+ ZHN0czsNCj4gKwl1aW50MTZfdCBucl9jcGw7DQo+ICsJdWludDY0X3QgYXN5bmNfY250ID0gMDsN Cj4gKwl1aW50MzJfdCBpOw0KPiArCXVpbnQzMl90IHBvbGxfY250ID0gMDsNCj4gKwlpbnQgcmV0 Ow0KPiArDQo+ICsJd29ya2VyX2luZm8tPnN0b3BfZmxhZyA9IGZhbHNlOw0KPiArCXdvcmtlcl9p bmZvLT5yZWFkeV9mbGFnID0gdHJ1ZTsNCj4gKw0KPiArCXdoaWxlICghd29ya2VyX2luZm8tPnN0 YXJ0X2ZsYWcpDQo+ICsJCTsNCj4gKw0KPiArCXdoaWxlICgxKSB7DQo+ICsJCWZvciAoaSA9IDA7 IGkgPCBucl9idWY7IGkrKykgew0KPiArZG1hX2NvcHk6DQo+ICsJCQlyZXQgPSBydGVfZG1hX2Nv cHkoZGV2X2lkLCAwLA0KPiBydGVfcGt0bWJ1Zl9pb3ZhKHNyY3NbaV0pLA0KPiArCQkJCXJ0ZV9w a3RtYnVmX2lvdmEoZHN0c1tpXSksIGJ1Zl9zaXplLCAwKTsNCj4gKwkJCWlmICh1bmxpa2VseShy ZXQgPCAwKSkgew0KPiArCQkJCWlmIChyZXQgPT0gLUVOT1NQQykgew0KPiArCQkJCQlkb19kbWFf c3VibWl0X2FuZF9wb2xsKGRldl9pZCwNCj4gJmFzeW5jX2NudCwgd29ya2VyX2luZm8pOw0KPiAr CQkJCQlnb3RvIGRtYV9jb3B5Ow0KPiArCQkJCX0gZWxzZSB7DQo+ICsJCQkJCS8qIEVycm9yIGV4 aXQgKi8NCj4gKwkJCQkJcnRlX2RtYV9zdG9wKGRldl9pZCk7DQo+ICsJCQkJCXJ0ZV9leGl0KEVY SVRfRkFJTFVSRSwgIkRNQQ0KPiBlbnF1ZXVlIGZhaWxlZFxuIik7DQo+ICsJCQkJfQ0KPiArCQkJ fQ0KPiArCQkJYXN5bmNfY250Kys7DQo+ICsNCj4gKwkJCWlmICgoYXN5bmNfY250ICUga2lja19i YXRjaCkgPT0gMCkNCj4gKwkJCQlkb19kbWFfc3VibWl0X2FuZF9wb2xsKGRldl9pZCwNCj4gJmFz eW5jX2NudCwgd29ya2VyX2luZm8pOw0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKHdvcmtlcl9pbmZv LT5zdG9wX2ZsYWcpDQo+ICsJCQlicmVhazsNCj4gKwl9DQo+ICsNCj4gKwlydGVfZG1hX3N1Ym1p dChkZXZfaWQsIDApOw0KPiArCXdoaWxlICgoYXN5bmNfY250ID4gMCkgJiYgKHBvbGxfY250Kysg PCBQT0xMX01BWCkpIHsNCj4gKwkJbnJfY3BsID0gcnRlX2RtYV9jb21wbGV0ZWQoZGV2X2lkLCAw LA0KPiBNQVhfRE1BX0NQTF9OQiwgTlVMTCwgTlVMTCk7DQo+ICsJCWFzeW5jX2NudCAtPSBucl9j cGw7DQo+ICsJfQ0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbmxp bmUgaW50DQo+ICtkb19jcHVfbWVtX2NvcHkodm9pZCAqcCkNCj4gK3sNCj4gKwljb25zdCB1aW50 MTZfdCAqcGFyYV9pZHggPSAodWludDE2X3QgKilwOw0KPiArCXZvbGF0aWxlIHN0cnVjdCBsY29y ZV9wYXJhbXMgKnBhcmEgPSB3b3JrZXJfcGFyYW1zWypwYXJhX2lkeF07DQo+ICsJdm9sYXRpbGUg c3RydWN0IHdvcmtlcl9pbmZvICp3b3JrZXJfaW5mbyA9ICYocGFyYS0+d29ya2VyX2luZm8pOw0K PiArCWNvbnN0IHVpbnQzMl90IG5yX2J1ZiA9IHBhcmEtPm5yX2J1ZjsNCj4gKwljb25zdCB1aW50 MzJfdCBidWZfc2l6ZSA9IHBhcmEtPmJ1Zl9zaXplOw0KPiArCXN0cnVjdCBydGVfbWJ1ZiAqKnNy Y3MgPSBwYXJhLT5zcmNzOw0KPiArCXN0cnVjdCBydGVfbWJ1ZiAqKmRzdHMgPSBwYXJhLT5kc3Rz Ow0KPiArCXVpbnQzMl90IGk7DQo+ICsNCj4gKwl3b3JrZXJfaW5mby0+c3RvcF9mbGFnID0gZmFs c2U7DQo+ICsJd29ya2VyX2luZm8tPnJlYWR5X2ZsYWcgPSB0cnVlOw0KPiArDQo+ICsJd2hpbGUg KCF3b3JrZXJfaW5mby0+c3RhcnRfZmxhZykNCj4gKwkJOw0KPiArDQo+ICsJd2hpbGUgKDEpIHsN Cj4gKwkJZm9yIChpID0gMDsgaSA8IG5yX2J1ZjsgaSsrKSB7DQo+ICsJCQkvKiBjb3B5IGJ1ZmZl ciBmb3JtIHNyYyB0byBkc3QgKi8NCj4gKwkJCXJ0ZV9tZW1jcHkoKHZvaWQNCj4gKikodWludHB0 cl90KXJ0ZV9tYnVmX2RhdGFfaW92YShkc3RzW2ldKSwNCj4gKwkJCQkodm9pZA0KPiAqKSh1aW50 cHRyX3QpcnRlX21idWZfZGF0YV9pb3ZhKHNyY3NbaV0pLA0KPiArCQkJCShzaXplX3QpYnVmX3Np emUpOw0KPiArCQkJd29ya2VyX2luZm8tPnRvdGFsX2NwbCsrOw0KPiArCQl9DQo+ICsJCWlmICh3 b3JrZXJfaW5mby0+c3RvcF9mbGFnKQ0KPiArCQkJYnJlYWs7DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3NldHVwX21lbW9yeV9lbnYoc3Ry dWN0IHRlc3RfY29uZmlndXJlICpjZmcsIHN0cnVjdCBydGVfbWJ1ZiAqKipzcmNzLA0KPiArCQkJ c3RydWN0IHJ0ZV9tYnVmICoqKmRzdHMpDQo+ICt7DQo+ICsJdW5zaWduZWQgaW50IGJ1Zl9zaXpl ID0gY2ZnLT5idWZfc2l6ZS5jdXI7DQo+ICsJdW5zaWduZWQgaW50IG5yX3NvY2tldHM7DQo+ICsJ dWludDMyX3QgbnJfYnVmID0gY2ZnLT5ucl9idWY7DQo+ICsNCj4gKwlucl9zb2NrZXRzID0gcnRl X3NvY2tldF9jb3VudCgpOw0KPiArCWlmIChjZmctPnNyY19udW1hX25vZGUgPj0gbnJfc29ja2V0 cyB8fA0KPiArCQljZmctPmRzdF9udW1hX25vZGUgPj0gbnJfc29ja2V0cykgew0KPiArCQlwcmlu dGYoIkVycm9yOiBTb3VyY2Ugb3IgZGVzdGluYXRpb24gbnVtYSBleGNlZWRzIHRoZSBhY3R1cmUN Cj4gbnVtYSBub2Rlcy5cbiIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KPiArDQo+ICsJc3Jj X3Bvb2wgPSBydGVfcGt0bWJ1Zl9wb29sX2NyZWF0ZSgiQmVuY2htYXJrX0RNQV9TUkMiLA0KPiAr CQkJbnJfYnVmLCAvKiBuID09IG51bSBlbGVtZW50cyAqLw0KPiArCQkJNjQsICAvKiBjYWNoZSBz aXplICovDQo+ICsJCQkwLCAgIC8qIHByaXYgc2l6ZSAqLw0KPiArCQkJYnVmX3NpemUgKyBSVEVf UEtUTUJVRl9IRUFEUk9PTSwNCj4gKwkJCWNmZy0+c3JjX251bWFfbm9kZSk7DQo+ICsJaWYgKHNy Y19wb29sID09IE5VTEwpIHsNCj4gKwkJUFJJTlRfRVJSKCJFcnJvciB3aXRoIHNvdXJjZSBtZW1w b29sIGNyZWF0aW9uLlxuIik7DQo+ICsJCXJldHVybiAtMTsNCj4gKwl9DQo+ICsNCj4gKwlkc3Rf cG9vbCA9IHJ0ZV9wa3RtYnVmX3Bvb2xfY3JlYXRlKCJCZW5jaG1hcmtfRE1BX0RTVCIsDQo+ICsJ CQlucl9idWYsIC8qIG4gPT0gbnVtIGVsZW1lbnRzICovDQo+ICsJCQk2NCwgIC8qIGNhY2hlIHNp emUgKi8NCg0KW0Fub29iXSBXZSBkbyBub3QgYWxsb2Mgb3IgZnJlZSBwb2ludGVycyBpbiB0aGUg ZGF0YXBhdGgsIHJpZ2h0PyBTbyB3aHkgYm90aGVyIHdpdGggY2FjaGU/DQoNCj4gKwkJCTAsICAg LyogcHJpdiBzaXplICovDQo+ICsJCQlidWZfc2l6ZSArIFJURV9QS1RNQlVGX0hFQURST09NLA0K PiArCQkJY2ZnLT5kc3RfbnVtYV9ub2RlKTsNCj4gKwlpZiAoZHN0X3Bvb2wgPT0gTlVMTCkgew0K PiArCQlQUklOVF9FUlIoIkVycm9yIHdpdGggZGVzdGluYXRpb24gbWVtcG9vbCBjcmVhdGlvbi5c biIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KPiArDQo+ICsJKnNyY3MgPSBydGVfbWFsbG9j KE5VTEwsIG5yX2J1ZiAqIHNpemVvZihzdHJ1Y3QgcnRlX21idWYgKiksIDApOw0KPiArCWlmICgq c3JjcyA9PSBOVUxMKSB7DQo+ICsJCXByaW50ZigiRXJyb3I6IHNyY3MgbWFsbG9jIGZhaWxlZC5c biIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KDQpbQW5vb2JdIEFyZSB3ZSBmcmVlaW5nIHRo ZXNlIG1lbW9yeT8gVGhlIG9uZXMgYWxsb2NhdGVkIHdpdGggcnRlX21hbGxvYy4NCg0KPiArDQo+ ICsJKmRzdHMgPSBydGVfbWFsbG9jKE5VTEwsIG5yX2J1ZiAqIHNpemVvZihzdHJ1Y3QgcnRlX21i dWYgKiksIDApOw0KPiArCWlmICgqZHN0cyA9PSBOVUxMKSB7DQo+ICsJCXByaW50ZigiRXJyb3I6 IGRzdHMgbWFsbG9jIGZhaWxlZC5cbiIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KPiArDQo+ ICsJaWYgKHJ0ZV9tZW1wb29sX2dldF9idWxrKHNyY19wb29sLCAodm9pZCAqKikqc3JjcywgbnJf YnVmKSAhPSAwKSB7DQo+ICsJCXByaW50ZigiZ2V0IHNyYyBtYnVmcyBmYWlsZWQuXG4iKTsNCj4g KwkJcmV0dXJuIC0xOw0KPiArCX0NCj4gKwlpZiAocnRlX21lbXBvb2xfZ2V0X2J1bGsoZHN0X3Bv b2wsICh2b2lkICoqKSpkc3RzLCBucl9idWYpICE9IDApIHsNCj4gKwkJcHJpbnRmKCJnZXQgZHN0 IG1idWZzIGZhaWxlZC5cbiIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KPiArDQo+ICsJcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3ZvaWQNCj4gK21lbV9jb3B5X2JlbmNobWFyayhzdHJ1Y3Qg dGVzdF9jb25maWd1cmUgKmNmZywgYm9vbCBpc19kbWEpIHsNCj4gKwl1aW50MTZfdCBpOw0KPiAr CXVpbnQzMl90IG9mZnNldDsNCj4gKwl1bnNpZ25lZCBpbnQgbGNvcmVfaWQgPSAwOw0KPiArCXN0 cnVjdCBydGVfbWJ1ZiAqKnNyY3MgPSBOVUxMLCAqKmRzdHMgPSBOVUxMOw0KPiArCXN0cnVjdCBs Y29yZV9kbWFfbWFwX3QgKmxkbSA9ICZjZmctPmxjb3JlX2RtYV9tYXA7DQo+ICsJdW5zaWduZWQg aW50IGJ1Zl9zaXplID0gY2ZnLT5idWZfc2l6ZS5jdXI7DQo+ICsJdWludDE2X3Qga2lja19iYXRj aCA9IGNmZy0+a2lja19iYXRjaC5jdXI7DQo+ICsJdWludDMyX3QgbnJfYnVmID0gY2ZnLT5ucl9i dWYgPSAoY2ZnLT5tZW1fc2l6ZS5jdXIgKiAxMDI0ICogMTAyNCkgLw0KPiAoY2ZnLT5idWZfc2l6 ZS5jdXIgKiAyKTsNCj4gKwl1aW50MTZfdCBuYl93b3JrZXJzID0gbGRtLT5jbnQ7DQo+ICsJdWlu dDE2X3QgdGVzdF9zZWNzID0gY2ZnLT50ZXN0X3NlY3M7DQo+ICsJZmxvYXQgbWVtb3J5Ow0KPiAr CXVpbnQzMl90IGF2Z19jeWNsZXMgPSAwOw0KPiArCWZsb2F0IG1vcHM7DQo+ICsJZmxvYXQgYmFu ZHdpZHRoOw0KPiArDQo+ICsJaWYgKHNldHVwX21lbW9yeV9lbnYoY2ZnLCAmc3JjcywgJmRzdHMp IDwgMCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwlpZiAoaXNfZG1hKQ0KPiArCQlpZiAoY29u ZmlnX2RtYWRldnMoY2ZnKSA8IDApDQo+ICsJCQlnb3RvIG91dDsNCj4gKw0KPiArCWlmIChjZmct PmNhY2hlX2ZsdXNoKSB7DQo+ICsJCWNhY2hlX2ZsdXNoX2J1ZihzcmNzLCBidWZfc2l6ZSwgbnJf YnVmKTsNCj4gKwkJY2FjaGVfZmx1c2hfYnVmKGRzdHMsIGJ1Zl9zaXplLCBucl9idWYpOw0KPiAr CQlydGVfbWIoKTsNCj4gKwl9DQo+ICsNCj4gKwlwcmludGYoIlN0YXJ0IHRlc3RpbmcuLi4uXG4i KTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBuYl93b3JrZXJzOyBpKyspIHsNCj4gKwkJbGNv cmVfaWQgPSBsZG0tPmxjb3Jlc1tpXTsNCj4gKwkJb2Zmc2V0ID0gbnJfYnVmIC8gbmJfd29ya2Vy cyAqIGk7DQo+ICsNCj4gKwkJd29ya2VyX3BhcmFtc1tpXSA9IHJ0ZV9tYWxsb2MoTlVMTCwgc2l6 ZW9mKHN0cnVjdA0KPiBsY29yZV9wYXJhbXMpLCAwKTsNCj4gKwkJaWYgKCF3b3JrZXJfcGFyYW1z W2ldKSB7DQo+ICsJCQlwcmludGYoImxjb3JlIHBhcmFtZXRlcnMgbWFsbG9jIGZhaWx1cmUgZm9y IGxjb3JlDQo+ICVkXG4iLCBsY29yZV9pZCk7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KDQpbQW5v b2JdIEFyZSB3ZSBmcmVlaW5nIHRoZSBhYm92ZSBtZW1vcnk/DQoNCj4gKwkJaWYgKGlzX2RtYSkg ew0KPiArCQkJd29ya2VyX3BhcmFtc1tpXS0+ZG1hX25hbWUgPSBsZG0tDQo+ID5kbWFfbmFtZXNb aV07DQo+ICsJCQl3b3JrZXJfcGFyYW1zW2ldLT5kZXZfaWQgPSBsZG0tPmRtYV9pZHNbaV07DQo+ ICsJCQl3b3JrZXJfcGFyYW1zW2ldLT5raWNrX2JhdGNoID0ga2lja19iYXRjaDsNCj4gKwkJfQ0K PiArCQl3b3JrZXJfcGFyYW1zW2ldLT53b3JrZXJfaWQgPSBpOw0KPiArCQl3b3JrZXJfcGFyYW1z W2ldLT5ucl9idWYgPSAodWludDMyX3QpKG5yX2J1ZiAvDQo+IG5iX3dvcmtlcnMpOw0KPiArCQl3 b3JrZXJfcGFyYW1zW2ldLT5idWZfc2l6ZSA9IGJ1Zl9zaXplOw0KPiArCQl3b3JrZXJfcGFyYW1z W2ldLT50ZXN0X3NlY3MgPSB0ZXN0X3NlY3M7DQo+ICsJCXdvcmtlcl9wYXJhbXNbaV0tPnNyY3Mg PSBzcmNzICsgb2Zmc2V0Ow0KPiArCQl3b3JrZXJfcGFyYW1zW2ldLT5kc3RzID0gZHN0cyArIG9m ZnNldDsNCj4gKwkJd29ya2VyX3BhcmFtc1tpXS0+c2NlbmFyaW9faWQgPSBjZmctPnNjZW5hcmlv X2lkOw0KPiArCQl3b3JrZXJfcGFyYW1zW2ldLT5sY29yZV9pZCA9IGxjb3JlX2lkOw0KPiArDQo+ ICsJCWlmIChpc19kbWEpDQo+ICsJCQlydGVfZWFsX3JlbW90ZV9sYXVuY2goZG9fZG1hX21lbV9j b3B5LCAodm9pZA0KPiAqKSgmaSksIGxjb3JlX2lkKTsNCj4gKwkJZWxzZQ0KPiArCQkJcnRlX2Vh bF9yZW1vdGVfbGF1bmNoKGRvX2NwdV9tZW1fY29weSwgKHZvaWQNCj4gKikoJmkpLCBsY29yZV9p ZCk7DQo+ICsJfQ0KPiArDQo+ICsJd2hpbGUgKDEpIHsNCj4gKwkJYm9vbCByZWFkeSA9IHRydWU7 DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBuYl93b3JrZXJzOyBpKyspIHsNCj4gKwkJCWlmICh3b3Jr ZXJfcGFyYW1zW2ldLT53b3JrZXJfaW5mby5yZWFkeV9mbGFnID09DQo+IGZhbHNlKSB7DQo+ICsJ CQkJcmVhZHkgPSAwOw0KPiArCQkJCWJyZWFrOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsJCWlmIChy ZWFkeSkNCj4gKwkJCWJyZWFrOw0KPiArCX0NCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBuYl93 b3JrZXJzOyBpKyspDQo+ICsJCXdvcmtlcl9wYXJhbXNbaV0tPndvcmtlcl9pbmZvLnN0YXJ0X2Zs YWcgPSB0cnVlOw0KPiArDQo+ICsJdXNsZWVwKFRFU1RfV0FJVF9VX1NFQ09ORCk7DQo+ICsJZm9y IChpID0gMDsgaSA8IG5iX3dvcmtlcnM7IGkrKykNCj4gKwkJd29ya2VyX3BhcmFtc1tpXS0+d29y a2VyX2luZm8udGVzdF9jcGwgPQ0KPiArd29ya2VyX3BhcmFtc1tpXS0+d29ya2VyX2luZm8udG90 YWxfY3BsOw0KPiArDQo+ICsJdXNsZWVwKHRlc3Rfc2VjcyAqIDEwMDAgKiAxMDAwKTsNCj4gKwlm b3IgKGkgPSAwOyBpIDwgbmJfd29ya2VyczsgaSsrKQ0KPiArCQl3b3JrZXJfcGFyYW1zW2ldLT53 b3JrZXJfaW5mby50ZXN0X2NwbCA9DQo+IHdvcmtlcl9wYXJhbXNbaV0tPndvcmtlcl9pbmZvLnRv dGFsX2NwbCAtDQo+ICsJCQkJCQl3b3JrZXJfcGFyYW1zW2ldLQ0KPiA+d29ya2VyX2luZm8udGVz dF9jcGw7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbmJfd29ya2VyczsgaSsrKQ0KPiArCQl3 b3JrZXJfcGFyYW1zW2ldLT53b3JrZXJfaW5mby5zdG9wX2ZsYWcgPSB0cnVlOw0KPiArDQo+ICsJ cnRlX2VhbF9tcF93YWl0X2xjb3JlKCk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbmJfd29y a2VyczsgaSsrKSB7DQo+ICsJCWNhbGNfcmVzdWx0KGJ1Zl9zaXplLCBucl9idWYsIG5iX3dvcmtl cnMsIHRlc3Rfc2VjcywNCj4gKwkJCXdvcmtlcl9wYXJhbXNbaV0tPndvcmtlcl9pbmZvLnRlc3Rf Y3BsLA0KPiArCQkJJm1lbW9yeSwgJmF2Z19jeWNsZXMsICZiYW5kd2lkdGgsICZtb3BzKTsNCj4g KwkJb3V0cHV0X3Jlc3VsdChjZmctPnNjZW5hcmlvX2lkLCB3b3JrZXJfcGFyYW1zW2ldLT5sY29y ZV9pZCwNCj4gKwkJCQkJd29ya2VyX3BhcmFtc1tpXS0+ZG1hX25hbWUsDQo+IGF2Z19jeWNsZXMs IGJ1Zl9zaXplLA0KPiArCQkJCQlucl9idWYgLyBuYl93b3JrZXJzLCBtZW1vcnksDQo+IGJhbmR3 aWR0aCwgbW9wcywgaXNfZG1hKTsNCj4gKwl9DQo+ICsNCj4gK291dDoNCj4gKwkvKiBmcmVlIGVu diAqLw0KPiArCWlmIChzcmNzKQ0KPiArCQlydGVfcGt0bWJ1Zl9mcmVlX2J1bGsoc3JjcywgbnJf YnVmKTsNCj4gKwlpZiAoZHN0cykNCj4gKwkJcnRlX3BrdG1idWZfZnJlZV9idWxrKGRzdHMsIG5y X2J1Zik7DQo+ICsNCj4gKwlpZiAoc3JjX3Bvb2wpDQo+ICsJCXJ0ZV9tZW1wb29sX2ZyZWUoc3Jj X3Bvb2wpOw0KPiArCWlmIChkc3RfcG9vbCkNCj4gKwkJcnRlX21lbXBvb2xfZnJlZShkc3RfcG9v bCk7DQo+ICsNCj4gKwlpZiAoaXNfZG1hKSB7DQo+ICsJCWZvciAoaSA9IDA7IGkgPCBuYl93b3Jr ZXJzOyBpKyspIHsNCj4gKwkJCXByaW50ZigiU3RvcHBpbmcgZG1hZGV2ICVkXG4iLCBsZG0tPmRt YV9pZHNbaV0pOw0KPiArCQkJcnRlX2RtYV9zdG9wKGxkbS0+ZG1hX2lkc1tpXSk7DQo+ICsJCX0N Cj4gKwl9DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1kbWEtcGVyZi9jb25maWcuaW5p IGIvYXBwL3Rlc3QtZG1hLXBlcmYvY29uZmlnLmluaSBuZXcNCj4gZmlsZSBtb2RlIDEwMDY0NCBp bmRleCAwMDAwMDAwMDAwLi4yZmQ5YzNjMzg3DQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvYXBw L3Rlc3QtZG1hLXBlcmYvY29uZmlnLmluaQ0KPiBAQCAtMCwwICsxLDU5IEBADQo+ICsNCj4gKzsg VGhpcyBpcyBhbiBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgZG1hLXBlcmYsIHdoaWNo IGRldGFpbHMgdGhlDQo+ICttZWFuaW5ncyBvZiBlYWNoIHBhcmFtZXRlciA7IGFuZCBpbnN0cnVj dGlvbnMgb24gaG93IHRvIHVzZSBkbWEtcGVyZi4NCj4gKw0KPiArOyBTdXBwb3J0ZWQgdGVzdCB0 eXBlcyBhcmUgRE1BX01FTV9DT1BZIGFuZCBDUFVfTUVNX0NPUFkuDQo+ICsNCj4gKzsgUGFyYW1l dGVyczoNCj4gKzsgIm1lbV9zaXplIiBkZW5vdGVzIHRoZSBzaXplIG9mIHRoZSBtZW1vcnkgZm9v dHByaW50Lg0KPiArOyAiYnVmX3NpemUiIGRlbm90ZXMgdGhlIG1lbW9yeSBzaXplIG9mIGEgc2lu Z2xlIG9wZXJhdGlvbi4NCj4gKzsgImRtYV9yaW5nX3NpemUiIGRlbm90ZXMgdGhlIGRtYSByaW5n IGJ1ZmZlciBzaXplLiBJdCBzaG91bGQgYmUgZ3JlYXRlcg0KPiB0aGFuIDY0IG5vcm1hbGx5Lg0K PiArOyAia2lja19iYXRjaCIgZGVub3RlcyB0aGUgZG1hIG9wZXJhdGlvbiBiYXRjaCBzaXplLCBh bmQgc2hvdWxkIGJlIGdyZWF0ZXINCj4gdGhhbiAxIG5vcm1hbGx5Lg0KPiArDQo+ICs7IFRoZSBm b3JtYXQgZm9yIHZhcmlhYmxlcyBpcyB2YXJpYWJsZT1maXJzdCxsYXN0LGluY3JlbWVudCxBRER8 TVVMLg0KPiArDQo+ICs7IHNyY19udW1hX25vZGUgaXMgdXNlZCB0byBjb250cm9sIHRoZSBudW1h IG5vZGUgd2hlcmUgdGhlIHNvdXJjZQ0KPiBtZW1vcnkgaXMgYWxsb2NhdGVkLg0KPiArOyBkc3Rf bnVtYV9ub2RlIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgbnVtYSBub2RlIHdoZXJlIHRoZSBkZXN0 aW5hdGlvbg0KPiBtZW1vcnkgaXMgYWxsb2NhdGVkLg0KPiArDQo+ICs7IGNhY2hlX2ZsdXNoIGlz IHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHRoZSBjYWNoZSBzaG91bGQgYmUNCj4g K2ZsdXNoZWQsIHdpdGggMSBpbmRpY2F0aW5nIHRvIDsgZmx1c2ggYW5kIDAgaW5kaWNhdGluZyB0 byBub3QgZmx1c2guDQo+ICsNCj4gKzsgdGVzdF9zZWNvbmRzIGNvbnRyb2xzIHRoZSB0ZXN0IHRp bWUgb2YgdGhlIHdob2xlIGNhc2UuDQo+ICsNCj4gKzsgVG8gdXNlIERNQSBmb3IgYSB0ZXN0LCBw bGVhc2Ugc3BlY2lmeSB0aGUgImxjb3JlX2RtYSIgcGFyYW1ldGVyLg0KPiArOyBJZiB5b3UgaGF2 ZSBhbHJlYWR5IHNldCB0aGUgIi1sIiBhbmQgIi1hIiBwYXJhbWV0ZXJzIHVzaW5nIEVBTCwgOw0K PiArbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIG9mICJsY29yZV9kbWEiIGZhbGxzIHdpdGhpbiB0 aGVpciByYW5nZSBvZiB0aGUNCj4gdmFsdWVzLg0KPiArDQo+ICs7IFRvIHVzZSBDUFUgZm9yIGEg dGVzdCwgcGxlYXNlIHNwZWNpZnkgdGhlICJsY29yZSIgcGFyYW1ldGVyLg0KPiArOyBJZiB5b3Ug aGF2ZSBhbHJlYWR5IHNldCB0aGUgIi1sIiBhbmQgIi1hIiBwYXJhbWV0ZXJzIHVzaW5nIEVBTCwg Ow0KPiArbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlIG9mICJsY29yZSIgZmFsbHMgd2l0aGluIHRo ZWlyIHJhbmdlIG9mIHZhbHVlcy4NCj4gKw0KPiArOyBUbyBzcGVjaWZ5IGEgY29uZmlndXJhdGlv biBmaWxlLCB1c2UgdGhlICItLWNvbmZpZyIgZmxhZyBmb2xsb3dlZCBieSB0aGUgcGF0aA0KPiB0 byB0aGUgZmlsZS4NCj4gKw0KPiArOyBUbyBzcGVjaWZ5IGEgcmVzdWx0IGZpbGUsIHVzZSB0aGUg Ii0tcmVzdWx0IiBmbGFnIGZvbGxvd2VkIGJ5IHRoZSBwYXRoIHRvIHRoZQ0KPiBmaWxlLg0KPiAr OyBJZiB5b3UgZG8gbm90IHNwZWNpZnkgYSByZXN1bHQgZmlsZSwgb25lIHdpbGwgYmUgZ2VuZXJh dGVkIHdpdGggdGhlDQo+ICtzYW1lIG5hbWUgYXMgdGhlIGNvbmZpZ3VyYXRpb24gOyBmaWxlLCB3 aXRoIHRoZSBhZGRpdGlvbiBvZiAiX3Jlc3VsdC5jc3YiIGF0DQo+IHRoZSBlbmQuDQo+ICsNCj4g K1tjYXNlMV0NCj4gK3R5cGU9RE1BX01FTV9DT1BZDQo+ICttZW1fc2l6ZT0xMA0KPiArYnVmX3Np emU9NjQsODE5MiwyLE1VTA0KPiArZG1hX3Jpbmdfc2l6ZT0xMDI0DQo+ICtraWNrX2JhdGNoPTMy DQo+ICtzcmNfbnVtYV9ub2RlPTANCj4gK2RzdF9udW1hX25vZGU9MA0KPiArY2FjaGVfZmx1c2g9 MA0KPiArdGVzdF9zZWNvbmRzPTINCj4gK2xjb3JlX2RtYT1sY29yZTEwQDAwMDA6MDA6MDQuMiwg bGNvcmUxMUAwMDAwOjAwOjA0LjMNCg0KW0Fub29iXSBJc24ndCBpdCBiZXR0ZXIgaWYgd2UgYWxs b3cgdXNlciB0byBzcGVjaWZ5IERNQSBkZXYgSUQgcmF0aGVyIHRoYW4gdGhlIFBDSSBEQkRGPw0K DQpJbiB0aGUgbG9uZyBydW4sIEkgd291bGQgZXhwZWN0IGNvbmZpZyBmaWxlIHRvIHByb3ZpZGUg e2NvcmUsIGRtYV9kZXZfaWQsIHF1ZXVlX2lkfQ0KDQpBbm90aGVyIHRob3VnaHQgaXMgd2h5IHRv IGV4cG9zZSB0aGlzIGF0IGFsbD8gSWYgd2UgY2FuIHJlc3RyaWN0IHRoaXMgcGVyZiBhcHBsaWNh dGlvbiB0byBoYXZlIG9uZSB0aHJlYWQgb25seSB1c2Ugb25lIHZjaGFuLCB0aGVuIGFwcGxpY2F0 aW9uIGNhbiBlYXNpbHkgY3JlYXRlIHRoaXMgbWFwcGluZyBpbiBydW4gdGltZS4gVW5sZXNzIHlv dSB3YW50IG9uZSB0aHJlYWQgdG8gdXNlIDIgZGlmZmVyZW50IHZjaGFucyB3aGljaCBtYXkgbm90 IGJlIGRlc2lyYWJsZSBzaW5jZSB0aGlzIGlzIGEgc3RhbmRhbG9uZSBwZXJmIGFwcC4NCg0KPiAr ZWFsX2FyZ3M9LS1pbi1tZW1vcnkgLS1maWxlLXByZWZpeD10ZXN0DQo+ICsNCj4gK1tjYXNlMl0N Cj4gK3R5cGU9Q1BVX01FTV9DT1BZDQo+ICttZW1fc2l6ZT0xMA0KPiArYnVmX3NpemU9NjQsODE5 MiwyLE1VTA0KPiArc3JjX251bWFfbm9kZT0wDQo+ICtkc3RfbnVtYV9ub2RlPTENCj4gK2NhY2hl X2ZsdXNoPTANCj4gK3Rlc3Rfc2Vjb25kcz0yDQo+ICtsY29yZSA9IDMsIDQNCj4gK2VhbF9hcmdz PS0taW4tbWVtb3J5IC0tbm8tcGNpDQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1kbWEtcGVyZi9t YWluLmMgYi9hcHAvdGVzdC1kbWEtcGVyZi9tYWluLmMgbmV3IGZpbGUNCj4gbW9kZSAxMDA2NDQg aW5kZXggMDAwMDAwMDAwMC4uZDY1NjU1Yjg3Yg0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2Fw cC90ZXN0LWRtYS1wZXJmL21haW4uYw0KPiBAQCAtMCwwICsxLDU2OSBAQA0KPiArLyogU1BEWC1M aWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0KPiArICogQ29weXJpZ2h0KGMpIDIwMjMg SW50ZWwgQ29ycG9yYXRpb24NCj4gKyAqLw0KPiArDQo+ICsjaW5jbHVkZSA8c3RkaW8uaD4NCj4g KyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4gKyNpbmNsdWRlIDxnZXRvcHQuaD4NCj4gKyNpbmNsdWRl IDxzaWduYWwuaD4NCj4gKyNpbmNsdWRlIDxzdGRib29sLmg+DQo+ICsjaW5jbHVkZSA8dW5pc3Rk Lmg+DQo+ICsjaW5jbHVkZSA8c3lzL3dhaXQuaD4NCj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPg0K PiArI2luY2x1ZGUgPGxpYmdlbi5oPg0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2VhbC5oPg0KPiAr I2luY2x1ZGUgPHJ0ZV9jZmdmaWxlLmg+DQo+ICsjaW5jbHVkZSA8cnRlX3N0cmluZ19mbnMuaD4N Cj4gKyNpbmNsdWRlIDxydGVfbGNvcmUuaD4NCj4gKw0KPiArI2luY2x1ZGUgIm1haW4uaCINCj4g Kw0KPiArI2RlZmluZSBDU1ZfSERSX0ZNVCAiQ2FzZSAldSA6ICVzLGxjb3JlLERNQSxidWZmZXIN Cj4gc2l6ZSxucl9idWYsbWVtb3J5KE1CKSxjeWNsZSxiYW5kd2lkdGgoR2JwcyksTU9wc1xuIg0K PiArDQo+ICsjZGVmaW5lIE1BWF9FQUxfUEFSQU1fTkIgMTAwDQo+ICsjZGVmaW5lIE1BWF9FQUxf UEFSQU1fTEVOIDEwMjQNCj4gKw0KPiArI2RlZmluZSBETUFfTUVNX0NPUFkgIkRNQV9NRU1fQ09Q WSINCj4gKyNkZWZpbmUgQ1BVX01FTV9DT1BZICJDUFVfTUVNX0NPUFkiDQo+ICsNCj4gKyNkZWZp bmUgQ01ETElORV9DT05GSUdfQVJHICItLWNvbmZpZyINCj4gKyNkZWZpbmUgQ01ETElORV9SRVNV TFRfQVJHICItLXJlc3VsdCINCj4gKw0KPiArI2RlZmluZSBNQVhfUEFSQU1TX1BFUl9FTlRSWSA0 DQo+ICsNCj4gKyNkZWZpbmUgTUFYX0xPTkdfT1BUX1NaIDY0DQo+ICsNCj4gK2VudW0gew0KPiAr CVRFU1RfVFlQRV9OT05FID0gMCwNCj4gKwlURVNUX1RZUEVfRE1BX01FTV9DT1BZLA0KPiArCVRF U1RfVFlQRV9DUFVfTUVNX0NPUFkNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUgTUFYX1RFU1RfQ0FT RVMgMTYNCj4gK3N0YXRpYyBzdHJ1Y3QgdGVzdF9jb25maWd1cmUgdGVzdF9jYXNlc1tNQVhfVEVT VF9DQVNFU107DQo+ICsNCj4gK2NoYXIgb3V0cHV0X3N0cltNQVhfV09SS0VSX05CXVtNQVhfT1VU UFVUX1NUUl9MRU5dOw0KPiArDQo+ICtzdGF0aWMgRklMRSAqZmQ7DQo+ICsNCj4gK3N0YXRpYyB2 b2lkDQo+ICtvdXRwdXRfY3N2KGJvb2wgbmVlZF9ibGFua2xpbmUpDQo+ICt7DQo+ICsJdWludDMy X3QgaTsNCj4gKw0KPiArCWlmIChuZWVkX2JsYW5rbGluZSkgew0KPiArCQlmcHJpbnRmKGZkLCAi LCwsLCwsLCxcbiIpOw0KPiArCQlmcHJpbnRmKGZkLCAiLCwsLCwsLCxcbiIpOw0KPiArCX0NCj4g Kw0KPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfRElNKG91dHB1dF9zdHIpOyBpKyspIHsNCj4gKwkJ aWYgKG91dHB1dF9zdHJbaV1bMF0pIHsNCj4gKwkJCWZwcmludGYoZmQsICIlcyIsIG91dHB1dF9z dHJbaV0pOw0KPiArCQkJb3V0cHV0X3N0cltpXVswXSA9ICdcMCc7DQo+ICsJCX0NCj4gKwl9DQo+ ICsNCj4gKwlmZmx1c2goZmQpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArb3V0cHV0 X2Vudl9pbmZvKHZvaWQpDQo+ICt7DQo+ICsJc25wcmludGYob3V0cHV0X3N0clswXSwgTUFYX09V VFBVVF9TVFJfTEVOLCAidGVzdA0KPiBlbnZpcm9ubWVudDpcbiIpOw0KPiArCXNucHJpbnRmKG91 dHB1dF9zdHJbMV0sIE1BWF9PVVRQVVRfU1RSX0xFTiwgIkNQVSBmcmVxdWVuY3ksJSINCj4gKwkJ CVBSSXU2NCAiXG4iLCBydGVfZ2V0X3RpbWVyX2h6KCkpOw0KPiArDQo+ICsJb3V0cHV0X2Nzdih0 cnVlKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIHZvaWQNCj4gK291dHB1dF9oZWFkZXIodWludDMy X3QgY2FzZV9pZCwgc3RydWN0IHRlc3RfY29uZmlndXJlICpjYXNlX2NmZykgew0KPiArCXNucHJp bnRmKG91dHB1dF9zdHJbMF0sIE1BWF9PVVRQVVRfU1RSX0xFTiwNCj4gKwkJCUNTVl9IRFJfRk1U LCBjYXNlX2lkLCBjYXNlX2NmZy0+dGVzdF90eXBlX3N0cik7DQo+ICsNCj4gKwlvdXRwdXRfY3N2 KHRydWUpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgdm9pZA0KPiArcnVuX3Rlc3RfY2FzZShzdHJ1 Y3QgdGVzdF9jb25maWd1cmUgKmNhc2VfY2ZnKSB7DQo+ICsJc3dpdGNoIChjYXNlX2NmZy0+dGVz dF90eXBlKSB7DQo+ICsJY2FzZSBURVNUX1RZUEVfRE1BX01FTV9DT1BZOg0KPiArCQltZW1fY29w eV9iZW5jaG1hcmsoY2FzZV9jZmcsIHRydWUpOw0KPiArCQlicmVhazsNCj4gKwljYXNlIFRFU1Rf VFlQRV9DUFVfTUVNX0NPUFk6DQo+ICsJCW1lbV9jb3B5X2JlbmNobWFyayhjYXNlX2NmZywgZmFs c2UpOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlwcmludGYoIlVua25vd24gdGVz dCB0eXBlLiAlc1xuIiwgY2FzZV9jZmctPnRlc3RfdHlwZV9zdHIpOw0KPiArCQlicmVhazsNCj4g Kwl9DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyB2b2lkDQo+ICtydW5fdGVzdCh1aW50MzJfdCBjYXNl X2lkLCBzdHJ1Y3QgdGVzdF9jb25maWd1cmUgKmNhc2VfY2ZnKSB7DQo+ICsJdWludDMyX3QgaTsN Cj4gKwl1aW50MzJfdCBuYl9sY29yZXMgPSBydGVfbGNvcmVfY291bnQoKTsNCj4gKwlzdHJ1Y3Qg dGVzdF9jb25maWd1cmVfZW50cnkgKm1lbV9zaXplID0gJmNhc2VfY2ZnLT5tZW1fc2l6ZTsNCj4g KwlzdHJ1Y3QgdGVzdF9jb25maWd1cmVfZW50cnkgKmJ1Zl9zaXplID0gJmNhc2VfY2ZnLT5idWZf c2l6ZTsNCj4gKwlzdHJ1Y3QgdGVzdF9jb25maWd1cmVfZW50cnkgKnJpbmdfc2l6ZSA9ICZjYXNl X2NmZy0+cmluZ19zaXplOw0KPiArCXN0cnVjdCB0ZXN0X2NvbmZpZ3VyZV9lbnRyeSAqa2lja19i YXRjaCA9ICZjYXNlX2NmZy0+a2lja19iYXRjaDsNCj4gKwlzdHJ1Y3QgdGVzdF9jb25maWd1cmVf ZW50cnkgZHVtbXkgPSB7IDAgfTsNCj4gKwlzdHJ1Y3QgdGVzdF9jb25maWd1cmVfZW50cnkgKnZh cl9lbnRyeSA9ICZkdW1teTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCBSVEVfRElNKG91dHB1 dF9zdHIpOyBpKyspDQo+ICsJCW1lbXNldChvdXRwdXRfc3RyW2ldLCAwLCBNQVhfT1VUUFVUX1NU Ul9MRU4pOw0KPiArDQo+ICsJaWYgKG5iX2xjb3JlcyA8PSBjYXNlX2NmZy0+bGNvcmVfZG1hX21h cC5jbnQpIHsNCj4gKwkJcHJpbnRmKCJDYXNlICV1OiBOb3QgZW5vdWdoIGxjb3Jlcy5cbiIsIGNh c2VfaWQpOw0KPiArCQlyZXR1cm47DQo+ICsJfQ0KPiArDQo+ICsJcHJpbnRmKCJOdW1iZXIgb2Yg dXNlZCBsY29yZXM6ICV1LlxuIiwgbmJfbGNvcmVzKTsNCj4gKw0KPiArCWlmIChtZW1fc2l6ZS0+ aW5jciAhPSAwKQ0KPiArCQl2YXJfZW50cnkgPSBtZW1fc2l6ZTsNCj4gKw0KPiArCWlmIChidWZf c2l6ZS0+aW5jciAhPSAwKQ0KPiArCQl2YXJfZW50cnkgPSBidWZfc2l6ZTsNCj4gKw0KPiArCWlm IChyaW5nX3NpemUtPmluY3IgIT0gMCkNCj4gKwkJdmFyX2VudHJ5ID0gcmluZ19zaXplOw0KPiAr DQo+ICsJaWYgKGtpY2tfYmF0Y2gtPmluY3IgIT0gMCkNCj4gKwkJdmFyX2VudHJ5ID0ga2lja19i YXRjaDsNCj4gKw0KPiArCWNhc2VfY2ZnLT5zY2VuYXJpb19pZCA9IDA7DQo+ICsNCj4gKwlvdXRw dXRfaGVhZGVyKGNhc2VfaWQsIGNhc2VfY2ZnKTsNCj4gKw0KPiArCWZvciAodmFyX2VudHJ5LT5j dXIgPSB2YXJfZW50cnktPmZpcnN0OyB2YXJfZW50cnktPmN1ciA8PSB2YXJfZW50cnktDQo+ID5s YXN0Oykgew0KPiArCQljYXNlX2NmZy0+c2NlbmFyaW9faWQrKzsNCj4gKwkJcHJpbnRmKCJcblJ1 bm5pbmcgc2NlbmFyaW8gJWRcbiIsIGNhc2VfY2ZnLT5zY2VuYXJpb19pZCk7DQo+ICsNCj4gKwkJ cnVuX3Rlc3RfY2FzZShjYXNlX2NmZyk7DQo+ICsJCW91dHB1dF9jc3YoZmFsc2UpOw0KPiArDQo+ ICsJCWlmICh2YXJfZW50cnktPm9wID09IE9QX0FERCkNCj4gKwkJCXZhcl9lbnRyeS0+Y3VyICs9 IHZhcl9lbnRyeS0+aW5jcjsNCj4gKwkJZWxzZSBpZiAodmFyX2VudHJ5LT5vcCA9PSBPUF9NVUwp DQo+ICsJCQl2YXJfZW50cnktPmN1ciAqPSB2YXJfZW50cnktPmluY3I7DQo+ICsJCWVsc2UNCj4g KwkJCWJyZWFrOw0KPiArCX0NCj4gK30NCj4gKw0KPiArc3RhdGljIGludA0KPiArcGFyc2VfbGNv cmUoc3RydWN0IHRlc3RfY29uZmlndXJlICp0ZXN0X2Nhc2UsIGNvbnN0IGNoYXIgKnZhbHVlKSB7 DQo+ICsJc2l6ZV90IGxlbiA9IHN0cmxlbih2YWx1ZSk7DQo+ICsJY2hhciAqaW5wdXQgPSAoY2hh ciAqKSBtYWxsb2MoKGxlbiArIDEpICogc2l6ZW9mKGNoYXIpKTsNCj4gKwlzdHJjcHkoaW5wdXQs IHZhbHVlKTsNCj4gKwlzdHJ1Y3QgbGNvcmVfZG1hX21hcF90ICpsY29yZV9kbWFfbWFwID0gJih0 ZXN0X2Nhc2UtDQo+ID5sY29yZV9kbWFfbWFwKTsNCj4gKw0KPiArCWlmICh0ZXN0X2Nhc2UgPT0g TlVMTCB8fCB2YWx1ZSA9PSBOVUxMKQ0KPiArCQlyZXR1cm4gLTE7DQo+ICsNCj4gKwltZW1zZXQo bGNvcmVfZG1hX21hcCwgMCwgc2l6ZW9mKHN0cnVjdCBsY29yZV9kbWFfbWFwX3QpKTsNCj4gKw0K PiArCWNoYXIgKnRva2VuID0gc3RydG9rKGlucHV0LCAiLCAiKTsNCj4gKwl3aGlsZSAodG9rZW4g IT0gTlVMTCkgew0KPiArCQlpZiAobGNvcmVfZG1hX21hcC0+Y250ID49IE1BWF9MQ09SRV9OQikg ew0KPiArCQkJZnJlZShpbnB1dCk7DQo+ICsJCQlyZXR1cm4gLTE7DQo+ICsJCX0NCj4gKw0KPiAr CQl1aW50MTZfdCBsY29yZV9pZCA9IGF0b2kodG9rZW4pOw0KPiArCQlsY29yZV9kbWFfbWFwLT5s Y29yZXNbbGNvcmVfZG1hX21hcC0+Y250KytdID0gbGNvcmVfaWQ7DQo+ICsNCj4gKwkJdG9rZW4g PSBzdHJ0b2soTlVMTCwgIiwgIik7DQo+ICsJfQ0KPiArDQo+ICsJZnJlZShpbnB1dCk7DQo+ICsJ cmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3BhcnNlX2xjb3JlX2RtYShz dHJ1Y3QgdGVzdF9jb25maWd1cmUgKnRlc3RfY2FzZSwgY29uc3QgY2hhciAqdmFsdWUpIHsNCj4g KwlzdHJ1Y3QgbGNvcmVfZG1hX21hcF90ICpsY29yZV9kbWFfbWFwOw0KPiArCWNoYXIgKmlucHV0 ID0gc3RybmR1cCh2YWx1ZSwgc3RybGVuKHZhbHVlKSArIDEpOw0KPiArCWNoYXIgKmFkZHJzID0g aW5wdXQ7DQo+ICsJY2hhciAqcHRyc1syXTsNCj4gKwljaGFyICpzdGFydCwgKmVuZCwgKnN1YnN0 cjsNCj4gKwl1aW50MTZfdCBsY29yZV9pZDsNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKw0KPiArCXdo aWxlICgqYWRkcnMgPT0gJ1wwJykNCj4gKwkJYWRkcnMrKzsNCj4gKwlpZiAoKmFkZHJzID09ICdc MCcpIHsNCj4gKwkJZnByaW50ZihzdGRlcnIsICJObyBpbnB1dCBETUEgYWRkcmVzc2VzXG4iKTsN Cj4gKwkJcmV0ID0gLTE7DQo+ICsJCWdvdG8gb3V0Ow0KPiArCX0NCj4gKw0KPiArCXN1YnN0ciA9 IHN0cnRvayhhZGRycywgIiwiKTsNCj4gKwlpZiAoc3Vic3RyID09IE5VTEwpIHsNCj4gKwkJZnBy aW50ZihzdGRlcnIsICJObyBpbnB1dCBETUEgYWRkcmVzc1xuIik7DQo+ICsJCXJldCA9IC0xOw0K PiArCQlnb3RvIG91dDsNCj4gKwl9DQo+ICsNCj4gKwltZW1zZXQoJnRlc3RfY2FzZS0+bGNvcmVf ZG1hX21hcCwgMCwgc2l6ZW9mKHN0cnVjdA0KPiBsY29yZV9kbWFfbWFwX3QpKTsNCj4gKw0KPiAr CWRvIHsNCj4gKwkJcnRlX3N0cnNwbGl0KHN1YnN0ciwgc3RybGVuKHN1YnN0ciksIHB0cnMsIDIs ICdAJyk7DQo+ICsNCj4gKwkJc3RhcnQgPSBzdHJzdHIocHRyc1swXSwgImxjb3JlIik7DQo+ICsJ CWlmIChzdGFydCA9PSBOVUxMKSB7DQo+ICsJCQlmcHJpbnRmKHN0ZGVyciwgIklsbGVnYWwgbGNv cmVcbiIpOw0KPiArCQkJcmV0ID0gLTE7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArDQo+ICsJ CXN0YXJ0ICs9IDU7DQo+ICsJCWxjb3JlX2lkID0gc3RydG9sKHN0YXJ0LCAmZW5kLCAwKTsNCj4g KwkJaWYgKGVuZCA9PSBzdGFydCkgew0KPiArCQkJZnByaW50ZihzdGRlcnIsICJObyBpbnB1dCBs Y29yZSBJRCBvciBJRCAlZCBpcw0KPiB3cm9uZ1xuIiwgbGNvcmVfaWQpOw0KPiArCQkJcmV0ID0g LTE7DQo+ICsJCQlicmVhazsNCj4gKwkJfQ0KPiArDQo+ICsJCWxjb3JlX2RtYV9tYXAgPSAmdGVz dF9jYXNlLT5sY29yZV9kbWFfbWFwOw0KPiArCQlsY29yZV9kbWFfbWFwLT5sY29yZXNbbGNvcmVf ZG1hX21hcC0+Y250XSA9IGxjb3JlX2lkOw0KPiArCQlzdHJjcHkobGNvcmVfZG1hX21hcC0+ZG1h X25hbWVzW2xjb3JlX2RtYV9tYXAtDQo+ID5jbnRdLCBwdHJzWzFdKTsNCj4gKwkJbGNvcmVfZG1h X21hcC0+Y250Kys7DQo+ICsJCXN1YnN0ciA9IHN0cnRvayhOVUxMLCAiLCIpOw0KPiArCX0gd2hp bGUgKHN1YnN0ciAhPSBOVUxMKTsNCj4gKw0KPiArb3V0Og0KPiArCWZyZWUoaW5wdXQpOw0KPiAr CXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQNCj4gK3BhcnNlX2VudHJ5KGNv bnN0IGNoYXIgKnZhbHVlLCBzdHJ1Y3QgdGVzdF9jb25maWd1cmVfZW50cnkgKmVudHJ5KSB7DQo+ ICsJY2hhciBpbnB1dFsyNTVdID0gezB9Ow0KPiArCWNoYXIgKmFyZ3NbTUFYX1BBUkFNU19QRVJf RU5UUlldOw0KPiArCWludCBhcmdzX25yID0gLTE7DQo+ICsNCj4gKwlpZiAodmFsdWUgPT0gTlVM TCB8fCBlbnRyeSA9PSBOVUxMKQ0KPiArCQlnb3RvIG91dDsNCj4gKw0KPiArCXN0cm5jcHkoaW5w dXQsIHZhbHVlLCAyNTQpOw0KPiArCWlmICgqaW5wdXQgPT0gJ1wwJykNCj4gKwkJZ290byBvdXQ7 DQo+ICsNCj4gKwlhcmdzX25yID0gcnRlX3N0cnNwbGl0KGlucHV0LCBzdHJsZW4oaW5wdXQpLCBh cmdzLA0KPiBNQVhfUEFSQU1TX1BFUl9FTlRSWSwgJywnKTsNCj4gKwlpZiAoYXJnc19uciAhPSAx ICYmIGFyZ3NfbnIgIT0gNCkNCj4gKwkJZ290byBvdXQ7DQo+ICsNCj4gKwllbnRyeS0+Y3VyID0g ZW50cnktPmZpcnN0ID0gKHVpbnQzMl90KWF0b2koYXJnc1swXSk7DQo+ICsNCj4gKwlpZiAoYXJn c19uciA9PSA0KSB7DQo+ICsJCWVudHJ5LT5sYXN0ID0gKHVpbnQzMl90KWF0b2koYXJnc1sxXSk7 DQo+ICsJCWVudHJ5LT5pbmNyID0gKHVpbnQzMl90KWF0b2koYXJnc1syXSk7DQo+ICsJCWlmICgh c3RyY21wKGFyZ3NbM10sICJNVUwiKSkNCj4gKwkJCWVudHJ5LT5vcCA9IE9QX01VTDsNCj4gKwkJ ZWxzZSBpZiAoIXN0cmNtcChhcmdzWzNdLCAiQUREIikpDQo+ICsJCQllbnRyeS0+b3AgPSBPUF9B REQ7DQo+ICsJCWVsc2Ugew0KPiArCQkJcHJpbnRmKCJJbnZhbGlkIG9wICVzLlxuIiwgYXJnc1sz XSk7DQo+ICsJCQlhcmdzX25yID0gLTE7DQo+ICsJCX0NCj4gKwl9IGVsc2Ugew0KPiArCQllbnRy eS0+b3AgPSBPUF9OT05FOw0KPiArCQllbnRyeS0+bGFzdCA9IDA7DQo+ICsJCWVudHJ5LT5pbmNy ID0gMDsNCj4gKwl9DQo+ICtvdXQ6DQo+ICsJcmV0dXJuIGFyZ3NfbnI7DQo+ICt9DQo+ICsNCj4g K3N0YXRpYyB1aW50MTZfdA0KPiArbG9hZF9jb25maWdzKGNvbnN0IGNoYXIgKnBhdGgpDQo+ICt7 DQo+ICsJc3RydWN0IHJ0ZV9jZmdmaWxlICpjZmdmaWxlOw0KPiArCWludCBuYl9zZWN0aW9ucywg aTsNCj4gKwlzdHJ1Y3QgdGVzdF9jb25maWd1cmUgKnRlc3RfY2FzZTsNCj4gKwljaGFyIHNlY3Rp b25fbmFtZVtDRkdfTkFNRV9MRU5dOw0KPiArCWNvbnN0IGNoYXIgKmNhc2VfdHlwZTsNCj4gKwlj b25zdCBjaGFyICpsY29yZV9kbWE7DQo+ICsJY29uc3QgY2hhciAqbWVtX3NpemVfc3RyLCAqYnVm X3NpemVfc3RyLCAqcmluZ19zaXplX3N0ciwNCj4gKmtpY2tfYmF0Y2hfc3RyOw0KPiArCWludCBh cmdzX25yLCBuYl92cDsNCj4gKwlib29sIGlzX2RtYTsNCj4gKw0KPiArCXByaW50ZigiY29uZmln IGZpbGUgcGFyc2luZy4uLlxuIik7DQo+ICsJY2ZnZmlsZSA9IHJ0ZV9jZmdmaWxlX2xvYWQocGF0 aCwgMCk7DQo+ICsJaWYgKCFjZmdmaWxlKSB7DQo+ICsJCXByaW50ZigiT3BlbiBjb25maWd1cmUg ZmlsZSBlcnJvci5cbiIpOw0KPiArCQlleGl0KDEpOw0KPiArCX0NCj4gKw0KPiArCW5iX3NlY3Rp b25zID0gcnRlX2NmZ2ZpbGVfbnVtX3NlY3Rpb25zKGNmZ2ZpbGUsIE5VTEwsIDApOw0KPiArCWlm IChuYl9zZWN0aW9ucyA+IE1BWF9URVNUX0NBU0VTKSB7DQo+ICsJCXByaW50ZigiRXJyb3I6IFRo ZSBtYXhpbXVtIG51bWJlciBvZiBjYXNlcyBpcyAlZC5cbiIsDQo+IE1BWF9URVNUX0NBU0VTKTsN Cj4gKwkJZXhpdCgxKTsNCj4gKwl9DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgbmJfc2VjdGlv bnM7IGkrKykgew0KPiArCQlzbnByaW50ZihzZWN0aW9uX25hbWUsIENGR19OQU1FX0xFTiwgImNh c2UlZCIsIGkgKyAxKTsNCj4gKwkJdGVzdF9jYXNlID0gJnRlc3RfY2FzZXNbaV07DQo+ICsJCWNh c2VfdHlwZSA9IHJ0ZV9jZmdmaWxlX2dldF9lbnRyeShjZmdmaWxlLCBzZWN0aW9uX25hbWUsDQo+ ICJ0eXBlIik7DQo+ICsJCWlmICghY2FzZV90eXBlKSB7DQo+ICsJCQlwcmludGYoIkVycm9yOiBO byBjYXNlIHR5cGUgaW4gY2FzZSAlZCwgdGhlIHRlc3Qgd2lsbCBiZQ0KPiBmaW5pc2hlZCBoZXJl LlxuIiwNCj4gKwkJCQlpICsgMSk7DQo+ICsJCQl0ZXN0X2Nhc2UtPmlzX3ZhbGlkID0gZmFsc2U7 DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCWlmIChzdHJjbXAoY2FzZV90eXBl LCBETUFfTUVNX0NPUFkpID09IDApIHsNCj4gKwkJCXRlc3RfY2FzZS0+dGVzdF90eXBlID0NCj4g VEVTVF9UWVBFX0RNQV9NRU1fQ09QWTsNCj4gKwkJCXRlc3RfY2FzZS0+dGVzdF90eXBlX3N0ciA9 IERNQV9NRU1fQ09QWTsNCj4gKwkJCWlzX2RtYSA9IHRydWU7DQo+ICsJCX0gZWxzZSBpZiAoc3Ry Y21wKGNhc2VfdHlwZSwgQ1BVX01FTV9DT1BZKSA9PSAwKSB7DQo+ICsJCQl0ZXN0X2Nhc2UtPnRl c3RfdHlwZSA9DQo+IFRFU1RfVFlQRV9DUFVfTUVNX0NPUFk7DQo+ICsJCQl0ZXN0X2Nhc2UtPnRl c3RfdHlwZV9zdHIgPSBDUFVfTUVNX0NPUFk7DQo+ICsJCQlpc19kbWEgPSBmYWxzZTsNCj4gKwkJ fSBlbHNlIHsNCj4gKwkJCXByaW50ZigiRXJyb3I6IENhbm5vdCBmaW5kIGNhc2UgdHlwZSAlcyBp biBjYXNlJWQuXG4iLA0KPiBjYXNlX3R5cGUsIGkgKyAxKTsNCj4gKwkJCXRlc3RfY2FzZS0+aXNf dmFsaWQgPSBmYWxzZTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJbmJfdnAg PSAwOw0KPiArDQo+ICsJCXRlc3RfY2FzZS0+c3JjX251bWFfbm9kZSA9DQo+IChpbnQpYXRvaShy dGVfY2ZnZmlsZV9nZXRfZW50cnkoY2ZnZmlsZSwNCj4gKw0KPiAJc2VjdGlvbl9uYW1lLCAic3Jj X251bWFfbm9kZSIpKTsNCj4gKwkJdGVzdF9jYXNlLT5kc3RfbnVtYV9ub2RlID0NCj4gKGludClh dG9pKHJ0ZV9jZmdmaWxlX2dldF9lbnRyeShjZmdmaWxlLA0KPiArDQo+IAlzZWN0aW9uX25hbWUs ICJkc3RfbnVtYV9ub2RlIikpOw0KPiArDQo+ICsJCW1lbV9zaXplX3N0ciA9IHJ0ZV9jZmdmaWxl X2dldF9lbnRyeShjZmdmaWxlLCBzZWN0aW9uX25hbWUsDQo+ICJtZW1fc2l6ZSIpOw0KPiArCQlh cmdzX25yID0gcGFyc2VfZW50cnkobWVtX3NpemVfc3RyLCAmdGVzdF9jYXNlLQ0KPiA+bWVtX3Np emUpOw0KPiArCQlpZiAoYXJnc19uciA8IDApIHsNCj4gKwkJCXByaW50ZigicGFyc2UgZXJyb3Ig aW4gY2FzZSAlZC5cbiIsIGkgKyAxKTsNCj4gKwkJCXRlc3RfY2FzZS0+aXNfdmFsaWQgPSBmYWxz ZTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9IGVsc2UgaWYgKGFyZ3NfbnIgPiAxKQ0KPiArCQkJ bmJfdnArKzsNCj4gKw0KPiArCQlidWZfc2l6ZV9zdHIgPSBydGVfY2ZnZmlsZV9nZXRfZW50cnko Y2ZnZmlsZSwgc2VjdGlvbl9uYW1lLA0KPiAiYnVmX3NpemUiKTsNCj4gKwkJYXJnc19uciA9IHBh cnNlX2VudHJ5KGJ1Zl9zaXplX3N0ciwgJnRlc3RfY2FzZS0+YnVmX3NpemUpOw0KPiArCQlpZiAo YXJnc19uciA8IDApIHsNCj4gKwkJCXByaW50ZigicGFyc2UgZXJyb3IgaW4gY2FzZSAlZC5cbiIs IGkgKyAxKTsNCj4gKwkJCXRlc3RfY2FzZS0+aXNfdmFsaWQgPSBmYWxzZTsNCj4gKwkJCWNvbnRp bnVlOw0KPiArCQl9IGVsc2UgaWYgKGFyZ3NfbnIgPiAxKQ0KPiArCQkJbmJfdnArKzsNCj4gKw0K PiArCQlpZiAoaXNfZG1hKSB7DQo+ICsJCQlyaW5nX3NpemVfc3RyID0gcnRlX2NmZ2ZpbGVfZ2V0 X2VudHJ5KGNmZ2ZpbGUsDQo+IHNlY3Rpb25fbmFtZSwNCj4gKw0KPiAJImRtYV9yaW5nX3NpemUi KTsNCj4gKwkJCWFyZ3NfbnIgPSBwYXJzZV9lbnRyeShyaW5nX3NpemVfc3RyLCAmdGVzdF9jYXNl LQ0KPiA+cmluZ19zaXplKTsNCj4gKwkJCWlmIChhcmdzX25yIDwgMCkgew0KPiArCQkJCXByaW50 ZigicGFyc2UgZXJyb3IgaW4gY2FzZSAlZC5cbiIsIGkgKyAxKTsNCj4gKwkJCQl0ZXN0X2Nhc2Ut PmlzX3ZhbGlkID0gZmFsc2U7DQo+ICsJCQkJY29udGludWU7DQo+ICsJCQl9IGVsc2UgaWYgKGFy Z3NfbnIgPiAxKQ0KPiArCQkJCW5iX3ZwKys7DQo+ICsNCj4gKwkJCWtpY2tfYmF0Y2hfc3RyID0g cnRlX2NmZ2ZpbGVfZ2V0X2VudHJ5KGNmZ2ZpbGUsDQo+IHNlY3Rpb25fbmFtZSwgImtpY2tfYmF0 Y2giKTsNCj4gKwkJCWFyZ3NfbnIgPSBwYXJzZV9lbnRyeShraWNrX2JhdGNoX3N0ciwgJnRlc3Rf Y2FzZS0NCj4gPmtpY2tfYmF0Y2gpOw0KPiArCQkJaWYgKGFyZ3NfbnIgPCAwKSB7DQo+ICsJCQkJ cHJpbnRmKCJwYXJzZSBlcnJvciBpbiBjYXNlICVkLlxuIiwgaSArIDEpOw0KPiArCQkJCXRlc3Rf Y2FzZS0+aXNfdmFsaWQgPSBmYWxzZTsNCj4gKwkJCQljb250aW51ZTsNCj4gKwkJCX0gZWxzZSBp ZiAoYXJnc19uciA+IDEpDQo+ICsJCQkJbmJfdnArKzsNCj4gKw0KPiArCQkJbGNvcmVfZG1hID0g cnRlX2NmZ2ZpbGVfZ2V0X2VudHJ5KGNmZ2ZpbGUsDQo+IHNlY3Rpb25fbmFtZSwgImxjb3JlX2Rt YSIpOw0KPiArCQkJaW50IGxjb3JlX3JldCA9IHBhcnNlX2xjb3JlX2RtYSh0ZXN0X2Nhc2UsDQo+ IGxjb3JlX2RtYSk7DQo+ICsJCQlpZiAobGNvcmVfcmV0IDwgMCkgew0KPiArCQkJCXByaW50Zigi cGFyc2UgbGNvcmUgZG1hIGVycm9yIGluIGNhc2UgJWQuXG4iLCBpDQo+ICsgMSk7DQo+ICsJCQkJ dGVzdF9jYXNlLT5pc192YWxpZCA9IGZhbHNlOw0KPiArCQkJCWNvbnRpbnVlOw0KPiArCQkJfQ0K PiArCQl9IGVsc2Ugew0KPiArCQkJbGNvcmVfZG1hID0gcnRlX2NmZ2ZpbGVfZ2V0X2VudHJ5KGNm Z2ZpbGUsDQo+IHNlY3Rpb25fbmFtZSwgImxjb3JlIik7DQo+ICsJCQlpbnQgbGNvcmVfcmV0ID0g cGFyc2VfbGNvcmUodGVzdF9jYXNlLCBsY29yZV9kbWEpOw0KPiArCQkJaWYgKGxjb3JlX3JldCA8 IDApIHsNCj4gKwkJCQlwcmludGYoInBhcnNlIGxjb3JlIGVycm9yIGluIGNhc2UgJWQuXG4iLCBp ICsgMSk7DQo+ICsJCQkJdGVzdF9jYXNlLT5pc192YWxpZCA9IGZhbHNlOw0KPiArCQkJCWNvbnRp bnVlOw0KPiArCQkJfQ0KPiArCQl9DQo+ICsNCj4gKwkJaWYgKG5iX3ZwID4gMSkgew0KPiArCQkJ cHJpbnRmKCJFcnJvciwgZWFjaCBzZWN0aW9uIGNhbiBvbmx5IGhhdmUgYSBzaW5nbGUNCj4gdmFy aWFibGUgcGFyYW1ldGVyLlxuIik7DQo+ICsJCQl0ZXN0X2Nhc2UtPmlzX3ZhbGlkID0gZmFsc2U7 DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArDQo+ICsJCXRlc3RfY2FzZS0+Y2FjaGVfZmx1 c2ggPQ0KPiArCQkJKGludClhdG9pKHJ0ZV9jZmdmaWxlX2dldF9lbnRyeShjZmdmaWxlLCBzZWN0 aW9uX25hbWUsDQo+ICJjYWNoZV9mbHVzaCIpKTsNCj4gKwkJdGVzdF9jYXNlLT50ZXN0X3NlY3Mg PQ0KPiAodWludDE2X3QpYXRvaShydGVfY2ZnZmlsZV9nZXRfZW50cnkoY2ZnZmlsZSwNCj4gKwkJ CQkJc2VjdGlvbl9uYW1lLCAidGVzdF9zZWNvbmRzIikpOw0KPiArDQo+ICsJCXRlc3RfY2FzZS0+ ZWFsX2FyZ3MgPSBydGVfY2ZnZmlsZV9nZXRfZW50cnkoY2ZnZmlsZSwNCj4gc2VjdGlvbl9uYW1l LCAiZWFsX2FyZ3MiKTsNCj4gKwkJdGVzdF9jYXNlLT5pc192YWxpZCA9IHRydWU7DQo+ICsJfQ0K PiArDQo+ICsJcnRlX2NmZ2ZpbGVfY2xvc2UoY2ZnZmlsZSk7DQo+ICsJcHJpbnRmKCJjb25maWcg ZmlsZSBwYXJzaW5nIGNvbXBsZXRlLlxuXG4iKTsNCj4gKwlyZXR1cm4gaTsNCj4gK30NCj4gKw0K PiArLyogUGFyc2UgdGhlIGFyZ3VtZW50IGdpdmVuIGluIHRoZSBjb21tYW5kIGxpbmUgb2YgdGhl IGFwcGxpY2F0aW9uICovDQo+ICtzdGF0aWMgaW50IGFwcGVuZF9lYWxfYXJncyhpbnQgYXJnYywg Y2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKmVhbF9hcmdzLA0KPiArY2hhciAqKm5ld19hcmd2KSB7 DQo+ICsJaW50IGk7DQo+ICsJY2hhciAqdG9rZW5zW01BWF9FQUxfUEFSQU1fTkJdOw0KPiArCWNo YXIgYXJnc1tNQVhfRUFMX1BBUkFNX0xFTl0gPSB7MH07DQo+ICsJaW50IHRva2VuX25iLCBuZXdf YXJnYyA9IDA7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7DQo+ICsJCWlm ICgoc3RyY21wKGFyZ3ZbaV0sIENNRExJTkVfQ09ORklHX0FSRykgPT0gMCkgfHwNCj4gKwkJCQko c3RyY21wKGFyZ3ZbaV0sIENNRExJTkVfUkVTVUxUX0FSRykgPT0NCj4gMCkpIHsNCj4gKwkJCWkr KzsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsJCXN0cmxjcHkobmV3X2FyZ3ZbbmV3X2Fy Z2NdLCBhcmd2W2ldLA0KPiBzaXplb2YobmV3X2FyZ3ZbbmV3X2FyZ2NdKSk7DQo+ICsJCW5ld19h cmdjKys7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKGVhbF9hcmdzKSB7DQo+ICsJCXN0cmxjcHkoYXJn cywgZWFsX2FyZ3MsIHNpemVvZihhcmdzKSk7DQo+ICsJCXRva2VuX25iID0gcnRlX3N0cnNwbGl0 KGFyZ3MsIHN0cmxlbihhcmdzKSwNCj4gKwkJCQkJdG9rZW5zLCBNQVhfRUFMX1BBUkFNX05CLCAn ICcpOw0KPiArCQlmb3IgKGkgPSAwOyBpIDwgdG9rZW5fbmI7IGkrKykNCj4gKwkJCXN0cmNweShu ZXdfYXJndltuZXdfYXJnYysrXSwgdG9rZW5zW2ldKTsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4g bmV3X2FyZ2M7DQo+ICt9DQo+ICsNCj4gK2ludA0KPiArbWFpbihpbnQgYXJnYywgY2hhciAqYXJn dltdKQ0KPiArew0KPiArCWludCByZXQ7DQo+ICsJdWludDE2X3QgY2FzZV9uYjsNCj4gKwl1aW50 MzJfdCBpLCBuYl9sY29yZXM7DQo+ICsJcGlkX3QgY3BpZCwgd3BpZDsNCj4gKwlpbnQgd3N0YXR1 czsNCj4gKwljaGFyIGFyZ3NbTUFYX0VBTF9QQVJBTV9OQl1bTUFYX0VBTF9QQVJBTV9MRU5dOw0K PiArCWNoYXIgKnBhcmdzW01BWF9FQUxfUEFSQU1fTkJdOw0KPiArCWNoYXIgKmNmZ19wYXRoX3B0 ciA9IE5VTEw7DQo+ICsJY2hhciAqcnN0X3BhdGhfcHRyID0gTlVMTDsNCj4gKwljaGFyIHJzdF9w YXRoW1BBVEhfTUFYXTsNCj4gKwlpbnQgbmV3X2FyZ2M7DQo+ICsJYm9vbCBpc19maXJzdF9jYXNl ID0gdHJ1ZTsNCj4gKw0KPiArCW1lbXNldChhcmdzLCAwLCBzaXplb2YoYXJncykpOw0KPiArDQo+ ICsJZm9yIChpID0gMDsgaSA8IFJURV9ESU0ocGFyZ3MpOyBpKyspDQo+ICsJCXBhcmdzW2ldID0g YXJnc1tpXTsNCj4gKw0KPiArCWZvciAoaSA9IDA7IGkgPCAodWludDMyX3QpYXJnYzsgaSsrKSB7 DQo+ICsJCWlmIChzdHJuY21wKGFyZ3ZbaV0sIENNRExJTkVfQ09ORklHX0FSRywNCj4gTUFYX0xP TkdfT1BUX1NaKSA9PSAwKQ0KPiArCQkJY2ZnX3BhdGhfcHRyID0gYXJndltpICsgMV07DQo+ICsJ CWlmIChzdHJuY21wKGFyZ3ZbaV0sIENNRExJTkVfUkVTVUxUX0FSRywNCj4gTUFYX0xPTkdfT1BU X1NaKSA9PSAwKQ0KPiArCQkJcnN0X3BhdGhfcHRyID0gYXJndltpICsgMV07DQo+ICsJfQ0KPiAr CWlmIChjZmdfcGF0aF9wdHIgPT0gTlVMTCkgew0KPiArCQlwcmludGYoIkNvbmZpZyBmaWxlIG5v dCBhc3NpZ25lZC5cbiIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJfQ0KPiArCWlmIChyc3RfcGF0 aF9wdHIgPT0gTlVMTCkgew0KPiArCQlzdHJsY3B5KHJzdF9wYXRoLCBjZmdfcGF0aF9wdHIsIFBB VEhfTUFYKTsNCj4gKwkJc3RyY2F0KHN0cnRvayhiYXNlbmFtZShyc3RfcGF0aCksICIuIiksICJf cmVzdWx0LmNzdiIpOw0KPiArCQlyc3RfcGF0aF9wdHIgPSByc3RfcGF0aDsNCj4gKwl9DQo+ICsN Cj4gKwljYXNlX25iID0gbG9hZF9jb25maWdzKGNmZ19wYXRoX3B0cik7DQo+ICsJZmQgPSBmb3Bl bihyc3RfcGF0aF9wdHIsICJ3Iik7DQo+ICsJaWYgKGZkID09IE5VTEwpIHsNCj4gKwkJcHJpbnRm KCJPcGVuIG91dHB1dCBDU1YgZmlsZSBlcnJvci5cbiIpOw0KPiArCQlyZXR1cm4gLTE7DQo+ICsJ fQ0KPiArCWZjbG9zZShmZCk7DQo+ICsNCj4gKwlmb3IgKGkgPSAwOyBpIDwgY2FzZV9uYjsgaSsr KSB7DQo+ICsJCWlmICh0ZXN0X2Nhc2VzW2ldLnRlc3RfdHlwZSA9PSBURVNUX1RZUEVfTk9ORSkg ew0KPiArCQkJcHJpbnRmKCJObyB0ZXN0IHR5cGUgaW4gdGVzdCBjYXNlICVkLlxuXG4iLCBpICsg MSk7DQo+ICsJCQljb250aW51ZTsNCj4gKwkJfQ0KPiArCQlpZiAoIXRlc3RfY2FzZXNbaV0uaXNf dmFsaWQpIHsNCj4gKwkJCXByaW50ZigiSW52YWxpZCB0ZXN0IGNhc2UgJWQuXG5cbiIsIGkgKyAx KTsNCj4gKwkJCWNvbnRpbnVlOw0KPiArCQl9DQo+ICsNCj4gKwkJY3BpZCA9IGZvcmsoKTsNCg0K W0Fub29iXSBEbyB3ZSByZWFsbHkgbmVlZCBmb3JrKCk/IENhbid0IHdlIHVzZSBjb2RlIGxpa2Us DQoNCgkJUlRFX0xDT1JFX0ZPUkVBQ0hfV09SS0VSKGxjb3JlX2lkKSB7DQoJCQlyZXQgfD0gcnRl X2VhbF93YWl0X2xjb3JlKGxjb3JlX2lkKTsNCgkJfQ0KDQp0byB3YWl0IGZvciBhbGwgdGhyZWFk cyB0byBleGl0Pw0KDQo+ICsJCWlmIChjcGlkIDwgMCkgew0KPiArCQkJcHJpbnRmKCJGb3JrIGNh c2UgJWQgZmFpbGVkLlxuIiwgaSArIDEpOw0KPiArCQkJZXhpdChFWElUX0ZBSUxVUkUpOw0KPiAr CQl9IGVsc2UgaWYgKGNwaWQgPT0gMCkgew0KPiArCQkJcHJpbnRmKCJcblJ1bm5pbmcgY2FzZSAl dVxuXG4iLCBpICsgMSk7DQo+ICsNCj4gKwkJCW5ld19hcmdjID0gYXBwZW5kX2VhbF9hcmdzKGFy Z2MsIGFyZ3YsDQo+IHRlc3RfY2FzZXNbaV0uZWFsX2FyZ3MsIHBhcmdzKTsNCj4gKwkJCXJldCA9 IHJ0ZV9lYWxfaW5pdChuZXdfYXJnYywgcGFyZ3MpOw0KPiArCQkJaWYgKHJldCA8IDApDQo+ICsJ CQkJcnRlX2V4aXQoRVhJVF9GQUlMVVJFLCAiSW52YWxpZCBFQUwNCj4gYXJndW1lbnRzXG4iKTsN Cj4gKw0KPiArCQkJLyogQ2hlY2sgbGNvcmVzLiAqLw0KPiArCQkJbmJfbGNvcmVzID0gcnRlX2xj b3JlX2NvdW50KCk7DQo+ICsJCQlpZiAobmJfbGNvcmVzIDwgMikNCj4gKwkJCQlydGVfZXhpdChF WElUX0ZBSUxVUkUsDQo+ICsJCQkJCSJUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgMiB3b3JrZXIN Cj4gbGNvcmVzLlxuIik7DQo+ICsNCj4gKwkJCWZkID0gZm9wZW4ocnN0X3BhdGhfcHRyLCAiYSIp Ow0KPiArCQkJaWYgKCFmZCkgew0KPiArCQkJCXByaW50ZigiT3BlbiBvdXRwdXQgQ1NWIGZpbGUg ZXJyb3IuXG4iKTsNCj4gKwkJCQlyZXR1cm4gMDsNCj4gKwkJCX0NCj4gKw0KPiArCQkJaWYgKGlz X2ZpcnN0X2Nhc2UpIHsNCj4gKwkJCQlvdXRwdXRfZW52X2luZm8oKTsNCj4gKwkJCQlpc19maXJz dF9jYXNlID0gZmFsc2U7DQo+ICsJCQl9DQo+ICsJCQlydW5fdGVzdChpICsgMSwgJnRlc3RfY2Fz ZXNbaV0pOw0KPiArDQo+ICsJCQkvKiBjbGVhbiB1cCB0aGUgRUFMICovDQo+ICsJCQlydGVfZWFs X2NsZWFudXAoKTsNCj4gKw0KPiArCQkJZmNsb3NlKGZkKTsNCj4gKw0KPiArCQkJcHJpbnRmKCJc bkNhc2UgJXUgY29tcGxldGVkLlxuXG4iLCBpICsgMSk7DQo+ICsNCj4gKwkJCWV4aXQoRVhJVF9T VUNDRVNTKTsNCj4gKwkJfSBlbHNlIHsNCj4gKwkJCXdwaWQgPSB3YWl0cGlkKGNwaWQsICZ3c3Rh dHVzLCAwKTsNCj4gKwkJCWlmICh3cGlkID09IC0xKSB7DQo+ICsJCQkJcHJpbnRmKCJ3YWl0cGlk IGVycm9yLlxuIik7DQo+ICsJCQkJZXhpdChFWElUX0ZBSUxVUkUpOw0KPiArCQkJfQ0KPiArDQo+ ICsJCQlpZiAoV0lGRVhJVEVEKHdzdGF0dXMpKQ0KPiArCQkJCXByaW50ZigiQ2FzZSBwcm9jZXNz IGV4aXRlZC4gc3RhdHVzICVkXG5cbiIsDQo+ICsJCQkJCVdFWElUU1RBVFVTKHdzdGF0dXMpKTsN Cj4gKwkJCWVsc2UgaWYgKFdJRlNJR05BTEVEKHdzdGF0dXMpKQ0KPiArCQkJCXByaW50ZigiQ2Fz ZSBwcm9jZXNzIGtpbGxlZCBieSBzaWduYWwgJWRcblxuIiwNCj4gKwkJCQkJV1RFUk1TSUcod3N0 YXR1cykpOw0KPiArCQkJZWxzZSBpZiAoV0lGU1RPUFBFRCh3c3RhdHVzKSkNCj4gKwkJCQlwcmlu dGYoIkNhc2UgcHJvY2VzcyBzdG9wcGVkIGJ5IHNpZ25hbA0KPiAlZFxuXG4iLA0KPiArCQkJCQlX U1RPUFNJRyh3c3RhdHVzKSk7DQo+ICsJCQllbHNlIGlmIChXSUZDT05USU5VRUQod3N0YXR1cykp DQo+ICsJCQkJcHJpbnRmKCJDYXNlIHByb2Nlc3MgY29udGludWVkLlxuXG4iKTsNCj4gKwkJCWVs c2UNCj4gKwkJCQlwcmludGYoIkNhc2UgcHJvY2VzcyB1bmtub3duDQo+IHRlcm1pbmF0ZWQuXG5c biIpOw0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJcHJpbnRmKCJCeWUuLi5cbiIpOw0KPiArCXJl dHVybiAwOw0KPiArfQ0KPiArDQo+IGRpZmYgLS1naXQgYS9hcHAvdGVzdC1kbWEtcGVyZi9tYWlu LmggYi9hcHAvdGVzdC1kbWEtcGVyZi9tYWluLmggbmV3IGZpbGUNCj4gbW9kZSAxMDA2NDQgaW5k ZXggMDAwMDAwMDAwMC4uMjE1YWM0MjY3Mw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL2FwcC90 ZXN0LWRtYS1wZXJmL21haW4uaA0KPiBAQCAtMCwwICsxLDY5IEBADQo+ICsvKiBTUERYLUxpY2Vu c2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+ICsgKiBDb3B5cmlnaHQoYykgMjAyMyBJbnRl bCBDb3Jwb3JhdGlvbg0KPiArICovDQo+ICsNCj4gKyNpZm5kZWYgX01BSU5fSF8NCj4gKyNkZWZp bmUgX01BSU5fSF8NCj4gKw0KPiArDQo+ICsjaW5jbHVkZSA8cnRlX2NvbW1vbi5oPg0KPiArI2lu Y2x1ZGUgPHJ0ZV9jeWNsZXMuaD4NCj4gKyNpbmNsdWRlIDxydGVfZGV2Lmg+DQo+ICsjaW5jbHVk ZSA8cnRlX2RtYWRldi5oPg0KPiArDQo+ICsjaWZuZGVmIF9fbWF5YmVfdW51c2VkDQo+ICsjZGVm aW5lIF9fbWF5YmVfdW51c2VkCV9fcnRlX3VudXNlZA0KPiArI2VuZGlmDQo+ICsNCj4gKyNkZWZp bmUgTUFYX1dPUktFUl9OQiAxMjgNCj4gKyNkZWZpbmUgTUFYX09VVFBVVF9TVFJfTEVOIDUxMg0K PiArDQo+ICsjZGVmaW5lIE1BWF9ETUFfTkIgMTI4DQo+ICsjZGVmaW5lIE1BWF9MQ09SRV9OQiAy NTYNCj4gKw0KPiArZXh0ZXJuIGNoYXIgb3V0cHV0X3N0cltNQVhfV09SS0VSX05CXVtNQVhfT1VU UFVUX1NUUl9MRU5dOw0KPiArDQo+ICt0eXBlZGVmIGVudW0gew0KPiArCU9QX05PTkUgPSAwLA0K PiArCU9QX0FERCwNCj4gKwlPUF9NVUwNCj4gK30gYWxnX29wX3R5cGU7DQo+ICsNCj4gK3N0cnVj dCB0ZXN0X2NvbmZpZ3VyZV9lbnRyeSB7DQo+ICsJdWludDMyX3QgZmlyc3Q7DQo+ICsJdWludDMy X3QgbGFzdDsNCj4gKwl1aW50MzJfdCBpbmNyOw0KPiArCWFsZ19vcF90eXBlIG9wOw0KPiArCXVp bnQzMl90IGN1cjsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCBsY29yZV9kbWFfbWFwX3Qgew0KPiAr CXVpbnQzMl90IGxjb3Jlc1tNQVhfV09SS0VSX05CXTsNCj4gKwljaGFyIGRtYV9uYW1lc1tNQVhf V09SS0VSX05CXVtSVEVfREVWX05BTUVfTUFYX0xFTl07DQo+ICsJaW50MTZfdCBkbWFfaWRzW01B WF9XT1JLRVJfTkJdOw0KPiArCXVpbnQxNl90IGNudDsNCj4gK307DQo+ICsNCj4gK3N0cnVjdCB0 ZXN0X2NvbmZpZ3VyZSB7DQo+ICsJYm9vbCBpc192YWxpZDsNCj4gKwl1aW50OF90IHRlc3RfdHlw ZTsNCj4gKwljb25zdCBjaGFyICp0ZXN0X3R5cGVfc3RyOw0KPiArCXVpbnQxNl90IHNyY19udW1h X25vZGU7DQo+ICsJdWludDE2X3QgZHN0X251bWFfbm9kZTsNCj4gKwl1aW50MTZfdCBvcGNvZGU7 DQo+ICsJYm9vbCBpc19kbWE7DQo+ICsJc3RydWN0IGxjb3JlX2RtYV9tYXBfdCBsY29yZV9kbWFf bWFwOw0KPiArCXN0cnVjdCB0ZXN0X2NvbmZpZ3VyZV9lbnRyeSBtZW1fc2l6ZTsNCj4gKwlzdHJ1 Y3QgdGVzdF9jb25maWd1cmVfZW50cnkgYnVmX3NpemU7DQo+ICsJc3RydWN0IHRlc3RfY29uZmln dXJlX2VudHJ5IHJpbmdfc2l6ZTsNCj4gKwlzdHJ1Y3QgdGVzdF9jb25maWd1cmVfZW50cnkga2lj a19iYXRjaDsNCj4gKwl1aW50MzJfdCBjYWNoZV9mbHVzaDsNCj4gKwl1aW50MzJfdCBucl9idWY7 DQo+ICsJdWludDE2X3QgdGVzdF9zZWNzOw0KPiArCWNvbnN0IGNoYXIgKmVhbF9hcmdzOw0KPiAr CXVpbnQ4X3Qgc2NlbmFyaW9faWQ7DQo+ICt9Ow0KPiArDQo+ICt2b2lkIG1lbV9jb3B5X2JlbmNo bWFyayhzdHJ1Y3QgdGVzdF9jb25maWd1cmUgKmNmZywgYm9vbCBpc19kbWEpOw0KPiArDQo+ICsj ZW5kaWYgLyogX01BSU5fSF8gKi8NCj4gZGlmZiAtLWdpdCBhL2FwcC90ZXN0LWRtYS1wZXJmL21l c29uLmJ1aWxkIGIvYXBwL3Rlc3QtZG1hLQ0KPiBwZXJmL21lc29uLmJ1aWxkIG5ldyBmaWxlIG1v ZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLmJkNmMyNjQwMDINCj4gLS0tIC9kZXYvbnVsbA0K PiArKysgYi9hcHAvdGVzdC1kbWEtcGVyZi9tZXNvbi5idWlsZA0KPiBAQCAtMCwwICsxLDE3IEBA DQo+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UgIyBDb3B5cmlnaHQo YykgMjAxOS0yMDIzIEludGVsDQo+ICtDb3Jwb3JhdGlvbg0KPiArDQo+ICsjIG1lc29uIGZpbGUs IGZvciBidWlsZGluZyB0aGlzIGFwcCBhcyBwYXJ0IG9mIGEgbWFpbiBEUERLIGJ1aWxkLg0KPiAr DQo+ICtpZiBpc193aW5kb3dzDQo+ICsgICAgYnVpbGQgPSBmYWxzZQ0KPiArICAgIHJlYXNvbiA9 ICdub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MnDQo+ICsgICAgc3ViZGlyX2RvbmUoKQ0KPiArZW5k aWYNCj4gKw0KPiArZGVwcyArPSBbJ2RtYWRldicsICdtYnVmJywgJ2NmZ2ZpbGUnXQ0KPiArDQo+ ICtzb3VyY2VzID0gZmlsZXMoDQo+ICsgICAgICAgICdtYWluLmMnLA0KPiArICAgICAgICAnYmVu Y2htYXJrLmMnLA0KPiArKQ0KPiAtLQ0KPiAyLjQwLjENCg0K