From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 557D2A04BC; Fri, 9 Oct 2020 18:52:04 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 393741BDBD; Fri, 9 Oct 2020 18:52:03 +0200 (CEST) Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by dpdk.org (Postfix) with ESMTP id E125D1BC8B for ; Fri, 9 Oct 2020 18:52:01 +0200 (CEST) IronPort-SDR: 6bKeWIlGvvxD/yC+XuEm5z7+HqVfsBsZIQFIh6U5F4FlKiTVYuRBvxkTYjrqXlshibpeCDqTab DK6Nr8ZynkQQ== X-IronPort-AV: E=McAfee;i="6000,8403,9769"; a="165623043" X-IronPort-AV: E=Sophos;i="5.77,355,1596524400"; d="scan'208";a="165623043" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by orsmga102.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Oct 2020 09:51:58 -0700 IronPort-SDR: bfP1Ko0M/bFn3sp6mCpEgvwAM1GQBLHOgDj8vGDyq/4mNx+r4q1VN+2i8bOl/skX2l8HNoo0kM cx1kvpT3mD3A== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,355,1596524400"; d="scan'208";a="519790709" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmsmga005.fm.intel.com with ESMTP; 09 Oct 2020 09:51:57 -0700 Received: from orsmsx612.amr.corp.intel.com (10.22.229.25) 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.1713.5; Fri, 9 Oct 2020 09:51:57 -0700 Received: from orsmsx601.amr.corp.intel.com (10.22.229.14) by ORSMSX612.amr.corp.intel.com (10.22.229.25) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Fri, 9 Oct 2020 09:51:57 -0700 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx601.amr.corp.intel.com (10.22.229.14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Fri, 9 Oct 2020 09:51:57 -0700 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (104.47.55.171) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Fri, 9 Oct 2020 09:51:56 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=eWjHohwWFEssJAF/TfoNaNbwd4eJEtFgbpvkPYHNGtLdM4nCjOpJcO7o/VcDyznQ2Hp3UlR4pjH7tRxdQZmzGpR3UQ39H1E7fjix1y4/9/Odv7RzqMxIQPkLKho4MyX1P7FtPiHvIx39pivj6dRGBkQJopRTBy2LaYw0KOxX0YeZModkucvXi8Q1VirBN6eV0AO7RMiJkTJGrxNzQmfSLmCPTPz8KS0BF10IFUn0kl3n5gMSigNo4zOhZcorApCxeAkkc9wGlfGnkttzWWAcrALYZTCEZ3a0J112Oa0a/i+uY9fUgj8jurAoH5oUZpqp5XLLrRHmO3aLTQ4m114Ubg== 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=ANqXmTQZIQArHr+Vgd061M7n97dddt+voG7slJlYpy4=; b=OlQsRHdESOhgS5QQAm83mO2cyR85EXvq96BkZCnu+bcAm/1YPEAOtZ6VEAbsWppbBLLR6LI7T0UgvNuBvh54TBF6gCjeNcCGeV34yhndFk2boH+eVs5bm1OykuetlIFwxlf+WRHjcggpqO3+aIBtIE/VnjSS+VAyv9lH+A/+fnpuum9l7aH7lchhgbjZMylZbPJUmFASu81+1mbwyF1KzNlVzVcnz7Pi60nNSNOLKZKHBX8lu6t82j6RVVhKlnja9AIZYFWxY9Xtcbfb60RgtB6ds7RgJHmraed8NiEw5d3PlJ5pRSVoCQQOTp1rDpzO/4ch0CAkPaBfp8Wsfk/zsw== 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=ANqXmTQZIQArHr+Vgd061M7n97dddt+voG7slJlYpy4=; b=lOydShg8cZFMTd+vOo8bU1Gp/c+E1uP1gRptEiiI69HHaQRWRdZ8WC3IqNm126/yq9pxAPvddQWQb7Y3eWjFZJ8VPhb1SrzrKNeh4D2rgsyvMeq/MTC0yGgTpwmlhpN+wFSI+xa5WTrazVrFL6vxdMYhC1gAW9CovcVFXSUYP1c= Received: from BYAPR11MB3301.namprd11.prod.outlook.com (2603:10b6:a03:7f::26) by SJ0PR11MB4784.namprd11.prod.outlook.com (2603:10b6:a03:2da::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3433.34; Fri, 9 Oct 2020 16:51:53 +0000 Received: from BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::f5a4:3f6b:ade3:296b]) by BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::f5a4:3f6b:ade3:296b%3]) with mapi id 15.20.3455.027; Fri, 9 Oct 2020 16:51:53 +0000 From: "Ananyev, Konstantin" To: "Burakov, Anatoly" , "Ma, Liang J" , "dev@dpdk.org" CC: "Hunt, David" , "stephen@networkplumber.org" Thread-Topic: [PATCH v4 04/10] power: add simple power management API and callback Thread-Index: AQHWmMYQwMLlC/ugfkqtcsvaQkLoF6mPfnfAgAAHxQCAAADJoA== Date: Fri, 9 Oct 2020 16:51:53 +0000 Message-ID: References: <1599214740-3927-1-git-send-email-liang.j.ma@intel.com> <1601647919-25312-1-git-send-email-liang.j.ma@intel.com> <1601647919-25312-4-git-send-email-liang.j.ma@intel.com> In-Reply-To: Accept-Language: en-GB, 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-originating-ip: [46.7.39.127] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 68e3b266-20d5-435d-e94c-08d86c739ff6 x-ms-traffictypediagnostic: SJ0PR11MB4784: 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:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: w6k0NAlHbQFCq2kuV3MCVEutsa1xHv+QwLu+YHBKycK6+ANM014Us+Z+Nvegilssdnk3J5dRn3YDa1jCCoBng5Y/YcPu33u9QTOd0Gkl4GOqOS9yKtlBVC9NBmE/TydnSBu/Z4WuvPWwQvN3xRvON5BRXad5SANQj09XcAtwoGU1VLZxee2WZHAi892KdZr2PCZmfm9fGwpLW4iVFwEsbl0W7p6wVPa2PauoUBDsFPT6wILSfc9bCYqtEfJ6PN4UvVtW6ZHbH1/348ANfxwq33LxWpyhcTfbJ0iRUl8wu6h4FuSXNkrMVj8R07KlK1Fa x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR11MB3301.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(39860400002)(346002)(136003)(396003)(376002)(366004)(71200400001)(478600001)(55016002)(2906002)(8676002)(33656002)(5660300002)(9686003)(83380400001)(8936002)(30864003)(54906003)(26005)(6506007)(316002)(66946007)(4326008)(53546011)(66476007)(64756008)(76116006)(186003)(66556008)(66446008)(52536014)(7696005)(86362001)(110136005); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: +eeFxvguqkxCBBT28l8ev4b0MfhtFKF4C5jkE7p8LNC/WcN+aqAinunvV9/iLI4ok9tv+L/0cGv0w2yyfAd00fZ0Fu76tsc7BKY4wR3HvoieV5OxOGHQeu3WrhbSYiR+QnKR6h3Xt4jtajSUltLwgWwVwbJB0a2atOxkgL3krBQ2yYDmEWdLVyNB7wuJvkGo6PpR+1Ld83AApa8r6dFaw+HTJnac0OkLTyICSvhKcVW9zMJ5pM9GbIl99szJZJH1PyeK/R/4nJMk1XyP5rPZC+jx7yDqm/FgTW+Ql7QbJclRVYQ5MLD3Ah0cz5A4S5vELFj9dNrPeLNXj3uGgG/kNzGN+n27w6Wy4RsCO34pqjPS3B/ZgxmIRAAdCzXzJuIkY4+/6TbYhtyy6aXVs6R/hfZhifeqOJudSxD81NR+cXHTJMziQ72//1tsq/VsWezB9+pd425SbfqWth8/uJkNjXmBy9kfVGOH/19zLIs31ixRBXab1kjuenFIPfxSDgSjI3QOLSiNrUareBf2rKYzNqrGNwklUpZ4lplnQgc0Odsuf5/0kTWRa0Em13rzgboK0uVXzBqCcoNcqYdee3s3WDl2G6TyHCuR+jVpULd/RNKz7k+A7gcpgYWcBXewCYqAH/Ai2g+XF6Bje8w7H9gg8w== 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: BYAPR11MB3301.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 68e3b266-20d5-435d-e94c-08d86c739ff6 X-MS-Exchange-CrossTenant-originalarrivaltime: 09 Oct 2020 16:51:53.2503 (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: PvmZ23ArBxVTIDf//uZUTsdYhWlAK8rLdtfhahQSWUJZZD0X2yryaOzgVeJBMP9hG2W+hKvlfjwfQRUvgupmCO4jTB9jQDk4GRFRku0OnFI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB4784 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v4 04/10] power: add simple power management API and callback X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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" PiBPbiAwOS1PY3QtMjAgNTozOCBQTSwgQW5hbnlldiwgS29uc3RhbnRpbiB3cm90ZToNCj4gPj4g QWRkIGEgc2ltcGxlIG9uL29mZiBzd2l0Y2ggdGhhdCB3aWxsIGVuYWJsZSBzYXZpbmcgcG93ZXIg d2hlbiBubw0KPiA+PiBwYWNrZXRzIGFyZSBhcnJpdmluZy4gSXQgaXMgYmFzZWQgb24gY291bnRp bmcgdGhlIG51bWJlciBvZiBlbXB0eQ0KPiA+PiBwb2xscyBhbmQsIHdoZW4gdGhlIG51bWJlciBy ZWFjaGVzIGEgY2VydGFpbiB0aHJlc2hvbGQsIGVudGVyaW5nIGFuDQo+ID4+IGFyY2hpdGVjdHVy ZS1kZWZpbmVkIG9wdGltaXplZCBwb3dlciBzdGF0ZSB0aGF0IHdpbGwgZWl0aGVyIHdhaXQNCj4g Pj4gdW50aWwgYSBUU0MgdGltZXN0YW1wIGV4cGlyZXMsIG9yIHdoZW4gcGFja2V0cyBhcnJpdmUu DQo+ID4+DQo+ID4+IFRoaXMgQVBJIHN1cHBvcnQgMSBwb3J0IHRvIG11bHRpcGxlIGNvcmUgdXNl IGNhc2UuDQo+ID4+DQo+ID4+IFRoaXMgZGVzaWduIGxldmVyYWdlIFJYIENhbGxiYWNrIG1lY2hu YWlzbSB3aGljaCBhbGxvdyB0aHJlZQ0KPiA+PiBkaWZmZXJlbnQgcG93ZXIgbWFuYWdlbWVudCBt ZXRob2RvbG9neSBjbyBleGlzdC4NCj4gPj4NCj4gPj4gMS4gdW13YWl0L3Vtb25pdG9yOg0KPiA+ Pg0KPiA+PiAgICAgVGhlIFRTQyB0aW1lc3RhbXAgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVk IHVzaW5nIGN1cnJlbnQNCj4gPj4gICAgIGxpbmsgc3BlZWQgYW5kIFJYIGRlc2NyaXB0b3Igcmlu ZyBzaXplLCBzdWNoIHRoYXQgdGhlIHNsZWVwDQo+ID4+ICAgICB0aW1lIGlzIG5vdCBsb25nZXIg dGhhbiBpdCB3b3VsZCB0YWtlIGZvciBhIE5JQyB0byBmaWxsIGl0cw0KPiA+PiAgICAgZW50aXJl IFJYIGRlc2NyaXB0b3IgcmluZy4NCj4gPj4NCj4gPj4gMi4gUGF1c2UgaW5zdHJ1Y3Rpb24NCj4g Pj4NCj4gPj4gICAgIEluc3RlYWQgb2YgbW92ZSB0aGUgY29yZSBpbnRvIGRlZXBlciBDIHN0YXRl LCB0aGlzIGxpZ2h0d2VpZ2h0DQo+ID4+ICAgICBtZXRob2QgdXNlIFBhdXNlIGluc3RydWN0aW9u IHRvIHJlbGllZiB0aGUgcHJvY2Vzc29yIGZyb20NCj4gPj4gICAgIGJ1c3kgcG9sbGluZy4NCj4g Pj4NCj4gPj4gMy4gRnJlcXVlbmN5IFNjYWxpbmcNCj4gPj4gICAgIFJldXNlIGV4aXN0IHJ0ZSBw b3dlciBsaWJyYXJ5IHRvIHNjYWxlIHVwL2Rvd24gY29yZSBmcmVxdWVuY3kNCj4gPj4gICAgIGRl cGVuZCBvbiB0cmFmZmljIHZvbHVtZS4NCj4gPj4NCj4gPj4gU2lnbmVkLW9mZi1ieTogTGlhbmcg TWEgPGxpYW5nLmoubWFAaW50ZWwuY29tPg0KPiA+PiBTaWduZWQtb2ZmLWJ5OiBBbmF0b2x5IEJ1 cmFrb3YgPGFuYXRvbHkuYnVyYWtvdkBpbnRlbC5jb20+DQo+ID4+IC0tLQ0KPiA+PiAgIGxpYi9s aWJydGVfcG93ZXIvbWVzb24uYnVpbGQgICAgICAgICAgIHwgICA1ICstDQo+ID4+ICAgbGliL2xp YnJ0ZV9wb3dlci9wbWRfbWdtdC5oICAgICAgICAgICAgfCAgNDkgKysrKysrDQo+ID4+ICAgbGli L2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfcG1kX21nbXQuYyAgfCAyMDggKysrKysrKysrKysrKysr KysrKysrKysrKw0KPiA+PiAgIGxpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX3BtZF9tZ210Lmgg IHwgIDg4ICsrKysrKysrKysrDQo+ID4+ICAgbGliL2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfdmVy c2lvbi5tYXAgfCAgIDQgKw0KPiA+PiAgIDUgZmlsZXMgY2hhbmdlZCwgMzUyIGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9saWJydGVf cG93ZXIvcG1kX21nbXQuaA0KPiA+PiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWIvbGlicnRlX3Bv d2VyL3J0ZV9wb3dlcl9wbWRfbWdtdC5jDQo+ID4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYi9s aWJydGVfcG93ZXIvcnRlX3Bvd2VyX3BtZF9tZ210LmgNCj4gPj4NCj4gPj4gZGlmZiAtLWdpdCBh L2xpYi9saWJydGVfcG93ZXIvbWVzb24uYnVpbGQgYi9saWIvbGlicnRlX3Bvd2VyL21lc29uLmJ1 aWxkDQo+ID4+IGluZGV4IDc4YzAzMWM5NDMuLmNjM2M3YTg2NDYgMTAwNjQ0DQo+ID4+IC0tLSBh L2xpYi9saWJydGVfcG93ZXIvbWVzb24uYnVpbGQNCj4gPj4gKysrIGIvbGliL2xpYnJ0ZV9wb3dl ci9tZXNvbi5idWlsZA0KPiA+PiBAQCAtOSw2ICs5LDcgQEAgc291cmNlcyA9IGZpbGVzKCdydGVf cG93ZXIuYycsICdwb3dlcl9hY3BpX2NwdWZyZXEuYycsDQo+ID4+ICAgJ3Bvd2VyX2t2bV92bS5j JywgJ2d1ZXN0X2NoYW5uZWwuYycsDQo+ID4+ICAgJ3J0ZV9wb3dlcl9lbXB0eV9wb2xsLmMnLA0K PiA+PiAgICdwb3dlcl9wc3RhdGVfY3B1ZnJlcS5jJywNCj4gPj4gKydydGVfcG93ZXJfcG1kX21n bXQuYycsDQo+ID4+ICAgJ3Bvd2VyX2NvbW1vbi5jJykNCj4gPj4gLWhlYWRlcnMgPSBmaWxlcygn cnRlX3Bvd2VyLmgnLCdydGVfcG93ZXJfZW1wdHlfcG9sbC5oJykNCj4gPj4gLWRlcHMgKz0gWyd0 aW1lciddDQo+ID4+ICtoZWFkZXJzID0gZmlsZXMoJ3J0ZV9wb3dlci5oJywncnRlX3Bvd2VyX2Vt cHR5X3BvbGwuaCcsJ3J0ZV9wb3dlcl9wbWRfbWdtdC5oJykNCj4gPj4gK2RlcHMgKz0gWyd0aW1l cicgLCdldGhkZXYnXQ0KPiA+PiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9wb3dlci9wbWRfbWdt dC5oIGIvbGliL2xpYnJ0ZV9wb3dlci9wbWRfbWdtdC5oDQo+ID4+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0DQo+ID4+IGluZGV4IDAwMDAwMDAwMDAuLjc1NmZiZTIwZjcNCj4gPj4gLS0tIC9kZXYvbnVs bA0KPiA+PiArKysgYi9saWIvbGlicnRlX3Bvd2VyL3BtZF9tZ210LmgNCj4gPj4gQEAgLTAsMCAr MSw0OSBAQA0KPiA+PiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQ0K PiA+PiArICogQ29weXJpZ2h0KGMpIDIwMTAtMjAyMCBJbnRlbCBDb3Jwb3JhdGlvbg0KPiA+PiAr ICovDQo+ID4+ICsNCj4gPj4gKyNpZm5kZWYgX1BNRF9NR01UX0gNCj4gPj4gKyNkZWZpbmUgX1BN RF9NR01UX0gNCj4gPj4gKw0KPiA+PiArLyoqDQo+ID4+ICsgKiBAZmlsZQ0KPiA+PiArICogUG93 ZXIgTWFuYWdlbWVudA0KPiA+PiArICovDQo+ID4+ICsNCj4gPj4gKyNpZmRlZiBfX2NwbHVzcGx1 cw0KPiA+PiArZXh0ZXJuICJDIiB7DQo+ID4+ICsjZW5kaWYNCj4gPj4gKw0KPiA+PiArLyoqDQo+ ID4+ICsgKiBQb3NzaWJsZSBwb3dlciBtYW5hZ2VtZW50IHN0YXRlcyBvZiBhbiBldGhkZXYgcG9y dC4NCj4gPj4gKyAqLw0KPiA+PiArZW51bSBwbWRfbWdtdF9zdGF0ZSB7DQo+ID4+ICsvKiogRGV2 aWNlIHBvd2VyIG1hbmFnZW1lbnQgaXMgZGlzYWJsZWQuICovDQo+ID4+ICtQTURfTUdNVF9ESVNB QkxFRCA9IDAsDQo+ID4+ICsvKiogRGV2aWNlIHBvd2VyIG1hbmFnZW1lbnQgaXMgZW5hYmxlZC4g Ki8NCj4gPj4gK1BNRF9NR01UX0VOQUJMRUQsDQo+ID4+ICt9Ow0KPiA+PiArDQo+ID4+ICtzdHJ1 Y3QgcG1kX3F1ZXVlX2NmZyB7DQo+ID4+ICtlbnVtIHBtZF9tZ210X3N0YXRlIHB3cl9tZ210X3N0 YXRlOw0KPiA+PiArLyoqPCBQb3dlciBtZ210IENhbGxiYWNrIG1vZGUgKi8NCj4gPj4gK2VudW0g cnRlX3Bvd2VyX3BtZF9tZ210X3R5cGUgY2JfbW9kZTsNCj4gPj4gKy8qKjwgRW1wdHkgcG9sbCBu dW1iZXIgKi8NCj4gPj4gK3VpbnQxNl90IGVtcHR5X3BvbGxfc3RhdHM7DQo+ID4+ICsvKio8IENh bGxiYWNrIGluc3RhbmNlICAqLw0KPiA+PiArY29uc3Qgc3RydWN0IHJ0ZV9ldGhfcnh0eF9jYWxs YmFjayAqY3VyX2NiOw0KPiA+PiArfSBfX3J0ZV9jYWNoZV9hbGlnbmVkOw0KPiA+PiArDQo+ID4+ ICtzdHJ1Y3QgcG1kX3BvcnRfY2ZnIHsNCj4gPj4gK2ludCAgcmVmX2NudDsNCj4gPj4gK3N0cnVj dCBwbWRfcXVldWVfY2ZnICpxdWV1ZV9jZmc7DQo+ID4+ICt9IF9fcnRlX2NhY2hlX2FsaWduZWQ7 DQo+ID4+ICsNCj4gPj4gKw0KPiA+PiArDQo+ID4+ICsNCj4gPj4gKyNpZmRlZiBfX2NwbHVzcGx1 cw0KPiA+PiArfQ0KPiA+PiArI2VuZGlmDQo+ID4+ICsNCj4gPj4gKyNlbmRpZg0KPiA+PiBkaWZm IC0tZ2l0IGEvbGliL2xpYnJ0ZV9wb3dlci9ydGVfcG93ZXJfcG1kX21nbXQuYyBiL2xpYi9saWJy dGVfcG93ZXIvcnRlX3Bvd2VyX3BtZF9tZ210LmMNCj4gPj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQN Cj4gPj4gaW5kZXggMDAwMDAwMDAwMC4uMzVkMmFmNDZhNA0KPiA+PiAtLS0gL2Rldi9udWxsDQo+ ID4+ICsrKyBiL2xpYi9saWJydGVfcG93ZXIvcnRlX3Bvd2VyX3BtZF9tZ210LmMNCj4gPj4gQEAg LTAsMCArMSwyMDggQEANCj4gPj4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1D bGF1c2UNCj4gPj4gKyAqIENvcHlyaWdodChjKSAyMDEwLTIwMjAgSW50ZWwgQ29ycG9yYXRpb24N Cj4gPj4gKyAqLw0KPiA+PiArDQo+ID4+ICsjaW5jbHVkZSA8cnRlX2xjb3JlLmg+DQo+ID4+ICsj aW5jbHVkZSA8cnRlX2N5Y2xlcy5oPg0KPiA+PiArI2luY2x1ZGUgPHJ0ZV9tYWxsb2MuaD4NCj4g Pj4gKyNpbmNsdWRlIDxydGVfZXRoZGV2Lmg+DQo+ID4+ICsjaW5jbHVkZSA8cnRlX3Bvd2VyX2lu dHJpbnNpY3MuaD4NCj4gPj4gKw0KPiA+PiArI2luY2x1ZGUgInJ0ZV9wb3dlcl9wbWRfbWdtdC5o Ig0KPiA+PiArI2luY2x1ZGUgInBtZF9tZ210LmgiDQo+ID4+ICsNCj4gPj4gKw0KPiA+PiArI2Rl ZmluZSBFTVBUWVBPTExfTUFYICA1MTINCj4gPj4gKyNkZWZpbmUgUEFVU0VfTlVNICA2NA0KPiA+ PiArDQo+ID4+ICtzdGF0aWMgc3RydWN0IHBtZF9wb3J0X2NmZyBwb3J0X2NmZ1tSVEVfTUFYX0VU SFBPUlRTXTsNCj4gPj4gKw0KPiA+PiArc3RhdGljIHVpbnQxNl90DQo+ID4+ICtydGVfcG93ZXJf bWdtdF91bXdhaXQodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QgcWlkeCwNCj4gPj4gK3N0cnVj dCBydGVfbWJ1ZiAqKnBrdHMgX19ydGVfdW51c2VkLCB1aW50MTZfdCBuYl9yeCwNCj4gPj4gK3Vp bnQxNl90IG1heF9wa3RzIF9fcnRlX3VudXNlZCwgdm9pZCAqXyAgX19ydGVfdW51c2VkKQ0KPiA+ PiArew0KPiA+PiArDQo+ID4+ICtzdHJ1Y3QgcG1kX3F1ZXVlX2NmZyAqcV9jb25mOw0KPiA+PiAr cV9jb25mID0gJnBvcnRfY2ZnW3BvcnRfaWRdLnF1ZXVlX2NmZ1txaWR4XTsNCj4gPj4gKw0KPiA+ PiAraWYgKHVubGlrZWx5KG5iX3J4ID09IDApKSB7DQo+ID4+ICtxX2NvbmYtPmVtcHR5X3BvbGxf c3RhdHMrKzsNCj4gPj4gK2lmICh1bmxpa2VseShxX2NvbmYtPmVtcHR5X3BvbGxfc3RhdHMgPiBF TVBUWVBPTExfTUFYKSkgew0KPiA+DQo+ID4NCj4gPiBIZXJlIGFuZCBpbiBvdGhlciBwbGFjZXMg LSB3b3VsZG4ndCBpdCBiZSBiZXR0ZXIgdG8gZW1wdHlfcG9sbF9tYXggYXMgY29uZmlndXJhYmxl DQo+ID4gcGFyYW1ldGVyLCBpbnN0ZWFkIG9mIGNvbnN0YW50IHZhbHVlPw0KPiANCj4gSXQgd291 bGQgYmUgbW9yZSBmbGV4aWJsZSwgYnV0IGkgZG9uJ3QgdGhpbmsgaXQncyAiYmV0dGVyIiBpbiB0 aGUgc2Vuc2UNCj4gdGhhdCBwcm92aWRpbmcgYWRkaXRpb25hbCBvcHRpb25zIHdpbGwgb25seSBt YWtlIHVzaW5nIHRoaXMgKGFscmVhZHkNCj4gdW5kZXItdXRpbGl6ZWQhKSBBUEkgaGFyZGVyIHRo YW4gaXQgbmVlZHMgdG8gYmUuDQo+IA0KPiA+DQo+ID4+ICt2b2xhdGlsZSB2b2lkICp0YXJnZXRf YWRkcjsNCj4gPj4gK3VpbnQ2NF90IGV4cGVjdGVkLCBtYXNrOw0KPiA+PiArdWludDE2X3QgcmV0 Ow0KPiA+PiArDQo+ID4+ICsvKg0KPiA+PiArICogZ2V0IGFkZHJlc3Mgb2YgbmV4dCBkZXNjcmlw dG9yIGluIHRoZSBSWA0KPiA+PiArICogcmluZyBmb3IgdGhpcyBxdWV1ZSwgYXMgd2VsbCBhcyBl eHBlY3RlZA0KPiA+PiArICogdmFsdWUgYW5kIGEgbWFzay4NCj4gPj4gKyAqLw0KPiA+PiArcmV0 ID0gcnRlX2V0aF9nZXRfd2FrZV9hZGRyKHBvcnRfaWQsIHFpZHgsDQo+ID4+ICsgICAgJnRhcmdl dF9hZGRyLCAmZXhwZWN0ZWQsDQo+ID4+ICsgICAgJm1hc2spOw0KPiA+PiAraWYgKHJldCA9PSAw KQ0KPiA+PiArLyogLTFVTEwgaXMgbWF4aW11bSB2YWx1ZSBmb3IgVFNDICovDQo+ID4+ICtydGVf cG93ZXJfbW9uaXRvcih0YXJnZXRfYWRkciwNCj4gPj4gKyAgZXhwZWN0ZWQsIG1hc2ssDQo+ID4+ ICsgIDAsIC0xVUxMKTsNCj4gPg0KPiA+DQo+ID4gV2h5IG5vdCBtYWtlIHRpbWVvdXQgYSB1c2Vy IHNwZWNpZmllZCBwYXJhbWV0ZXI/DQo+IA0KPiBUaGlzIGlzIG1lYW50IHRvIGJlIGFuICJlYXN5 IHRvIHVzZSIgQVBJLCB3ZSB3ZXJlIHRyeWluZyB0byBrZWVwIHRoZQ0KPiBhbW91bnQgb2YgY29u ZmlndXJhdGlvbiB0byBhbiBhYnNvbHV0ZSBtaW5pbXVtLiBJZiB0aGUgdXNlciB3YW50cyB0byB1 c2UNCj4gY3VzdG9tIHRpbWVvdXRzLCB0aGV5IGNhbiBkbyBzbyB3aXRoIHVzaW5nIHJ0ZV9wb3dl cl9tb25pdG9yIEFQSSBleHBsaWNpdGx5Lg0KPiANCj4gPg0KPiA+PiArfQ0KPiA+PiArfSBlbHNl DQo+ID4+ICtxX2NvbmYtPmVtcHR5X3BvbGxfc3RhdHMgPSAwOw0KPiA+PiArDQo+ID4+ICtyZXR1 cm4gbmJfcng7DQo+ID4+ICt9DQo+ID4+ICsNCj4gPj4gK3N0YXRpYyB1aW50MTZfdA0KPiA+PiAr cnRlX3Bvd2VyX21nbXRfcGF1c2UodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QgcWlkeCwNCj4g Pj4gK3N0cnVjdCBydGVfbWJ1ZiAqKnBrdHMgX19ydGVfdW51c2VkLCB1aW50MTZfdCBuYl9yeCwN Cj4gPj4gK3VpbnQxNl90IG1heF9wa3RzIF9fcnRlX3VudXNlZCwgdm9pZCAqXyAgX19ydGVfdW51 c2VkKQ0KPiA+PiArew0KPiA+PiArc3RydWN0IHBtZF9xdWV1ZV9jZmcgKnFfY29uZjsNCj4gPj4g K2ludCBpOw0KPiA+PiArcV9jb25mID0gJnBvcnRfY2ZnW3BvcnRfaWRdLnF1ZXVlX2NmZ1txaWR4 XTsNCj4gPj4gKw0KPiA+PiAraWYgKHVubGlrZWx5KG5iX3J4ID09IDApKSB7DQo+ID4+ICtxX2Nv bmYtPmVtcHR5X3BvbGxfc3RhdHMrKzsNCj4gPj4gK2lmICh1bmxpa2VseShxX2NvbmYtPmVtcHR5 X3BvbGxfc3RhdHMgPiBFTVBUWVBPTExfTUFYKSkgew0KPiA+PiArZm9yIChpID0gMDsgaSA8IFBB VVNFX05VTTsgaSsrKQ0KPiA+PiArcnRlX3BhdXNlKCk7DQo+ID4NCj4gPiBKdXN0IHJ0ZV9kZWxh eV91cyh0aW1lb3V0KSBpbnN0ZWFkIG9mIHRoaXMgbG9vcD8NCj4gDQo+IFllcywgc2VlbXMgYmV0 dGVyLCB0aGFua3MuDQo+IA0KPiA+DQo+ID4+ICt9DQo+ID4+ICt9IGVsc2UNCj4gPj4gK3FfY29u Zi0+ZW1wdHlfcG9sbF9zdGF0cyA9IDA7DQo+ID4+ICsNCj4gPj4gK3JldHVybiBuYl9yeDsNCj4g Pj4gK30NCj4gPj4gKw0KPiA+PiArc3RhdGljIHVpbnQxNl90DQo+ID4+ICtydGVfcG93ZXJfbWdt dF9zY2FsZWZyZXEodWludDE2X3QgcG9ydF9pZCwgdWludDE2X3QgcWlkeCwNCj4gPj4gK3N0cnVj dCBydGVfbWJ1ZiAqKnBrdHMgX19ydGVfdW51c2VkLCB1aW50MTZfdCBuYl9yeCwNCj4gPj4gK3Vp bnQxNl90IG1heF9wa3RzIF9fcnRlX3VudXNlZCwgdm9pZCAqXyAgX19ydGVfdW51c2VkKQ0KPiA+ PiArew0KPiA+PiArc3RydWN0IHBtZF9xdWV1ZV9jZmcgKnFfY29uZjsNCj4gPj4gK3FfY29uZiA9 ICZwb3J0X2NmZ1twb3J0X2lkXS5xdWV1ZV9jZmdbcWlkeF07DQo+ID4+ICsNCj4gPj4gK2lmICh1 bmxpa2VseShuYl9yeCA9PSAwKSkgew0KPiA+PiArcV9jb25mLT5lbXB0eV9wb2xsX3N0YXRzKys7 DQo+ID4+ICtpZiAodW5saWtlbHkocV9jb25mLT5lbXB0eV9wb2xsX3N0YXRzID4gRU1QVFlQT0xM X01BWCkpIHsNCj4gPj4gKy8qc2NhbGUgZG93biBmcmVxICovDQo+ID4+ICtydGVfcG93ZXJfZnJl cV9taW4ocnRlX2xjb3JlX2lkKCkpOw0KPiA+PiArDQo+ID4+ICt9DQo+ID4+ICt9IGVsc2Ugew0K PiA+PiArcV9jb25mLT5lbXB0eV9wb2xsX3N0YXRzID0gMDsNCj4gPj4gKy8qIHNjYWwgdXAgZnJl cSAqLw0KPiA+PiArcnRlX3Bvd2VyX2ZyZXFfbWF4KHJ0ZV9sY29yZV9pZCgpKTsNCj4gPj4gK30N Cj4gPj4gKw0KPiA+PiArcmV0dXJuIG5iX3J4Ow0KPiA+PiArfQ0KPiA+PiArDQo+ID4NCj4gPiBQ cm9iYWJseSB3b3J0aCB0byBtZW50aW9uIGluIGNvbW1lbnRzIHRoYXQgdGhlc2UgZnVuY3Rpb25z IGVuYWJsZS9kaXNhYmxlDQo+ID4gYXJlIG5vdCBNVCBzYWZlLg0KPiANCj4gV2lsbCBkbyBpbiB2 Ni4NCj4gDQo+ID4NCj4gPj4gK2ludA0KPiA+PiArcnRlX3Bvd2VyX3BtZF9tZ210X3F1ZXVlX2Vu YWJsZSh1bnNpZ25lZCBpbnQgbGNvcmVfaWQsDQo+ID4+ICt1aW50MTZfdCBwb3J0X2lkLA0KPiA+ PiArdWludDE2X3QgcXVldWVfaWQsDQo+ID4+ICtlbnVtIHJ0ZV9wb3dlcl9wbWRfbWdtdF90eXBl IG1vZGUpDQo+ID4+ICt7DQo+ID4+ICtzdHJ1Y3QgcnRlX2V0aF9kZXYgKmRldjsNCj4gPj4gK3N0 cnVjdCBwbWRfcXVldWVfY2ZnICpxdWV1ZV9jZmc7DQo+ID4+ICtpbnQgcmV0ID0gMDsNCj4gPj4g Kw0KPiA+PiArUlRFX0VUSF9WQUxJRF9QT1JUSURfT1JfRVJSX1JFVChwb3J0X2lkLCAtRUlOVkFM KTsNCj4gPj4gK2RldiA9ICZydGVfZXRoX2RldmljZXNbcG9ydF9pZF07DQo+ID4+ICsNCj4gPj4g K2lmIChwb3J0X2NmZ1twb3J0X2lkXS5xdWV1ZV9jZmcgPT0gTlVMTCkgew0KPiA+PiArcG9ydF9j ZmdbcG9ydF9pZF0ucmVmX2NudCA9IDA7DQo+ID4+ICsvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIGVt cHR5IHBvbGwgc3RhdHMgKi8NCj4gPj4gK3BvcnRfY2ZnW3BvcnRfaWRdLnF1ZXVlX2NmZyAgPSBy dGVfbWFsbG9jX3NvY2tldChOVUxMLA0KPiA+PiArc2l6ZW9mKHN0cnVjdCBwbWRfcXVldWVfY2Zn KQ0KPiA+PiArKiBSVEVfTUFYX1FVRVVFU19QRVJfUE9SVCwNCj4gPj4gKzAsIGRldi0+ZGF0YS0+ bnVtYV9ub2RlKTsNCj4gPj4gK2lmIChwb3J0X2NmZ1twb3J0X2lkXS5xdWV1ZV9jZmcgPT0gTlVM TCkNCj4gPj4gK3JldHVybiAtRU5PTUVNOw0KPiA+PiArfQ0KPiA+PiArDQo+ID4+ICtxdWV1ZV9j ZmcgPSAmcG9ydF9jZmdbcG9ydF9pZF0ucXVldWVfY2ZnW3F1ZXVlX2lkXTsNCj4gPj4gKw0KPiA+ PiAraWYgKHF1ZXVlX2NmZy0+cHdyX21nbXRfc3RhdGUgPT0gUE1EX01HTVRfRU5BQkxFRCkgew0K PiA+PiArcmV0ID0gLUVJTlZBTDsNCj4gPj4gK2dvdG8gZmFpbHVyZV9oYW5kbGVyOw0KPiA+PiAr fQ0KPiA+PiArDQo+ID4+ICtzd2l0Y2ggKG1vZGUpIHsNCj4gPj4gK2Nhc2UgUlRFX1BPV0VSX01H TVRfVFlQRV9XQUlUOg0KPiA+PiAraWYgKCFydGVfY3B1X2dldF9mbGFnX2VuYWJsZWQoUlRFX0NQ VUZMQUdfV0FJVFBLRykpIHsNCj4gPj4gK3JldCA9IC1FTk9UU1VQOw0KPiA+PiArZ290byBmYWls dXJlX2hhbmRsZXI7DQo+ID4+ICt9DQo+ID4+ICtxdWV1ZV9jZmctPmN1cl9jYiA9IHJ0ZV9ldGhf YWRkX3J4X2NhbGxiYWNrKHBvcnRfaWQsIHF1ZXVlX2lkLA0KPiA+PiArcnRlX3Bvd2VyX21nbXRf dW13YWl0LCBOVUxMKTsNCj4gPj4gK2JyZWFrOw0KPiA+PiArY2FzZSBSVEVfUE9XRVJfTUdNVF9U WVBFX1NDQUxFOg0KPiA+PiArLyogaW5pdCBzY2FsZSBmcmVxICovDQo+ID4+ICtpZiAocnRlX3Bv d2VyX2luaXQobGNvcmVfaWQpKSB7DQo+ID4+ICtyZXQgPSAtRUlOVkFMOw0KPiA+PiArZ290byBm YWlsdXJlX2hhbmRsZXI7DQo+ID4+ICt9DQo+ID4+ICtxdWV1ZV9jZmctPmN1cl9jYiA9IHJ0ZV9l dGhfYWRkX3J4X2NhbGxiYWNrKHBvcnRfaWQsIHF1ZXVlX2lkLA0KPiA+PiArcnRlX3Bvd2VyX21n bXRfc2NhbGVmcmVxLCBOVUxMKTsNCj4gPj4gK2JyZWFrOw0KPiA+PiArY2FzZSBSVEVfUE9XRVJf TUdNVF9UWVBFX1BBVVNFOg0KPiA+PiArcXVldWVfY2ZnLT5jdXJfY2IgPSBydGVfZXRoX2FkZF9y eF9jYWxsYmFjayhwb3J0X2lkLCBxdWV1ZV9pZCwNCj4gPj4gK3J0ZV9wb3dlcl9tZ210X3BhdXNl LCBOVUxMKTsNCj4gPj4gK2JyZWFrOw0KPiA+DQo+ID4gZGVmYXVsdDoNCj4gPiAuLi4uDQo+IA0K PiBXaWxsIGFkZCBpbiB2Ni4NCj4gDQo+ID4NCj4gPj4gK30NCj4gPj4gK3F1ZXVlX2NmZy0+Y2Jf bW9kZSA9IG1vZGU7DQo+ID4+ICtwb3J0X2NmZ1twb3J0X2lkXS5yZWZfY250Kys7DQo+ID4+ICtx dWV1ZV9jZmctPnB3cl9tZ210X3N0YXRlID0gUE1EX01HTVRfRU5BQkxFRDsNCj4gPj4gK3JldHVy biByZXQ7DQo+ID4+ICsNCj4gPj4gK2ZhaWx1cmVfaGFuZGxlcjoNCj4gPj4gK2lmIChwb3J0X2Nm Z1twb3J0X2lkXS5yZWZfY250ID09IDApIHsNCj4gPj4gK3J0ZV9mcmVlKHBvcnRfY2ZnW3BvcnRf aWRdLnF1ZXVlX2NmZyk7DQo+ID4+ICtwb3J0X2NmZ1twb3J0X2lkXS5xdWV1ZV9jZmcgPSBOVUxM Ow0KPiA+PiArfQ0KPiA+PiArcmV0dXJuIHJldDsNCj4gPj4gK30NCj4gPj4gKw0KPiA+PiAraW50 DQo+ID4+ICtydGVfcG93ZXJfcG1kX21nbXRfcXVldWVfZGlzYWJsZSh1bnNpZ25lZCBpbnQgbGNv cmVfaWQsDQo+ID4+ICt1aW50MTZfdCBwb3J0X2lkLA0KPiA+PiArdWludDE2X3QgcXVldWVfaWQp DQo+ID4+ICt7DQo+ID4+ICtzdHJ1Y3QgcG1kX3F1ZXVlX2NmZyAqcXVldWVfY2ZnOw0KPiA+PiAr DQo+ID4+ICtpZiAocG9ydF9jZmdbcG9ydF9pZF0ucmVmX2NudCA8PSAwKQ0KPiA+PiArcmV0dXJu IC1FSU5WQUw7DQo+ID4+ICsNCj4gPj4gK3F1ZXVlX2NmZyA9ICZwb3J0X2NmZ1twb3J0X2lkXS5x dWV1ZV9jZmdbcXVldWVfaWRdOw0KPiA+PiArDQo+ID4+ICtpZiAocXVldWVfY2ZnLT5wd3JfbWdt dF9zdGF0ZSA9PSBQTURfTUdNVF9ESVNBQkxFRCkNCj4gPj4gK3JldHVybiAtRUlOVkFMOw0KPiA+ PiArDQo+ID4+ICtzd2l0Y2ggKHF1ZXVlX2NmZy0+Y2JfbW9kZSkgew0KPiA+PiArY2FzZSBSVEVf UE9XRVJfTUdNVF9UWVBFX1dBSVQ6DQo+ID4NCj4gPiBUaGluayB3ZSBuZWVkIHdha2V1cChsY29y ZV9pZCkgaGVyZS4NCj4gDQo+IE5vdCBzdXJlIHdoYXQgeW91IG1lYW4/IENvdWxkIHlvdSBwbGVh c2UgZWxhYm9yYXRlPw0KPiANCj4gPg0KPiA+PiArY2FzZSBSVEVfUE9XRVJfTUdNVF9UWVBFX1BB VVNFOg0KPiA+PiArcnRlX2V0aF9yZW1vdmVfcnhfY2FsbGJhY2socG9ydF9pZCwgcXVldWVfaWQs DQo+ID4+ICsgICBxdWV1ZV9jZmctPmN1cl9jYik7DQo+ID4+ICticmVhazsNCj4gPj4gK2Nhc2Ug UlRFX1BPV0VSX01HTVRfVFlQRV9TQ0FMRToNCj4gPj4gK3J0ZV9wb3dlcl9mcmVxX21heChsY29y ZV9pZCk7DQo+ID4+ICtydGVfZXRoX3JlbW92ZV9yeF9jYWxsYmFjayhwb3J0X2lkLCBxdWV1ZV9p ZCwNCj4gPj4gKyAgIHF1ZXVlX2NmZy0+Y3VyX2NiKTsNCj4gPj4gK3J0ZV9wb3dlcl9leGl0KGxj b3JlX2lkKTsNCj4gPj4gK2JyZWFrOw0KPiA+PiArfQ0KPiA+PiArLyogaXQncyBub3QgcmVjb21t ZW5kIHRvIGZyZWUgY2FsbGJhY2sgaW5zdGFuY2UgaGVyZS4NCj4gPj4gKyAqIGl0IGNhdXNlIG1l bW9yeSBsZWFrIHdoaWNoIGlzIGEga25vd24gaXNzdWUuDQo+ID4+ICsgKi8NCj4gPj4gK3F1ZXVl X2NmZy0+Y3VyX2NiID0gTlVMTDsNCj4gPj4gK3F1ZXVlX2NmZy0+cHdyX21nbXRfc3RhdGUgPSBQ TURfTUdNVF9ESVNBQkxFRDsNCj4gPj4gK3BvcnRfY2ZnW3BvcnRfaWRdLnJlZl9jbnQtLTsNCj4g Pj4gKw0KPiA+PiAraWYgKHBvcnRfY2ZnW3BvcnRfaWRdLnJlZl9jbnQgPT0gMCkgew0KPiA+PiAr cnRlX2ZyZWUocG9ydF9jZmdbcG9ydF9pZF0ucXVldWVfY2ZnKTsNCj4gPg0KPiA+IEl0IGlzIG5v dCBzYWZlIHRvIGRvIHNvLCB1bmxlc3MgZGV2aWNlIGlzIGFscmVhZHkgc3RvcHBlZC4NCj4gPiBP dGhlcndpc2UgeW91IG5lZWQgc29tZSBzeW5jIG1lY2hhbmlzbSBoZXJlIChoYW5kLW1hZGUgYXMg YnBmIGxpYiwgb3IgcmN1IG9ubGluZS9vZmZsaW5lLCBvci4uLikNCj4gDQo+IE5vdCBzdXJlIHdo YXQgeW91IG1lYW4uIFdlJ3JlIG5vdCBmcmVlaW5nIHRoZSBjYWxsYmFjayBzdHJ1Y3R1cmUsIHdl J3JlDQo+IGZyZWVpbmcgdGhlIGxvY2FsIGRhdGEgc3RydWN0dXJlIGhvbGRpbmcgdGhlIHBlci1w b3J0IHN0YXR1cy4NCg0KV2hhdCBpcyB0aGUgZGlmZmVyZW5jZT8NCllvdSBzdGlsbCB0cnlpbmcg dG8gZnJlZSBtZW1vcnkgdGhhdCBtaWdodCBiZSB1c2VkIGJ5IHlvdXIgRFAgdGhyZWFkDQp0aGF0 IHN0aWxsIGV4ZWN1dGVzIHRoZSBjYWxsYmFjay4NCg0KPiANCj4gPg0KPiA+PiArcG9ydF9jZmdb cG9ydF9pZF0ucXVldWVfY2ZnID0gTlVMTDsNCj4gPj4gK30NCj4gPj4gK3JldHVybiAwOw0KPiA+ PiArfQ0KPiANCj4gDQo+IC0tDQo+IFRoYW5rcywNCj4gQW5hdG9seQ0K