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 5F3E945B42; Tue, 15 Oct 2024 11:08:22 +0200 (CEST) Received: from mails.dpdk.org (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 27D2F4027D; Tue, 15 Oct 2024 11:08:22 +0200 (CEST) Received: from mx0a-0016f401.pphosted.com (mx0a-0016f401.pphosted.com [67.231.148.174]) by mails.dpdk.org (Postfix) with ESMTP id 084714027D for ; Tue, 15 Oct 2024 11:08:19 +0200 (CEST) Received: from pps.filterd (m0431384.ppops.net [127.0.0.1]) by mx0a-0016f401.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 49F63Bce030099; Tue, 15 Oct 2024 02:08:16 -0700 Received: from nam04-mw2-obe.outbound.protection.outlook.com (mail-mw2nam04lp2171.outbound.protection.outlook.com [104.47.73.171]) by mx0a-0016f401.pphosted.com (PPS) with ESMTPS id 429jskrau6-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 15 Oct 2024 02:08:15 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=R9KV7ZFkeuz0C9HFebv8Rd+S1pkXteewmwK13Bqrrebb5ocWQ9UN2DhNyVAHb6C6gqKXmmvS1P5DTrm0FW4D9ab3tY47LGvmL10dYhkF7daaGYrqNeogfHenVMgrOZMxrMadKtrqIY3ArSktfqvkJ4O4U53uylly5dL7xaIytZBdxhmGfasZ9JCCy1XnrWrPutV6mn13xol/RxMLev3h5wtDZsNWgWeR/fSS+r20htUayZSrM/B1nknHIrCIX7tN0tonIxmakquHht5FHdjZ7AXmbGHwvakG1IdTnAeZrbZXuuQ1pIJSbcitZDFb7r9INj2ygItt+yckerMfMa93wA== 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=1nk0yeE9i2eto/k9BwrFphY7UJi7as9RLANzEeWdFVE=; b=lu7nGvPjkJpXKCvVBH2F2R5frxtPloXeMP0Cp+zhaW3PF8DGgB+h7Gc5qaZSuDGRI8QvDK3nOFdK/kD6fydTaIEwLavon3nzzJ+cFaugGE59OBe1YuounIZ9s3nbJedLvi9SCoepUfL9bI2LbpQMgqPMOxISBC0/ewNYUQgbgy+tpbh4jFBnC8zGvAzNnDF+cayuWxEaBDt+6rKtLEDPEkjGRLdLzu26luKVZUZBVuBERihRv0kh5RDEHWTns5AazLjBk60QNk11Xopf4eSNN7HmgSTpPtLmz51RPyUETevqtTTQ2NTQMC+8bCU96sp9QWFfcCKfA9bMbjdsiVAqAQ== 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.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1nk0yeE9i2eto/k9BwrFphY7UJi7as9RLANzEeWdFVE=; b=m/+PGdRtLQ5r8W7GyBHBoAwRuit8aDSKPhtY8gK0qNB3TsF7AP3l1/AEsPFFYW2UKd8MeDcxQTfTF66lSTI3p67o+LAKGDTqSlsn1NJmN6o1h5oPmpkYSyRqbnKGg9xnFuzG4w0s1I55kpm3uyEC7eRkNIVi0xG+b/4I0fstEDg= Received: from DM4PR18MB4368.namprd18.prod.outlook.com (2603:10b6:5:39d::6) by PH7PR18MB5057.namprd18.prod.outlook.com (2603:10b6:510:15c::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8048.26; Tue, 15 Oct 2024 09:08:10 +0000 Received: from DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::1679:98:2091:7e98]) by DM4PR18MB4368.namprd18.prod.outlook.com ([fe80::1679:98:2091:7e98%7]) with mapi id 15.20.8048.020; Tue, 15 Oct 2024 09:08:10 +0000 From: Tomasz Duszynski To: Konstantin Ananyev , Thomas Monjalon CC: "Ruifeng.Wang@arm.com" , "bruce.richardson@intel.com" , "david.marchand@redhat.com" , "dev@dpdk.org" , Jerin Jacob , "konstantin.v.ananyev@yandex.ru" , "mattias.ronnblom@ericsson.com" , "mb@smartsharesystems.com" , "roretzla@linux.microsoft.com" , "zhoumin@loongson.cn" , "stephen@networkplumber.org" Subject: RE: [PATCH v14 1/4] lib: add generic support for reading PMU events Thread-Topic: [PATCH v14 1/4] lib: add generic support for reading PMU events Thread-Index: AQHbG8Lz18C3AnVickC0ZF6x2leNf7KBcZIAgASVqIA= Date: Tue, 15 Oct 2024 09:08:10 +0000 Message-ID: References: <20241009112308.2973903-1-tduszynski@marvell.com> <20241011094944.3586051-1-tduszynski@marvell.com> <20241011094944.3586051-2-tduszynski@marvell.com> <660c6a2a24fd4cd785333881208fb659@huawei.com> In-Reply-To: <660c6a2a24fd4cd785333881208fb659@huawei.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM4PR18MB4368:EE_|PH7PR18MB5057:EE_ x-ms-office365-filtering-correlation-id: edd404fd-9459-4742-2a7c-08dcecf8e40d x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; ARA:13230040|1800799024|366016|7416014|376014|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?Vm5iMys4N1B1aUNhZEpxYlp6WU1NeHI4MmNuT2h0Sk05eFREbTd3YTZWTXhC?= =?utf-8?B?MTJpaTNYV2ZCYUZ3eThjNTl0MDMxeDhyaW4wY0R5ZkZRNmxIcHdpRkZZR3Uw?= =?utf-8?B?T1k0SVFOQnZpam9FRTNVRWUyRHBrYkYzeGhqTUg2THh3cmk1OE5VbDZGUG4v?= =?utf-8?B?UjNvaWtjT01GeFRKRlVRN2wvL0ZYcEZMZjBZWHpTUEhIYndHL3ZSVFpiY3Zm?= =?utf-8?B?RmFnMmRwbUZ4MUxmbGpaUVlxeVh6dFFNNXVHdHlyOFFhbGVHemFYUElpSHVn?= =?utf-8?B?RmtZRHk5RkRvOFZEck96dWFRb0QrZ3I0bmpmVndPWkFaKzlJQVMvSUZRbzFx?= =?utf-8?B?MWVRYnQxVVkrYWlwWndCdko5dXoxSnMwTTAzNitXbG44N3dhbUFQb1FNT0sw?= =?utf-8?B?dUFSTk8ySzQ5K1RYcjZyREV1bVhLMmJqWEdKeSthbFA3Wk9HamUxVkRZVk1l?= =?utf-8?B?b1IvT1JXSGpVejR1ZTVCdFNtMHlmOGs3alJ3cjZQK2xhSXNoUlRtSS9oQlR5?= =?utf-8?B?WXY0SmpQRldRUVhWUlhqRmUvQ1psYThZTzFuOUJOeTYzcUFnVTVaTGdRckJz?= =?utf-8?B?R0RLZEt6SmliMGhsNlVIM0laUVJvM09hVnpmS2ZrTmhYSmVsUlNMdmNuRDdx?= =?utf-8?B?VmF3QVpYSmlIckZYUmUzUjlJalk4Skc1SVZzbFNRMTZRWjFZZnA1TTc4cWhD?= =?utf-8?B?aUQwTFdvRmk0a1pLbzhYc0NGVkVwdFhXLzdubHJaLzM4Z0ZVbjhaUEdmL3JV?= =?utf-8?B?bEVnMTNCNmFsTndtaTVOOG9IUTlkVXVINEtnMFFSQ2VqN2lJSGplUnJVRnkx?= =?utf-8?B?RjlNeFRKVlo5MGRmeEdWMWs4RzhvSmhXL1MzeExTRTcwUU5IUUkvZExMRFFC?= =?utf-8?B?ZHFGczBnZm9EVWNmWDVuYjFKR3BKS0tIY1pSSzFrVzdTT3pWZzFCNXpYTVdQ?= =?utf-8?B?TTVuWmxZUnZqTExOVGJDc3VnZHFEUy80M2R4NDNWbDdjUWVzWE9yYXAvYzEx?= =?utf-8?B?STNIYUlpOVFOTHFlTHYzTk5XMk9hOCtlRi95Zk5NNGVYdVhDYjFweVNZUGNH?= =?utf-8?B?cllHS1NHekdkbm5ML3o3NzNGcndIRjFDMGJ5OXJ1U241Y2ppMTBnNy9iMXps?= =?utf-8?B?OWh2c3ZBTTJKNy9mbzRocDEyT3ZZTmpsOTU4RFRWcmFCT1YweWw0K3EzZ05T?= =?utf-8?B?YkozRVc2SXR6VUxqL0RtL2U4NlJrUEVtdERCWEtUREp6QnRzUGRHRUdVUkxa?= =?utf-8?B?eVI4c0lVL09RT3A1Rjdvc1B6cGtpRFp2ZmJsNGt1NDBpbjJyaHBmSGMrbzFH?= =?utf-8?B?bk83aXdBYlNjaDYxaXBYTFlydnp5U3Roa2JGNjVFcnRzaEt5MW1QL2grNUJv?= =?utf-8?B?RmwxWEFZSEVQWGFJdmpHYjRtVC92bGtJcTBmMGdORUF6bEhhR0J0ZktPTTdr?= =?utf-8?B?U3RVSmdIQnc1RnVod0R2WmNnNWRMMkVYa3dhNDhOWk0rSVVMRldLT0xvVllS?= =?utf-8?B?cjVvQ1B4Um1nKzRiNjg1M3pLM1JRV3lBQVV1OVZ6NUxzQXg1S3h5NlJYNzRt?= =?utf-8?B?Skd6Zkt6TWJmdi9id3UvTUZQOFhmQU53NFJ3SzdGRDFKTHVpS2pvQXA5bUdU?= =?utf-8?B?MEdodHRSYWlVdzJLVmU2Wlh1MkN5eUx2aTFXT0dReWJmYkJWM3lFc2Z5Z0RL?= =?utf-8?B?UzJkemEzRWNDYjgycHJYeWx5UmNkSFRSTWNsc3o3OXRYK1RrZFJKQmw5cnVB?= =?utf-8?Q?IWbRqFx5YIM+1T8zuY=3D?= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM4PR18MB4368.namprd18.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230040)(1800799024)(366016)(7416014)(376014)(38070700018); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?Qmp4T3NmbTU3TWczU29EdHVIczFwMG5WY1l2UHVDMGdFUUVnUFlLSFZYRy8z?= =?utf-8?B?Z0RIVWdsMXVLTUtGM2tlbUdXOGxCc1FWdmpyc2x6M0ZsSFJ4eDFNZ1NqdW1V?= =?utf-8?B?N3llRXpyclhZeUpoL3RxTnRhSUc2S090b1dEMk5nR3kvWXNtZjExQ0pmVXk1?= =?utf-8?B?cG9oRnFSYTU2Nmt0QlYvNExVK3BIczR6VDB2NHpuQitNNHVERHZBWThVYkMv?= =?utf-8?B?a2xoVG9jQWFzVkQ0U2d0eXlDaTlQa0s1cUNYdjRDT2FpMmhvNmtSL1VhcERZ?= =?utf-8?B?cUZXbHR4d2NPYzMwZGkzKzNNZmpmd1RZTm9rcnNOc1E1WXo2M1pYNHFOZW0y?= =?utf-8?B?QUpQYVVoYkhpWXZVNkRpU1BTNFFFS3MvME5INTV4bHFFaUx1VVZNdy9CMzdk?= =?utf-8?B?NzZzYisyV0hwVXRTS1JRSTR1RGpCMnlDbnhJLzd6ZmxxYlJOOGxodU0wRFpD?= =?utf-8?B?OWhYUjlDdWFlZnh5Sk9UVkNKemgxVlNmS0ZwNVFWQjl6M2RYb1VDUHp5akR4?= =?utf-8?B?dUZ0UEFVeUhsc1BwZ1RRc2dqZXFkVUZwY3V0Wm9OS01BazF3Tjc0T3JtdG9y?= =?utf-8?B?djBZbXVZeEpxQ3lrZHNIVFJpbUZKTjNIQ2JEYTN3YWlGMWIwY2V6L044eVJT?= =?utf-8?B?UFVEdHRFWWRwWk03cDhpamFiSSs5d01IRWRyRVlxenI2cXBaa0NCenhSUVhK?= =?utf-8?B?WnJqYk5iOVl5d0NKdTlXaHpxU1g0ZHpSblVveVRTZnNpSm1TVnR1UmJqTzhi?= =?utf-8?B?NFkvNnd6bGg0UFM2UjM5RGZnbVVWcFFvdHZUcXo5YUdzMzBYdjR4SFloWlMy?= =?utf-8?B?TDNOakJmSzVqaFVXWDdGa1lGZllKN1lEZzFHYm9Kdy9mcE5NVGMzM0pDNHc4?= =?utf-8?B?S3ZPZ20zRW5rWjRuZkpadGZsVUxlUmVwQTdqV21jL1lSSGM3WWw2UFhVelNS?= =?utf-8?B?LzR6bmp3YnY4VGVYZHdXTi9DT09vaGMvNC95TXFucmI0V1BYOVhIRzFKRm1L?= =?utf-8?B?V0FxWGdramFsQjJzNW9GY3VteTlTRmpDVXREVjNDUkZyUm0yQXpjSk9LTlVV?= =?utf-8?B?VkwyUFFVRlcya2VlL1R2QStONlYyYkdZZVBpN1lSb1JSU0ZFZkU0d3FHRWVt?= =?utf-8?B?TUJiQWJ1TjZaWk1HVGhiNllxNnZhWnRoU09rbmRzclRXNVk1YW4zd2ZjeStZ?= =?utf-8?B?UmZEV21TcDVZR1Q0Y0ttY2pSNWp6MmUyT05sV1luK3grVVU5RVJvUzgxOGZ2?= =?utf-8?B?dnhZTWluS3YrcjdJaUFUdE4zVUhCaVgzVStVN2RWcXJYVmNwMzNHMlJwTFBJ?= =?utf-8?B?WWZvQ21kWGhPVUNzbHVjcDZPUkFXM01zMlAxN2h6RU03V3RUTC9Va1k2U0Rr?= =?utf-8?B?NStmWWRwRG94TUZFZzNSdklySEVDZWpmSTNWbTZPb1VnRjdZbFJRd2doc0Js?= =?utf-8?B?MGZaYVNpcmhMa1ErSkJoYVJVOTRHTWY1VklJeEZSeFM5dXBLdHFBejJHSk9M?= =?utf-8?B?UVpkbTVXWDZOSnRCUUViYWJ2TThmL29rbEE4VUk0OUl5b1hNNys0WFpOZFFS?= =?utf-8?B?a1JlMWdQWUdjVlFlUEdwMmlOZmNNUWRuRkNhZFI2WU5PMXR0bDhvTXBQOTBP?= =?utf-8?B?RC9wZjl0OUE0ZVFyY3BTMzh0L2tqQlNieUhCR3ZnQXFrVCs5QjZvK1NNUGtU?= =?utf-8?B?UjEzbDB3dFMwSnFLMHZ1d0RkS203bGMyQmF4eEdEa3I4ZlA1SjNxVGt2Tjgv?= =?utf-8?B?TDlzS3ByNHZTdWdmL0hWajJmSHNHVjlhalRjUjR1RlpIaEh3aEpUanhBcE9V?= =?utf-8?B?Q3RUcmZIMDVhVUdQeXR5SnZMQjFWM2ZEbHI5eHVVeHdONE1CS3NORERtKy90?= =?utf-8?B?Zm9ZelB0d1hFTWJKdGtlMjNIYjZEMnRCZnlxSDlTeEFudWo3SHJRTFQ3NUlP?= =?utf-8?B?WjNsUjIvM2YrandrdW9nS012WStkeUVwY2dadTc4MXZWbmJabXJnQk85R1lP?= =?utf-8?B?VnBJZk9aZ1NGQU1vUGxCOWdXcThzQ2ZuTWtrSHVPbDBJWWRhNnFQSjFpbTZQ?= =?utf-8?B?TkRKNHpOMDlESm5SSFNGWDNwRzJvNVdsTFRMRXU0ZmN5bkJSM2dyWVJ5bTZh?= =?utf-8?Q?OzfigjVydunWltjbVrkORu8WE?= 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: DM4PR18MB4368.namprd18.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: edd404fd-9459-4742-2a7c-08dcecf8e40d X-MS-Exchange-CrossTenant-originalarrivaltime: 15 Oct 2024 09:08:10.1679 (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: t0XB0fbpx4P5H82GoOuFgITCauypm0BY9o7hkWaGsCpxnUxQ/TCDhnIG08LWL2S/B2omuEMzk/A/3XBs0um+Bw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH7PR18MB5057 X-Proofpoint-GUID: m1UR8lZDTscdW3Vi46n57GcAel5qbQxH X-Proofpoint-ORIG-GUID: m1UR8lZDTscdW3Vi46n57GcAel5qbQxH X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.687,Hydra:6.0.235,FMLib:17.0.607.475 definitions=2020-10-13_15,2020-10-13_02,2020-04-07_01 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 Pj4gQWRkIHN1cHBvcnQgZm9yIHByb2dyYW1taW5nIFBNVSBjb3VudGVycyBhbmQgcmVhZGluZyB0 aGVpciB2YWx1ZXMgaW4NCj4+IHJ1bnRpbWUgYnlwYXNzaW5nIGtlcm5lbCBjb21wbGV0ZWx5Lg0K Pj4NCj4+IFRoaXMgaXMgZXNwZWNpYWxseSB1c2VmdWwgaW4gY2FzZXMgd2hlcmUgQ1BVIGNvcmVz IGFyZSBpc29sYXRlZCBpLmUNCj4+IHJ1biBkZWRpY2F0ZWQgdGFza3MuIEluIHN1Y2ggY2FzZXMg b25lIGNhbm5vdCB1c2Ugc3RhbmRhcmQgcGVyZg0KPj4gdXRpbGl0eSB3aXRob3V0IHNhY3JpZmlj aW5nIGxhdGVuY3kgYW5kIHBlcmZvcm1hbmNlLg0KPj4NCj4+IFNpZ25lZC1vZmYtYnk6IFRvbWFz eiBEdXN6eW5za2kgPHRkdXN6eW5za2lAbWFydmVsbC5jb20+DQo+PiAtLS0NCj4+ICBNQUlOVEFJ TkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNSArDQo+PiAgYXBwL3Rlc3QvbWVz b24uYnVpbGQgICAgICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gIGFwcC90ZXN0L3Rlc3RfcG11 LmMgICAgICAgICAgICAgICAgICAgIHwgIDUzICsrKw0KPj4gIGRvYy9hcGkvZG94eS1hcGktaW5k ZXgubWQgICAgICAgICAgICAgIHwgICAzICstDQo+PiAgZG9jL2FwaS9kb3h5LWFwaS5jb25mLmlu ICAgICAgICAgICAgICAgfCAgIDEgKw0KPj4gIGRvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxl X2FwcC5yc3QgIHwgIDI5ICsrDQo+PiAgZG9jL2d1aWRlcy9yZWxfbm90ZXMvcmVsZWFzZV8yNF8x MS5yc3QgfCAgIDcgKw0KPj4gIGxpYi9tZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAg IHwgICAxICsNCj4+ICBsaWIvcG11L21lc29uLmJ1aWxkICAgICAgICAgICAgICAgICAgICB8ICAx MiArDQo+PiAgbGliL3BtdS9wbXVfcHJpdmF0ZS5oICAgICAgICAgICAgICAgICAgfCAgMzIgKysN Cj4+ICBsaWIvcG11L3J0ZV9wbXUuYyAgICAgICAgICAgICAgICAgICAgICB8IDQ2MyArKysrKysr KysrKysrKysrKysrKysrKysrDQo+PiAgbGliL3BtdS9ydGVfcG11LmggICAgICAgICAgICAgICAg ICAgICAgfCAyMjcgKysrKysrKysrKysrDQo+PiAgbGliL3BtdS92ZXJzaW9uLm1hcCAgICAgICAg ICAgICAgICAgICAgfCAgMTQgKw0KPj4gIDEzIGZpbGVzIGNoYW5nZWQsIDg0NyBpbnNlcnRpb25z KCspLCAxIGRlbGV0aW9uKC0pICBjcmVhdGUgbW9kZQ0KPj4gMTAwNjQ0IGFwcC90ZXN0L3Rlc3Rf cG11LmMgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvcG11L21lc29uLmJ1aWxkDQo+PiBjcmVhdGUg bW9kZSAxMDA2NDQgbGliL3BtdS9wbXVfcHJpdmF0ZS5oICBjcmVhdGUgbW9kZSAxMDA2NDQNCj4+ IGxpYi9wbXUvcnRlX3BtdS5jICBjcmVhdGUgbW9kZSAxMDA2NDQgbGliL3BtdS9ydGVfcG11Lmgg IGNyZWF0ZSBtb2RlDQo+PiAxMDA2NDQgbGliL3BtdS92ZXJzaW9uLm1hcA0KPj4NCj4+IGRpZmYg LS1naXQgYS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTIGluZGV4IDdkMTcxZTNkNDUuLmZiZDQ2 OTA1YjYNCj4+IDEwMDY0NA0KPj4gLS0tIGEvTUFJTlRBSU5FUlMNCj4+ICsrKyBiL01BSU5UQUlO RVJTDQo+PiBAQCAtMTgxMSw2ICsxODExLDExIEBAIE06IE5pdGhpbiBEYWJpbHB1cmFtIDxuZGFi aWxwdXJhbUBtYXJ2ZWxsLmNvbT4NCj4+ICBNOiBQYXZhbiBOaWtoaWxlc2ggPHBiaGFnYXZhdHVs YUBtYXJ2ZWxsLmNvbT4NCj4+ICBGOiBsaWIvbm9kZS8NCj4+DQo+PiArUE1VIC0gRVhQRVJJTUVO VEFMDQo+PiArTTogVG9tYXN6IER1c3p5bnNraSA8dGR1c3p5bnNraUBtYXJ2ZWxsLmNvbT4NCj4+ ICtGOiBsaWIvcG11Lw0KPj4gK0Y6IGFwcC90ZXN0L3Rlc3RfcG11Kg0KPj4gKw0KPj4NCj4+ICBU ZXN0IEFwcGxpY2F0aW9ucw0KPj4gIC0tLS0tLS0tLS0tLS0tLS0tDQo+PiBkaWZmIC0tZ2l0IGEv YXBwL3Rlc3QvbWVzb24uYnVpbGQgYi9hcHAvdGVzdC9tZXNvbi5idWlsZCBpbmRleA0KPj4gZTI5 MjU4ZTZlYy4uNDVmNTZkOGFhZSAxMDA2NDQNCj4+IC0tLSBhL2FwcC90ZXN0L21lc29uLmJ1aWxk DQo+PiArKysgYi9hcHAvdGVzdC9tZXNvbi5idWlsZA0KPj4gQEAgLTEzOSw2ICsxMzksNyBAQCBz b3VyY2VfZmlsZV9kZXBzID0gew0KPj4gICAgICAndGVzdF9wbWRfcGVyZi5jJzogWydldGhkZXYn LCAnbmV0J10gKyBwYWNrZXRfYnVyc3RfZ2VuZXJhdG9yX2RlcHMsDQo+PiAgICAgICd0ZXN0X3Bt ZF9yaW5nLmMnOiBbJ25ldF9yaW5nJywgJ2V0aGRldicsICdidXNfdmRldiddLA0KPj4gICAgICAn dGVzdF9wbWRfcmluZ19wZXJmLmMnOiBbJ2V0aGRldicsICduZXRfcmluZycsICdidXNfdmRldidd LA0KPj4gKyAgICAndGVzdF9wbXUuYyc6IFsncG11J10sDQo+PiAgICAgICd0ZXN0X3Bvd2VyLmMn OiBbJ3Bvd2VyJ10sDQo+PiAgICAgICd0ZXN0X3Bvd2VyX2NwdWZyZXEuYyc6IFsncG93ZXInXSwN Cj4+ICAgICAgJ3Rlc3RfcG93ZXJfaW50ZWxfdW5jb3JlLmMnOiBbJ3Bvd2VyJ10sIGRpZmYgLS1n aXQNCj4+IGEvYXBwL3Rlc3QvdGVzdF9wbXUuYyBiL2FwcC90ZXN0L3Rlc3RfcG11LmMgbmV3IGZp bGUgbW9kZSAxMDA2NDQgaW5kZXgNCj4+IDAwMDAwMDAwMDAuLjc5Mzc2ZWEyZTgNCj4+IC0tLSAv ZGV2L251bGwNCj4+ICsrKyBiL2FwcC90ZXN0L3Rlc3RfcG11LmMNCj4+IEBAIC0wLDAgKzEsNTMg QEANCj4+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlDQo+PiArICog Q29weXJpZ2h0KEMpIDIwMjQgTWFydmVsbCBJbnRlcm5hdGlvbmFsIEx0ZC4NCj4+ICsgKi8NCj4+ ICsNCj4+ICsjaW5jbHVkZSA8cnRlX3BtdS5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlICJ0ZXN0Lmgi DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK3Rlc3RfcG11X3JlYWQodm9pZCkNCj4+ICt7DQo+ PiArCWNvbnN0IGNoYXIgKm5hbWUgPSBOVUxMOw0KPj4gKwlpbnQgdHJpZXMgPSAxMCwgZXZlbnQ7 DQo+PiArCXVpbnQ2NF90IHZhbCA9IDA7DQo+PiArDQo+PiArCWlmIChuYW1lID09IE5VTEwpIHsN Cj4+ICsJCXByaW50ZigiUE1VIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBhcmNoXG4iKTsNCj4+ICsJ CXJldHVybiBURVNUX1NLSVBQRUQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJaWYgKHJ0ZV9wbXVfaW5p dCgpID09IC1FTk9UU1VQKSB7DQo+PiArCQlwcmludGYoInBtdV9hdXRvdGVzdCBvbmx5IHN1cHBv cnRlZCBvbiBMaW51eCwgc2tpcHBpbmcgdGVzdFxuIik7DQo+PiArCQlyZXR1cm4gVEVTVF9TS0lQ UEVEOw0KPj4gKwl9DQo+PiArCWlmIChydGVfcG11X2luaXQoKSA8IDApDQo+PiArCQlyZXR1cm4g VEVTVF9TS0lQUEVEOw0KPj4gKw0KPj4gKwlldmVudCA9IHJ0ZV9wbXVfYWRkX2V2ZW50KG5hbWUp Ow0KPj4gKwl3aGlsZSAodHJpZXMtLSkNCj4+ICsJCXZhbCArPSBydGVfcG11X3JlYWQoZXZlbnQp Ow0KPj4gKw0KPj4gKwlydGVfcG11X2ZpbmkoKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHZhbCA/IFRF U1RfU1VDQ0VTUyA6IFRFU1RfRkFJTEVEOyB9DQo+PiArDQo+PiArc3RhdGljIHN0cnVjdCB1bml0 X3Rlc3Rfc3VpdGUgcG11X3Rlc3RzID0gew0KPj4gKwkuc3VpdGVfbmFtZSA9ICJwbXUgYXV0b3Rl c3QiLA0KPj4gKwkuc2V0dXAgPSBOVUxMLA0KPj4gKwkudGVhcmRvd24gPSBOVUxMLA0KPj4gKwku dW5pdF90ZXN0X2Nhc2VzID0gew0KPj4gKwkJVEVTVF9DQVNFKHRlc3RfcG11X3JlYWQpLA0KPj4g KwkJVEVTVF9DQVNFU19FTkQoKQ0KPj4gKwl9DQo+PiArfTsNCj4+ICsNCj4+ICtzdGF0aWMgaW50 DQo+PiArdGVzdF9wbXUodm9pZCkNCj4+ICt7DQo+PiArCXJldHVybiB1bml0X3Rlc3Rfc3VpdGVf cnVubmVyKCZwbXVfdGVzdHMpOw0KPj4gK30NCj4+ICsNCj4+ICtSRUdJU1RFUl9GQVNUX1RFU1Qo cG11X2F1dG90ZXN0LCB0cnVlLCB0cnVlLCB0ZXN0X3BtdSk7DQo+PiBkaWZmIC0tZ2l0IGEvZG9j L2FwaS9kb3h5LWFwaS1pbmRleC5tZCBiL2RvYy9hcGkvZG94eS1hcGktaW5kZXgubWQNCj4+IGlu ZGV4IGY5ZjAzMDAxMjYuLjgwNWVmYzY1MjAgMTAwNjQ0DQo+PiAtLS0gYS9kb2MvYXBpL2RveHkt YXBpLWluZGV4Lm1kDQo+PiArKysgYi9kb2MvYXBpL2RveHktYXBpLWluZGV4Lm1kDQo+PiBAQCAt MjM3LDcgKzIzNyw4IEBAIFRoZSBwdWJsaWMgQVBJIGhlYWRlcnMgYXJlIGdyb3VwZWQgYnkgdG9w aWNzOg0KPj4gICAgW2xvZ10oQHJlZiBydGVfbG9nLmgpLA0KPj4gICAgW2Vycm5vXShAcmVmIHJ0 ZV9lcnJuby5oKSwNCj4+ICAgIFt0cmFjZV0oQHJlZiBydGVfdHJhY2UuaCksDQo+PiAtICBbdHJh Y2VfcG9pbnRdKEByZWYgcnRlX3RyYWNlX3BvaW50LmgpDQo+PiArICBbdHJhY2VfcG9pbnRdKEBy ZWYgcnRlX3RyYWNlX3BvaW50LmgpLCAgW3BtdV0oQHJlZiBydGVfcG11LmgpDQo+Pg0KPj4gIC0g KiptaXNjKio6DQo+PiAgICBbRUFMIGNvbmZpZ10oQHJlZiBydGVfZWFsLmgpLA0KPj4gZGlmZiAt LWdpdCBhL2RvYy9hcGkvZG94eS1hcGkuY29uZi5pbiBiL2RvYy9hcGkvZG94eS1hcGkuY29uZi5p biBpbmRleA0KPj4gYTg4MjNjMDQ2Zi4uNjU4NDkwYjZhMiAxMDA2NDQNCj4+IC0tLSBhL2RvYy9h cGkvZG94eS1hcGkuY29uZi5pbg0KPj4gKysrIGIvZG9jL2FwaS9kb3h5LWFwaS5jb25mLmluDQo+ PiBAQCAtNjksNiArNjksNyBAQCBJTlBVVCAgICAgICAgICAgICAgICAgICA9IEBUT1BESVJAL2Rv Yy9hcGkvZG94eS1hcGktaW5kZXgubWQgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAg QFRPUERJUkAvbGliL3BkY3AgXA0KPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQFRPUERJ UkAvbGliL3BkdW1wIFwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xp Yi9waXBlbGluZSBcDQo+PiArICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIv cG11IFwNCj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wb3J0IFwN Cj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBUT1BESVJAL2xpYi9wb3dlciBcDQo+PiAg ICAgICAgICAgICAgICAgICAgICAgICAgICBAVE9QRElSQC9saWIvcHRyX2NvbXByZXNzIFwgZGlm ZiAtLWdpdA0KPj4gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAucnN0DQo+PiBi L2RvYy9ndWlkZXMvcHJvZ19ndWlkZS9wcm9maWxlX2FwcC5yc3QNCj4+IGluZGV4IGE2YjVmYjRk NWUuLjg1NGM1MTVhNjEgMTAwNjQ0DQo+PiAtLS0gYS9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJv ZmlsZV9hcHAucnN0DQo+PiArKysgYi9kb2MvZ3VpZGVzL3Byb2dfZ3VpZGUvcHJvZmlsZV9hcHAu cnN0DQo+PiBAQCAtNyw2ICs3LDM1IEBAIFByb2ZpbGUgWW91ciBBcHBsaWNhdGlvbiAgVGhlIGZv bGxvd2luZyBzZWN0aW9ucw0KPj4gZGVzY3JpYmUgbWV0aG9kcyBvZiBwcm9maWxpbmcgRFBESyBh cHBsaWNhdGlvbnMgb24gIGRpZmZlcmVudA0KPj4gYXJjaGl0ZWN0dXJlcy4NCj4+DQo+PiArUGVy Zm9ybWFuY2UgY291bnRlciBiYXNlZCBwcm9maWxpbmcNCj4+ICstLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQ0KPj4gKw0KPj4gK01ham9yaXR5IG9mIGFyY2hpdGVjdHVyZXMgc3Vw cG9ydCBzb21lIHBlcmZvcm1hbmNlIG1vbml0b3JpbmcgdW5pdCAoUE1VKS4NCj4+ICtTdWNoIHVu aXQgcHJvdmlkZXMgcHJvZ3JhbW1hYmxlIGNvdW50ZXJzIHRoYXQgbW9uaXRvciBzcGVjaWZpYyBl dmVudHMuDQo+PiArDQo+PiArRGlmZmVyZW50IHRvb2xzIGdhdGhlciB0aGF0IGluZm9ybWF0aW9u LCBsaWtlIGZvciBleGFtcGxlIHBlcmYuDQo+PiArSG93ZXZlciwgaW4gc29tZSBzY2VuYXJpb3Mg d2hlbiBDUFUgY29yZXMgYXJlIGlzb2xhdGVkIGFuZCBydW4NCj4+ICtkZWRpY2F0ZWQgdGFza3Mg aW50ZXJydXB0aW5nIHRob3NlIHRhc2tzIHdpdGggcGVyZiBtYXkgYmUgdW5kZXNpcmFibGUuDQo+ PiArDQo+PiArSW4gc3VjaCBjYXNlcywgYW4gYXBwbGljYXRpb24gY2FuIHVzZSB0aGUgUE1VIGxp YnJhcnkgdG8gcmVhZCBzdWNoIGV2ZW50cyB2aWENCj5gYHJ0ZV9wbXVfcmVhZCgpYGAuDQo+PiAr DQo+PiArQnkgZGVmYXVsdCwgdXNlcnNwYWNlIGFwcGxpY2F0aW9ucyBhcmUgbm90IGFsbG93ZWQg dG8gYWNjZXNzIFBNVQ0KPj4gK2ludGVybmFscy4gVGhhdCBjYW4gYmUgY2hhbmdlZCBieSBzZXR0 aW5nDQo+PiArYGAvc3lzL2tlcm5lbC9wZXJmX2V2ZW50X3BhcmFub2lkYGAgdG8gMiAodGhhdCBz aG91bGQgYmUgYSBkZWZhdWx0DQo+PiArdmFsdWUgYW55d2F5KSBhbmQgYWRkaW5nIGBgQ0FQX1BF UkZNT05gYCBjYXBhYmlsaXR5IHRvIERQREsNCj4+ICthcHBsaWNhdGlvbi4gUGxlYXNlIHJlZmVy IHRvIGBgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9wZXJmLXNlY3VyaXR5LnJzdGBgIHVuZGVy IExpbnV4IHNvdXJjZXMNCj5mb3IgbW9yZSBpbmZvcm1hdGlvbi4gRmFpcmx5IHJlY2VudCBrZXJu ZWwsIGkuZSA+PSA1LjksIGlzIGFkdmlzZWQgdG9vLg0KPj4gKw0KPj4gK0FzIG9mIG5vdyBpbXBs ZW1lbnRhdGlvbiBpbXBvc2VzIGNlcnRhaW4gbGltaXRhdGlvbnM6DQo+PiArDQo+PiArKiBNYW5h Z2VtZW50IEFQSXMgdGhhdCBub3JtYWxseSByZXR1cm4gYSBub24tbmVnYXRpdmUgdmFsdWUgd2ls bA0KPj4gK3JldHVybiBlcnJvciAoYGAtRU5PVFNVUGBgKSB3aGlsZQ0KPj4gKyAgYGBydGVfcG11 X3JlYWQoKWBgIHdpbGwgcmV0dXJuIGBgVUlOVDY0X01BWGBgIGlmIHJ1bm5pbmcgdW5kZXIgdW5z dXBwb3J0ZWQgb3BlcmF0aW5nIHN5c3RlbS4NCj4+ICsNCj4+ICsqIE9ubHkgRUFMIGxjb3JlcyBh cmUgc3VwcG9ydGVkDQo+DQo+Tm90IHRoYXQgSSBhbSBhZ2FpbnN0IHRoYXQgbGltaXRhdGlvbiAt IGl0IGlzIHF1aXRlIGNvbW1vbiB3aXRoaW4gRFBESy4uLg0KPmJ1dCByZWFkaW5nIHRocm91Z2gg dGhlIGNvZGUsIG5vdCBzdXJlIHdoZXJlIGl0IGNvbWVzIGZyb20/DQo+DQoNCkl0IHdhcyB0ZXN0 ZWQgb25seSBvbiBsY29yZXMgKGxvb2sgVExTIGZvciBleGFtcGxlKS4gSSBkb24ndCBrbm93IGhv dyBvdGhlciBjb25zdHJ1Y3RzIGJlaGF2ZSBhbmQgd2hhdCBhcmUgdGhlaXIgc3BlY2lmaWMgcmVx dWlyZW1lbnRzLiANCg0KVGhpcyBsaWJyYXJ5IGhhcyBzb21lIHJvb20gZm9yIGltcHJvdmVtZW50 cyBzbyBJIHRoaW5rIGZ1dHVyZSBjaGFuZ2VzIHdpbGwgYWRkcmVzcyB0aGF0IGxpbWl0YXRpb25z LiANCg0KPj4gKw0KPj4gKyogRUFMIGxjb3JlcyBtdXN0IG5vdCBzaGFyZSBhIGNwdQ0KPj4gKw0K Pj4gKyogRWFjaCBFQUwgbGNvcmUgbWVhc3VyZXMgc2FtZSBncm91cCBvZiBldmVudHMNCj4+ICsN Cj4+DQo+PiAgUHJvZmlsaW5nIG9uIHg4Ng0KPj4gIC0tLS0tLS0tLS0tLS0tLS0NCj4+IGRpZmYg LS1naXQgYS9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzI0XzExLnJzdA0KPj4gYi9kb2Mv Z3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzI0XzExLnJzdA0KPj4gaW5kZXggNTNkODY2MTM2NS4u MDZmYTI5NDc4NyAxMDA2NDQNCj4+IC0tLSBhL2RvYy9ndWlkZXMvcmVsX25vdGVzL3JlbGVhc2Vf MjRfMTEucnN0DQo+PiArKysgYi9kb2MvZ3VpZGVzL3JlbF9ub3Rlcy9yZWxlYXNlXzI0XzExLnJz dA0KPj4gQEAgLTE1MCw2ICsxNTAsMTMgQEAgTmV3IEZlYXR1cmVzDQo+Pg0KPj4gICAgKiBBZGRl ZCBpbmRlcGVuZGVudCBlbnF1ZXVlIGZlYXR1cmUuDQo+Pg0KPj4gKyogKipBZGRlZCBQTVUgbGli cmFyeS4qKg0KPj4gKw0KPj4gKyAgQWRkZWQgYSBuZXcgcGVyZm9ybWFuY2UgbW9uaXRvcmluZyB1 bml0IChQTVUpIGxpYnJhcnkgd2hpY2ggYWxsb3dzDQo+PiArIGFwcGxpY2F0aW9ucyAgdG8gcGVy Zm9ybSBzZWxmIG1vbml0b3JpbmcgYWN0aXZpdGllcyB3aXRob3V0IGRlcGVuZGluZyBvbiBleHRl cm5hbCB1dGlsaXRpZXMNCj5saWtlIHBlcmYuDQo+PiArICBBZnRlciBpbnRlZ3JhdGlvbiB3aXRo IDpkb2M6YC4uL3Byb2dfZ3VpZGUvdHJhY2VfbGliYCBkYXRhIGdhdGhlcmVkDQo+PiArIGZyb20g aGFyZHdhcmUgY291bnRlcnMgIGNhbiBiZSBzdG9yZWQgaW4gQ1RGIGZvcm1hdCBmb3IgZnVydGhl ciBhbmFseXNpcy4NCj4+ICsNCj4+DQo+PiAgUmVtb3ZlZCBJdGVtcw0KPj4gIC0tLS0tLS0tLS0t LS0NCj4+IGRpZmYgLS1naXQgYS9saWIvbWVzb24uYnVpbGQgYi9saWIvbWVzb24uYnVpbGQgaW5k ZXgNCj4+IDE2MjI4Nzc1M2YuLmNjN2E0YmQ1MzUgMTAwNjQ0DQo+PiAtLS0gYS9saWIvbWVzb24u YnVpbGQNCj4+ICsrKyBiL2xpYi9tZXNvbi5idWlsZA0KPj4gQEAgLTEzLDYgKzEzLDcgQEAgbGli cmFyaWVzID0gWw0KPj4gICAgICAgICAgJ2t2YXJncycsICMgZWFsIGRlcGVuZHMgb24ga3Zhcmdz DQo+PiAgICAgICAgICAnYXJncGFyc2UnLA0KPj4gICAgICAgICAgJ3RlbGVtZXRyeScsICMgYmFz aWMgaW5mbyBxdWVyeWluZw0KPj4gKyAgICAgICAgJ3BtdScsDQo+PiAgICAgICAgICAnZWFsJywg IyBldmVyeXRoaW5nIGRlcGVuZHMgb24gZWFsDQo+PiAgICAgICAgICAncHRyX2NvbXByZXNzJywN Cj4+ICAgICAgICAgICdyaW5nJywNCj4+IGRpZmYgLS1naXQgYS9saWIvcG11L21lc29uLmJ1aWxk IGIvbGliL3BtdS9tZXNvbi5idWlsZCBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAw MDAwMDAwMC4uMzg2MjMyZTVjNw0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9t ZXNvbi5idWlsZA0KPj4gQEAgLTAsMCArMSwxMiBAQA0KPj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0zLUNsYXVzZSAjIENvcHlyaWdodChDKSAyMDI0IE1hcnZlbGwNCj4+ICtJbnRl cm5hdGlvbmFsIEx0ZC4NCj4+ICsNCj4+ICtoZWFkZXJzID0gZmlsZXMoJ3J0ZV9wbXUuaCcpDQo+ PiArDQo+PiAraWYgbm90IGlzX2xpbnV4DQo+PiArICAgIHN1YmRpcl9kb25lKCkNCj4+ICtlbmRp Zg0KPj4gKw0KPj4gK3NvdXJjZXMgPSBmaWxlcygncnRlX3BtdS5jJykNCj4+ICsNCj4+ICtkZXBz ICs9IFsnbG9nJ10NCj4+IGRpZmYgLS1naXQgYS9saWIvcG11L3BtdV9wcml2YXRlLmggYi9saWIv cG11L3BtdV9wcml2YXRlLmggbmV3IGZpbGUNCj4+IG1vZGUgMTAwNjQ0IGluZGV4IDAwMDAwMDAw MDAuLmQyYjE1NjE1YmYNCj4+IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2xpYi9wbXUvcG11X3By aXZhdGUuaA0KPj4gQEAgLTAsMCArMSwzMiBAQA0KPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlm aWVyOiBCU0QtMy1DbGF1c2UNCj4+ICsgKiBDb3B5cmlnaHQoYykgMjAyNCBNYXJ2ZWxsDQo+PiAr ICovDQo+PiArDQo+PiArI2lmbmRlZiBfUE1VX1BSSVZBVEVfSF8NCj4+ICsjZGVmaW5lIF9QTVVf UFJJVkFURV9IXw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEFyY2hpdGVjdHVyZSBzcGVjaWZpYyBQ TVUgaW5pdCBjYWxsYmFjay4NCj4+ICsgKg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIDAgaW4g Y2FzZSBvZiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvdGhlcndpc2UuDQo+PiArICovDQo+PiAr aW50DQo+PiArcG11X2FyY2hfaW5pdCh2b2lkKTsNCj4+ICsNCj4+ICsvKioNCj4+ICsgKiBBcmNo aXRlY3R1cmUgc3BlY2lmaWMgUE1VIGNsZWFudXAgY2FsbGJhY2suDQo+PiArICovDQo+PiArdm9p ZA0KPj4gK3BtdV9hcmNoX2Zpbmkodm9pZCk7DQo+PiArDQo+PiArLyoqDQo+PiArICogQXBwbHkg YXJjaGl0ZWN0dXJlIHNwZWNpZmljIHNldHRpbmdzIHRvIGNvbmZpZyBiZWZvcmUgcGFzc2luZyBp dCB0byBzeXNjYWxsLg0KPj4gKyAqDQo+PiArICogQHBhcmFtIGNvbmZpZw0KPj4gKyAqICAgQXJj aGl0ZWN0dXJlIHNwZWNpZmljIGV2ZW50IGNvbmZpZ3VyYXRpb24uIENvbnN1bHQga2VybmVsIHNv dXJjZXMgZm9yIGF2YWlsYWJsZSBvcHRpb25zLg0KPj4gKyAqLw0KPj4gK3ZvaWQNCj4+ICtwbXVf YXJjaF9maXh1cF9jb25maWcodWludDY0X3QgY29uZmlnWzNdKTsNCj4+ICsNCj4+ICsjZW5kaWYg LyogX1BNVV9QUklWQVRFX0hfICovDQo+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9ydGVfcG11LmMg Yi9saWIvcG11L3J0ZV9wbXUuYyBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAwMDAw MDAwMC4uM2E4NjFiY2E3MQ0KPj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9ydGVf cG11LmMNCj4+IEBAIC0wLDAgKzEsNDYzIEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEJTRC0zLUNsYXVzZQ0KPj4gKyAqIENvcHlyaWdodChDKSAyMDI0IE1hcnZlbGwgSW50ZXJu YXRpb25hbCBMdGQuDQo+PiArICovDQo+PiArDQo+PiArI2luY2x1ZGUgPGN0eXBlLmg+DQo+PiAr I2luY2x1ZGUgPGRpcmVudC5oPg0KPj4gKyNpbmNsdWRlIDxlcnJuby5oPg0KPj4gKyNpbmNsdWRl IDxyZWdleC5oPg0KPj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4NCj4+ICsjaW5jbHVkZSA8c3RyaW5n Lmg+DQo+PiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPg0KPj4gKyNpbmNsdWRlIDxzeXMvbW1hbi5o Pg0KPj4gKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4NCj4+ICsjaW5jbHVkZSA8c3lzL3N5c2NhbGwu aD4NCj4+ICsjaW5jbHVkZSA8dW5pc3RkLmg+DQo+PiArDQo+PiArI2luY2x1ZGUgPHJ0ZV9hdG9t aWMuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9wZXJf bGNvcmUuaD4NCj4+ICsjaW5jbHVkZSA8cnRlX3BtdS5oPg0KPj4gKyNpbmNsdWRlIDxydGVfc3Bp bmxvY2suaD4NCj4+ICsjaW5jbHVkZSA8cnRlX3RhaWxxLmg+DQo+PiArDQo+PiArI2luY2x1ZGUg InBtdV9wcml2YXRlLmgiDQo+PiArDQo+PiArI2RlZmluZSBFVkVOVF9TT1VSQ0VfREVWSUNFU19Q QVRIICIvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcyINCj4+ICsNCj4+ICsjZGVmaW5lIEdF Tk1BU0tfVUxMKGgsIGwpICgofjBVTEwgLSAoMVVMTCA8PCAobCkpICsgMSkgJiAofjBVTEwgPj4N Cj4+ICsoKDY0IC0gMSAtIChoKSkpKSkNCj4NCj5Xb3VsZCBSVEVfR0VOTUFTSzY0KGhpZ2gsIGxv dykgd29yayBmb3IgeW91IGhlcmU/DQoNCklmIHRoYXQgUlRFX0dFTk1BU0s2NCBnZW5lcmF0ZXMg Y29udGludW91cyBtYXNrIG9mIDFzIHRoZW4gaXQgd291bGQgd29yay4gSSBkaWRuJ3QgcmVhbGl6 ZSBEUERLIGhhcyBpdC4gDQoNCj4NCj4+ICsjZGVmaW5lIEZJRUxEX1BSRVAobSwgdikgKCgodWlu dDY0X3QpKHYpIDw8IChfX2J1aWx0aW5fZmZzbGwobSkgLSAxKSkNCj4+ICsmIChtKSkNCj4+ICsN Cj4+ICsvKiBBIHN0cnVjdHVyZSBkZXNjcmliaW5nIGFuIGV2ZW50ICovIHN0cnVjdCBydGVfcG11 X2V2ZW50IHsNCj4+ICsJY2hhciAqbmFtZTsNCj4+ICsJdW5zaWduZWQgaW50IGluZGV4Ow0KPj4g KwlUQUlMUV9FTlRSWShydGVfcG11X2V2ZW50KSBuZXh0Ow0KPj4gK307DQo+PiArDQo+PiArUlRF X0RFRklORV9QRVJfTENPUkUoc3RydWN0IHJ0ZV9wbXVfZXZlbnRfZ3JvdXAsIF9ldmVudF9ncm91 cCk7DQo+PiArc3RydWN0IHJ0ZV9wbXUgcnRlX3BtdTsNCj4+ICsNCj4+ICsvKg0KPj4gKyAqIEZv bGxvd2luZyBfX3J0ZV93ZWFrIGZ1bmN0aW9ucyBwcm92aWRlIGRlZmF1bHQgbm8tb3AuDQo+PiAr QXJjaGl0ZWN0dXJlcyBzaG91bGQgb3ZlcnJpZGUgdGhlbSBpZg0KPj4gKyAqIG5lY2Vzc2FyeS4N Cj4+ICsgKi8NCj4+ICsNCj4+ICtpbnQNCj4+ICtfX3J0ZV93ZWFrIHBtdV9hcmNoX2luaXQodm9p ZCkNCj4+ICt7DQo+PiArCXJldHVybiAwOw0KPj4gK30NCj4+ICsNCj4+ICt2b2lkDQo+PiArX19y dGVfd2VhayBwbXVfYXJjaF9maW5pKHZvaWQpDQo+PiArew0KPj4gK30NCj4+ICsNCj4+ICt2b2lk DQo+PiArX19ydGVfd2VhayBwbXVfYXJjaF9maXh1cF9jb25maWcodWludDY0X3QgX19ydGVfdW51 c2VkIGNvbmZpZ1szXSkgeyB9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK2dldF90ZXJtX2Zv cm1hdChjb25zdCBjaGFyICpuYW1lLCBpbnQgKm51bSwgdWludDY0X3QgKm1hc2spIHsNCj4+ICsJ Y2hhciBwYXRoW1BBVEhfTUFYXTsNCj4+ICsJY2hhciAqY29uZmlnID0gTlVMTDsNCj4+ICsJaW50 IGhpZ2gsIGxvdywgcmV0Ow0KPj4gKwlGSUxFICpmcDsNCj4+ICsNCj4+ICsJKm51bSA9ICptYXNr ID0gMDsNCj4+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVW SUNFU19QQVRIICIvJXMvZm9ybWF0LyVzIiwgcnRlX3BtdS5uYW1lLCBuYW1lKTsNCj4+ICsJZnAg PSBmb3BlbihwYXRoLCAiciIpOw0KPj4gKwlpZiAoZnAgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAt ZXJybm87DQo+PiArDQo+PiArCWVycm5vID0gMDsNCj4+ICsJcmV0ID0gZnNjYW5mKGZwLCAiJW1b XjpdOiVkLSVkIiwgJmNvbmZpZywgJmxvdywgJmhpZ2gpOw0KPj4gKwlpZiAocmV0IDwgMikgew0K Pj4gKwkJcmV0ID0gLUVOT0RBVEE7DQo+PiArCQlnb3RvIG91dDsNCj4+ICsJfQ0KPj4gKwlpZiAo ZXJybm8pIHsNCj4+ICsJCXJldCA9IC1lcnJubzsNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKwl9DQo+ PiArDQo+PiArCWlmIChyZXQgPT0gMikNCj4+ICsJCWhpZ2ggPSBsb3c7DQo+PiArDQo+PiArCSpt YXNrID0gR0VOTUFTS19VTEwoaGlnaCwgbG93KTsNCj4+ICsJLyogTGFzdCBkaWdpdCBzaG91bGQg YmUgWzAxMl0uIElmIGxhc3QgZGlnaXQgaXMgbWlzc2luZyAwIGlzIGltcGxpZWQuICovDQo+PiAr CSpudW0gPSBjb25maWdbc3RybGVuKGNvbmZpZykgLSAxXTsNCj4+ICsJKm51bSA9IGlzZGlnaXQo Km51bSkgPyAqbnVtIC0gJzAnIDogMDsNCj4+ICsNCj4+ICsJcmV0ID0gMDsNCj4+ICtvdXQ6DQo+ PiArCWZyZWUoY29uZmlnKTsNCj4+ICsJZmNsb3NlKGZwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHJl dDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGludA0KPj4gK3BhcnNlX2V2ZW50KGNoYXIgKmJ1 ZiwgdWludDY0X3QgY29uZmlnWzNdKSB7DQo+PiArCWNoYXIgKnRva2VuLCAqdGVybTsNCj4+ICsJ aW50IG51bSwgcmV0LCB2YWw7DQo+PiArCXVpbnQ2NF90IG1hc2s7DQo+PiArDQo+PiArCWNvbmZp Z1swXSA9IGNvbmZpZ1sxXSA9IGNvbmZpZ1syXSA9IDA7DQo+PiArDQo+PiArCXRva2VuID0gc3Ry dG9rKGJ1ZiwgIiwiKTsNCj4+ICsJd2hpbGUgKHRva2VuKSB7DQo+PiArCQllcnJubyA9IDA7DQo+ PiArCQkvKiA8dGVybT49PHZhbHVlPiAqLw0KPj4gKwkJcmV0ID0gc3NjYW5mKHRva2VuLCAiJW1b Xj1dPSVpIiwgJnRlcm0sICZ2YWwpOw0KPj4gKwkJaWYgKHJldCA8IDEpDQo+PiArCQkJcmV0dXJu IC1FTk9EQVRBOw0KPj4gKwkJaWYgKGVycm5vKQ0KPj4gKwkJCXJldHVybiAtZXJybm87DQo+PiAr CQlpZiAocmV0ID09IDEpDQo+PiArCQkJdmFsID0gMTsNCj4+ICsNCj4+ICsJCXJldCA9IGdldF90 ZXJtX2Zvcm1hdCh0ZXJtLCAmbnVtLCAmbWFzayk7DQo+PiArCQlmcmVlKHRlcm0pOw0KPj4gKwkJ aWYgKHJldCkNCj4+ICsJCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwkJY29uZmlnW251bV0gfD0g RklFTERfUFJFUChtYXNrLCB2YWwpOw0KPj4gKwkJdG9rZW4gPSBzdHJ0b2soTlVMTCwgIiwiKTsN Cj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIGlu dA0KPj4gK2dldF9ldmVudF9jb25maWcoY29uc3QgY2hhciAqbmFtZSwgdWludDY0X3QgY29uZmln WzNdKSB7DQo+PiArCWNoYXIgcGF0aFtQQVRIX01BWF0sIGJ1ZltCVUZTSVpdOw0KPj4gKwlGSUxF ICpmcDsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJc25wcmludGYocGF0aCwgc2l6ZW9mKHBh dGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZlbnRzLyVzIiwgcnRlX3BtdS5u YW1lLCBuYW1lKTsNCj4+ICsJZnAgPSBmb3BlbihwYXRoLCAiciIpOw0KPj4gKwlpZiAoZnAgPT0g TlVMTCkNCj4+ICsJCXJldHVybiAtZXJybm87DQo+PiArDQo+PiArCXJldCA9IGZyZWFkKGJ1Ziwg MSwgc2l6ZW9mKGJ1ZiksIGZwKTsNCj4+ICsJaWYgKHJldCA9PSAwKSB7DQo+PiArCQlmY2xvc2Uo ZnApOw0KPj4gKw0KPj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+PiArCX0NCj4+ICsJZmNsb3NlKGZw KTsNCj4+ICsJYnVmW3JldF0gPSAnXDAnOw0KPj4gKw0KPj4gKwlyZXR1cm4gcGFyc2VfZXZlbnQo YnVmLCBjb25maWcpOw0KPj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgaW50DQo+PiArZG9fcGVyZl9l dmVudF9vcGVuKHVpbnQ2NF90IGNvbmZpZ1szXSwgaW50IGdyb3VwX2ZkKSB7DQo+PiArCXN0cnVj dCBwZXJmX2V2ZW50X2F0dHIgYXR0ciA9IHsNCj4+ICsJCS5zaXplID0gc2l6ZW9mKHN0cnVjdCBw ZXJmX2V2ZW50X2F0dHIpLA0KPj4gKwkJLnR5cGUgPSBQRVJGX1RZUEVfUkFXLA0KPj4gKwkJLmV4 Y2x1ZGVfa2VybmVsID0gMSwNCj4+ICsJCS5leGNsdWRlX2h2ID0gMSwNCj4+ICsJCS5kaXNhYmxl ZCA9IDEsDQo+PiArCQkucGlubmVkID0gZ3JvdXBfZmQgPT0gLTEsDQo+PiArCX07DQo+PiArDQo+ PiArCXBtdV9hcmNoX2ZpeHVwX2NvbmZpZyhjb25maWcpOw0KPj4gKw0KPj4gKwlhdHRyLmNvbmZp ZyA9IGNvbmZpZ1swXTsNCj4+ICsJYXR0ci5jb25maWcxID0gY29uZmlnWzFdOw0KPj4gKwlhdHRy LmNvbmZpZzIgPSBjb25maWdbMl07DQo+PiArDQo+PiArCXJldHVybiBzeXNjYWxsKFNZU19wZXJm X2V2ZW50X29wZW4sICZhdHRyLCAwLCAtMSwgZ3JvdXBfZmQsIDApOyB9DQo+PiArDQo+PiArc3Rh dGljIGludA0KPj4gK29wZW5fZXZlbnRzKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwICpncm91 cCkgew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiArCXVpbnQ2NF90IGNv bmZpZ1szXTsNCj4+ICsJaW50IG51bSA9IDAsIHJldDsNCj4+ICsNCj4+ICsJLyogZ3JvdXAgbGVh ZGVyIGdldHMgY3JlYXRlZCBmaXJzdCwgd2l0aCBmZCA9IC0xICovDQo+PiArCWdyb3VwLT5mZHNb MF0gPSAtMTsNCj4+ICsNCj4+ICsJVEFJTFFfRk9SRUFDSChldmVudCwgJnJ0ZV9wbXUuZXZlbnRf bGlzdCwgbmV4dCkgew0KPj4gKwkJcmV0ID0gZ2V0X2V2ZW50X2NvbmZpZyhldmVudC0+bmFtZSwg Y29uZmlnKTsNCj4+ICsJCWlmIChyZXQpDQo+PiArCQkJY29udGludWU7DQo+PiArDQo+PiArCQly ZXQgPSBkb19wZXJmX2V2ZW50X29wZW4oY29uZmlnLCBncm91cC0+ZmRzWzBdKTsNCj4+ICsJCWlm IChyZXQgPT0gLTEpIHsNCj4+ICsJCQlyZXQgPSAtZXJybm87DQo+PiArCQkJZ290byBvdXQ7DQo+ PiArCQl9DQo+PiArDQo+PiArCQlncm91cC0+ZmRzW2V2ZW50LT5pbmRleF0gPSByZXQ7DQo+PiAr CQludW0rKzsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1cm4gMDsNCj4+ICtvdXQ6DQo+PiArCWZv ciAoLS1udW07IG51bSA+PSAwOyBudW0tLSkgew0KPj4gKwkJY2xvc2UoZ3JvdXAtPmZkc1tudW1d KTsNCj4+ICsJCWdyb3VwLT5mZHNbbnVtXSA9IC0xOw0KPj4gKwl9DQo+PiArDQo+PiArDQo+PiAr CXJldHVybiByZXQ7DQo+PiArfQ0KPj4gKw0KPj4gK3N0YXRpYyBpbnQNCj4+ICttbWFwX2V2ZW50 cyhzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXApIHsNCj4+ICsJbG9uZyBwYWdlX3Np emUgPSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpOw0KPj4gKwl1bnNpZ25lZCBpbnQgaTsNCj4+ICsJ dm9pZCAqYWRkcjsNCj4+ICsJaW50IHJldDsNCj4+ICsNCj4+ICsJZm9yIChpID0gMDsgaSA8IHJ0 ZV9wbXUubnVtX2dyb3VwX2V2ZW50czsgaSsrKSB7DQo+PiArCQlhZGRyID0gbW1hcCgwLCBwYWdl X3NpemUsIFBST1RfUkVBRCwgTUFQX1NIQVJFRCwgZ3JvdXAtPmZkc1tpXSwgMCk7DQo+PiArCQlp ZiAoYWRkciA9PSBNQVBfRkFJTEVEKSB7DQo+PiArCQkJcmV0ID0gLWVycm5vOw0KPj4gKwkJCWdv dG8gb3V0Ow0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJZ3JvdXAtPm1tYXBfcGFnZXNbaV0gPSBhZGRy Ow0KPj4gKwl9DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gK291dDoNCj4+ICsJZm9yICg7IGk7 IGktLSkgew0KPj4gKwkJbXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2kgLSAxXSwgcGFnZV9zaXpl KTsNCj4+ICsJCWdyb3VwLT5tbWFwX3BhZ2VzW2kgLSAxXSA9IE5VTEw7DQo+PiArCX0NCj4+ICsN Cj4+ICsJcmV0dXJuIHJldDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQNCj4+ICtjbGVh bnVwX2V2ZW50cyhzdHJ1Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXApIHsNCj4+ICsJdW5z aWduZWQgaW50IGk7DQo+PiArDQo+PiArCWlmIChncm91cC0+ZmRzWzBdICE9IC0xKQ0KPj4gKwkJ aW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0NfRElTQUJMRSwgUEVSRl9JT0NfRkxB R19HUk9VUCk7DQo+PiArDQo+PiArCWZvciAoaSA9IDA7IGkgPCBydGVfcG11Lm51bV9ncm91cF9l dmVudHM7IGkrKykgew0KPj4gKwkJaWYgKGdyb3VwLT5tbWFwX3BhZ2VzW2ldKSB7DQo+PiArCQkJ bXVubWFwKGdyb3VwLT5tbWFwX3BhZ2VzW2ldLCBzeXNjb25mKF9TQ19QQUdFX1NJWkUpKTsNCj4+ ICsJCQlncm91cC0+bW1hcF9wYWdlc1tpXSA9IE5VTEw7DQo+PiArCQl9DQo+PiArDQo+PiArCQlp ZiAoZ3JvdXAtPmZkc1tpXSAhPSAtMSkgew0KPj4gKwkJCWNsb3NlKGdyb3VwLT5mZHNbaV0pOw0K Pj4gKwkJCWdyb3VwLT5mZHNbaV0gPSAtMTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwln cm91cC0+ZW5hYmxlZCA9IGZhbHNlOw0KPj4gK30NCj4+ICsNCj4+ICtpbnQNCj4+ICtfX3J0ZV9w bXVfZW5hYmxlX2dyb3VwKHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9ldmVudF9n cm91cCAqZ3JvdXAgPSAmUlRFX1BFUl9MQ09SRShfZXZlbnRfZ3JvdXApOw0KPj4gKwlpbnQgcmV0 Ow0KPj4gKw0KPj4gKwlpZiAocnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzID09IDApDQo+PiArCQly ZXR1cm4gLUVOT0RFVjsNCj4+ICsNCj4+ICsJcmV0ID0gb3Blbl9ldmVudHMoZ3JvdXApOw0KPj4g KwlpZiAocmV0KQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+PiArCXJldCA9IG1tYXBfZXZlbnRz KGdyb3VwKTsNCj4+ICsJaWYgKHJldCkNCj4+ICsJCWdvdG8gb3V0Ow0KPj4gKw0KPj4gKwlpZiAo aW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0NfUkVTRVQsIFBFUkZfSU9DX0ZMQUdf R1JPVVApID09IC0xKSB7DQo+PiArCQlyZXQgPSAtZXJybm87DQo+PiArCQlnb3RvIG91dDsNCj4+ ICsJfQ0KPj4gKw0KPj4gKwlpZiAoaW9jdGwoZ3JvdXAtPmZkc1swXSwgUEVSRl9FVkVOVF9JT0Nf RU5BQkxFLCBQRVJGX0lPQ19GTEFHX0dST1VQKSA9PSAtMSkgew0KPj4gKwkJcmV0ID0gLWVycm5v Ow0KPj4gKwkJZ290byBvdXQ7DQo+PiArCX0NCj4+ICsNCj4+ICsJcnRlX3NwaW5sb2NrX2xvY2so JnJ0ZV9wbXUubG9jayk7DQo+PiArCVRBSUxRX0lOU0VSVF9UQUlMKCZydGVfcG11LmV2ZW50X2dy b3VwX2xpc3QsIGdyb3VwLCBuZXh0KTsNCj4+ICsJcnRlX3NwaW5sb2NrX3VubG9jaygmcnRlX3Bt dS5sb2NrKTsNCj4NCj5JIHRob3VnaHQgdGhhdCBhZnRlciBwcmV2aW91cyByb3VuZCBvZiByZXZp ZXdzLCB3ZSBnb3QgYSBjb25zZW5zdXMgdGhhdCBpdCBpcyBhIGJhZCBpZGVhIHRvIGluc2VydA0K PnBvaW50ZXIgb2YgVExTIHZhcmlhYmxlIGludG8gdGhlIGdsb2JhbCBsaXN0Og0KPmh0dHBzOi8v dXJsZGVmZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0NCj4zQV9fcGF0Y2h3b3Jr LmRwZGsub3JnX3Byb2plY3RfZHBka19wYXRjaF8yMDIzMDIxNjE3NTUwMi4zMTY0ODIwLTJEMi0y RHRkdXN6eW5za2ktDQo+NDBtYXJ2ZWxsLmNvbV8mZD1Ed0lGQWcmYz1uS2pXZWMyYjZSMG1PeVBh ejd4dGZRJnI9UFpOWGdyYmpkbFh4VkVFR1lreEl4Um5keUVVd1dVX2FkNWNlMjJZSTZJcyZtPW9K DQo+LQ0KPmVTbm1Kb0swcjF6VkZoS3JrV01uZmVsT2t4cXBqdFgyZkNyWGFHMlJkV2FnT3FBUTd2 Y0ZDSjBkT1dyVHQmcz1Udkd4cVFtVXpfVTN4TE9yb014T21zQ2lheGRxYk5MaTZHWg0KPnBISWVm bml3JmU9DQoNCkkgZG9uJ3QgdGhpbmsgdGhlcmUgd2FzIGFueSBjb25zZW5zdXMuIEl0IHdhcyBy YXRoZXIgeW91ciBwb2ludCBvZiB2aWV3IHNvbGVseS4gU28gSSBzdGlsbCBiZWxpZXZlDQp0aGF0 IGdpdmVuIGN1cnJlbnRseSB0aGF0IG9ubHkgcnVucyBvbiBsY29yZXMgYW5kIGxjb3JlcyBkbyBu b3QgdGVybWluYXRlIGJlZm9yZSB0aGUgbWFpbiANCm9uZSBoZW5jZSBpdCdzIHNhZmUgdG8gYWNj ZXNzIFRMUyBmcm9tIGEgbWFpbi4gDQoNCk9uY2Ugc3VwcG9ydCBmb3IgcnVubmluZyBvbiBhbnl0 aGluZyBvdGhlciB0aGFuIGxjb3JlIGdldHMgYWRkZWQgY3VycmVudCBtZWNoYW5pY3MgaXMgbGlr ZWx5IHRvIGNoYW5nZS4NCg0KQW5kIGFzIHlvdSBwb2ludGVkIG91dCwgdGhlcmUgYXJlIHBsZW50 eSBvZiBvcHRpb25zIGF2YWlsYWJsZS4gDQoNCj5BcyBJIHNhaWQgYmVmb3JlIC0gSSBiZWxpZXZl IGl0IGlzIGVycm9yIHByb25lLCBhbmQgbmVlZHMgdG8gYmUgYWRkcmVzc2VkLg0KPlRoZXJlIGFy ZSBwbGVudHkgb2Ygb3RoZXIgd2F5cyB0byBoYXZlIG9uZSBvYmplY3QgcGVyIGxjb3JlIChpZiB0 aGF0J3MgcmVhbGx5IG5lY2Vzc2FyeSk6DQo+YXJyYXkgb2YgUlRFX01BWF9MQ09SRSBpbmRleGVk IGJ5IGxjb3JlX2lkLCBvciBuZXcgcnRlX2xjb3JlX3Zhci5oIEFQSSBpbnRyb2R1Y2VkIGJ5IE1h dHRpYXMNCj5yZWNlbnRseSwgb3IgZXZlbiBzaW1wbGUgVExTIHBvaW50ZXIgd2l0aCBtYWxsb2Mo KSBiZWhpbmQgd291bGQgYmUgYmV0dGVyLg0KPg0KPj4gKwlncm91cC0+ZW5hYmxlZCA9IHRydWU7 DQo+PiArDQo+PiArCXJldHVybiAwOw0KPj4gKw0KPj4gK291dDoNCj4+ICsJY2xlYW51cF9ldmVu dHMoZ3JvdXApOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICtzdGF0 aWMgaW50DQo+PiArc2Nhbl9wbXVzKHZvaWQpDQo+PiArew0KPj4gKwljaGFyIHBhdGhbUEFUSF9N QVhdOw0KPj4gKwlzdHJ1Y3QgZGlyZW50ICpkZW50Ow0KPj4gKwljb25zdCBjaGFyICpuYW1lOw0K Pj4gKwlESVIgKmRpcnA7DQo+PiArDQo+PiArCWRpcnAgPSBvcGVuZGlyKEVWRU5UX1NPVVJDRV9E RVZJQ0VTX1BBVEgpOw0KPj4gKwlpZiAoZGlycCA9PSBOVUxMKQ0KPj4gKwkJcmV0dXJuIC1lcnJu bzsNCj4+ICsNCj4+ICsJd2hpbGUgKChkZW50ID0gcmVhZGRpcihkaXJwKSkpIHsNCj4+ICsJCW5h bWUgPSBkZW50LT5kX25hbWU7DQo+PiArCQlpZiAobmFtZVswXSA9PSAnLicpDQo+PiArCQkJY29u dGludWU7DQo+PiArDQo+PiArCQkvKiBzeXNmcyBlbnRyeSBzaG91bGQgZWl0aGVyIGNvbnRhaW4g Y3B1cyBvciBiZSBhIGNwdSAqLw0KPj4gKwkJaWYgKCFzdHJjbXAobmFtZSwgImNwdSIpKQ0KPj4g KwkJCWJyZWFrOw0KPj4gKw0KPj4gKwkJc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVO VF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvY3B1cyIsIG5hbWUpOw0KPj4gKwkJaWYgKGFjY2Vz cyhwYXRoLCBGX09LKSA9PSAwKQ0KPj4gKwkJCWJyZWFrOw0KPj4gKwl9DQo+PiArDQo+PiArCWlm IChkZW50KSB7DQo+PiArCQlydGVfcG11Lm5hbWUgPSBzdHJkdXAobmFtZSk7DQo+PiArCQlpZiAo cnRlX3BtdS5uYW1lID09IE5VTEwpIHsNCj4+ICsJCQljbG9zZWRpcihkaXJwKTsNCj4+ICsNCj4+ ICsJCQlyZXR1cm4gLUVOT01FTTsNCj4+ICsJCX0NCj4+ICsJfQ0KPj4gKw0KPj4gKwljbG9zZWRp cihkaXJwKTsNCj4+ICsNCj4+ICsJcmV0dXJuIHJ0ZV9wbXUubmFtZSA/IDAgOiAtRU5PREVWOw0K Pj4gK30NCj4+ICsNCj4+ICtzdGF0aWMgc3RydWN0IHJ0ZV9wbXVfZXZlbnQgKg0KPj4gK25ld19l dmVudChjb25zdCBjaGFyICpuYW1lKQ0KPj4gK3sNCj4+ICsJc3RydWN0IHJ0ZV9wbXVfZXZlbnQg KmV2ZW50Ow0KPj4gKw0KPj4gKwlldmVudCA9IGNhbGxvYygxLCBzaXplb2YoKmV2ZW50KSk7DQo+ PiArCWlmIChldmVudCA9PSBOVUxMKQ0KPj4gKwkJZ290byBvdXQ7DQo+PiArDQo+PiArCWV2ZW50 LT5uYW1lID0gc3RyZHVwKG5hbWUpOw0KPj4gKwlpZiAoZXZlbnQtPm5hbWUgPT0gTlVMTCkgew0K Pj4gKwkJZnJlZShldmVudCk7DQo+PiArCQlldmVudCA9IE5VTEw7DQo+PiArCX0NCj4+ICsNCj4+ ICtvdXQ6DQo+PiArCXJldHVybiBldmVudDsNCj4+ICt9DQo+PiArDQo+PiArc3RhdGljIHZvaWQN Cj4+ICtmcmVlX2V2ZW50KHN0cnVjdCBydGVfcG11X2V2ZW50ICpldmVudCkgew0KPj4gKwlmcmVl KGV2ZW50LT5uYW1lKTsNCj4+ICsJZnJlZShldmVudCk7DQo+PiArfQ0KPj4gKw0KPj4gK2ludA0K Pj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIgKm5hbWUpDQo+PiArew0KPj4gKwlzdHJ1 Y3QgcnRlX3BtdV9ldmVudCAqZXZlbnQ7DQo+PiArCWNoYXIgcGF0aFtQQVRIX01BWF07DQo+PiAr DQo+PiArCWlmIChydGVfcG11Lm5hbWUgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAtRU5PREVWOw0K Pj4gKw0KPj4gKwlpZiAocnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzICsgMSA+PSBSVEVfTUFYX05V TV9HUk9VUF9FVkVOVFMpDQo+PiArCQlyZXR1cm4gLUVOT1NQQzsNCj4+ICsNCj4+ICsJc25wcmlu dGYocGF0aCwgc2l6ZW9mKHBhdGgpLCBFVkVOVF9TT1VSQ0VfREVWSUNFU19QQVRIICIvJXMvZXZl bnRzLyVzIiwgcnRlX3BtdS5uYW1lLCBuYW1lKTsNCj4+ICsJaWYgKGFjY2VzcyhwYXRoLCBSX09L KSkNCj4+ICsJCXJldHVybiAtRU5PREVWOw0KPj4gKw0KPj4gKwlUQUlMUV9GT1JFQUNIKGV2ZW50 LCAmcnRlX3BtdS5ldmVudF9saXN0LCBuZXh0KSB7DQo+PiArCQlpZiAoIXN0cmNtcChldmVudC0+ bmFtZSwgbmFtZSkpDQo+PiArCQkJcmV0dXJuIGV2ZW50LT5pbmRleDsNCj4+ICsJCWNvbnRpbnVl Ow0KPj4gKwl9DQo+PiArDQo+PiArCWV2ZW50ID0gbmV3X2V2ZW50KG5hbWUpOw0KPj4gKwlpZiAo ZXZlbnQgPT0gTlVMTCkNCj4+ICsJCXJldHVybiAtRU5PTUVNOw0KPj4gKw0KPj4gKwlldmVudC0+ aW5kZXggPSBydGVfcG11Lm51bV9ncm91cF9ldmVudHMrKzsNCj4+ICsJVEFJTFFfSU5TRVJUX1RB SUwoJnJ0ZV9wbXUuZXZlbnRfbGlzdCwgZXZlbnQsIG5leHQpOw0KPj4gKw0KPj4gKwlyZXR1cm4g ZXZlbnQtPmluZGV4Ow0KPj4gK30NCj4+ICsNCj4+ICtpbnQNCj4+ICtydGVfcG11X2luaXQodm9p ZCkNCj4+ICt7DQo+PiArCWludCByZXQ7DQo+PiArDQo+PiArCS8qIEFsbG93IGNhbGxpbmcgaW5p dCBmcm9tIG11bHRpcGxlIGNvbnRleHRzIHdpdGhpbiBhIHNpbmdsZSB0aHJlYWQuIFRoaXMgc2lt cGxpZmllcw0KPj4gKwkgKiByZXNvdXJjZSBtYW5hZ2VtZW50IGEgYml0IGUuZyBpbiBjYXNlIGZh c3QtcGF0aCB0cmFjZXBvaW50IGhhcyBhbHJlYWR5IGJlZW4gZW5hYmxlZA0KPj4gKwkgKiB2aWEg Y29tbWFuZCBsaW5lIGJ1dCBhcHBsaWNhdGlvbiBkb2Vzbid0IGNhcmUgZW5vdWdoIGFuZCBwZXJm b3JtcyBpbml0L2ZpbmkgYWdhaW4uDQo+PiArCSAqLw0KPj4gKwlpZiAocnRlX2F0b21pY19mZXRj aF9hZGRfZXhwbGljaXQoJnJ0ZV9wbXUuaW5pdGlhbGl6ZWQsIDEsIHJ0ZV9tZW1vcnlfb3JkZXJf c2VxX2NzdCkgIT0gMCkNCj4+ICsJCXJldHVybiAwOw0KPg0KPk5vdCBzdXJlIEkgdW5kZXJzdGFu ZCB0aGUgY29tbWVudCBhYm92ZTogcnRlX3BtdV9pbml0KCkgc3VwcG9zZWQgdG8gYmUgTVQgc2Fm ZSBvciBub3Q/DQo+SWYgeWVzLCB0aGVuIHRoYXQgZnVuY3Rpb24gcHJvYmFibHkgbmVlZCB0byB3 YWl0IHRpbGwgaW5pdGlhbGl6YXRpb24gZmluaXNoZXMuDQo+DQoNCkl0J3Mgc3VwcG9zZWQgdG8g YmUgTVQgc2FmZS4gR2VuZXJhbGx5IHRoZXJlIGFyZSB0d28gb3B0aW9ucyBoZXJlLg0KDQojIG9u ZSB5b3UgcG9pbnRlZCBvdXQgaS5lIHNwaW5uaW5nIGluIGEgbG9vcCB1bnRpbCBldmVyeXRoaW5n IGlzIHVwIGFuZCBydW5uaW5nIA0KIyBjaGVja2luZyBpZiB0cmFjaW5nIGlzIGluaXRpYWxpemVk IGR1cmluZyBldmVudCByZWFkLW91dA0KDQpJbml0aWFsbHkgc2Vjb25kIG9wdGlvbiB3YXMgY2hv c2VuIGFuZCBydGVfcG11X3JlYWQoKSBwZXJmb3JtcyBjaGVjayBwcmlvciB0byBkb2luZyBhbnl0 aGluZy4NClN0aWxsLCBJIHNlZSBhIHByb2JsZW0gdGhlcmUgc28gSSdtIGdsYWQgeW91IHJhaXNl ZCB0aGF0LiANCg0KPj4gKw0KPj4gKwlyZXQgPSBzY2FuX3BtdXMoKTsNCj4+ICsJaWYgKHJldCkN Cj4+ICsJCWdvdG8gb3V0Ow0KPj4gKw0KPj4gKwlyZXQgPSBwbXVfYXJjaF9pbml0KCk7DQo+PiAr CWlmIChyZXQpDQo+PiArCQlnb3RvIG91dDsNCj4+ICsNCj4+ICsJVEFJTFFfSU5JVCgmcnRlX3Bt dS5ldmVudF9saXN0KTsNCj4+ICsJVEFJTFFfSU5JVCgmcnRlX3BtdS5ldmVudF9ncm91cF9saXN0 KTsNCj4+ICsJcnRlX3NwaW5sb2NrX2luaXQoJnJ0ZV9wbXUubG9jayk7DQo+PiArDQo+PiArCXJl dHVybiAwOw0KPj4gK291dDoNCj4+ICsJZnJlZShydGVfcG11Lm5hbWUpOw0KPj4gKwlydGVfcG11 Lm5hbWUgPSBOVUxMOw0KPj4gKw0KPj4gKwlyZXR1cm4gcmV0Ow0KPj4gK30NCj4+ICsNCj4+ICt2 b2lkDQo+PiArcnRlX3BtdV9maW5pKHZvaWQpDQo+PiArew0KPj4gKwlzdHJ1Y3QgcnRlX3BtdV9l dmVudF9ncm91cCAqZ3JvdXAsICp0bXBfZ3JvdXA7DQo+PiArCXN0cnVjdCBydGVfcG11X2V2ZW50 ICpldmVudCwgKnRtcF9ldmVudDsNCj4+ICsNCj4+ICsJLyogY2xlYW51cCBvbmNlIGluaXQgY291 bnQgZHJvcHMgdG8gemVybyAqLw0KPj4gKwlpZiAocnRlX2F0b21pY19mZXRjaF9zdWJfZXhwbGlj aXQoJnJ0ZV9wbXUuaW5pdGlhbGl6ZWQsIDEsDQo+PiArCQkJCQkgIHJ0ZV9tZW1vcnlfb3JkZXJf c2VxX2NzdCkgLSAxICE9IDApDQo+PiArCQlyZXR1cm47DQo+PiArDQo+PiArCVJURV9UQUlMUV9G T1JFQUNIX1NBRkUoZXZlbnQsICZydGVfcG11LmV2ZW50X2xpc3QsIG5leHQsIHRtcF9ldmVudCkg ew0KPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2ZW50X2xpc3QsIGV2ZW50LCBuZXh0KTsN Cj4+ICsJCWZyZWVfZXZlbnQoZXZlbnQpOw0KPj4gKwl9DQo+PiArDQo+PiArCVJURV9UQUlMUV9G T1JFQUNIX1NBRkUoZ3JvdXAsICZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIG5leHQsIHRtcF9n cm91cCkgew0KPj4gKwkJVEFJTFFfUkVNT1ZFKCZydGVfcG11LmV2ZW50X2dyb3VwX2xpc3QsIGdy b3VwLCBuZXh0KTsNCj4+ICsJCWNsZWFudXBfZXZlbnRzKGdyb3VwKTsNCj4+ICsJfQ0KPj4gKw0K Pj4gKwlwbXVfYXJjaF9maW5pKCk7DQo+PiArCWZyZWUocnRlX3BtdS5uYW1lKTsNCj4+ICsJcnRl X3BtdS5uYW1lID0gTlVMTDsNCj4+ICsJcnRlX3BtdS5udW1fZ3JvdXBfZXZlbnRzID0gMDsNCj4+ ICt9DQo+PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS9ydGVfcG11LmggYi9saWIvcG11L3J0ZV9wbXUu aCBuZXcgZmlsZSBtb2RlDQo+PiAxMDA2NDQgaW5kZXggMDAwMDAwMDAwMC4uMDkyMzhlZTMzZA0K Pj4gLS0tIC9kZXYvbnVsbA0KPj4gKysrIGIvbGliL3BtdS9ydGVfcG11LmgNCj4+IEBAIC0wLDAg KzEsMjI3IEBADQo+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0K Pj4gKyAqIENvcHlyaWdodChjKSAyMDI0IE1hcnZlbGwNCj4+ICsgKi8NCj4+ICsNCj4+ICsjaWZu ZGVmIF9SVEVfUE1VX0hfDQo+PiArI2RlZmluZSBfUlRFX1BNVV9IXw0KPj4gKw0KPj4gKy8qKg0K Pj4gKyAqIEBmaWxlDQo+PiArICoNCj4+ICsgKiBQTVUgZXZlbnQgdHJhY2luZyBvcGVyYXRpb25z DQo+PiArICoNCj4+ICsgKiBUaGlzIGZpbGUgZGVmaW5lcyBnZW5lcmljIEFQSSBhbmQgdHlwZXMg bmVjZXNzYXJ5IHRvIHNldHVwIFBNVSBhbmQNCj4+ICsgKiByZWFkIHNlbGVjdGVkIGNvdW50ZXJz IGluIHJ1bnRpbWUuDQo+PiArICovDQo+PiArDQo+PiArI2lmZGVmIF9fY3BsdXNwbHVzDQo+PiAr ZXh0ZXJuICJDIiB7DQo+PiArI2VuZGlmDQo+PiArDQo+PiArI2luY2x1ZGUgPGVycm5vLmg+DQo+ PiArDQo+PiArI2luY2x1ZGUgPHJ0ZV9jb21tb24uaD4NCj4+ICsjaW5jbHVkZSA8cnRlX2NvbXBh dC5oPg0KPj4gKw0KPj4gKyNpZmRlZiBSVEVfRVhFQ19FTlZfTElOVVgNCj4+ICsNCj4+ICsjaW5j bHVkZSA8bGludXgvcGVyZl9ldmVudC5oPg0KPj4gKw0KPj4gKyNpbmNsdWRlIDxydGVfYXRvbWlj Lmg+DQo+PiArI2luY2x1ZGUgPHJ0ZV9icmFuY2hfcHJlZGljdGlvbi5oPg0KPj4gKyNpbmNsdWRl IDxydGVfc3BpbmxvY2suaD4NCj4+ICsNCj4+ICsvKiogTWF4aW11bSBudW1iZXIgb2YgZXZlbnRz IGluIGEgZ3JvdXAgKi8gI2RlZmluZQ0KPj4gK1JURV9NQVhfTlVNX0dST1VQX0VWRU5UUyA4DQo+ PiArDQo+PiArLyoqDQo+PiArICogQSBzdHJ1Y3R1cmUgZGVzY3JpYmluZyBhIGdyb3VwIG9mIGV2 ZW50cy4NCj4+ICsgKi8NCj4+ICtzdHJ1Y3QgX19ydGVfY2FjaGVfYWxpZ25lZCBydGVfcG11X2V2 ZW50X2dyb3VwIHsNCj4+ICsJLyoqIGFycmF5IG9mIHVzZXIgcGFnZXMgKi8NCj4+ICsJc3RydWN0 IHBlcmZfZXZlbnRfbW1hcF9wYWdlICptbWFwX3BhZ2VzW1JURV9NQVhfTlVNX0dST1VQX0VWRU5U U107DQo+PiArCWludCBmZHNbUlRFX01BWF9OVU1fR1JPVVBfRVZFTlRTXTsgLyoqPCBhcnJheSBv ZiBldmVudCBkZXNjcmlwdG9ycyAqLw0KPj4gKwlib29sIGVuYWJsZWQ7IC8qKjwgdHJ1ZSBpZiBn cm91cCB3YXMgZW5hYmxlZCBvbiBwYXJ0aWN1bGFyIGxjb3JlICovDQo+PiArCVRBSUxRX0VOVFJZ KHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIG5leHQ7IC8qKjwgbGlzdCBlbnRyeSAqLyB9Ow0KPj4gKw0K Pj4gKy8qKg0KPj4gKyAqIEEgUE1VIHN0YXRlIGNvbnRhaW5lci4NCj4+ICsgKi8NCj4+ICtzdHJ1 Y3QgcnRlX3BtdSB7DQo+PiArCWNoYXIgKm5hbWU7IC8qKjwgbmFtZSBvZiBjb3JlIFBNVSBsaXN0 ZWQgdW5kZXIgL3N5cy9idXMvZXZlbnRfc291cmNlL2RldmljZXMgKi8NCj4+ICsJcnRlX3NwaW5s b2NrX3QgbG9jazsgLyoqPCBzZXJpYWxpemUgYWNjZXNzIHRvIGV2ZW50IGdyb3VwIGxpc3QgKi8N Cj4+ICsJVEFJTFFfSEVBRCgsIHJ0ZV9wbXVfZXZlbnRfZ3JvdXApIGV2ZW50X2dyb3VwX2xpc3Q7 IC8qKjwgbGlzdCBvZiBldmVudCBncm91cHMgKi8NCj4+ICsJdW5zaWduZWQgaW50IG51bV9ncm91 cF9ldmVudHM7IC8qKjwgbnVtYmVyIG9mIGV2ZW50cyBpbiBhIGdyb3VwICovDQo+PiArCVRBSUxR X0hFQUQoLCBydGVfcG11X2V2ZW50KSBldmVudF9saXN0OyAvKio8IGxpc3Qgb2YgbWF0Y2hpbmcg ZXZlbnRzICovDQo+PiArCXVuc2lnbmVkIGludCBpbml0aWFsaXplZDsgLyoqPCBpbml0aWFsaXph dGlvbiBjb3VudGVyICovIH07DQo+PiArDQo+PiArLyoqIGxjb3JlIGV2ZW50IGdyb3VwICovDQo+ PiArUlRFX0RFQ0xBUkVfUEVSX0xDT1JFKHN0cnVjdCBydGVfcG11X2V2ZW50X2dyb3VwLCBfZXZl bnRfZ3JvdXApOw0KPj4gKw0KPj4gKy8qKiBQTVUgc3RhdGUgY29udGFpbmVyICovDQo+PiArZXh0 ZXJuIHN0cnVjdCBydGVfcG11IHJ0ZV9wbXU7DQo+PiArDQo+PiArLyoqIEVhY2ggYXJjaGl0ZWN0 dXJlIHN1cHBvcnRpbmcgUE1VIG5lZWRzIHRvIHByb3ZpZGUgaXRzIG93biB2ZXJzaW9uDQo+PiAr Ki8gI2lmbmRlZiBydGVfcG11X3BtY19yZWFkICNkZWZpbmUgcnRlX3BtdV9wbWNfcmVhZChpbmRl eCkgKHsNCj4+ICsodm9pZCkoaW5kZXgpOyAwOyB9KSAjZW5kaWYNCj4+ICsNCj4+ICsvKioNCj4+ ICsgKiBAd2FybmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5n ZSB3aXRob3V0IHByaW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogUmVhZCBQTVUgY291bnRlci4N Cj4+ICsgKg0KPj4gKyAqIEB3YXJuaW5nIFRoaXMgc2hvdWxkIGJlIG5vdCBjYWxsZWQgZGlyZWN0 bHkuDQo+PiArICoNCj4+ICsgKiBAcGFyYW0gcGMNCj4+ICsgKiAgIFBvaW50ZXIgdG8gdGhlIG1t YXBwZWQgdXNlciBwYWdlLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIENvdW50ZXIgdmFsdWUg cmVhZCBmcm9tIGhhcmR3YXJlLg0KPj4gKyAqLw0KPg0KPkFzIEkgYWxyZWFkeSBhc2tlZCB5b3Ug c2V2ZXJhbCB0aW1lcyBpbiBwcmV2aW91cyByZXZpZXcgcm91bmRzOg0KPmh0dHBzOi8vdXJsZGVm ZW5zZS5wcm9vZnBvaW50LmNvbS92Mi91cmw/dT1odHRwcy0NCj4zQV9fcGF0Y2h3b3JrLmRwZGsu b3JnX3Byb2plY3RfZHBka19wYXRjaF8yMDIzMDIxNjE3NTUwMi4zMTY0ODIwLTJEMi0yRHRkdXN6 eW5za2ktDQo+NDBtYXJ2ZWxsLmNvbV8mZD1Ed0lGQWcmYz1uS2pXZWMyYjZSMG1PeVBhejd4dGZR JnI9UFpOWGdyYmpkbFh4VkVFR1lreEl4Um5keUVVd1dVX2FkNWNlMjJZSTZJcyZtPW9KDQo+LQ0K PmVTbm1Kb0swcjF6VkZoS3JrV01uZmVsT2t4cXBqdFgyZkNyWGFHMlJkV2FnT3FBUTd2Y0ZDSjBk T1dyVHQmcz1Udkd4cVFtVXpfVTN4TE9yb014T21zQ2lheGRxYk5MaTZHWg0KPnBISWVmbml3JmU9 DQo+cGxlYXNlIGFkZCBhIGRldGFpbGVkIGNvbW1lbnQgaGVyZToNCj5pLmUuIHRoYXQgZnVuY3Rp b24gKGFuZCBydGVfcG11X3JlYWQoKSkgdG8gd29yayBwcm9wZXJseSBzdXBwb3NlZCB0byBiZSB1 c2VkIG9ubHkgb24NCj5hIHRocmVhZCB0aGF0ICphbHdheXMqIGJpbmRlZCB0byBqdXN0IG9uZSBj cHUgY29yZS4NCj4NCg0KT2theSBJIHdpbGwgYWRkIGNvbW1lbnQgdW5kZXIgbGltaXRhdGlvbnMg dGhhdCB3ZSB3YW50IG9uZSBsY29yZSBwZXIgY3B1IGNvcmUuIA0KDQo+PiArX19ydGVfZXhwZXJp bWVudGFsDQo+PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdWludDY0X3QNCj4+ICtfX3J0 ZV9wbXVfcmVhZF91c2VycGFnZShzdHJ1Y3QgcGVyZl9ldmVudF9tbWFwX3BhZ2UgKnBjKSB7ICNk ZWZpbmUNCj4+ICtfX1JURV9QTVVfUkVBRF9PTkNFKHgpICgqKGNvbnN0IHZvbGF0aWxlIHR5cGVv Zih4KSAqKSYoeCkpDQo+PiArCXVpbnQ2NF90IHdpZHRoLCBvZmZzZXQ7DQo+PiArCXVpbnQzMl90 IHNlcSwgaW5kZXg7DQo+PiArCWludDY0X3QgcG1jOw0KPj4gKw0KPj4gKwlmb3IgKDs7KSB7DQo+ PiArCQlzZXEgPSBfX1JURV9QTVVfUkVBRF9PTkNFKHBjLT5sb2NrKTsNCj4+ICsJCXJ0ZV9jb21w aWxlcl9iYXJyaWVyKCk7DQo+PiArCQlpbmRleCA9IF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPmlu ZGV4KTsNCj4+ICsJCW9mZnNldCA9IF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPm9mZnNldCk7DQo+ PiArCQl3aWR0aCA9IF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPnBtY193aWR0aCk7DQo+PiArDQo+ PiArCQkvKiBpbmRleCBzZXQgdG8gMCBtZWFucyB0aGF0IHBhcnRpY3VsYXIgY291bnRlciBjYW5u b3QgYmUgdXNlZCAqLw0KPj4gKwkJaWYgKGxpa2VseShwYy0+Y2FwX3VzZXJfcmRwbWMgJiYgaW5k ZXgpKSB7DQo+PiArCQkJcG1jID0gcnRlX3BtdV9wbWNfcmVhZChpbmRleCAtIDEpOw0KPj4gKwkJ CXBtYyA8PD0gNjQgLSB3aWR0aDsNCj4+ICsJCQlwbWMgPj49IDY0IC0gd2lkdGg7DQo+PiArCQkJ b2Zmc2V0ICs9IHBtYzsNCj4+ICsJCX0NCj4+ICsNCj4+ICsJCXJ0ZV9jb21waWxlcl9iYXJyaWVy KCk7DQo+PiArDQo+PiArCQlpZiAobGlrZWx5KF9fUlRFX1BNVV9SRUFEX09OQ0UocGMtPmxvY2sp ID09IHNlcSkpDQo+PiArCQkJcmV0dXJuIG9mZnNldDsNCj4+ICsJfQ0KPj4gKw0KPj4gKwlyZXR1 cm4gMDsNCj4+ICt9DQo+PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBF WFBFUklNRU5UQUw6IHRoaXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ ICsgKg0KPj4gKyAqIEVuYWJsZSBncm91cCBvZiBldmVudHMgb24gdGhlIGNhbGxpbmcgbGNvcmUu DQo+PiArICoNCj4+ICsgKiBAd2FybmluZyBUaGlzIHNob3VsZCBiZSBub3QgY2FsbGVkIGRpcmVj dGx5Lg0KPj4gKyAqDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgMCBpbiBjYXNlIG9mIHN1Y2Nl c3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4+ICtfX3J0ZV9leHBlcmlt ZW50YWwNCj4+ICtpbnQNCj4+ICtfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwKHZvaWQpOw0KPj4gKw0K Pj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5nDQo+PiArICogQGIgRVhQRVJJTUVOVEFMOiB0aGlzIEFQ SSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiArICoNCj4+ICsgKiBJbml0aWFs aXplIFBNVSBsaWJyYXJ5Lg0KPj4gKyAqDQo+PiArICogQHdhcm5pbmcgVGhpcyBzaG91bGQgYmUg bm90IGNhbGxlZCBkaXJlY3RseS4NCj4NCj5TYW1lIHF1ZXN0aW9ucyBhcyBiZWZvcmU6IGlmIGl0 IGlzIGludGVybmFsLCB0aGVuIHdoeToNCj5hKSBpdCBpcyBsb2NhdGVkIGluIHB1YmxpYyBBUEkg LmggZmlsZQ0KPmIpIHdoeSBpdCBpcyBjYWxsZWQgZGlyZWN0bHkgYnkgdXNlci1jb2RlIGluIGFw cC90ZXN0L3Rlc3RfcG11LmMgPw0KPg0KDQpTb21lIGZ1bmN0aW9ucyBhcmUgbG9jYXRlZCBpbiBw dWJsaWMgQVBJIGZpbGUgb3V0IG9mIGNvbnZlbmllbmNlLiBUaGV5IGFyZSBlaXRoZXIgbWFjcm9z IG9yIGlubGluZSBmdW5jdGlvbnMuIA0KRG9jdW1lbnRhdGlvbiBwb2ludHMgb3V0IHdoaWNoIGFy ZSBzYWZlIHRvIGJlIGNhbGxlZCBkaXJlY3RseSB3aGljaCBhcmUgbm90IHNvIHVzZXItc3BhY2Ug a25vd3MgdGhlIHJ1bGVzLiANCg0KPj4gKyAqDQo+PiArICogQHJldHVybg0KPj4gKyAqICAgMCBp biBjYXNlIG9mIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG90aGVyd2lzZS4NCj4+ICsgKi8NCj4+ ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtpbnQNCj4+ICtydGVfcG11X2luaXQodm9pZCk7DQo+ PiArDQo+PiArLyoqDQo+PiArICogQHdhcm5pbmcNCj4+ICsgKiBAYiBFWFBFUklNRU5UQUw6IHRo aXMgQVBJIG1heSBjaGFuZ2Ugd2l0aG91dCBwcmlvciBub3RpY2UNCj4+ICsgKg0KPj4gKyAqIEZp bmFsaXplIFBNVSBsaWJyYXJ5LiBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYWZ0ZXIgUE1VIGNvdW50 ZXJzIGFyZSBubyBsb25nZXIgYmVpbmcgcmVhZC4NCj4+ICsgKi8NCj4+ICtfX3J0ZV9leHBlcmlt ZW50YWwNCj4+ICt2b2lkDQo+PiArcnRlX3BtdV9maW5pKHZvaWQpOw0KPg0KPkhtbS4uLiwgd2h5 IF9maW5pXygpIGlzIGFsbG93ZWQgdG8gYmUgY2FsbGVkIGRpcmVjdGx5IHdoaWxlIF9pbml0Xygp IGRvZXNuJ3Q/DQo+DQoNClR5cG8uIEZ1bmN0aW9ucyB0aGF0IHNob3VsZCBub3QgYmUgY2FsbGVk IGRpcmVjdGx5IGFyZSBwcmVmaXhlZCB3aXRoIGRvdWJsZSB1bmRlcnNjb3JlLiANCkknbGwgc2Nh biB0aHJvdWdoIGhlYWRlciBmaWxlIG9uY2UgYWdhaW4gYW5kIHJlbW92ZSBpbnZhbGlkIGNvbW1l bnRzLiBUaGFua3MgZm9yIA0KY2F0Y2hpbmcgdGhpcy4gDQoNCj4+ICsvKioNCj4+ICsgKiBAd2Fy bmluZw0KPj4gKyAqIEBiIEVYUEVSSU1FTlRBTDogdGhpcyBBUEkgbWF5IGNoYW5nZSB3aXRob3V0 IHByaW9yIG5vdGljZQ0KPj4gKyAqDQo+PiArICogQWRkIGV2ZW50IHRvIHRoZSBncm91cCBvZiBl bmFibGVkIGV2ZW50cy4NCj4+ICsgKg0KPj4gKyAqIEBwYXJhbSBuYW1lDQo+PiArICogICBOYW1l IG9mIGFuIGV2ZW50IGxpc3RlZCB1bmRlciAvc3lzL2J1cy9ldmVudF9zb3VyY2UvZGV2aWNlcy9w bXUvZXZlbnRzLg0KPj4gKyAqIEByZXR1cm4NCj4+ICsgKiAgIEV2ZW50IGluZGV4IGluIGNhc2Ug b2Ygc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb3RoZXJ3aXNlLg0KPj4gKyAqLw0KPj4gK19fcnRl X2V4cGVyaW1lbnRhbA0KPj4gK2ludA0KPj4gK3J0ZV9wbXVfYWRkX2V2ZW50KGNvbnN0IGNoYXIg Km5hbWUpOw0KPj4gKw0KPj4gKy8qKg0KPj4gKyAqIEB3YXJuaW5nDQo+PiArICogQGIgRVhQRVJJ TUVOVEFMOiB0aGlzIEFQSSBtYXkgY2hhbmdlIHdpdGhvdXQgcHJpb3Igbm90aWNlDQo+PiArICoN Cj4+ICsgKiBSZWFkIGhhcmR3YXJlIGNvdW50ZXIgY29uZmlndXJlZCB0byBjb3VudCBvY2N1cnJl bmNlcyBvZiBhbiBldmVudC4NCj4+ICsgKg0KPj4gKyAqIEBwYXJhbSBpbmRleA0KPj4gKyAqICAg SW5kZXggb2YgYW4gZXZlbnQgdG8gYmUgcmVhZC4NCj4+ICsgKiBAcmV0dXJuDQo+PiArICogICBF dmVudCB2YWx1ZSByZWFkIGZyb20gcmVnaXN0ZXIuIEluIGNhc2Ugb2YgZXJyb3JzIG9yIGxhY2sg b2Ygc3VwcG9ydA0KPj4gKyAqICAgMCBpcyByZXR1cm5lZC4gSW4gb3RoZXIgd29yZHMsIHN0cmVh bSBvZiB6ZXJvcyBpbiBhIHRyYWNlIGZpbGUNCj4+ICsgKiAgIGluZGljYXRlcyBwcm9ibGVtIHdp dGggcmVhZGluZyBwYXJ0aWN1bGFyIFBNVSBldmVudCByZWdpc3Rlci4NCj4+ICsgKi8NCj4+ICtf X3J0ZV9leHBlcmltZW50YWwNCj4+ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1aW50NjRf dA0KPj4gK3J0ZV9wbXVfcmVhZCh1bnNpZ25lZCBpbnQgaW5kZXgpDQo+PiArew0KPj4gKwlzdHJ1 Y3QgcnRlX3BtdV9ldmVudF9ncm91cCAqZ3JvdXAgPSAmUlRFX1BFUl9MQ09SRShfZXZlbnRfZ3Jv dXApOw0KPj4gKwlpbnQgcmV0Ow0KPj4gKw0KPj4gKwlpZiAodW5saWtlbHkoIXJ0ZV9wbXUuaW5p dGlhbGl6ZWQpKQ0KPj4gKwkJcmV0dXJuIDA7DQo+PiArDQo+PiArCWlmICh1bmxpa2VseSghZ3Jv dXAtPmVuYWJsZWQpKSB7DQo+PiArCQlyZXQgPSBfX3J0ZV9wbXVfZW5hYmxlX2dyb3VwKCk7DQo+ PiArCQlpZiAocmV0KQ0KPj4gKwkJCXJldHVybiAwOw0KPj4gKwl9DQo+PiArDQo+PiArCWlmICh1 bmxpa2VseShpbmRleCA+PSBydGVfcG11Lm51bV9ncm91cF9ldmVudHMpKQ0KPj4gKwkJcmV0dXJu IDA7DQo+PiArDQo+PiArCXJldHVybiBfX3J0ZV9wbXVfcmVhZF91c2VycGFnZShncm91cC0+bW1h cF9wYWdlc1tpbmRleF0pOw0KPj4gK30NCj4+ICsNCj4+ICsjZWxzZSAvKiAhUlRFX0VYRUNfRU5W X0xJTlVYICovDQo+PiArDQo+PiArX19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGlu ZSBpbnQgcnRlX3BtdV9pbml0KHZvaWQpIHsgcmV0dXJuIC1FTk9UU1VQOyB9DQo+PiArDQo+PiAr X19ydGVfZXhwZXJpbWVudGFsDQo+PiArc3RhdGljIGlubGluZSB2b2lkIHJ0ZV9wbXVfZmluaSh2 b2lkKSB7IH0NCj4+ICsNCj4+ICtfX3J0ZV9leHBlcmltZW50YWwNCj4+ICtzdGF0aWMgaW5saW5l IGludCBydGVfcG11X2FkZF9ldmVudChjb25zdCBjaGFyICpuYW1lIF9fcnRlX3VudXNlZCkgew0K Pj4gK3JldHVybiAtRU5PVFNVUDsgfQ0KPj4gKw0KPj4gK19fcnRlX2V4cGVyaW1lbnRhbA0KPj4g K3N0YXRpYyBpbmxpbmUgdWludDY0X3QgcnRlX3BtdV9yZWFkKHVuc2lnbmVkIGludCBpbmRleCBf X3J0ZV91bnVzZWQpDQo+PiAreyByZXR1cm4gVUlOVDY0X01BWDsgfQ0KPj4gKw0KPj4gKyNlbmRp ZiAvKiBSVEVfRVhFQ19FTlZfTElOVVggKi8NCj4+ICsNCj4+ICsjaWZkZWYgX19jcGx1c3BsdXMN Cj4+ICt9DQo+PiArI2VuZGlmDQo+PiArDQo+PiArI2VuZGlmIC8qIF9SVEVfUE1VX0hfICovDQo+ PiBkaWZmIC0tZ2l0IGEvbGliL3BtdS92ZXJzaW9uLm1hcCBiL2xpYi9wbXUvdmVyc2lvbi5tYXAg bmV3IGZpbGUgbW9kZQ0KPj4gMTAwNjQ0IGluZGV4IDAwMDAwMDAwMDAuLmQ3YzgwY2U0Y2UNCj4+ IC0tLSAvZGV2L251bGwNCj4+ICsrKyBiL2xpYi9wbXUvdmVyc2lvbi5tYXANCj4+IEBAIC0wLDAg KzEsMTQgQEANCj4+ICtFWFBFUklNRU5UQUwgew0KPj4gKwlnbG9iYWw6DQo+PiArDQo+PiArCSMg YWRkZWQgaW4gMjQuMTENCj4+ICsJX19ydGVfcG11X2VuYWJsZV9ncm91cDsNCj4+ICsJcGVyX2xj b3JlX19ldmVudF9ncm91cDsNCj4+ICsJcnRlX3BtdTsNCj4+ICsJcnRlX3BtdV9hZGRfZXZlbnQ7 DQo+PiArCXJ0ZV9wbXVfZmluaTsNCj4+ICsJcnRlX3BtdV9pbml0Ow0KPj4gKwlydGVfcG11X3Jl YWQ7DQo+PiArDQo+PiArCWxvY2FsOiAqOw0KPj4gK307DQo+PiAtLQ0KPj4gMi4zNC4xDQoNCg==