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 870ECA0C4B; Wed, 7 Jul 2021 17:09:14 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 48B7F413EE; Wed, 7 Jul 2021 17:09:14 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id 41E91413B6 for ; Wed, 7 Jul 2021 17:09:12 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10037"; a="231061787" X-IronPort-AV: E=Sophos;i="5.83,331,1616482800"; d="scan'208";a="231061787" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Jul 2021 08:09:11 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.83,331,1616482800"; d="scan'208";a="491740424" Received: from orsmsx603.amr.corp.intel.com ([10.22.229.16]) by orsmga001.jf.intel.com with ESMTP; 07 Jul 2021 08:09:10 -0700 Received: from orsmsx611.amr.corp.intel.com (10.22.229.24) by ORSMSX603.amr.corp.intel.com (10.22.229.16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Wed, 7 Jul 2021 08:09:10 -0700 Received: from orsmsx602.amr.corp.intel.com (10.22.229.15) by ORSMSX611.amr.corp.intel.com (10.22.229.24) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10; Wed, 7 Jul 2021 08:09:09 -0700 Received: from orsedg603.ED.cps.intel.com (10.7.248.4) by orsmsx602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.10 via Frontend Transport; Wed, 7 Jul 2021 08:09:09 -0700 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.171) by edgegateway.intel.com (134.134.137.100) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.4; Wed, 7 Jul 2021 08:09:08 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aOk5zV2vtKnO6cQJ1H0PGadm2Ilj8J0h/1MGY35JSX7Ny2DYvmoy6odFdpQMr4IdjTfiXp/vp0P2hagBliqOxa+NBzMLNCLMNqXQ88lhF01tMBwtkHajtGIVrr7bdVepZc9Whri7S9VCGstSzfmeG9xt/VFWNQbZeFB8d2QHjddqanHI4t/EbkOpeLokN+CAspTEbTs489GWdyMQIouPfhHYYchMlQngS9k/M6UwRUxpNyGFiXWcxZNjSB8NMY768fkSBQpB5MVM4OThOOp2jk6eDE5J0YlkhMbTlRj5/qgtK2VYIDPwJmrDzqPqXQyKSJgNfT6jV11/ihxRG10tRQ== 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-SenderADCheck; bh=W6FsEPNUEFuOi9N5s2BHBPhS5BatvByk3vuc/8IC/aw=; b=Xr7aufCsOn8jv9cMwue4SXf33CARZJDb3N5GUrQjA42YCOza519CxYHCvgitgJTz1liHlARAUYuM59HsvVRcm8HDj+2rQC4uSeq5FfUQKWW80wxhvDA9AP3QZ2KD+6oZp6Z7g15etLS9mdeb8oQhlK/by6ZUbzhglGdSM1vVyiPTz0+6Wv/E8r/ITA331U6902jMvt+buUFABt1JL52F0yAXGdUZXEmqi+qr6VYivp/ZmQ61g6x2Va30kyOXEBmYHub2kRZa2o3s2zU9Q1g42rTqhhef16GavaFWSMuEHpV4aGwZC063214QZUHTzUBQZekregofOvhkz0Fk2lWN7A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=W6FsEPNUEFuOi9N5s2BHBPhS5BatvByk3vuc/8IC/aw=; b=IkhcLquqx4WyJy1xoP6699Q3emilmKxa3hx76xJVxDewtyJYMUFg3IYLUhmP2dvGHckTEtjtegFLpBMi7zxwQX0J2TlxfkqHktgfpS3YvqdTlB/adCaGBYliSkqRSyT6KPHQN1qn2pIGZ+4Q+o2CUjj3C2ZtZ6O4cmod+C6dDHM= Received: from BN9PR11MB5513.namprd11.prod.outlook.com (2603:10b6:408:102::11) by BN6PR1101MB2115.namprd11.prod.outlook.com (2603:10b6:405:50::21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4308.21; Wed, 7 Jul 2021 15:09:00 +0000 Received: from BN9PR11MB5513.namprd11.prod.outlook.com ([fe80::e9c1:3649:2c25:6e27]) by BN9PR11MB5513.namprd11.prod.outlook.com ([fe80::e9c1:3649:2c25:6e27%3]) with mapi id 15.20.4308.020; Wed, 7 Jul 2021 15:09:00 +0000 From: "Ding, Xuan" To: "Burakov, Anatoly" , Maxime Coquelin , "Xia, Chenbo" , "Thomas Monjalon" , David Marchand CC: "dev@dpdk.org" , "Hu, Jiayu" , "Pai G, Sunil" , "Richardson, Bruce" , "Van Haaren, Harry" , "Liu, Yong" , "Ma, WenwuX" Thread-Topic: [dpdk-dev] [PATCH v5 1/2] vhost: enable IOMMU for async vhost Thread-Index: AQHXcXpqbvUY9amCikO+ie2Du6+0b6s0TBaAgAAIPICAAB/9gIABN92AgAAEhYCAASDbMIAAn7yAgAACNoCAACO6AIAABPwQ Date: Wed, 7 Jul 2021 15:09:00 +0000 Message-ID: References: <20210531150629.35020-1-xuan.ding@intel.com> <20210705084026.99898-1-xuan.ding@intel.com> <20210705084026.99898-2-xuan.ding@intel.com> <37d0691a-5094-4fea-8557-d117d230dcc8@intel.com> <68f64aa6-59a8-2e17-6eab-a49a6682e626@redhat.com> <4077e127-afff-0a2b-f2ba-5850b5e0a2ff@intel.com> <1013369b-3661-38fd-7207-6993e61da08e@redhat.com> <095cc219-4cba-5fbe-a7c0-bf02138f0959@intel.com> In-Reply-To: Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 5aee9485-7933-44a9-91b9-08d9415926c9 x-ms-traffictypediagnostic: BN6PR1101MB2115: x-ld-processed: 46c98d88-e344-4ed4-8496-4ed7712e255d,ExtAddr x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:3276; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: yy4huZGgOGT1k6AUu9oksps0YTpmbNmthgVONpDqa7JoyJ7buyEHg2d6qzqQh6F0+QynlRi9hq36+vYFnApbjOk06f1bkpf1vIp4TsD1f4EvxmGp8xnw/YPs7ytgDMey5JcQNXNTFEgVXiMfaHdkoAKJvmVyZ3id+DgWyvx3qkqUuL2FI7O90fpy7bTnpAqWJjupTtPfQFcKf9bt0RPPO2rhf1aXHdS8uV6/hpyP9QV4J/iRX/CCmq/EF+XLwmIjaJ3QilYpZVVLycXcNEfsdco7YdscTt5Noe4+yy2pBsjk2K1wHV87aZ5Bbcwk20ctUpje8t3gxTaumimqRtafSWXFsmmUCt/WVGccv5ylUTUy/b5PWjPVuUD5zhFPwl+M0eeXl1jxpjDETR7Cfss2L9HqkCcpvWL6y2iM5bHKUrTLZt1BWTr+x7yaFnIC8w25N+zbO5QsQlD4LzDrgEjWYb5X5Qj7UWJkn0bxaFzFLtuocDpGpSf+o9HoUxc/FIysoZ1+3n0pmhsCVPsJ3+pPqsU39BYwziy6ifzIVrIP4tQhud2nSbn7nbyhxukHOaN7iwqMz+ZLRhx3mR7Fj6/3d2ysu5rwwwJN/9CaY/lx8fI3BO/3+ojc9QaE5hY/dMCVV4Wvxe2EIraeA2UwiHJYrA== x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BN9PR11MB5513.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(346002)(396003)(366004)(376002)(39850400004)(136003)(76116006)(30864003)(38100700002)(66556008)(107886003)(9686003)(186003)(2906002)(66476007)(64756008)(66946007)(52536014)(8936002)(66446008)(71200400001)(5660300002)(7696005)(8676002)(55016002)(6506007)(53546011)(478600001)(86362001)(122000001)(83380400001)(316002)(54906003)(4326008)(33656002)(110136005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?cXo3anZQZkx2TmxSZ2xWMS9DRW9JNW5wS1dnaXhqK0FFNi8rMkxic1JCVXpr?= =?utf-8?B?ZkJVZnh1Z0JFNTM3dmxEODA1cERMWTVqNFMwbUtwSkNoTEpDdHVYdjR5Ykpx?= =?utf-8?B?T0kyVU5YamhXd003TWpHMnR5UWVlRXVVRXhFQ0JoZUxwNkcvYllCOHhHdDNC?= =?utf-8?B?T1NITTExTU93SDJ2YzhZcjc4VTNxYms4bUpBd3hBdnhJcU5RVktaRUVraC81?= =?utf-8?B?eUwzWmsrQ2hCZFl4SlFBUWRiL2RIWjhkQ052ZHBVME1XbXpDTUFSNUFqb05o?= =?utf-8?B?MjUycXorZzdtQkNNUXNxTFg5WDkxenYzalNrak81VXNFVndvd1hzVXlUczVD?= =?utf-8?B?SVc4ZkNGd3FPZnA3cXJ1QU12S0pVUXRuWEh3RGRTYjBYYld3cVBucE9tcm92?= =?utf-8?B?SmQ3c2g4a1p3SFRpQWg5OUt6YmhxbmZLenJUZ2labHFSL2VReXZnOUxjc1Jl?= =?utf-8?B?MFRzM3IyWHhtSUszMXZ6VjJyd1plK3RaMVVML1M1TmEvQURQS3RtdWR3RTZ5?= =?utf-8?B?YXEwS0lkc3dvdFFWdFJVMUh2QkZINUx6N0JFWVJMLzVCTjFobStaZjJMUHdT?= =?utf-8?B?eGhaNFVLQjdZMWdYZEF1bUwweGFtM2szNXFIOEtONXRyQ1RjWjV0VUV2NXdH?= =?utf-8?B?Smxxcm1wS0t4dmRMZlhUNHRobjN5SVZEOCt3NGZzZzJZbm14TEUydW4zakJD?= =?utf-8?B?MzgyMS92QnpjMUdhTlY5K0FZekRUTlNXTzdtS3NNV25ia2M0ZzdvMXg4Zytt?= =?utf-8?B?aWZPZ01TMnVTTUlWUDVacmllTDNHbGxTaW91NmY0dTM4cUFtaFcyYldXQlRp?= =?utf-8?B?MHV4Wktud3dvVGpKK0pxNjJpYS9taUFvSlJnb3lIVmo5Umd0ZElGQXlhaU54?= =?utf-8?B?cHBseUVvMjZxZURpWEJybEZpWWorMCtiTkFETGorZHc4ZzAxRjFnNnhHTHNL?= =?utf-8?B?bUs3aDI1U0hZUnh1ZVp4RHhWaWpMOW9KS1Q3MW4rVWJESmJPbFlUOHVkL3N4?= =?utf-8?B?elUzYU1MWW4zNXlkTzJsZkUxSFliNVZSeXRucm1ZODZCaEJOSDBhSkdDTGdC?= =?utf-8?B?RlR0OE1scDRTcmlzTStTN1k5ZHBWcS9NSS9YTlhLSlJkQTk0L244UzZGdDRY?= =?utf-8?B?aW9MVmsyNURhZ3RqZHJMdkJRU05heFgyTmJ2KytSSGF0djMxTEU1UWxaSnFY?= =?utf-8?B?a1VOTVdOODZ1Q2I3NjdUdVhuVStyS0c1NFkwRWIyTVEydEx5YnczSENEZ3pr?= =?utf-8?B?dUh1cHgyL1NUZGdMMElUMDZrWHpxNE5GeHh5azE1d1MzQTg5VUFoVkQvWjlk?= =?utf-8?B?azV2Mk9pL3NXUDdNNE9sSnJaWndBTTY1UkMzRWdOM2t2MkVYV21OSW8rNkZI?= =?utf-8?B?TGFrZzFDLzVPMlg3RVRHUjhsUGd5dW5HRW5wQjlNc2t3SXZDUzUyOFQ2NVpx?= =?utf-8?B?VWVJdExSaXRNRXRDZDlBMFNYQjh4Undta0pPN2FuWEZCeXVpS3BvTFo3T05G?= =?utf-8?B?Q1B3dmdyTHdORmVQWjRQWCtqTlRtZnBIbkN5N1FHWHkra28rYkxNOWtnbDA5?= =?utf-8?B?R3pBZnZPZkFtVC9Ga2pQd3NhaWdtdXBGSkJWV3FZeFB3ZE5taUVzMllXaDNx?= =?utf-8?B?NWpzYTdlNGxSSDVEMWJWQkU3TlJrVEVjYis1ZkhYd3ZucmcvbEZnV1oyWE5Y?= =?utf-8?B?eVYreHZoZHl3L284a1hlVUo2azN5WjlZWkxTcU9LdG42RjlFME9TN281UHF3?= =?utf-8?B?UTVjTmkrSUJWbVdBU0ovZyszNk5Ia0s1M0kwamoyQkx5NHZUNkVQVk1VR3gz?= =?utf-8?B?S00xUjhTbjZRK3Z4Y3VNVS8xOXlpWXFyUndmdWM1Q05ab1h6SHFpMEFTQ2sx?= =?utf-8?Q?ZNMUILT9IPviG?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BN9PR11MB5513.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5aee9485-7933-44a9-91b9-08d9415926c9 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jul 2021 15:09:00.6492 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: rnxBgLowsVn+D3nkNDdUjCj7yOLWS4broiSfqvdcAsKzmZpM8KgcBCucdBkOcURKGd+qbLOctOvFbdvsazMZAw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR1101MB2115 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v5 1/2] vhost: enable IOMMU for async vhost 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 Sender: "dev" DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQnVyYWtvdiwgQW5hdG9s eSA8YW5hdG9seS5idXJha292QGludGVsLmNvbT4NCj4gU2VudDogV2VkbmVzZGF5LCBKdWx5IDcs IDIwMjEgMTA6MzQgUE0NCj4gVG86IERpbmcsIFh1YW4gPHh1YW4uZGluZ0BpbnRlbC5jb20+OyBN YXhpbWUgQ29xdWVsaW4NCj4gPG1heGltZS5jb3F1ZWxpbkByZWRoYXQuY29tPjsgWGlhLCBDaGVu Ym8gPGNoZW5iby54aWFAaW50ZWwuY29tPjsNCj4gVGhvbWFzIE1vbmphbG9uIDx0aG9tYXNAbW9u amFsb24ubmV0PjsgRGF2aWQgTWFyY2hhbmQNCj4gPGRhdmlkLm1hcmNoYW5kQHJlZGhhdC5jb20+ DQo+IENjOiBkZXZAZHBkay5vcmc7IEh1LCBKaWF5dSA8amlheXUuaHVAaW50ZWwuY29tPjsgUGFp IEcsIFN1bmlsDQo+IDxzdW5pbC5wYWkuZ0BpbnRlbC5jb20+OyBSaWNoYXJkc29uLCBCcnVjZSA8 YnJ1Y2UucmljaGFyZHNvbkBpbnRlbC5jb20+Ow0KPiBWYW4gSGFhcmVuLCBIYXJyeSA8aGFycnku dmFuLmhhYXJlbkBpbnRlbC5jb20+OyBMaXUsIFlvbmcNCj4gPHlvbmcubGl1QGludGVsLmNvbT47 IE1hLCBXZW53dVggPHdlbnd1eC5tYUBpbnRlbC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbZHBkay1k ZXZdIFtQQVRDSCB2NSAxLzJdIHZob3N0OiBlbmFibGUgSU9NTVUgZm9yIGFzeW5jIHZob3N0DQo+ IA0KPiBPbiAwNy1KdWwtMjEgMTo1NCBQTSwgRGluZywgWHVhbiB3cm90ZToNCj4gPiBIaSBBbmF0 b2x5LA0KPiA+DQo+ID4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+IEZyb206IEJ1 cmFrb3YsIEFuYXRvbHkgPGFuYXRvbHkuYnVyYWtvdkBpbnRlbC5jb20+DQo+ID4+IFNlbnQ6IFdl ZG5lc2RheSwgSnVseSA3LCAyMDIxIDg6MTggUE0NCj4gPj4gVG86IERpbmcsIFh1YW4gPHh1YW4u ZGluZ0BpbnRlbC5jb20+OyBNYXhpbWUgQ29xdWVsaW4NCj4gPj4gPG1heGltZS5jb3F1ZWxpbkBy ZWRoYXQuY29tPjsgWGlhLCBDaGVuYm8gPGNoZW5iby54aWFAaW50ZWwuY29tPjsNCj4gPj4gVGhv bWFzIE1vbmphbG9uIDx0aG9tYXNAbW9uamFsb24ubmV0PjsgRGF2aWQgTWFyY2hhbmQNCj4gPj4g PGRhdmlkLm1hcmNoYW5kQHJlZGhhdC5jb20+DQo+ID4+IENjOiBkZXZAZHBkay5vcmc7IEh1LCBK aWF5dSA8amlheXUuaHVAaW50ZWwuY29tPjsgUGFpIEcsIFN1bmlsDQo+ID4+IDxzdW5pbC5wYWku Z0BpbnRlbC5jb20+OyBSaWNoYXJkc29uLCBCcnVjZQ0KPiA8YnJ1Y2UucmljaGFyZHNvbkBpbnRl bC5jb20+OyBWYW4NCj4gPj4gSGFhcmVuLCBIYXJyeSA8aGFycnkudmFuLmhhYXJlbkBpbnRlbC5j b20+OyBMaXUsIFlvbmcNCj4gPHlvbmcubGl1QGludGVsLmNvbT47DQo+ID4+IE1hLCBXZW53dVgg PHdlbnd1eC5tYUBpbnRlbC5jb20+DQo+ID4+IFN1YmplY3Q6IFJlOiBbZHBkay1kZXZdIFtQQVRD SCB2NSAxLzJdIHZob3N0OiBlbmFibGUgSU9NTVUgZm9yIGFzeW5jDQo+IHZob3N0DQo+ID4+DQo+ ID4+IE9uIDA3LUp1bC0yMSA3OjI1IEFNLCBEaW5nLCBYdWFuIHdyb3RlOg0KPiA+Pj4gSGksDQo+ ID4+Pg0KPiA+Pj4+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4+Pj4gRnJvbTogTWF4 aW1lIENvcXVlbGluIDxtYXhpbWUuY29xdWVsaW5AcmVkaGF0LmNvbT4NCj4gPj4+PiBTZW50OiBU dWVzZGF5LCBKdWx5IDYsIDIwMjEgNTozMiBQTQ0KPiA+Pj4+IFRvOiBCdXJha292LCBBbmF0b2x5 IDxhbmF0b2x5LmJ1cmFrb3ZAaW50ZWwuY29tPjsgRGluZywgWHVhbg0KPiA+Pj4+IDx4dWFuLmRp bmdAaW50ZWwuY29tPjsgWGlhLCBDaGVuYm8gPGNoZW5iby54aWFAaW50ZWwuY29tPjsgVGhvbWFz DQo+ID4+Pj4gTW9uamFsb24gPHRob21hc0Btb25qYWxvbi5uZXQ+OyBEYXZpZCBNYXJjaGFuZA0K PiA+Pj4+IDxkYXZpZC5tYXJjaGFuZEByZWRoYXQuY29tPg0KPiA+Pj4+IENjOiBkZXZAZHBkay5v cmc7IEh1LCBKaWF5dSA8amlheXUuaHVAaW50ZWwuY29tPjsgUGFpIEcsIFN1bmlsDQo+ID4+Pj4g PHN1bmlsLnBhaS5nQGludGVsLmNvbT47IFJpY2hhcmRzb24sIEJydWNlDQo+IDxicnVjZS5yaWNo YXJkc29uQGludGVsLmNvbT47DQo+ID4+IFZhbg0KPiA+Pj4+IEhhYXJlbiwgSGFycnkgPGhhcnJ5 LnZhbi5oYWFyZW5AaW50ZWwuY29tPjsgTGl1LCBZb25nDQo+ID4+IDx5b25nLmxpdUBpbnRlbC5j b20+Ow0KPiA+Pj4+IE1hLCBXZW53dVggPHdlbnd1eC5tYUBpbnRlbC5jb20+DQo+ID4+Pj4gU3Vi amVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIHY1IDEvMl0gdmhvc3Q6IGVuYWJsZSBJT01NVSBm b3IgYXN5bmMNCj4gdmhvc3QNCj4gPj4+Pg0KPiA+Pj4+DQo+ID4+Pj4NCj4gPj4+PiBPbiA3LzYv MjEgMTE6MTYgQU0sIEJ1cmFrb3YsIEFuYXRvbHkgd3JvdGU6DQo+ID4+Pj4+IE9uIDA2LUp1bC0y MSA5OjMxIEFNLCBEaW5nLCBYdWFuIHdyb3RlOg0KPiA+Pj4+Pj4gSGkgTWF4aW1lLA0KPiA+Pj4+ Pj4NCj4gPj4+Pj4+PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+Pj4+Pj4+IEZyb206 IE1heGltZSBDb3F1ZWxpbiA8bWF4aW1lLmNvcXVlbGluQHJlZGhhdC5jb20+DQo+ID4+Pj4+Pj4g U2VudDogTW9uZGF5LCBKdWx5IDUsIDIwMjEgODo0NiBQTQ0KPiA+Pj4+Pj4+IFRvOiBCdXJha292 LCBBbmF0b2x5IDxhbmF0b2x5LmJ1cmFrb3ZAaW50ZWwuY29tPjsgRGluZywgWHVhbg0KPiA+Pj4+ Pj4+IDx4dWFuLmRpbmdAaW50ZWwuY29tPjsgWGlhLCBDaGVuYm8gPGNoZW5iby54aWFAaW50ZWwu Y29tPjsNCj4gVGhvbWFzDQo+ID4+Pj4+Pj4gTW9uamFsb24gPHRob21hc0Btb25qYWxvbi5uZXQ+ OyBEYXZpZCBNYXJjaGFuZA0KPiA+Pj4+Pj4+IDxkYXZpZC5tYXJjaGFuZEByZWRoYXQuY29tPg0K PiA+Pj4+Pj4+IENjOiBkZXZAZHBkay5vcmc7IEh1LCBKaWF5dSA8amlheXUuaHVAaW50ZWwuY29t PjsgUGFpIEcsIFN1bmlsDQo+ID4+Pj4+Pj4gPHN1bmlsLnBhaS5nQGludGVsLmNvbT47IFJpY2hh cmRzb24sIEJydWNlDQo+ID4+IDxicnVjZS5yaWNoYXJkc29uQGludGVsLmNvbT47DQo+ID4+Pj4+ Pj4gVmFuIEhhYXJlbiwgSGFycnkgPGhhcnJ5LnZhbi5oYWFyZW5AaW50ZWwuY29tPjsgTGl1LCBZ b25nDQo+ID4+Pj4+Pj4gPHlvbmcubGl1QGludGVsLmNvbT47IE1hLCBXZW53dVggPHdlbnd1eC5t YUBpbnRlbC5jb20+DQo+ID4+Pj4+Pj4gU3ViamVjdDogUmU6IFtkcGRrLWRldl0gW1BBVENIIHY1 IDEvMl0gdmhvc3Q6IGVuYWJsZSBJT01NVSBmb3INCj4gYXN5bmMNCj4gPj4+Pj4+PiB2aG9zdA0K PiA+Pj4+Pj4+DQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+Pg0KPiA+Pj4+Pj4+IE9uIDcvNS8yMSAyOjE2 IFBNLCBCdXJha292LCBBbmF0b2x5IHdyb3RlOg0KPiA+Pj4+Pj4+PiBPbiAwNS1KdWwtMjEgOTo0 MCBBTSwgWHVhbiBEaW5nIHdyb3RlOg0KPiA+Pj4+Pj4+Pj4gVGhlIHVzZSBvZiBJT01NVSBoYXMg bWFueSBhZHZhbnRhZ2VzLCBzdWNoIGFzIGlzb2xhdGlvbiBhbmQNCj4gYWRkcmVzcw0KPiA+Pj4+ Pj4+Pj4gdHJhbnNsYXRpb24uIFRoaXMgcGF0Y2ggZXh0ZW5kcyB0aGUgY2FwYmlsaXR5IG9mIERN QSBlbmdpbmUgdG8gdXNlDQo+ID4+Pj4+Pj4+PiBJT01NVSBpZiB0aGUgRE1BIGRldmljZSBpcyBi b3VuZCB0byB2ZmlvLg0KPiA+Pj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4+IFdoZW4gc2V0IG1lbW9yeSB0 YWJsZSwgdGhlIGd1ZXN0IG1lbW9yeSB3aWxsIGJlIG1hcHBlZA0KPiA+Pj4+Pj4+Pj4gaW50byB0 aGUgZGVmYXVsdCBjb250YWluZXIgb2YgRFBESy4NCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBT aWduZWQtb2ZmLWJ5OiBYdWFuIERpbmcgPHh1YW4uZGluZ0BpbnRlbC5jb20+DQo+ID4+Pj4+Pj4+ PiAtLS0NCj4gPj4+Pj4+Pj4+ICAgICAgZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Zob3N0X2xpYi5y c3QgfCAgOSArKysrKysNCj4gPj4+Pj4+Pj4+ICAgICAgbGliL3Zob3N0L3J0ZV92aG9zdC5oICAg ICAgICAgICAgICAgfCAgMSArDQo+ID4+Pj4+Pj4+PiAgICAgIGxpYi92aG9zdC9zb2NrZXQuYyAg ICAgICAgICAgICAgICAgIHwgIDkgKysrKysrDQo+ID4+Pj4+Pj4+PiAgICAgIGxpYi92aG9zdC92 aG9zdC5oICAgICAgICAgICAgICAgICAgIHwgIDEgKw0KPiA+Pj4+Pj4+Pj4gICAgICBsaWIvdmhv c3Qvdmhvc3RfdXNlci5jICAgICAgICAgICAgICB8IDQ2DQo+ID4+Pj4+Pj4+PiArKysrKysrKysr KysrKysrKysrKysrKysrKysrLQ0KPiA+Pj4+Pj4+Pj4gICAgICA1IGZpbGVzIGNoYW5nZWQsIDY1 IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkNCj4gPj4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+PiBk aWZmIC0tZ2l0IGEvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Zob3N0X2xpYi5yc3QNCj4gPj4+Pj4+ Pj4+IGIvZG9jL2d1aWRlcy9wcm9nX2d1aWRlL3Zob3N0X2xpYi5yc3QNCj4gPj4+Pj4+Pj4+IGlu ZGV4IDA1YzQyYzliMTEuLmMzYmVkYTIzZDkgMTAwNjQ0DQo+ID4+Pj4+Pj4+PiAtLS0gYS9kb2Mv Z3VpZGVzL3Byb2dfZ3VpZGUvdmhvc3RfbGliLnJzdA0KPiA+Pj4+Pj4+Pj4gKysrIGIvZG9jL2d1 aWRlcy9wcm9nX2d1aWRlL3Zob3N0X2xpYi5yc3QNCj4gPj4+Pj4+Pj4+IEBAIC0xMTgsNiArMTE4 LDE1IEBAIFRoZSBmb2xsb3dpbmcgaXMgYW4gb3ZlcnZpZXcgb2Ygc29tZQ0KPiBrZXkNCj4gPj4g Vmhvc3QNCj4gPj4+Pj4+Pj4+IEFQSSBmdW5jdGlvbnM6DQo+ID4+Pj4+Pj4+PiAgICAgICAgICAg IEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQo+ID4+Pj4+Pj4+PiAgICAgICsgIC0gYGBSVEVf VkhPU1RfVVNFUl9BU1lOQ19VU0VfVkZJT2BgDQo+ID4+Pj4+Pj4+PiArDQo+ID4+Pj4+Pj4+PiAr ICAgIEluIGFzeW5jaHJvbm91cyBkYXRhIHBhdGgsIHZob3N0IGxpYXJhcnkgaXMgbm90IGF3YXJl IG9mIHdoaWNoDQo+ID4+Pj4+Pj4+PiBkcml2ZXINCj4gPj4+Pj4+Pj4+ICsgICAgKGlnYl91aW8v dmZpbykgdGhlIERNQSBkZXZpY2UgaXMgYm91bmQgdG8uIEFwcGxpY2F0aW9uIHNob3VsZA0KPiA+ Pj4+Pj4+Pj4gcGFzcw0KPiA+Pj4+Pj4+Pj4gKyAgICB0aGlzIGZsYWcgdG8gdGVsbCB2aG9zdCBs aWJyYXJ5IHdoZXRoZXIgSU9NTVUgc2hvdWxkIGJlDQo+ID4+Pj4+Pj4+PiBwcm9ncmFtbWVkDQo+ ID4+Pj4+Pj4+PiArICAgIGZvciBndWVzdCBtZW1vcnkuDQo+ID4+Pj4+Pj4+PiArDQo+ID4+Pj4+ Pj4+PiArICAgIEl0IGlzIGRpc2FibGVkIGJ5IGRlZmF1bHQuDQo+ID4+Pj4+Pj4+PiArDQo+ID4+ Pj4+Pj4+PiAgICAgICAgLSBgYFJURV9WSE9TVF9VU0VSX05FVF9DT01QTElBTlRfT0xfRkxBR1Ng YA0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgICBTaW5jZSB2MTYuMDQsIHRoZSB2aG9zdCBsaWJyYXJ5 IGZvcndhcmRzIGNoZWNrc3VtIGFuZCBnc28NCj4gPj4+Pj4+Pj4+IHJlcXVlc3RzIGZvcg0KPiA+ Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC9ydGVfdmhvc3QuaCBiL2xpYi92aG9zdC9y dGVfdmhvc3QuaA0KPiA+Pj4+Pj4+Pj4gaW5kZXggOGQ4NzVlOTMyMi4uYTc2NmVhN2I2YiAxMDA2 NDQNCj4gPj4+Pj4+Pj4+IC0tLSBhL2xpYi92aG9zdC9ydGVfdmhvc3QuaA0KPiA+Pj4+Pj4+Pj4g KysrIGIvbGliL3Zob3N0L3J0ZV92aG9zdC5oDQo+ID4+Pj4+Pj4+PiBAQCAtMzcsNiArMzcsNyBA QCBleHRlcm4gIkMiIHsNCj4gPj4+Pj4+Pj4+ICAgICAgI2RlZmluZSBSVEVfVkhPU1RfVVNFUl9M SU5FQVJCVUZfU1VQUE9SVCAgICAoMVVMTCA8PCA2KQ0KPiA+Pj4+Pj4+Pj4gICAgICAjZGVmaW5l IFJURV9WSE9TVF9VU0VSX0FTWU5DX0NPUFkgICAgKDFVTEwgPDwgNykNCj4gPj4+Pj4+Pj4+ICAg ICAgI2RlZmluZSBSVEVfVkhPU1RfVVNFUl9ORVRfQ09NUExJQU5UX09MX0ZMQUdTDQo+ICgxVUxM IDw8DQo+ID4+IDgpDQo+ID4+Pj4+Pj4+PiArI2RlZmluZSBSVEVfVkhPU1RfVVNFUl9BU1lOQ19V U0VfVkZJTyAgICAoMVVMTCA8PCA5KQ0KPiA+Pj4+Pj4+Pj4gICAgICAgIC8qIEZlYXR1cmVzLiAq Lw0KPiA+Pj4+Pj4+Pj4gICAgICAjaWZuZGVmIFZJUlRJT19ORVRfRl9HVUVTVF9BTk5PVU5DRQ0K PiA+Pj4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2xpYi92aG9zdC9zb2NrZXQuYyBiL2xpYi92aG9zdC9z b2NrZXQuYw0KPiA+Pj4+Pj4+Pj4gaW5kZXggNWQwZDcyOGQ1Mi4uNzdjNzIyYzg2YiAxMDA2NDQN Cj4gPj4+Pj4+Pj4+IC0tLSBhL2xpYi92aG9zdC9zb2NrZXQuYw0KPiA+Pj4+Pj4+Pj4gKysrIGIv bGliL3Zob3N0L3NvY2tldC5jDQo+ID4+Pj4+Pj4+PiBAQCAtNDIsNiArNDIsNyBAQCBzdHJ1Y3Qg dmhvc3RfdXNlcl9zb2NrZXQgew0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgYm9vbCBleHRidWY7DQo+ ID4+Pj4+Pj4+PiAgICAgICAgICBib29sIGxpbmVhcmJ1ZjsNCj4gPj4+Pj4+Pj4+ICAgICAgICAg IGJvb2wgYXN5bmNfY29weTsNCj4gPj4+Pj4+Pj4+ICsgICAgYm9vbCBhc3luY191c2VfdmZpbzsN Cj4gPj4+Pj4+Pj4+ICAgICAgICAgIGJvb2wgbmV0X2NvbXBsaWFudF9vbF9mbGFnczsNCj4gPj4+ Pj4+Pj4+ICAgICAgICAgICAgLyoNCj4gPj4+Pj4+Pj4+IEBAIC0yNDMsNiArMjQ0LDEzIEBAIHZo b3N0X3VzZXJfYWRkX2Nvbm5lY3Rpb24oaW50IGZkLA0KPiBzdHJ1Y3QNCj4gPj4+Pj4+Pj4+IHZo b3N0X3VzZXJfc29ja2V0ICp2c29ja2V0KQ0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgICAgICAgICBk ZXYtPmFzeW5jX2NvcHkgPSAxOw0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgfQ0KPiA+Pj4+Pj4+Pj4g ICAgICArICAgIGlmICh2c29ja2V0LT5hc3luY191c2VfdmZpbykgew0KPiA+Pj4+Pj4+Pj4gKyAg ICAgICAgZGV2ID0gZ2V0X2RldmljZSh2aWQpOw0KPiA+Pj4+Pj4+Pj4gKw0KPiA+Pj4+Pj4+Pj4g KyAgICAgICAgaWYgKGRldikNCj4gPj4+Pj4+Pj4+ICsgICAgICAgICAgICBkZXYtPmFzeW5jX3Vz ZV92ZmlvID0gMTsNCj4gPj4+Pj4+Pj4+ICsgICAgfQ0KPiA+Pj4+Pj4+Pj4gKw0KPiA+Pj4+Pj4+ Pj4gICAgICAgICAgVkhPU1RfTE9HX0NPTkZJRyhJTkZPLCAibmV3IGRldmljZSwgaGFuZGxlIGlz ICVkXG4iLA0KPiB2aWQpOw0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgICBpZiAodnNvY2tldC0+bm90 aWZ5X29wcy0+bmV3X2Nvbm5lY3Rpb24pIHsNCj4gPj4+Pj4+Pj4+IEBAIC04NzksNiArODg3LDcg QEAgcnRlX3Zob3N0X2RyaXZlcl9yZWdpc3Rlcihjb25zdCBjaGFyDQo+ICpwYXRoLA0KPiA+Pj4+ Pj4+Pj4gdWludDY0X3QgZmxhZ3MpDQo+ID4+Pj4+Pj4+PiAgICAgICAgICB2c29ja2V0LT5leHRi dWYgPSBmbGFncyAmDQo+IFJURV9WSE9TVF9VU0VSX0VYVEJVRl9TVVBQT1JUOw0KPiA+Pj4+Pj4+ Pj4gICAgICAgICAgdnNvY2tldC0+bGluZWFyYnVmID0gZmxhZ3MgJg0KPiA+Pj4+IFJURV9WSE9T VF9VU0VSX0xJTkVBUkJVRl9TVVBQT1JUOw0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgdnNvY2tldC0+ YXN5bmNfY29weSA9IGZsYWdzICYNCj4gUlRFX1ZIT1NUX1VTRVJfQVNZTkNfQ09QWTsNCj4gPj4+ Pj4+Pj4+ICsgICAgdnNvY2tldC0+YXN5bmNfdXNlX3ZmaW8gPSBmbGFncyAmDQo+ID4+Pj4+Pj4g UlRFX1ZIT1NUX1VTRVJfQVNZTkNfVVNFX1ZGSU87DQo+ID4+Pj4+Pj4+PiAgICAgICAgICB2c29j a2V0LT5uZXRfY29tcGxpYW50X29sX2ZsYWdzID0gZmxhZ3MgJg0KPiA+Pj4+Pj4+Pj4gUlRFX1ZI T1NUX1VTRVJfTkVUX0NPTVBMSUFOVF9PTF9GTEFHUzsNCj4gPj4+Pj4+Pj4+ICAgICAgICAgICAg aWYgKHZzb2NrZXQtPmFzeW5jX2NvcHkgJiYNCj4gPj4+Pj4+Pj4+IGRpZmYgLS1naXQgYS9saWIv dmhvc3Qvdmhvc3QuaCBiL2xpYi92aG9zdC92aG9zdC5oDQo+ID4+Pj4+Pj4+PiBpbmRleCA4MDc4 ZGRmZjc5Li5mYjc3NWNlNGVkIDEwMDY0NA0KPiA+Pj4+Pj4+Pj4gLS0tIGEvbGliL3Zob3N0L3Zo b3N0LmgNCj4gPj4+Pj4+Pj4+ICsrKyBiL2xpYi92aG9zdC92aG9zdC5oDQo+ID4+Pj4+Pj4+PiBA QCAtMzcwLDYgKzM3MCw3IEBAIHN0cnVjdCB2aXJ0aW9fbmV0IHsNCj4gPj4+Pj4+Pj4+ICAgICAg ICAgIGludDE2X3QgICAgICAgICAgICBicm9hZGNhc3RfcmFycDsNCj4gPj4+Pj4+Pj4+ICAgICAg ICAgIHVpbnQzMl90ICAgICAgICBucl92cmluZzsNCj4gPj4+Pj4+Pj4+ICAgICAgICAgIGludCAg ICAgICAgICAgIGFzeW5jX2NvcHk7DQo+ID4+Pj4+Pj4+PiArICAgIGludCAgICAgICAgICAgIGFz eW5jX3VzZV92ZmlvOw0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgaW50ICAgICAgICAgICAgZXh0YnVm Ow0KPiA+Pj4+Pj4+Pj4gICAgICAgICAgaW50ICAgICAgICAgICAgbGluZWFyYnVmOw0KPiA+Pj4+ Pj4+Pj4gICAgICAgICAgc3RydWN0IHZob3N0X3ZpcnRxdWV1ZQ0KPiAqdmlydHF1ZXVlW1ZIT1NU X01BWF9RVUVVRV9QQUlSUyAqDQo+ID4+Pj4+Pj4+PiAyXTsNCj4gPj4+Pj4+Pj4+IGRpZmYgLS1n aXQgYS9saWIvdmhvc3Qvdmhvc3RfdXNlci5jIGIvbGliL3Zob3N0L3Zob3N0X3VzZXIuYw0KPiA+ Pj4+Pj4+Pj4gaW5kZXggOGYwZWJhNjQxMi4uZjM3MDNmMmU3MiAxMDA2NDQNCj4gPj4+Pj4+Pj4+ IC0tLSBhL2xpYi92aG9zdC92aG9zdF91c2VyLmMNCj4gPj4+Pj4+Pj4+ICsrKyBiL2xpYi92aG9z dC92aG9zdF91c2VyLmMNCj4gPj4+Pj4+Pj4+IEBAIC00NSw2ICs0NSw3IEBADQo+ID4+Pj4+Pj4+ PiAgICAgICNpbmNsdWRlIDxydGVfY29tbW9uLmg+DQo+ID4+Pj4+Pj4+PiAgICAgICNpbmNsdWRl IDxydGVfbWFsbG9jLmg+DQo+ID4+Pj4+Pj4+PiAgICAgICNpbmNsdWRlIDxydGVfbG9nLmg+DQo+ ID4+Pj4+Pj4+PiArI2luY2x1ZGUgPHJ0ZV92ZmlvLmg+DQo+ID4+Pj4+Pj4+PiAgICAgICAgI2lu Y2x1ZGUgImlvdGxiLmgiDQo+ID4+Pj4+Pj4+PiAgICAgICNpbmNsdWRlICJ2aG9zdC5oIg0KPiA+ Pj4+Pj4+Pj4gQEAgLTE0MSw2ICsxNDIsMzYgQEAgZ2V0X2Jsa19zaXplKGludCBmZCkNCj4gPj4+ Pj4+Pj4+ICAgICAgICAgIHJldHVybiByZXQgPT0gLTEgPyAodWludDY0X3QpLTEgOiAodWludDY0 X3Qpc3RhdC5zdF9ibGtzaXplOw0KPiA+Pj4+Pj4+Pj4gICAgICB9DQo+ID4+Pj4+Pj4+PiAgICAg ICtzdGF0aWMgaW50DQo+ID4+Pj4+Pj4+PiArYXN5bmNfZG1hX21hcChzdHJ1Y3QgcnRlX3Zob3N0 X21lbV9yZWdpb24gKnJlZ2lvbiwgYm9vbA0KPiBkb19tYXApDQo+ID4+Pj4+Pj4+PiArew0KPiA+ Pj4+Pj4+Pj4gKyAgICBpbnQgcmV0ID0gMDsNCj4gPj4+Pj4+Pj4+ICsgICAgdWludDY0X3QgaG9z dF9pb3ZhOw0KPiA+Pj4+Pj4+Pj4gKyAgICBob3N0X2lvdmEgPSBydGVfbWVtX3ZpcnQyaW92YSgo dm9pZA0KPiA+Pj4+Pj4+Pj4gKikodWludHB0cl90KXJlZ2lvbi0+aG9zdF91c2VyX2FkZHIpOw0K PiA+Pj4+Pj4+Pj4gKyAgICBpZiAoZG9fbWFwKSB7DQo+ID4+Pj4+Pj4+PiArICAgICAgICAvKiBB ZGQgbWFwcGVkIHJlZ2lvbiBpbnRvIHRoZSBkZWZhdWx0IGNvbnRhaW5lciBvZiBEUERLLg0KPiAq Lw0KPiA+Pj4+Pj4+Pj4gKyAgICAgICAgcmV0ID0NCj4gPj4+Pj4+PiBydGVfdmZpb19jb250YWlu ZXJfZG1hX21hcChSVEVfVkZJT19ERUZBVUxUX0NPTlRBSU5FUl9GRCwNCj4gPj4+Pj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW9uLT5ob3N0X3VzZXJfYWRkciwNCj4gPj4+Pj4+ Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgaG9zdF9pb3ZhLA0KPiA+Pj4+Pj4+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPnNpemUpOw0KPiA+Pj4+Pj4+Pj4gKyAgICAg ICAgaWYgKHJldCkgew0KPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgIFZIT1NUX0xPR19DT05GSUco RVJSLCAiRE1BIGVuZ2luZSBtYXAgZmFpbGVkXG4iKTsNCj4gPj4+Pj4+Pj4+ICsgICAgICAgICAg ICByZXR1cm4gcmV0Ow0KPiA+Pj4+Pj4+Pj4gKyAgICAgICAgfQ0KPiA+Pj4+Pj4+Pj4gKyAgICB9 IGVsc2Ugew0KPiA+Pj4+Pj4+Pj4gKyAgICAgICAgLyogUmVtb3ZlIG1hcHBlZCByZWdpb24gZnJv bSB0aGUgZGVmYXVsdCBjb250YWluZXIgb2YNCj4gPj4+Pj4+Pj4+IERQREsuICovDQo+ID4+Pj4+ Pj4+PiArICAgICAgICByZXQgPQ0KPiA+Pj4+Pj4+Pj4NCj4gcnRlX3ZmaW9fY29udGFpbmVyX2Rt YV91bm1hcChSVEVfVkZJT19ERUZBVUxUX0NPTlRBSU5FUl9GRCwNCj4gPj4+Pj4+Pj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPmhvc3RfdXNlcl9hZGRyLA0KPiA+Pj4+Pj4+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhvc3RfaW92YSwNCj4gPj4+Pj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpb24tPnNpemUpOw0KPiA+Pj4+Pj4+Pj4gKyAg ICAgICAgaWYgKHJldCkgew0KPiA+Pj4+Pj4+Pj4gKyAgICAgICAgICAgIFZIT1NUX0xPR19DT05G SUcoRVJSLCAiRE1BIGVuZ2luZSB1bm1hcA0KPiBmYWlsZWRcbiIpOw0KPiA+Pj4+Pj4+Pj4gKyAg ICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4+Pj4+Pj4+PiArICAgICAgICB9DQo+ID4+Pj4+Pj4+ PiArICAgIH0NCj4gPj4+Pj4+Pj4+ICsgICAgcmV0dXJuIHJldDsNCj4gPj4+Pj4+Pj4+ICt9DQo+ ID4+Pj4+Pj4+DQo+ID4+Pj4+Pj4+IFdlJ3ZlIGJlZW4gZGlzY3Vzc2luZyB0aGlzIG9mZiBsaXN0 IHdpdGggWHVhbiwgYW5kIHVuZm9ydHVuYXRlbHkNCj4gPj4+Pj4+Pj4gdGhpcyBpcw0KPiA+Pj4+ Pj4+PiBhIGJsb2NrZXIgZm9yIG5vdy4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gQ3VycmVudGx5 LCB0aGUgeDg2IElPTU1VIGRvZXMgbm90IHN1cHBvcnQgcGFydGlhbCB1bm1hcCAtIHRoZQ0KPiA+ PiBzZWdtZW50cw0KPiA+Pj4+Pj4+PiBoYXZlIHRvIGJlIHVubWFwcGVkIGV4YWN0bHkgdGhlIHNh bWUgYWRkci9sZW4gYXMgdGhleSB3ZXJlDQo+IG1hcHBlZC4NCj4gPj4gV2UNCj4gPj4+Pj4+Pj4g YWxzbyBjb25jYXRlbmF0ZSBhZGphY2VudCBtYXBwaW5ncyB0byBwcmV2ZW50IGZpbGxpbmcgdXAg dGhlIERNQQ0KPiA+Pj4+Pj4+PiBtYXBwaW5nDQo+ID4+Pj4+Pj4+IGVudHJ5IHRhYmxlIHdpdGgg c3VwZXJmbHVvdXMgZW50cmllcy4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gVGhpcyBtZWFucyB0 aGF0LCB3aGVuIHR3byB1bnJlbGF0ZWQgbWFwcGluZ3MgYXJlIGNvbnRpZ3VvdXMgaW4NCj4gPj4g bWVtb3J5DQo+ID4+Pj4+Pj4+IChlLmcuIGlmIHlvdSBtYXAgcmVnaW9ucyAxIGFuZCAyIGluZGVw ZW5kZW50bHksIGJ1dCB0aGV5IGhhcHBlbiB0bw0KPiBiZQ0KPiA+Pj4+Pj4+PiBzaXR0aW5nIHJp Z2h0IG5leHQgdG8gZWFjaCBvdGhlciBpbiB2aXJ0dWFsIG1lbW9yeSksIHdlIGNhbm5vdCBsYXRl cg0KPiA+Pj4+Pj4+PiB1bm1hcCBvbmUgb2YgdGhlbSBiZWNhdXNlLCBldmVuIHRob3VnaCB0aGVz ZSBhcmUgdHdvIHNlcGFyYXRlDQo+ID4+Pj4+Pj4gbWFwcGluZ3MNCj4gPj4+Pj4+Pj4gYXMgZmFy IGFzIGtlcm5lbCBWRklPIGluZnJhc3RydWN0dXJlIGlzIGNvbmNlcm5lZCwgdGhlIG1hcHBpbmcg Z2V0cw0KPiA+Pj4+Pj4+PiBjb21wYWN0ZWQgYW5kIGxvb2tzIGxpa2Ugb25lIHNpbmdsZSBtYXBw aW5nIHRvIFZGSU8sIHNvIERQREsgQVBJDQo+IHdpbGwNCj4gPj4+Pj4+Pj4gbm90IGxldCB1cyB1 bm1hcCByZWdpb24gMSB3aXRob3V0IGFsc28gdW5tYXBwaW5nIHJlZ2lvbiAyLg0KPiA+Pj4+Pj4+ Pg0KPiA+Pj4+Pj4+PiBUaGUgcHJvcGVyIGZpeCBmb3IgdGhpcyBwcm9ibGVtIHdvdWxkIGJlIHRv IGFsd2F5cyBtYXAgbWVtb3J5DQo+ID4+Pj4+Pj4+IHBhZ2UtYnktcGFnZSByZWdhcmRsZXNzIG9m IHdoZXJlIGl0IGNvbWVzIGZyb20gKHdlIGFscmVhZHkgZG8NCj4gdGhhdCBmb3INCj4gPj4+Pj4+ Pj4gaW50ZXJuYWwgbWVtb3J5LCBidXQgbm90IGZvciBleHRlcm5hbCkuIEhvd2V2ZXIsIHRoZSBy ZWFzb24gdGhpcw0KPiB3b3Jrcw0KPiA+Pj4+Pj4+PiBmb3IgaW50ZXJuYWwgbWVtb3J5IGlzIGJl Y2F1c2Ugd2hlbiBtYXBwaW5nIGludGVybmFsIG1lbW9yeQ0KPiA+PiBzZWdtZW50cywNCj4gPj4+ Pj4+Pj4gKndlIGtub3cgdGhlIHBhZ2Ugc2l6ZSouIEZvciBleHRlcm5hbCBtZW1vcnkgc2VnbWVu dHMsIHRoZXJlIGlzDQo+IG5vDQo+ID4+IHN1Y2gNCj4gPj4+Pj4+Pj4gZ3VhcmFudGVlLCBzbyB3 ZSBjYW5ub3QgZGVkdWNlIHBhZ2Ugc2l6ZSBmb3IgYSBnaXZlbiBtZW1vcnkNCj4gc2VnbWVudCwN Cj4gPj4+Pj4+PiBhbmQNCj4gPj4+Pj4+Pj4gdGh1cyBjYW4ndCBtYXAgdGhpbmdzIHBhZ2UtYnkt cGFnZS4NCj4gPj4+Pj4+Pj4NCj4gPj4+Pj4+Pj4gU28sIHRoZSBwcm9wZXIgZml4IGZvciBpdCB3 b3VsZCBiZSB0byBhZGQgcGFnZSBzaXplIHRvIHRoZSBWRklPIERNQQ0KPiA+Pj4+Pj4+PiBBUEku DQo+ID4+Pj4+Pj4+IFVuZm9ydHVuYXRlbHksIGl0IHByb2JhYmx5IGhhcyB0byB3YWl0IHVudGls IDIxLjExIGJlY2F1c2UgaXQgaXMgYW4NCj4gQVBJDQo+ID4+Pj4+Pj4+IGNoYW5nZS4NCj4gPj4+ Pj4+Pj4NCj4gPj4+Pj4+Pj4gVGhlIHNsaWdodGx5IGhhY2t5IGZpeCBmb3IgdGhpcyB3b3VsZCBi ZSB0byBmb3JlZ28gdXNlciBtZW0gbWFwDQo+ID4+Pj4+Pj4+IGNvbmNhdGVuYXRpb24gYW5kIHRy dXN0IHRoYXQgdXNlciBpcyBub3QgZ29pbmcgdG8gZG8gYW55dGhpbmcNCj4gc3R1cGlkLA0KPiA+ Pj4+Pj4+PiBhbmQgd2lsbCBub3Qgc3BhbSB0aGUgVkZJTyBETUEgQVBJIHdpdGhvdXQgcmVhc29u LiBJIHdvdWxkDQo+IHJhdGhlcg0KPiA+Pj4+Pj4+PiBub3QgZ28NCj4gPj4+Pj4+Pj4gZG93biB0 aGlzIHJvYWQsIGJ1dCB0aGlzIGNvdWxkIGJlIGFuIG9wdGlvbiBpbiB0aGlzIGNhc2UuDQo+ID4+ Pj4+Pj4+DQo+ID4+Pj4+Pj4+IFRob3VnaHRzPw0KPiA+Pj4+Pj4+Pg0KPiA+Pj4+Pj4+DQo+ID4+ Pj4+Pj4gVGhhbmtzIEFuYXRvbHkgZm9yIHRoZSBkZXRhaWxlZCBkZXNjcmlwdGlvbiBvZiB0aGUg aXNzdWUuDQo+ID4+Pj4+Pj4gSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGVpdGhlciBjcmVhdGUgYSB2 ZXJzaW9uZWQgc3ltYm9sIGZvciB0aGlzIEFQSQ0KPiA+Pj4+Pj4+IGNoYW5nZSwgb3IgbWF5YmUg ZXZlbiB0byBoYXZlIGEgdGVtcG9yYXJ5IGludGVybmFsIEFQSS4NCj4gPj4+Pj4+Pg0KPiA+Pj4+ Pj4+IEJ1dCBJIHRoaW5rIHRoaXMgc2VyaWVzIGluIGl0cyBjdXJyZW50IGZvcm0gaXMgbm90IGFj Y2VwdGFibGUsIHNvDQo+ID4+Pj4+Pj4gd2FpdGluZyBmb3IgdjIxLjExIHdvdWxkIGJlIHRoZSBi ZXN0IG9wdGlvbiAod2UgbWF5IHdhbnQgdG8gc2VuZA0KPiB0aGUNCj4gPj4+Pj4+PiBkZXByZWNh dGlvbiBub3RpY2UgaW4gdGhpcyByZWxlYXNlIHRob3VnaCkuDQo+ID4+Pj4+Pj4NCj4gPj4+Pj4+ PiBJbiB0aGlzIHNlcmllcywgSSBkb24ndCBsaWtlIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGhhcyB0 byBwYXNzIGEgZmxhZyB0bw0KPiA+Pj4+Pj4+IHN0YXRlIHdoZXRoZXIgdGhlIERNQSBlbmdpbmUg dXNlcyBWRklPIG9yIG5vdC4gQUZBSUNULCB0aGlzIG5ldw0KPiByZXZpc2lvbg0KPiA+Pj4+Pj4+ IGRvZXMgbm90IGltcGxlbWVudCB3aGF0IHdhcyBkaXNjdXNzZWQgaW4gdGhlIHByZXZpb3VzIG9u ZSwgaS5lLg0KPiA+Pj4+Pj4+IHN1cHBvcnRpbmcgYm90aCBJT1ZBX0FTX1ZBIGFuZCBJT1ZBX0FT X1BBLg0KPiA+Pj4+Pj4NCj4gPj4+Pj4+IFRoYW5rcyBmb3IgeW91ciBjb21tZW50cy4gSGVyZSBJ IGhvcGUgdG8gZXhwbGFpbiBzb21lIHF1ZXN0aW9uczoNCj4gPj4+Pj4+IDEuIFdoZXRoZXIgYm90 aCBJT1ZBX0FTX1ZBIGFuZCBJT1ZBX0FTX1BBIGFyZSBzdXBwb3J0ZWQgbm93Pw0KPiA+Pj4+Pj4g QTogQm90aCBJT1ZBX0FTX1BBIGFuZCBJT1ZBX0FTX1ZBIGFyZSBzdXBwb3J0ZWQgbm93LiBJbiB0 aGlzDQo+IHZlcnNpb24sDQo+ID4+IHRoZQ0KPiA+Pj4+Pj4gdmlydHVhbCBhZGRyZXNzIGlzIHJl cGxhY2VkIHdpdGggaW92YSBhZGRyZXNzIG9mIG1hcHBlZCByZWdpb24sIGFuZA0KPiA+Pj4+Pj4g dGhlIGlvdmENCj4gPj4+Pj4+IGFkZHJlc3MgaXMgc2VsZWN0ZWQgdG8gcHJvZ3JhbSB0aGUgSU9N TVUgaW5zdGVhZCBvZiB2aXJ0dWFsIGFkZHJlc3MNCj4gb25seS4NCj4gPj4+Pg0KPiA+Pj4+IEdv b2QhDQo+ID4+Pj4NCj4gPj4+Pj4+DQo+ID4+Pj4+PiAyLiBXaHkgYSBmbGFnIGlzIGNob3NlbiB0 byBiZSBwYXNzZWQgYnkgYXBwbGljYXRpb24/DQo+ID4+Pj4+PiBBOiBZZXMsIGFzIHdlIGRpc2N1 c3NlZCBiZWZvcmUsIHRoZSBydGVfZWFsX2lvdmFfbW9kZSgpIEFQSSBjYW4gYmUNCj4gPj4+Pj4+ IHVzZWQgdG8NCj4gPj4+Pj4+IGdldCB0aGUgSU9WQSBtb2RlLCBzbyBhcyB0byBkZXRlcm1pbmUg d2hldGhlciBJT01NVSBzaG91bGQgYmUNCj4gPj4+PiBwcm9ncmFtbWVkLg0KPiA+Pj4+Pj4gSG93 ZXZlciwgaW4gdGhlIGltcGxlbWVudGF0aW9uIHByb2Nlc3MsIEkgZm91bmQgYSBwcm9ibGVtLiBU aGF0IGlzDQo+IGhvdyB0bw0KPiA+Pj4+Pj4gZGlzdGluZ3Vpc2ggdGhlIFZGSU8gUEEgYW5kIElH Ql9VSU8gUEEuIEJlY2F1c2UgZm9yIFZGSU8gY2FzZXMsIHdlDQo+ID4+IHNob3VsZA0KPiA+Pj4+ Pj4gYWx3YXlzIHByb2dyYW0gdGhlIElPTU1VLiBXaGlsZSBpbiBJR0JfVUlPIGNhc2VzLCBpdCBk ZXBlbmRzIG9uDQo+ID4+IElPTU1VDQo+ID4+Pj4+PiBjYXBhYmlsaXR5IG9mIHBsYXRmb3JtLg0K PiA+Pj4+Pg0KPiA+Pj4+PiBIb3cgZG9lcyBvbmUgcHJvZ3JhbSBJT01NVSB3aXRoIGlnYl91aW8/ IEkgd2FzIHVuZGVyIGltcHJlc3Npb24NCj4gdGhhdA0KPiA+Pj4+PiBpZ2JfdWlvIChhbmQgdWlv X3BjaV9nZW5lcmljIGZvciB0aGF0IG1hdHRlcikgZG9lcyBub3QgcHJvdmlkZSBzdWNoDQo+ID4+ Pj4+IGZhY2lsaXRpZXMuDQo+ID4+Pj4NCj4gPj4+PiArMQ0KPiA+Pj4NCj4gPj4+IE1heWJlIHNv bWUgbWlzdW5kZXJzdGFuZGluZyBpbiB0aGlzIHNlbnRlbmNlIGhlcmUuDQo+ID4+PiBJbiBvdXIg ZGVzaWduLCBpZiBydGVfZWFsX3ZmaW9faXNfZW5hYmxlZCgidmZpbyIpIGlzIHRydWUsIGlvbW11 IHdpbGwgYmUNCj4gPj4gcHJvZ3JhbW1lZC4NCj4gPj4+IFRydWUgbWVhbnMgdmZpbyBtb2R1bGUg aXMgbW9kcHJvYmVkLg0KPiA+Pj4NCj4gPj4+IEJ1dCB0aGVyZSBpcyBhbiBleGNlcHRpb24gaGVy ZSwgdGhhdCBpcywgZXZlbiBpZiB2ZmlvIG1vZHVsZSBpcyBtb2Rwcm9iZWQsDQo+ID4+PiBEUERL IHVzZXIgc3RpbGwgYmluZCBhbGwgdGhlIGRldmljZXMgdG8gaWdiX3Vpby4NCj4gPj4+DQo+ID4+ PiBUaGlzIHNpdHVhdGlvbiBjYW4gYmUgZGlzdGluZ3Vpc2hlZCBpbiBEUERLIGVhbCBpbml0aWFs aXphdGlvbiwgYmVjYXVzZSB0aGUNCj4gPj4gcmVzb3VyY2UgbWFwcGluZw0KPiA+Pj4gaXMgYWNj b3JkaW5nIHRvIHRoZSBkcml2ZXIgbG9hZGVkIGJ5IGVhY2ggZGV2aWNlKHJ0ZV9wY2lfbWFwX2Rl dmljZSkuDQo+ID4+Pg0KPiA+Pj4gQnV0IGluIG91ciBzY2VuYXJpbywgdGhpcyBqdWRnbWVudCBp cyBzb21ld2hhdCB3ZWFrLiBCZWNhdXNlIHdlIGNhbm5vdA0KPiBnZXQNCj4gPj4+IHRoZSBkZXZp Y2UgZHJpdmVyIGluZm8gaW4gdmhvc3QgbGlicmFyeS4gSSBhbHNvIHRoaW5rIGl0IGlzIHVucmVh c29uYWJsZSBmb3INCj4gdmhvc3QgdG8NCj4gPj4+IGRvIHRoaXMuIE9ubHkgdHJ1c3QgdGhhdCB1 c2VycyB3aWxsIG5vdCB1c2UgaXQgbGlrZSB0aGlzLiBUaG91Z2h0cyBmb3IgdGhpcw0KPiBzY2Vu YXJpbz8NCj4gPj4NCj4gPj4gSSBkb24ndCBzZWUgaG93IGlnYl91aW8gd291bGQgbWFrZSBhbnkg ZGlmZmVyZW5jZSBhdCBhbGwuIElmIHlvdSBhcmUNCj4gPj4gdXNpbmcgaWdiX3VpbywgeW91ICpk b24ndCBoYXZlIERNQSBtYXBwaW5nIGF0IGFsbCogYW5kIHdpbGwgdXNlIHJhdw0KPiA+PiBwaHlz aWNhbCBhZGRyZXNzZXMuIEFzc3VtaW5nIHlvdXIgY29kZSBzdXBwb3J0cyB0aGlzLCB0aGF0J3Mg YWxsIHlvdSdyZQ0KPiA+PiBldmVyIGdvaW5nIHRvIGdldC4gVGhlIHBvaW50IG9mIFZGSU8gaXMg dG8gaGF2ZSBtZW1vcnkgcmVnaW9ucyB0aGF0IGFyZQ0KPiA+PiBtYXBwZWQgZm9yIERNQSAqYmVj YXVzZSByZWFsIHBoeXNpY2FsIGFkZHJlc3NlcyBhcmUgYXNzdW1lZCB0byBiZSBub3QNCj4gPj4g YXZhaWxhYmxlKi4gV2hlbiB5b3UncmUgdXNpbmcgaWdiX3VpbywgeW91IGVmZmVjdGl2ZWx5IGRv IGhhdmUgRE1BDQo+ID4+IGFjY2VzcyB0byB0aGUgZW50aXJlIG1lbW9yeSwgYW5kIHRodXMgY2Fu IGJ5cGFzcyBJT01NVSBhbHRvZ2V0aGVyDQo+ID4+IChhc3N1bWluZyB5b3UncmUgdXNpbmcgcGFz c3Rocm91Z2ggbW9kZSkuDQo+ID4NCj4gPiBNeSBjb25jZXJuIGlzIGV4YWN0bHkgaGVyZS4NCj4g PiBJbiBpZ2JfdWlvIGNhc2VzLCBhbHRob3VnaCBkZXZpY2VzIGFyZSBub3QgYWRkZWQgdG8gdGhl IGRlZmF1bHQgY29udGFpbmVyIGluDQo+IGVhbCBpbml0LA0KPiA+IGJ1dCB0aGUgIklPTU1VIHBy b2dyYW1taW5nIiBhY3R1YWxseSBoYXBwZW5zIHdoZW4gdGhlDQo+IHJ0ZV92ZmlvX2NvbnRhaW5l cl9kbWFfbWFwKCkgaXMgY2FsbGVkLg0KPiA+IEl0IGlzIG5vIGhhcm0gYnV0IGl0IGlzIGFsc28g dW5uZWNlc3NhcnkuDQo+IA0KPiBZZXMsIGl0IGlzIHVubmVjZXNzYXJ5LCBidXQgaXQncyBhbHNv IG5vdCBhY3RpdmVseSBoYXJtZnVsLCB3aGljaCBtZWFucw0KPiB5b3UgY2FuIHN0aWxsIGRvIGl0 IHdpdGhvdXQgYW55IHJlZ2FyZCBhcyB0byB3aGV0aGVyIHlvdSBkbyBvciBkb24ndA0KPiBoYXZl IElPTU1VIDopDQo+IA0KPiBUaGluayBvZiBhIGh5YnJpZCBWRklPL2lnYl91aW8gc2V0dXAgLSBz b21lIE5JQ3Mgd2lsbCBoYXZlIFZGSU8sIHNvbWUNCj4gd2lsbCBoYXZlIGlnYl91aW8uIFRoZSBp Z2JfdWlvLWJvdW5kIE5JQ3Mgd2lsbCBub3QgY2FyZSBpZiB5b3UgaGF2ZQ0KPiBtYXBwZWQgYW55 dGhpbmcgZm9yIERNQSBiZWNhdXNlIHRoZXkgZG9uJ3QgZ28gdGhyb3VnaCBJT01NVSwgdGhpbmdz DQo+IHdpbGwNCj4gImp1c3Qgd29yayIuIFRoZSBWRklPLWJvdW5kIE5JQ3Mgd2lsbCBnZXQgdGhl IG1lbW9yeSBtYXBwZWQsIGJlY2F1c2UNCj4gdGhleSBhcmUgdGhlIG9uZXMgd2hvIGFjdHVhbGx5 IG5lZWQgdGhlIERNQSBtYXBwaW5nLg0KPiANCj4gU28sIHdoYXQgeW91IGdldCBpcywgaWYgeW91 IGRvIFZGSU8gRE1BIG1hcHBpbmcgdW5jb25kaXRpb25hbGx5LCAxKSBOSUNzDQo+IHdpdGggaWdi X3VpbyB3b24ndCBjYXJlIGFib3V0IHRoaXMsIGFuZCAyKSBOSUNzIHdpdGggVkZJTyB3aWxsIGJl bmVmaXQuDQo+IFlvdSdyZSBub3QgIm1hcHBpbmciIHRoZSBOSUNzLCB5b3UncmUgbWFwcGluZyB0 aGUgbWVtb3J5IHlvdSdyZQ0KPiBhY2Nlc3Npbmcgd2l0aCB0aG9zZSBOSUNzLiBZb3UgbmVlZCBp dCB0byBiZSBhY2Nlc3NpYmxlIHRvIGJvdGgsIGJ1dA0KPiBzaW5jZSB5b3UgaGF2ZSBubyB3YXkg b2Yga25vd2luZyB3aGV0aGVyIDEpIGFueSBvZiB0aGUgY3VycmVudCBIVyBuZWVkcw0KPiBWRklP LCBhbmQgMikgYW55IG9mICpmdXR1cmUgaG90cGx1Z2dlZCogSFcgbmVlZHMgVkZJTywgdGhlIGVh c2llc3Qgd2F5DQo+IHRvIHNvbHZlIHRoaXMgcHJvYmxlbSBpcyBqdXN0IHRvIG1hcCB0aGluZ3Mg cmVnYXJkbGVzcywgYW5kIGxpdmUgd2l0aA0KPiB0aGUgInVubmVjZXNzYXJ5IiBidXQgaGFybWxl c3MgbWFwcGluZyBpbiB0aGUgd29yc3QgY2FzZS4NCg0KR2V0IHlvdXIgcG9pbnQhIEl0J3MganVz dCBzdWNoIGEgd29yc3QgY2FzZSBib3RoZXJzIG1lLg0KSSBoYXZlIGJlZW4gdGhpbmtpbmcgYWJv dXQgaG93IHRvIGF2b2lkIHRoZSBpZ2JfdWlvIGNhc2UgcHJvZ3JhbW1pbmcgSU9NTVUuIEJ1dCBJ IGNhbm5vdCByZWFsaXplIHRoaXMganVzdCB0aHJvdWdoIGEganVkZ2VtZW50Lg0KDQpTaW5jZSBp dCBpcyBoYXJtbGVzcyBpbiB0aGlzIGNhc2UsIG5vdCB0byBtZW50aW9uLCBhIHBsYXRmb3JtIHdp dGhvdXQgSU9NTVUgd29u4oCZdCBkbyBhbnl0aGluZyB1c2VmdWwuIEkgdGhpbmsgaXQgd29ya3Mg dG8gcHJvZ3JhbSBJT01NVSB1bmNvbmRpdGlvbmFsbHkuDQoNCj4gDQo+ID4NCj4gPj4NCj4gPj4g Qm90dG9tIGxpbmU6IGRvIFZGSU8gRE1BIG1hcHBpbmcgdW5jb25kaXRpb25hbGx5LiBJZiBWRklP IGlzIGFjdGl2ZSAtDQo+ID4+IGdyZWF0LCB0aGUgbWVtb3J5IHdpbGwgYmUgRE1BIG1hcHBlZC4g SWYgaXQncyBub3QgYWN0aXZlIC0gbm8gaGFybSB3aWxsDQo+ID4+IGV2ZXIgYmUgZG9uZSBieSBt YXBwaW5nIHRoZSBtZW1vcnkgZm9yIERNQSBhbnl3YXkuDQo+ID4NCj4gPiBEbyBWRklPIERNQSBt YXBwaW5nIHVuY29uZGl0aW9uYWxseSwgZG8geW91IG1lYW4gdGhlDQo+IHJ0ZV9lYWxfdmZpb19p c19lbmFibGVkKCkgaXMgdW5uZWNlc3Nhcnk/DQo+ID4gV2hhdCBpZiB0aGUgcGxhdGZvcm0gZG9l cyBub3QgaGF2ZSBJT01NVT8NCj4gPg0KPiA+IFRoYW5rcyB2ZXJ5IG11Y2guDQo+ID4NCj4gDQo+ IElmIHRoZSBwbGF0Zm9ybSBoYXMgbm8gSU9NTVUsIHRoZSBBUEkgY2FsbCB3aWxsIGp1c3Qgbm90 IGRvIGFueXRoaW5nDQo+IHVzZWZ1bCwgc28gbm8gaGFybSBkb25lLg0KDQpTbyB0aGUgb25seSB0 aGluZyByZW1haW5lZCBpcyB0aGUgQVBJIGNoYW5nZSBmb3IgcGFnZS1ieS1wYWdlIG1hcHBpbmcN CmluIG5leHQgcmVsZWFzZS4NCg0KVGhhbmtzLA0KWHVhbg0KDQo+IA0KPiA+IFJlZ2FyZHMsDQo+ ID4gWHVhbg0KPiA+DQo+ID4+DQo+ID4+IC0tDQo+ID4+IFRoYW5rcywNCj4gPj4gQW5hdG9seQ0K PiANCj4gDQo+IC0tDQo+IFRoYW5rcywNCj4gQW5hdG9seQ0K