From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by mx.groups.io with SMTP id smtpd.web10.23388.1600265843636050167 for ; Wed, 16 Sep 2020 07:17:23 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=q9ZD0s2P; spf=pass (domain: intel.com, ip: 192.55.52.120, mailfrom: jiewen.yao@intel.com) IronPort-SDR: +edPXQ8EyuRXj7zXhBMkaE/DqrDoPIYXB4K060xLLdfmFW9FgqWoS+xDzDVYUmgchNoaHAJz7P XN+7lA81k4BA== X-IronPort-AV: E=McAfee;i="6000,8403,9745"; a="156857689" X-IronPort-AV: E=Sophos;i="5.76,433,1592895600"; d="scan'208";a="156857689" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga104.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Sep 2020 07:17:22 -0700 IronPort-SDR: 47XfK7aTem8fJ1Mic8n20OTXUiPjwWcNLiAkOr87BUi5gd9+eeICVRV1P0uH/9cWOftNsSHkzW A2eCQ/SsVaJQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.76,433,1592895600"; d="scan'208";a="409571835" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga001.fm.intel.com with ESMTP; 16 Sep 2020 07:17:22 -0700 Received: from fmsmsx609.amr.corp.intel.com (10.18.126.89) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 16 Sep 2020 07:17:22 -0700 Received: from fmsmsx603.amr.corp.intel.com (10.18.126.83) by fmsmsx609.amr.corp.intel.com (10.18.126.89) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 16 Sep 2020 07:17:21 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx603.amr.corp.intel.com (10.18.126.83) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 16 Sep 2020 07:17:21 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.109) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Wed, 16 Sep 2020 07:17:20 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=QMol9OuCiiYPa/G9pTPIEFB3wBvH7YTucU99PKkC1VSKdb27DvQNUIGcI8MJwYThqggiNUlAkBJEXdHJ1Qbw1ErO8+9+jk9IotU/NuE6vUsRxJuS8t0FRyEhpUk+dpubTJWJZKoigOfUKiCJhvT9caYNqskiKCr0b1jSaPnCf8qNGXXZVBx82PBmxh03/zX05Jiq/COVDUHMINMsIIuDuzU1WCFw92ALtNwq4XR+SsWNOe/1PyHccKiaAaOTeDGHokArF/Cku13660e0uXpUef9KkqYK7Q6ZMmFHzxhaoBkUGxIJuZsuH/ObH7hMFfom1GbM5RUWFUi7DpftE7AXVQ== 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=DBew6S8b8CKmgZh4t2sOIQyDWed3khmHsFxT4qrovs4=; b=QaHcWjBSee+7rXLL4nSXOxt1YuhvLlm2mmeYYm7tuQTzNYPmheGd0ewxigcCsls9Q7s1rTLkV14KeBPpB+S5PapO6B32nsVTR3ZWa28c5HN61Aj8C8uReuwUj/HnX3RpTNadEozImD5qPppn10zU3jTrhEKhzr3O6JEKDQSDVvuwzL5p8d/70Z5XSZDyY2vH2rqMupVLwYoGR2e+oK8//gqpaL3FJrjztggzSUk0HFpLXYLr8zbi2qsyh0JbOfA0Q08YOjRzwv3KFWVdW2ORZf2Y6OHtkciyPAZDX0WTGae6qT8NCOk2umN4VNT3UNmnBh64oV6qBRuvhdUl3VcWRw== 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=DBew6S8b8CKmgZh4t2sOIQyDWed3khmHsFxT4qrovs4=; b=q9ZD0s2P0UBpqNgapIU3lqw7nfxb5BHE2kGwazWHsC9k0TeFU6AecXtH3JZPDs6erUlf9U6QZUJPOafmYFHVJ++VmiRycKcQFs9z4JcxBhu6H16KSfxEOA3eHdZVanQvNQwDjaYve9tqmF5NNO9O+7y9XNmW8Nwkezt6LhdXUjk= Received: from CY4PR11MB1288.namprd11.prod.outlook.com (2603:10b6:903:23::8) by CY4PR11MB1288.namprd11.prod.outlook.com (2603:10b6:903:23::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3391.11; Wed, 16 Sep 2020 14:17:18 +0000 Received: from CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812]) by CY4PR11MB1288.namprd11.prod.outlook.com ([fe80::163:9209:a92d:812%6]) with mapi id 15.20.3391.011; Wed, 16 Sep 2020 14:17:17 +0000 From: "Yao, Jiewen" To: Laszlo Ersek , "devel@edk2.groups.io" , "Zurcher, Christopher J" CC: "Wang, Jian J" , "Lu, XiaoyuX" Subject: Re: [edk2-devel] [PATCH v3 1/3] CryptoPkg/BaseCryptLib: Add EVP (Envelope) Digest interface Thread-Topic: [edk2-devel] [PATCH v3 1/3] CryptoPkg/BaseCryptLib: Add EVP (Envelope) Digest interface Thread-Index: AQHWi8SZwaiPIBpx1UiYpbHmn+hJ4qlrG12AgAAJ7mCAAB+9gIAABF+Q Date: Wed, 16 Sep 2020 14:17:17 +0000 Message-ID: References: <20200916005902.6114-1-christopher.j.zurcher@intel.com> <20200916005902.6114-2-christopher.j.zurcher@intel.com> <6ffd9a53-0fde-cf4b-240a-6703a3dfd48e@redhat.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-version: 11.5.1.3 dlp-product: dlpe-windows dlp-reaction: no-action authentication-results: redhat.com; dkim=none (message not signed) header.d=none;redhat.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.202] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9da12ca2-a849-4e32-90ff-08d85a4b377d x-ms-traffictypediagnostic: CY4PR11MB1288: 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: x/68eczo/9mXzBLQ03LWaMDMbJuC/AR4/nc8/feEVGBU7bITSzNVLCSuWn+HnBOwJQaAcm+57EYQgBHNtI0mdB0FryxdF2Ekl1jiVkK146m/Bkjrzo7giXpgv7EGwHw2DhJeHRmC1aenT2BY0G4+7+/1EK1aqKMFsPAbLOx2XDxISTWEAaczVf7+gup6f5ZvCrbHXMNJw6woIWLAw7FbTwtxTc2D8E6XRzcSRrFUGKFNWXyoScYxO9pkYrRXGMggBX6u4pf1fAHzy36QcfMYOyEORVnSmlrCU36kkOzT/55spIu/NEWgCVDjKANhw7rV1MCHxC5nCGX6CWcxhp1U2WBR24ex5Efp3M5IDC9G1fDlJlIDW82EA4zS4JnCugH+YqeLC503kMls0ffjcevTkA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1288.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(376002)(346002)(396003)(136003)(39860400002)(8676002)(107886003)(71200400001)(86362001)(30864003)(966005)(5660300002)(66946007)(66446008)(66476007)(9686003)(64756008)(52536014)(76116006)(66556008)(54906003)(110136005)(55016002)(7696005)(6506007)(316002)(33656002)(2906002)(53546011)(8936002)(6636002)(26005)(186003)(4326008)(83380400001)(478600001)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: ESV4yJtFW8tFnp23KwXfwbdXvdTgGNpoNstL02eBXEmJ3Hl/LPJX2BOZZUoMFPNBGAqqt0JLHyM6McNyOmZ7xg2LWeyrLZzB332el010QHGALbvHStP+zmXk/13ZOHNb6FpagAZ1xmGf/O02wLUQHlYFkkzzuIsrEVfT1EP/VgeARwMWkpCx1e0svJdEXX2eiyJ9xyADyxGniudVlpGvoRlhRawLqVQGNjzUFrZsPB44nUFTmkGTaOMyw1Q2TlUUFvJpUbnUm4x/mWdNntF1oDfEg46hge9NXVnP0oSEdeK3y1XGHBBjVd3NJhTlL59hv/FM4QZvPtwzLp/oAvUyMrwlwHgseqbocKGL67r3/bhuTgIZS07FDzmusmtkmHsYdNdsouJUJYMq+uJGi45GPZiOIkya5ZzsOaqKRPCFkYO0mTWr9R0ukMlY4Gr79HrWSwtOeqz5CPG2wscGAb9bdSyagMa6qC/VFVuccnaZWYtK15Bg2Ezb5H3SmB1+XJOMBpGazt59eAF0agEzq6GPGMhME/DAWt/pWyAwP/ny7xQUdLD0w0s0T2J38wpR5c1Uuwse7uFosMf9pxBQwn0ML3Sq4et8KOJDHr1GG7+EGMO6cKV0rLqKwNRzzJSxG10hRiS615tHkJUzuocSr6cbZQ== MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1288.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9da12ca2-a849-4e32-90ff-08d85a4b377d X-MS-Exchange-CrossTenant-originalarrivaltime: 16 Sep 2020 14:17:17.2298 (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: hceKqPfekrIlIM5qk6cUJNhe3A/VP6OvKyn50SoLz1h3LB+N/Hnz065L/vJ1zpa70S+7m9PeTsVakGk6MwQWQQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB1288 Return-Path: jiewen.yao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmsgeW91IExhc3psby4NCllvdSBmb3JjZWQgbWUgdG8gcmVhZCB0aGUgY29kZSBhZ2FpbiBh bmQgbW9yZSBjYXJlZnVsbHkuIDotKQ0KDQpJIGJlbGlldmUgSSB1bmRlcnN0YW5kIHdoeSB5b3Ug dXNlIE5VTEwgdG8gZnJlZSB0aGUgY29udGV4dCBub3cgLSB0byBzdXBwb3J0IGVycm9yIHBhdGgu DQoNCkZpcnN0LCBJIGRpZCBoYXZlIHNvbWUgbmV3IHRob3VnaHQgZm9yIEVWUCBBUEkuIExldOKA mXMgY29uc2lkZXIgMyBjYXNlcywgMSkgSGFzaCBhbGwgZGF0YSBvbmUgdGltZSwgMikgSGFzaCB1 cGRhdGUgZGF0YSBtdWx0aXBsZSB0aW1lcywgMykgRXJyb3IgZHVyaW5nIHVwZGF0ZS4NCg0KQS4g SW4gY3VycmVudCBkZXNpZ24sIHRoZSBBUEkgc2VxdWVuY2UgaXM6DQoxKSBFdnBNZEhhc2hBbGwg KERpZ2VzdCkNCjIpIEV2cE1kSW5pdCwgRXZwTWRVcGRhdGUsIEV2cE1kVXBkYXRlLCAuLi4gLCBF dnBNZEZpbmFsIChEaWdlc3QpDQozKSBFdnBNZEluaXQsIEV2cE1kVXBkYXRlLT5FUlJPUiwgRXZw TWRGaW5hbCAoTlVMTCkNCg0KQi4gV2UgY2FuIGF1dG8gZnJlZSBjb250ZXh0IGluIEV2cE1kVXBk YXRlIGluIGVycm9yIHBhdGggIC0gdGhlIEFQSSBzZXF1ZW5jZSBpczoNCjEpIEV2cE1kSGFzaEFs bCAoRGlnZXN0KQ0KMikgRXZwTWRJbml0LCBFdnBNZFVwZGF0ZSwgRXZwTWRVcGRhdGUsIC4uLiAs IEV2cE1kRmluYWwgKERpZ2VzdCkNCjMpIEV2cE1kSW5pdCwgRXZwTWRVcGRhdGUtPkVSUk9SDQoN CkM6IFdlIGNhbiB1c2UgTmV3L0ZyZWUgc3R5bGUgLSBzaW1pbGFyIHRvIEhNQUMNCjEpIEV2cE1k SGFzaEFsbCAoRGlnZXN0KQ0KMikgRXZwTWROZXcsIEV2cE1kSW5pdCwgRXZwTWRVcGRhdGUsIEV2 cE1kVXBkYXRlLCAuLi4gLCBFdnBNZEZpbmFsIChEaWdlc3QpLCBFdnBNZEZyZWUNCjMpIEV2cE1k TmV3LCBFdnBNZEluaXQsIEV2cE1kVXBkYXRlLT5FUlJPUiwgRXZwTWRGcmVlDQoNCkkgY2hlY2tl ZCBiZWxvdyBBUElzOg0KMSkgb3BlbnNzbCAoRVZQX01EX0NUWF9uZXcsIEVWUF9EaWdlc3RJbml0 X2V4LCBFVlBfRGlnZXN0VXBkYXRlLCBFVlBfRGlnZXN0RmluYWxfZXgsIEVWUF9NRF9DVFhfZnJl ZSkNCjIpIG1iZWR0bHMgKG1iZWR0bHNfc2hhMjU2X2luaXQsIG1iZWR0bHNfc2hhMjU2X3N0YXJ0 c19yZXQsIG1iZWR0bHNfc2hhMjU2X3VwZGF0ZV9yZXQsIG1iZWR0bHNfc2hhMjU2X2ZpbmlzaF9y ZXQsIG1iZWR0bHNfc2hhMjU2X2ZyZWUpDQozKSBCYXNlQ3J5cHRvTGliIEhNQUMgKEhtYWNTaGEy NTZOZXcsIEhtYWNTaGEyNTZTZXRLZXksIEhtYWNTaGEyNTZVcGRhdGUsIEhtYWNTaGEyNTZGaW5h bCwgSG1hY1NoYTI1NkZyZWUpDQoNCkFsbCBBUElzIGluY2x1ZGUgZnJlZSBmdW5jdGlvbiB0byBm cmVlIHRoZSBjb250ZXh0LCBJIGRvbuKAmXQgdGhpbmsgaXQgaXMgYSBiYWQgaWRlYSB0byBoYXZl IEV2cE1kRnJlZSgpIEFQSS4NCkkgd291bGQgbGlrZSB0byBwcm9wb3NlIG9wdGlvbiAtIEMuDQoN Cg0KU2Vjb25kLCBJIGJlbGlldmUgRVZQIGlzIGp1c3Qgc29tZXRoaW5nIGluIG9wZW5zc2wuIEl0 IGRvZXMgbm90IG1lYW4gdGhhdCB3ZSAqaGF2ZSB0byogZGVzaWduIEFQSSB0byBmb2xsb3cgb3Bl bnNzbC4NCkFmdGVyIHJldGhpbmsgdGhlIHNpemUgaW1wYWN0LCBJIGRvIGhhdmUgY29uY2VybiB0 byBtZXJnZSBhbGwgSGFzaCBpbXBsZW1lbnRhdGlvbiB0b2dldGhlciBpbiBvbmUgZnVuY3Rpb24u DQpJdCBtaWdodCBtZWFucyBub3RoaW5nIGlmIHRoZSBjcnlwdG8gbGlicmFyeSBpcyBiYXNlZCB1 cG9uIG9wZW5zc2wuDQpCdXQgaWYgdGhlIGNyeXB0b2xpYiBpbXBsZW1lbnRhdGlvbiBpcyBiYXNl ZCB1cG9uIG90aGVyIGNyeXB0bywgc3VjaCBhcyBJbnRlbCBJUFAgKGh0dHBzOi8vZ2l0aHViLmNv bS9zbGltYm9vdGxvYWRlci9zbGltYm9vdGxvYWRlci90cmVlL21hc3Rlci9Cb290bG9hZGVyQ29t bW9uUGtnL0xpYnJhcnkvSXBwQ3J5cHRvTGliKSBvciBtYmVkVGxzIChodHRwczovL2dpdGh1Yi5j b20vanlhbzEvZWRrMi90cmVlL0RldmljZVNlY3VyaXR5L0NyeXB0b01iZWRUbHNQa2cpLCB0aGVu IHdlIGNhbiBOT1QgZ2V0IHNpemUgYmVuZWZpdCBieSBzZXBhcmF0aW5nIHRoZSBoYXNoIGFsZ29y aXRobS4NCg0KDQpJIHdvdWxkIGxpa2UgdG8gcHJvcG9zZSBzZXBhcmF0ZSBFdnBNZHh4eC4NCkV2 cE1kTmV3IC0+IFNoYTI1Nk5ldywgU2hhMzg0TmV3DQpFdnBNZEluaXQgLT4gU2hhMjU2SW5pdCwg U2hhMzg0SW5pdA0KRXZwTWRVcGRhdGUgLT4gU2hhMjU2VXBkYXRlLCBTaGEzODRVcGRhdGUNCkV2 cE1kRmluYWwgLT4gU2hhMjU2RmluYWwsIFNoYTM4NEZpbmFsDQpFdnBNZEZyZWUgLT4gU2hhMjU2 RnJlZSwgU2hhMzg0RnJlZQ0KDQpXZSBjYW4gZG8gc2ltaWxhciB0aGluZyB3aXRoIEhtYWMsIHRv IGRlcHJlY2F0ZSBTaGEyNTZHZXRDb250ZXh0U2l6ZSgpIEFQSSwgYW5kIHJlcGxhY2UgY2FsbGVy IHdpdGggU2hhMjU2TmV3KCkgLyBTaGEzODRGcmVlKCkNCg0KVGhhbmsgeW91DQpZYW8gSmlld2Vu DQoNCg0KPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBMYXN6bG8gRXJzZWsg PGxlcnNla0ByZWRoYXQuY29tPg0KPiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJlciAxNiwgMjAy MCA5OjM2IFBNDQo+IFRvOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBkZXZl bEBlZGsyLmdyb3Vwcy5pbzsgWnVyY2hlciwNCj4gQ2hyaXN0b3BoZXIgSiA8Y2hyaXN0b3BoZXIu ai56dXJjaGVyQGludGVsLmNvbT4NCj4gQ2M6IFdhbmcsIEppYW4gSiA8amlhbi5qLndhbmdAaW50 ZWwuY29tPjsgTHUsIFhpYW95dVggPHhpYW95dXgubHVAaW50ZWwuY29tPg0KPiBTdWJqZWN0OiBS ZTogW2VkazItZGV2ZWxdIFtQQVRDSCB2MyAxLzNdIENyeXB0b1BrZy9CYXNlQ3J5cHRMaWI6IEFk ZCBFVlANCj4gKEVudmVsb3BlKSBEaWdlc3QgaW50ZXJmYWNlDQo+IA0KPiBPbiAwOS8xNi8yMCAx Mzo0NCwgWWFvLCBKaWV3ZW4gd3JvdGU6DQo+ID4gSGkgTGFzemxvDQo+ID4gSSBkaXNhZ3JlZSB0 byBwdXQgT1BUSU9OQUwgZm9yIERpZ2VzdFZhbHVlLCBqdXN0IGJlY2F1c2UgTlVMTCBpcyBjaGVj a2VkLg0KPiA+IElmIHdlIG5lZWQgZm9sbG93IHRoaXMsIHRoZW4gd2UgbmVlZCBhZGQgT1BUSU9O QUwgdG8gYWxtb3N0IGFsbCBwb2ludGVyLA0KPiB3aGljaCBpcyB1bm5lY2Vzc2FyeS4NCj4gDQo+ IEknbSBub3Qgc3VnZ2VzdGluZyBPUFRJT05BTCAqb25seSogYmVjYXVzZSBOVUxMIGlzIGNoZWNr ZWQuIEknbQ0KPiBzdWdnZXN0aW5nIE9QVElPTkFMIGJlY2F1c2UgdGhlcmUgaXMgYSBzcGVjaWZp YyB1c2UgY2FzZSByZWxhdGVkIHRvDQo+IHRoYXQuIFBsZWFzZSBzZWUgdGhlIGNvbW1lbnRzIG9u IHRoZSBmdW5jdGlvbjoNCj4gDQo+ICJJZiBEaWdlc3RWYWx1ZSBpcyBOVUxMLCBmcmVlIHRoZSBD b250ZXh0IHRoZW4gcmV0dXJuIEZBTFNFLiINCj4gDQo+IEJ1dCwgYW55d2F5LCBJIGRvbid0IGlu c2lzdC4gSXQncyBub3QgYSBodWdlIGRlYWwuIEZlZWwgZnJlZSB0byBpZ25vcmUNCj4gbXkgY29t bWVudCByZWdhcmRpbmcgT1BUSU9OQUwuDQo+IA0KPiBUaGFua3MNCj4gTGFzemxvDQo+IA0KPiAN Cj4gPg0KPiA+PiArQk9PTEVBTg0KPiA+PiArRUZJQVBJDQo+ID4+ICtFdnBNZEZpbmFsICgNCj4g Pj4gKyAgSU4gT1VUICBWT0lEICAgKkV2cE1kQ29udGV4dCwNCj4gPj4gKyAgT1VUICAgICBVSU5U OCAgKkRpZ2VzdFZhbHVlDQo+ID4NCj4gPiAoMykgRGlnZXN0VmFsdWUgc2hvdWxkIGJlIG1hcmtl ZCBPUFRJT05BTCBpbiBteSBvcGluaW9uLCBhcyBOVUxMIGlzDQo+ID4gZGVsaWJlcmF0ZWx5IHBl cm1pdHRlZCAoZm9yIGp1c3QgZnJlZWluZyB0aGUgY29udGV4dCkuDQo+ID4NCj4gPg0KPiA+DQo+ ID4NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPj4gRnJvbTogTGFzemxvIEVy c2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIg MTYsIDIwMjAgNzowNyBQTQ0KPiA+PiBUbzogZGV2ZWxAZWRrMi5ncm91cHMuaW87IFp1cmNoZXIs IENocmlzdG9waGVyIEoNCj4gPj4gPGNocmlzdG9waGVyLmouenVyY2hlckBpbnRlbC5jb20+DQo+ ID4+IENjOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRlbC5jb20+OyBXYW5nLCBKaWFuIEoN Cj4gPGppYW4uai53YW5nQGludGVsLmNvbT47DQo+ID4+IEx1LCBYaWFveXVYIDx4aWFveXV4Lmx1 QGludGVsLmNvbT4NCj4gPj4gU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0ggdjMgMS8z XSBDcnlwdG9Qa2cvQmFzZUNyeXB0TGliOiBBZGQgRVZQDQo+ID4+IChFbnZlbG9wZSkgRGlnZXN0 IGludGVyZmFjZQ0KPiA+Pg0KPiA+PiBIZWxsbyBDaHJpc3RvcGhlciwNCj4gPj4NCj4gPj4gT24g MDkvMTYvMjAgMDI6NTksIFp1cmNoZXIsIENocmlzdG9waGVyIEogd3JvdGU6DQo+ID4+PiBCWjog aHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0yNTQ1DQo+ID4+ Pg0KPiA+Pj4gVGhlIEVWUCBpbnRlcmZhY2Ugc2hvdWxkIGJlIHVzZWQgaW4gcGxhY2Ugb2YgZGlz Y3JldGUgZGlnZXN0IGZ1bmN0aW9uDQo+ID4+PiBjYWxscy4NCj4gPj4+DQo+ID4+PiBDYzogTGFz emxvIEVyc2VrIDxsZXJzZWtAcmVkaGF0LmNvbT4NCj4gPj4+IENjOiBKaWV3ZW4gWWFvIDxqaWV3 ZW4ueWFvQGludGVsLmNvbT4NCj4gPj4+IENjOiBKaWFuIEogV2FuZyA8amlhbi5qLndhbmdAaW50 ZWwuY29tPg0KPiA+Pj4gQ2M6IFhpYW95dSBMdSA8eGlhb3l1eC5sdUBpbnRlbC5jb20+DQo+ID4+ PiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RvcGhlciBKIFp1cmNoZXIgPGNocmlzdG9waGVyLmouenVy Y2hlckBpbnRlbC5jb20+DQo+ID4+PiAtLS0NCj4gPj4+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNl Q3J5cHRMaWIvQmFzZUNyeXB0TGliLmluZiAgICAgICAgIHwgICAxICsNCj4gPj4+ICBDcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mICAgICAgICAgIHwgICAxICsN Cj4gPj4+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUnVudGltZUNyeXB0TGliLmlu ZiAgICAgIHwgICAxICsNCj4gPj4+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21t Q3J5cHRMaWIuaW5mICAgICAgICAgIHwgICAxICsNCj4gPj4+ICBDcnlwdG9Qa2cvTGlicmFyeS9C YXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mIHwgICAxICsNCj4gPj4+ICBDcnlw dG9Qa2cvSW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oICAgICAgICAgICAgICAgIHwgMTI5 ICsrKysrKysrKysNCj4gPj4+ICBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvRXZwL0Ny eXB0RXZwTWQuYyAgICAgICAgIHwgMjU3DQo+ID4+ICsrKysrKysrKysrKysrKysrKysrDQo+ID4+ PiAgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9DcnlwdEV2cE1kTnVsbC5jICAg ICB8IDEyOA0KPiArKysrKysrKysrDQo+ID4+PiAgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliTnVsbC9FdnAvQ3J5cHRFdnBNZE51bGwuYyB8IDEyOA0KPiArKysrKysrKysrDQo+ID4+PiAg OSBmaWxlcyBjaGFuZ2VkLCA2NDcgaW5zZXJ0aW9ucygrKQ0KPiA+Pg0KPiA+PiBJIGFncmVlIHRo YXQgIkNyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvRXZwL0NyeXB0RXZwTWROdWxs LmMiDQo+ID4+IGlzIG5lY2Vzc2FyeS4gKElmIEkgdW5kZXJzdGFuZCBjb3JyZWN0bHksIHRoYXQg ZmlsZSB3YXMgbWlzc2luZyBmcm9tDQo+ID4+IHlvdXIgdjIgcG9zdGluZy4pDQo+ID4+DQo+ID4+ IEJ1dCAiQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9DcnlwdEV2cE1kTnVsbC5j IiBzZWVtcw0KPiA+PiBzdXBlcmZsdW91cy4gVGhpcyBmaWxlIGlzIG5ldmVyIHJlZmVyZW5jZWQg aW4gdGhlIElORiBmaWxlcy4NCj4gPj4NCj4gPj4gVGhlIHBvaW50IG9mIHRoaXMgZmlsZSB3b3Vs ZCBiZSB0byBhbGxvdyAqc29tZSogb2YgdGhlIEJhc2UgLyBQZWkgLw0KPiA+PiBSdW50aW1lIC8g U21tIGluc3RhbmNlcyB0byAic3R1YiBvdXQiIHRoZSBFVlAgTUQgZnVuY3Rpb25zIChpLmUuIHBy b3ZpZGUNCj4gPj4gb25seSBzdHViIGltcGxlbWVudGF0aW9ucykuIEJ1dCB0aGlzIGlzbid0IHdo YXQncyBoYXBwZW5pbmcgLS0gYWxsIG9mDQo+ID4+IHRoZSBCYXNlIC8gUGVpIC8gUnVudGltZSAv IFNtbSBpbnN0YW5jZXMgYXJlIGdldHRpbmcgdGhlIHJlYWwgZGVhbA0KPiA+PiAoIkNyeXB0b1Br Zy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9FdnAvQ3J5cHRFdnBNZC5jIikuDQo+ID4+DQo+ID4+ICgx KSBTbyBJIHRoaW5rICJDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvRXZwL0NyeXB0RXZw TWROdWxsLmMiDQo+ID4+IHNob3VsZCBiZSBkcm9wcGVkLiBPbmx5IHRoZSBOdWxsIGluc3RhbmNl IG9mIHRoZSBsaWJyYXJ5IG5lZWRzIG51bGwNCj4gPj4gdmVyc2lvbnMgb2YgdGhlIG5ldyBmdW5j dGlvbnMuIFRoZSBCYXNlIC8gUGVpIC8gUnVudGltZSAvIFNtbSBpbnN0YW5jZXMNCj4gPj4gZG9u J3QuDQo+ID4+DQo+ID4+Pg0KPiA+Pj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jh c2VDcnlwdExpYi9CYXNlQ3J5cHRMaWIuaW5mDQo+ID4+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFz ZUNyeXB0TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPj4+IGluZGV4IDRhYWUyYWJhOTUuLjM5Njhm Mjk0MTIgMTAwNjQ0DQo+ID4+PiAtLS0gYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIv QmFzZUNyeXB0TGliLmluZg0KPiA+Pj4gKysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliL0Jhc2VDcnlwdExpYi5pbmYNCj4gPj4+IEBAIC01MCw2ICs1MCw3IEBADQo+ID4+PiAgICBQ ay9DcnlwdEF1dGhlbnRpY29kZS5jDQo+ID4+PiAgICBQay9DcnlwdFRzLmMNCj4gPj4+ICAgIFBl bS9DcnlwdFBlbS5jDQo+ID4+PiArICBFdnAvQ3J5cHRFdnBNZC5jDQo+ID4+Pg0KPiA+Pj4gICAg U3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gPj4+ICAgIFN5c0NhbGwvVGltZXJXcmFwcGVyLmMNCj4g Pj4+IGRpZmYgLS1naXQgYS9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRM aWIuaW5mDQo+ID4+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGli LmluZg0KPiA+Pj4gaW5kZXggZGMyOGUzYTExZC4uZDBiOTE3MTZkMCAxMDA2NDQNCj4gPj4+IC0t LSBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYNCj4gPj4+ ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYNCj4g Pj4+IEBAIC01Nyw2ICs1Nyw3IEBADQo+ID4+PiAgICBQay9DcnlwdFRzTnVsbC5jDQo+ID4+PiAg ICBQZW0vQ3J5cHRQZW1OdWxsLmMNCj4gPj4+ICAgIFJhbmQvQ3J5cHRSYW5kTnVsbC5jDQo+ID4+ PiArICBFdnAvQ3J5cHRFdnBNZC5jDQo+ID4+Pg0KPiA+Pj4gICAgU3lzQ2FsbC9DcnRXcmFwcGVy LmMNCj4gPj4+ICAgIFN5c0NhbGwvQ29uc3RhbnRUaW1lQ2xvY2suYw0KPiA+Pj4gZGlmZiAtLWdp dCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9SdW50aW1lQ3J5cHRMaWIuaW5mDQo+ ID4+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1J1bnRpbWVDcnlwdExpYi5pbmYN Cj4gPj4+IGluZGV4IDUwMDViZWVkMDIuLjlmM2FjY2QzNWIgMTAwNjQ0DQo+ID4+PiAtLS0gYS9D cnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvUnVudGltZUNyeXB0TGliLmluZg0KPiA+Pj4g KysrIGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1J1bnRpbWVDcnlwdExpYi5pbmYN Cj4gPj4+IEBAIC01Niw2ICs1Niw3IEBADQo+ID4+PiAgICBQay9DcnlwdEF1dGhlbnRpY29kZU51 bGwuYw0KPiA+Pj4gICAgUGsvQ3J5cHRUc051bGwuYw0KPiA+Pj4gICAgUGVtL0NyeXB0UGVtLmMN Cj4gPj4+ICsgIEV2cC9DcnlwdEV2cE1kLmMNCj4gPj4+DQo+ID4+PiAgICBTeXNDYWxsL0NydFdy YXBwZXIuYw0KPiA+Pj4gICAgU3lzQ2FsbC9UaW1lcldyYXBwZXIuYw0KPiA+Pj4gZGlmZiAtLWdp dCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9TbW1DcnlwdExpYi5pbmYNCj4gPj4g Yi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+ID4+PiBp bmRleCA5MWVjM2UwM2JmLi40MjA2MjNjZGM2IDEwMDY0NA0KPiA+Pj4gLS0tIGEvQ3J5cHRvUGtn L0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0KPiA+Pj4gKysrIGIvQ3J5cHRv UGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0KPiA+Pj4gQEAgLTU0LDYg KzU0LDcgQEANCj4gPj4+ICAgIFBrL0NyeXB0QXV0aGVudGljb2RlTnVsbC5jDQo+ID4+PiAgICBQ ay9DcnlwdFRzTnVsbC5jDQo+ID4+PiAgICBQZW0vQ3J5cHRQZW0uYw0KPiA+Pj4gKyAgRXZwL0Ny eXB0RXZwTWQuYw0KPiA+Pj4NCj4gPj4+ICAgIFN5c0NhbGwvQ3J0V3JhcHBlci5jDQo+ID4+PiAg ICBTeXNDYWxsL0NvbnN0YW50VGltZUNsb2NrLmMNCj4gPj4+IGRpZmYgLS1naXQgYS9DcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jhc2VDcnlwdExpYk51bGwuaW5mDQo+ID4+IGIv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRMaWJOdWxsLmluZg0K PiA+Pj4gaW5kZXggNjg5YWY0ZmVkZC4uNTQyYWMyZTJlMSAxMDA2NDQNCj4gPj4+IC0tLSBhL0Ny eXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGliTnVsbC5pbmYNCj4g Pj4+ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0TGli TnVsbC5pbmYNCj4gPj4+IEBAIC01MCw2ICs1MCw3IEBADQo+ID4+PiAgICBQay9DcnlwdFRzTnVs bC5jDQo+ID4+PiAgICBQZW0vQ3J5cHRQZW1OdWxsLmMNCj4gPj4+ICAgIFJhbmQvQ3J5cHRSYW5k TnVsbC5jDQo+ID4+PiArICBFdnAvQ3J5cHRFdnBNZE51bGwuYw0KPiA+Pj4NCj4gPj4+ICBbUGFj a2FnZXNdDQo+ID4+PiAgICBNZGVQa2cvTWRlUGtnLmRlYw0KPiA+Pj4gZGlmZiAtLWdpdCBhL0Ny eXB0b1BrZy9JbmNsdWRlL0xpYnJhcnkvQmFzZUNyeXB0TGliLmgNCj4gPj4gYi9DcnlwdG9Qa2cv SW5jbHVkZS9MaWJyYXJ5L0Jhc2VDcnlwdExpYi5oDQo+ID4+PiBpbmRleCBhZTliZGU5ZTM3Li41 ZTFiNDA4YjU0IDEwMDY0NA0KPiA+Pj4gLS0tIGEvQ3J5cHRvUGtnL0luY2x1ZGUvTGlicmFyeS9C YXNlQ3J5cHRMaWIuaA0KPiA+Pj4gKysrIGIvQ3J5cHRvUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNl Q3J5cHRMaWIuaA0KPiA+Pj4gQEAgLTEwMTIsNiArMTAxMiwxMzUgQEAgSG1hY1NoYTI1NkZpbmFs ICgNCj4gPj4+ICAgIE9VVCAgICAgVUlOVDggICpIbWFjVmFsdWUNCj4gPj4+ICAgICk7DQo+ID4+ Pg0KPiA+Pj4NCj4gPj4NCj4gKy8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4gPj4gPT09PT09PT09PT09PT09PT09PT09PT0N Cj4gPj4+ICsvLyAgICBFVlAgKEVudmVsb3BlKSBQcmltaXRpdmUNCj4gPj4+DQo+ID4+DQo+ICsv Lz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQo+ID4+ID09PT09PT09PT09PT09PT09PT09PT09DQo+ID4+PiArDQo+ID4+PiArLyoq DQo+ID4+PiArICBBbGxvY2F0ZXMgYW5kIGluaXRpYWxpemVzIG9uZSBFVlBfTURfQ1RYIGNvbnRl eHQgZm9yIHN1YnNlcXVlbnQNCj4gRVZQX01EDQo+ID4+IHVzZS4NCj4gPj4+ICsNCj4gPj4+ICsg IElmIERpZ2VzdE5hbWUgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4+PiArDQo+ID4+ PiArICBAcGFyYW1baW5dICAgIERpZ2VzdE5hbWUgICAgUG9pbnRlciB0byB0aGUgZGlnZXN0IG5h bWUgYXMgYSBOVUxMLQ0KPiA+PiB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4gPj4+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBWYWxpZCBkaWdlc3QgbmFtZXMgYXJlOg0KPiA+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1ENSwgU0hBMSwgU0hBMjI0LCBTSEEyNTYs IFNIQTM4NCwgU0hBNTEyDQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hB My0yMjQsIFNIQTMtMjU2LCBTSEEzLTM4NCwgU0hBMy01MTINCj4gPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTTTMNCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR1cm4gIFBvaW50ZXIg dG8gdGhlIEVWUF9NRF9DVFggY29udGV4dCB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBhbmQNCj4g Pj4gaW5pdGlhbGl6ZWQuDQo+ID4+PiArICAgICAgICAgICBJZiBEaWdlc3ROYW1lIGlzIGludmFs aWQsIHJldHVybnMgTlVMTC4NCj4gPj4+ICsgICAgICAgICAgIElmIHRoZSBhbGxvY2F0aW9ucyBm YWlscywgcmV0dXJucyBOVUxMLg0KPiA+Pj4gKyAgICAgICAgICAgSWYgaW5pdGlhbGl6YXRpb24g ZmFpbHMsIHJldHVybnMgTlVMTC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtWT0lEICoN Cj4gPj4+ICtFRklBUEkNCj4gPj4+ICtFdnBNZEluaXQgKA0KPiA+Pj4gKyAgSU4gIENPTlNUIENI QVI4ICAgKkRpZ2VzdE5hbWUNCj4gPj4+ICsgICk7DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+ PiArICBNYWtlcyBhIGNvcHkgb2YgYW4gZXhpc3RpbmcgRVZQX01EIGNvbnRleHQuDQo+ID4+PiAr DQo+ID4+PiArICBJZiBFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ ID4+PiArICBJZiBOZXdFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICBFdnBNZENvbnRleHQgICAgIFBvaW50ZXIgdG8g RVZQX01EIGNvbnRleHQgYmVpbmcgY29waWVkLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gTmV3RXZw TWRDb250ZXh0ICBQb2ludGVyIHRvIG5ldyBFVlBfTUQgY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ ICsgIEByZXR2YWwgVFJVRSAgIEVWUF9NRCBjb250ZXh0IGNvcHkgc3VjY2VlZGVkLg0KPiA+Pj4g KyAgQHJldHZhbCBGQUxTRSAgRVZQX01EIGNvbnRleHQgY29weSBmYWlsZWQuDQo+ID4+PiArDQo+ ID4+PiArKiovDQo+ID4+PiArQk9PTEVBTg0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0V2cE1kRHVw bGljYXRlICgNCj4gPj4+ICsgIElOICBDT05TVCBWT0lEICAgICpFdnBNZENvbnRleHQsDQo+ID4+ PiArICBPVVQgVk9JRCAgICAgICAgICAqTmV3RXZwTWRDb250ZXh0DQo+ID4+PiArICApOw0KPiA+ Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgRGlnZXN0cyB0aGUgaW5wdXQgZGF0YSBhbmQgdXBk YXRlcyBFVlBfTUQgY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ICsgIFRoaXMgZnVuY3Rpb24gcGVy Zm9ybXMgRVZQIGRpZ2VzdCBvbiBhIGRhdGEgYnVmZmVyIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4N Cj4gPj4+ICsgIEl0IGNhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMgdG8gY29tcHV0ZSB0aGUg ZGlnZXN0IG9mIGxvbmcgb3INCj4gPj4gZGlzY29udGludW91cyBkYXRhIHN0cmVhbXMuDQo+ID4+ PiArICBFVlBfTUQgY29udGV4dCBzaG91bGQgYmUgYWxyZWFkeSBjb3JyZWN0bHkgaW5pdGlhbGl6 ZWQgYnkgRXZwTWRJbml0KCksDQo+IGFuZA0KPiA+PiBzaG91bGQgbm90DQo+ID4+PiArICBiZSBm aW5hbGl6ZWQgYnkgRXZwTWRGaW5hbCgpLiBCZWhhdmlvciB3aXRoIGludmFsaWQgY29udGV4dCBp cyB1bmRlZmluZWQuDQo+ID4+PiArDQo+ID4+PiArICBJZiBFdnBNZENvbnRleHQgaXMgTlVMTCwg dGhlbiByZXR1cm4gRkFMU0UuDQo+ID4+PiArICBJZiBEYXRhIGlzIE5VTEwgYW5kIERhdGFTaXpl IGlzIG5vdCB6ZXJvLCByZXR1cm4gRkFMU0UuDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW4s IG91dF0gIEV2cE1kQ29udGV4dCAgICAgICBQb2ludGVyIHRvIHRoZSBFVlBfTUQgY29udGV4dC4N Cj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgRGF0YSAgICAgICAgICAgICAgIFBvaW50ZXIgdG8g dGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIHRvDQo+IGJlDQo+ID4+IGRpZ2VzdGVkLg0K PiA+Pj4gKyAgQHBhcmFtW2luXSAgICAgICBEYXRhU2l6ZSAgICAgICAgICAgU2l6ZSBvZiBEYXRh IGJ1ZmZlciBpbiBieXRlcy4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwgVFJVRSAgIEVWUCBk YXRhIGRpZ2VzdCBzdWNjZWVkZWQuDQo+ID4+PiArICBAcmV0dmFsIEZBTFNFICBFVlAgZGF0YSBk aWdlc3QgZmFpbGVkLg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0JPT0xFQU4NCj4gPj4+ ICtFRklBUEkNCj4gPj4+ICtFdnBNZFVwZGF0ZSAoDQo+ID4+PiArICBJTiBPVVQgIFZPSUQgICAg ICAgICpFdnBNZENvbnRleHQsDQo+ID4+PiArICBJTiAgICAgIENPTlNUIFZPSUQgICpEYXRhLA0K PiA+Pj4gKyAgSU4gICAgICBVSU5UTiAgICAgICBEYXRhU2l6ZQ0KPiA+Pj4gKyAgKTsNCj4gPj4+ ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIENvbXBsZXRlcyBjb21wdXRhdGlvbiBvZiB0aGUgRVZQ IGRpZ2VzdCB2YWx1ZS4NCj4gPj4+ICsgIFJlbGVhc2VzIHRoZSBzcGVjaWZpZWQgRVZQX01EX0NU WCBjb250ZXh0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgVGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMgRVZQ IGhhc2ggY29tcHV0YXRpb24gYW5kIHJldHJpZXZlcyB0aGUgZGlnZXN0DQo+ID4+IHZhbHVlIGlu dG8NCj4gPj4+ICsgIHRoZSBzcGVjaWZpZWQgbWVtb3J5LiBBZnRlciB0aGlzIGZ1bmN0aW9uIGhh cyBiZWVuIGNhbGxlZCwgdGhlIEVWUCBjb250ZXh0DQo+ID4+IGNhbm5vdA0KPiA+Pj4gKyAgYmUg dXNlZCBhZ2Fpbi4NCj4gPj4+ICsgIEVWUCBjb250ZXh0IHNob3VsZCBiZSBhbHJlYWR5IGNvcnJl Y3RseSBpbml0aWFsaXplZCBieSBFdnBNZEluaXQoKSwgYW5kDQo+ID4+IHNob3VsZA0KPiA+Pj4g KyAgbm90IGJlIGZpbmFsaXplZCBieSBFdnBNZEZpbmFsKCkuIEJlaGF2aW9yIHdpdGggaW52YWxp ZCBFVlAgY29udGV4dCBpcw0KPiA+PiB1bmRlZmluZWQuDQo+ID4+PiArDQo+ID4+PiArICBJZiBF dnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4+PiArICBJZiBEaWdl c3RWYWx1ZSBpcyBOVUxMLCBmcmVlIHRoZSBDb250ZXh0IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luLCBvdXRdICBFdnBNZENvbnRleHQgICBQb2ludGVyIHRv IHRoZSBFVlAgY29udGV4dC4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAgRGlnZXN0ICAgICAg ICAgUG9pbnRlciB0byBhIGJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRoZSBFVlANCj4gZGlnZXN0DQo+ ID4+IHZhbHVlLg0KPiA+Pg0KPiA+PiAoMikgUGxlYXNlIGV4dGVuZCB0aGUgY29tbWVudCBvbiBE aWdlc3Qgd2l0aCB0aGUgZm9sbG93aW5nOg0KPiA+Pg0KPiA+PiAgIFRoZSBjYWxsZXIgaXMgcmVz cG9uc2libGUgZm9yIHByb3ZpZGluZyBlbm91Z2ggc3RvcmFnZSBmb3IgdGhlIGRpZ2VzdA0KPiA+ PiAgIGFsZ29yaXRobSBzZWxlY3RlZCB3aXRoIEV2cE1kSW5pdCgpLiBQcm92aWRpbmcgRVZQX01B WF9NRF9TSVpFIGJ5dGVzDQo+ID4+ICAgd2lsbCBzdWZmaWNlIGZvciBzdG9yaW5nIHRoZSBkaWdl c3QgcmVnYXJkbGVzcyBvZiB0aGUgYWxnb3JpdGhtIGNob3Nlbg0KPiA+PiAgIGluIEV2cE1kSW5p dCgpLg0KPiA+Pg0KPiA+PiAoRVZQX01BWF9NRF9TSVpFIGlzIGEgcHVibGljIE9wZW5TU0wgbWFj cm8gYW5kIEkgdGhpbmsgd2Ugc2hvdWxkIG9wZW5seQ0KPiA+PiBhZHZlcnRpc2UgaXQgdG8gY29u c3VtZXJzIGluIGVkazIuKQ0KPiA+Pg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBUUlVFICAg RVZQIGRpZ2VzdCBjb21wdXRhdGlvbiBzdWNjZWVkZWQuDQo+ID4+PiArICBAcmV0dmFsIEZBTFNF ICBFVlAgZGlnZXN0IGNvbXB1dGF0aW9uIGZhaWxlZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4g Pj4+ICtCT09MRUFODQo+ID4+PiArRUZJQVBJDQo+ID4+PiArRXZwTWRGaW5hbCAoDQo+ID4+PiAr ICBJTiBPVVQgIFZPSUQgICAqRXZwTWRDb250ZXh0LA0KPiA+Pj4gKyAgT1VUICAgICBVSU5UOCAg KkRpZ2VzdFZhbHVlDQo+ID4+DQo+ID4+ICgzKSBEaWdlc3RWYWx1ZSBzaG91bGQgYmUgbWFya2Vk IE9QVElPTkFMIGluIG15IG9waW5pb24sIGFzIE5VTEwgaXMNCj4gPj4gZGVsaWJlcmF0ZWx5IHBl cm1pdHRlZCAoZm9yIGp1c3QgZnJlZWluZyB0aGUgY29udGV4dCkuDQo+ID4+DQo+ID4+PiArICAp Ow0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQ29tcHV0ZXMgdGhlIG1lc3NhZ2UgZGln ZXN0IG9mIGFuIGlucHV0IGRhdGEgYnVmZmVyLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgVGhpcyBmdW5j dGlvbiBwZXJmb3JtcyB0aGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBnaXZlbiBkYXRhIGJ1ZmZlciwg YW5kDQo+IHBsYWNlcw0KPiA+Pj4gKyAgdGhlIGRpZ2VzdCB2YWx1ZSBpbnRvIHRoZSBzcGVjaWZp ZWQgbWVtb3J5Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgSWYgRGlnZXN0TmFtZSBpcyBOVUxMLCByZXR1 cm4gRkFMU0UuDQo+ID4+PiArICBJZiBEYXRhIGlzIE5VTEwgYW5kIERhdGFTaXplIGlzIG5vdCB6 ZXJvLCByZXR1cm4gRkFMU0UuDQo+ID4+PiArICBJZiBIYXNoVmFsdWUgaXMgTlVMTCwgcmV0dXJu IEZBTFNFLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICBEaWdlc3ROYW1lICAgIFBv aW50ZXIgdG8gdGhlIGRpZ2VzdCBuYW1lLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICBEYXRhICAg ICAgICAgIFBvaW50ZXIgdG8gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJlDQo+ ID4+IGhhc2hlZC4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgRGF0YVNpemUgICAgICBTaXplIG9m IERhdGEgYnVmZmVyIGluIGJ5dGVzLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICBIYXNoVmFsdWUg ICAgIFBvaW50ZXIgdG8gYSBidWZmZXIgdGhhdCByZWNlaXZlcyB0aGUgZGlnZXN0DQo+ID4+IHZh bHVlLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBUUlVFICAgRGlnZXN0IGNvbXB1dGF0aW9u IHN1Y2NlZWRlZC4NCj4gPj4+ICsgIEByZXR2YWwgRkFMU0UgIERpZ2VzdCBjb21wdXRhdGlvbiBm YWlsZWQuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArQk9PTEVBTg0KPiA+Pj4gK0VGSUFQ SQ0KPiA+Pj4gK0V2cE1kSGFzaEFsbCAoDQo+ID4+PiArICBJTiAgQ09OU1QgQ0hBUjggICAqRGln ZXN0TmFtZSwNCj4gPj4+ICsgIElOICBDT05TVCBWT0lEICAgICpEYXRhLA0KPiA+Pj4gKyAgSU4g IFVJTlROICAgICAgICAgRGF0YVNpemUsDQo+ID4+PiArICBPVVQgVUlOVDggICAgICAgICAqSGFz aFZhbHVlDQo+ID4+PiArICApOw0KPiA+Pj4gKw0KPiA+Pj4NCj4gPj4NCj4gLy89PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCj4g Pj4gPT09PT09PT09PT09PT09PT09PT09PQ0KPiA+Pj4gIC8vICAgIFN5bW1ldHJpYyBDcnlwdG9n cmFwaHkgUHJpbWl0aXZlDQo+ID4+Pg0KPiA+Pg0KPiAvLz09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+PiA9PT09PT09PT09 PT09PT09PT09PT09DQo+ID4+PiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNy eXB0TGliL0V2cC9DcnlwdEV2cE1kLmMNCj4gPj4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5 cHRMaWIvRXZwL0NyeXB0RXZwTWQuYw0KPiA+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+ IGluZGV4IDAwMDAwMDAwMDAuLmIyNzcwYTkxODYNCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ ICsrKyBiL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9FdnAvQ3J5cHRFdnBNZC5jDQo+ ID4+PiBAQCAtMCwwICsxLDI1NyBAQA0KPiA+Pj4gKy8qKiBAZmlsZQ0KPiA+Pj4gKyAgRVZQIE1E IFdyYXBwZXIgSW1wbGVtZW50YXRpb24gZm9yIE9wZW5TU0wuDQo+ID4+PiArDQo+ID4+PiArQ29w eXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48 QlI+DQo+ID4+PiArU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQN Cj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICsNCj4gPj4+ICsjaW5jbHVkZSAiSW50ZXJuYWxD cnlwdExpYi5oIg0KPiA+Pj4gKyNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPg0KPiA+Pj4gKw0KPiA+ Pj4gKy8qKg0KPiA+Pj4gKyAgQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBvbmUgRVZQX01EX0NU WCBjb250ZXh0IGZvciBzdWJzZXF1ZW50DQo+IEVWUF9NRA0KPiA+PiB1c2UuDQo+ID4+PiArDQo+ ID4+PiArICBJZiBEaWdlc3ROYW1lIGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+Pj4g Kw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICBEaWdlc3ROYW1lICAgIFBvaW50ZXIgdG8gdGhlIGRp Z2VzdCBuYW1lIGFzIGEgTlVMTC0NCj4gPj4gdGVybWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+ID4+ PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmFsaWQgZGlnZXN0IG5hbWVzIGFyZToN Cj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNRDUsIFNIQTEsIFNIQTIyNCwg U0hBMjU2LCBTSEEzODQsIFNIQTUxMg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNIQTMtMjI0LCBTSEEzLTI1NiwgU0hBMy0zODQsIFNIQTMtNTEyDQo+ID4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU00zDQo+ID4+PiArDQo+ID4+PiArICBAcmV0dXJuICBQ b2ludGVyIHRvIHRoZSBFVlBfTURfQ1RYIGNvbnRleHQgdGhhdCBoYXMgYmVlbiBhbGxvY2F0ZWQg YW5kDQo+ID4+IGluaXRpYWxpemVkLg0KPiA+Pj4gKyAgICAgICAgICAgSWYgRGlnZXN0TmFtZSBp cyBpbnZhbGlkLCByZXR1cm5zIE5VTEwuDQo+ID4+PiArICAgICAgICAgICBJZiB0aGUgYWxsb2Nh dGlvbnMgZmFpbHMsIHJldHVybnMgTlVMTC4NCj4gPj4+ICsgICAgICAgICAgIElmIGluaXRpYWxp emF0aW9uIGZhaWxzLCByZXR1cm5zIE5VTEwuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiAr Vk9JRCAqDQo+ID4+PiArRUZJQVBJDQo+ID4+PiArRXZwTWRJbml0ICgNCj4gPj4+ICsgIElOICBD T05TVCBDSEFSOCAgICpEaWdlc3ROYW1lDQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAg RVZQX01EICAgICpEaWdlc3Q7DQo+ID4+PiArICBWT0lEICAgICAgKkV2cE1kQ29udGV4dDsNCj4g Pj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJzLg0K PiA+Pj4gKyAgLy8NCj4gPj4+ICsgIGlmIChEaWdlc3ROYW1lID09IE5VTEwpIHsNCj4gPj4+ICsg ICAgcmV0dXJuIE5VTEw7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiArICAvLw0KPiA+Pj4g KyAgLy8gQWxsb2NhdGUgRVZQX01EX0NUWCBDb250ZXh0DQo+ID4+PiArICAvLw0KPiA+Pj4gKyAg RXZwTWRDb250ZXh0ID0gRVZQX01EX0NUWF9uZXcgKCk7DQo+ID4+PiArICBpZiAoRXZwTWRDb250 ZXh0ID09IE5VTEwpIHsNCj4gPj4+ICsgICAgcmV0dXJuIE5VTEw7DQo+ID4+PiArICB9DQo+ID4+ PiArDQo+ID4+PiArICBEaWdlc3QgPSBFVlBfZ2V0X2RpZ2VzdGJ5bmFtZSAoRGlnZXN0TmFtZSk7 DQo+ID4+DQo+ID4+IEkgdGhpbmsgdGhpcyBtYXkgbm90IGNvbXBpbGUgd2l0aCBnY2MgKGFuZCBj b3JyZWN0bHkgc28pLiBUaGUgcG9pbnRlcg0KPiA+PiByZXR1cm5lZCBieSBFVlBfZ2V0X2RpZ2Vz dGJ5bmFtZSgpIGlzIGNvbnN0LXF1YWxpZmllZCwgYnV0IHdpdGggdGhlDQo+ID4+IGFzc2lnbm1l bnQsIHdlJ3JlIHRocm93aW5nIGF3YXkgdGhlIGNvbnN0LW5lc3MuDQo+ID4+DQo+ID4+ICg0KSBQ bGVhc2UgY29uc3QtcXVhbGlmeSB0aGUgIkRpZ2VzdCIgbG9jYWwgcG9pbnRlci4NCj4gPj4NCj4g Pj4+ICsgIGlmIChEaWdlc3QgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICByZXR1cm4gTlVMTDsNCj4g Pj4+ICsgIH0NCj4gPj4NCj4gPj4gKDUpIFRoaXMgaXMgYSBtZW1vcnkgbGVhayBJIGJlbGlldmU7 ICJFdnBNZENvbnRleHQiIGlzIGxlYWtlZC4NCj4gPj4NCj4gPj4gRm9yIGtlZXBpbmcgdGhlIGNv bnRyb2wgZmxvdyBzaW1wbGUsIGNvbnNpZGVyIG1vdmluZw0KPiA+PiBFVlBfZ2V0X2RpZ2VzdGJ5 bmFtZSgpIGFib3ZlIEVWUF9NRF9DVFhfbmV3KCkuDQo+ID4+DQo+ID4+PiArDQo+ID4+PiArICAv Lw0KPiA+Pj4gKyAgLy8gSW5pdGlhbGl6ZSBDb250ZXh0DQo+ID4+PiArICAvLw0KPiA+Pj4gKyAg aWYgKEVWUF9EaWdlc3RJbml0X2V4IChFdnBNZENvbnRleHQsIERpZ2VzdCwgTlVMTCkgIT0gMSkg ew0KPiA+Pj4gKyAgICBFVlBfTURfQ1RYX2ZyZWUgKEV2cE1kQ29udGV4dCk7DQo+ID4+PiArICAg IHJldHVybiBOVUxMOw0KPiA+Pj4gKyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgcmV0dXJuIEV2cE1k Q29udGV4dDsNCj4gPj4+ICt9DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBNYWtlcyBh IGNvcHkgb2YgYW4gZXhpc3RpbmcgRVZQX01EIGNvbnRleHQuDQo+ID4+PiArDQo+ID4+PiArICBJ ZiBFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4+PiArICBJZiBO ZXdFdnBNZENvbnRleHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4+PiArDQo+ID4+ PiArICBAcGFyYW1baW5dICBFdnBNZENvbnRleHQgICAgIFBvaW50ZXIgdG8gRVZQX01EIGNvbnRl eHQgYmVpbmcgY29waWVkLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gTmV3RXZwTWRDb250ZXh0ICBQ b2ludGVyIHRvIG5ldyBFVlBfTUQgY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ICsgIEByZXR2YWwg VFJVRSAgIEVWUF9NRCBjb250ZXh0IGNvcHkgc3VjY2VlZGVkLg0KPiA+Pj4gKyAgQHJldHZhbCBG QUxTRSAgRVZQX01EIGNvbnRleHQgY29weSBmYWlsZWQuDQo+ID4+PiArDQo+ID4+PiArKiovDQo+ ID4+PiArQk9PTEVBTg0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0V2cE1kRHVwbGljYXRlICgNCj4g Pj4+ICsgIElOICBDT05TVCBWT0lEICAgICpFdnBNZENvbnRleHQsDQo+ID4+PiArICBPVVQgVk9J RCAgICAgICAgICAqTmV3RXZwTWRDb250ZXh0DQo+ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4g KyAgLy8NCj4gPj4+ICsgIC8vIENoZWNrIGlucHV0IHBhcmFtZXRlcnMuDQo+ID4+PiArICAvLw0K PiA+Pj4gKyAgaWYgKEV2cE1kQ29udGV4dCA9PSBOVUxMIHx8IE5ld0V2cE1kQ29udGV4dCA9PSBO VUxMKSB7DQo+ID4+PiArICAgIHJldHVybiBGQUxTRTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4g Pj4+ICsgIGlmIChFVlBfTURfQ1RYX2NvcHkgKE5ld0V2cE1kQ29udGV4dCwgRXZwTWRDb250ZXh0 KSAhPSAxKSB7DQo+ID4+PiArICAgIHJldHVybiBGQUxTRTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsN Cj4gPj4+ICsgIHJldHVybiBUUlVFOw0KPiA+Pj4gK30NCj4gPj4NCj4gPj4gKDYpIENhbiB5b3Ug cGxlYXNlIGNvbmZpcm0gdGhhdCB0aGUgY2FsbGVyIGlzIHN1cHBvc2VkIHRvIGluaXRpYWxpemUN Cj4gPj4gIk5ld0V2cE1kQ29udGV4dCIgd2l0aCBFdnBNZEluaXQoKSBmaXJzdCwgYmVmb3JlIGNh bGxpbmcgRXZwTWREdXBsaWNhdGUoKT8NCj4gPj4NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ ICsgIERpZ2VzdHMgdGhlIGlucHV0IGRhdGEgYW5kIHVwZGF0ZXMgRVZQX01EIGNvbnRleHQuDQo+ ID4+PiArDQo+ID4+PiArICBUaGlzIGZ1bmN0aW9uIHBlcmZvcm1zIEVWUCBkaWdlc3Qgb24gYSBk YXRhIGJ1ZmZlciBvZiB0aGUgc3BlY2lmaWVkIHNpemUuDQo+ID4+PiArICBJdCBjYW4gYmUgY2Fs bGVkIG11bHRpcGxlIHRpbWVzIHRvIGNvbXB1dGUgdGhlIGRpZ2VzdCBvZiBsb25nIG9yDQo+ID4+ IGRpc2NvbnRpbnVvdXMgZGF0YSBzdHJlYW1zLg0KPiA+Pj4gKyAgRVZQX01EIGNvbnRleHQgc2hv dWxkIGJlIGFscmVhZHkgY29ycmVjdGx5IGluaXRpYWxpemVkIGJ5IEV2cE1kSW5pdCgpLA0KPiBh bmQNCj4gPj4gc2hvdWxkIG5vdA0KPiA+Pj4gKyAgYmUgZmluYWxpemVkIGJ5IEV2cE1kRmluYWwo KS4gQmVoYXZpb3Igd2l0aCBpbnZhbGlkIGNvbnRleHQgaXMgdW5kZWZpbmVkLg0KPiA+Pj4gKw0K PiA+Pj4gKyAgSWYgRXZwTWRDb250ZXh0IGlzIE5VTEwsIHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+ Pj4gKyAgSWYgRGF0YSBpcyBOVUxMIGFuZCBEYXRhU2l6ZSBpcyBub3QgemVybywgcmV0dXJuIEZB TFNFLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luLCBvdXRdICBFdnBNZENvbnRleHQgICAg ICAgUG9pbnRlciB0byB0aGUgRVZQX01EIGNvbnRleHQuDQo+ID4+PiArICBAcGFyYW1baW5dICAg ICAgIERhdGEgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0 aGUgZGF0YSB0bw0KPiBiZQ0KPiA+PiBkaWdlc3RlZC4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAg ICAgRGF0YVNpemUgICAgICAgICAgIFNpemUgb2YgRGF0YSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4+ PiArDQo+ID4+PiArICBAcmV0dmFsIFRSVUUgICBFVlAgZGF0YSBkaWdlc3Qgc3VjY2VlZGVkLg0K PiA+Pj4gKyAgQHJldHZhbCBGQUxTRSAgRVZQIGRhdGEgZGlnZXN0IGZhaWxlZC4NCj4gPj4+ICsN Cj4gPj4+ICsqKi8NCj4gPj4+ICtCT09MRUFODQo+ID4+PiArRUZJQVBJDQo+ID4+PiArRXZwTWRV cGRhdGUgKA0KPiA+Pj4gKyAgSU4gT1VUICBWT0lEICAgICAgICAqRXZwTWRDb250ZXh0LA0KPiA+ Pj4gKyAgSU4gICAgICBDT05TVCBWT0lEICAqRGF0YSwNCj4gPj4+ICsgIElOICAgICAgVUlOVE4g ICAgICAgRGF0YVNpemUNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICAvLw0KPiA+Pj4g KyAgLy8gQ2hlY2sgaW5wdXQgcGFyYW1ldGVycy4NCj4gPj4+ICsgIC8vDQo+ID4+PiArICBpZiAo RXZwTWRDb250ZXh0ID09IE5VTEwpIHsNCj4gPj4+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+Pj4g KyAgfQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIENoZWNrIGludmFsaWQgcGFy YW1ldGVycywgaW4gY2FzZSBvbmx5IERhdGFMZW5ndGggd2FzIGNoZWNrZWQgaW4NCj4gPj4gT3Bl blNTTA0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIGlmIChEYXRhID09IE5VTEwgJiYgRGF0YVNpemUg IT0gMCkgew0KPiA+Pj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ ID4+PiArICAvLw0KPiA+Pj4gKyAgLy8gT3BlblNTTCBFVlAgZGlnZXN0IHVwZGF0ZQ0KPiA+Pj4g KyAgLy8NCj4gPj4+ICsgIGlmIChFVlBfRGlnZXN0VXBkYXRlIChFdnBNZENvbnRleHQsIERhdGEs IERhdGFTaXplKSAhPSAxKSB7DQo+ID4+PiArICAgIHJldHVybiBGQUxTRTsNCj4gPj4+ICsgIH0N Cj4gPj4+ICsNCj4gPj4+ICsgIHJldHVybiBUUlVFOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ ICsvKioNCj4gPj4+ICsgIENvbXBsZXRlcyBjb21wdXRhdGlvbiBvZiB0aGUgRVZQIGRpZ2VzdCB2 YWx1ZS4NCj4gPj4+ICsgIFJlbGVhc2VzIHRoZSBzcGVjaWZpZWQgRVZQX01EX0NUWCBjb250ZXh0 Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgVGhpcyBmdW5jdGlvbiBjb21wbGV0ZXMgRVZQIGhhc2ggY29t cHV0YXRpb24gYW5kIHJldHJpZXZlcyB0aGUgZGlnZXN0DQo+ID4+IHZhbHVlIGludG8NCj4gPj4+ ICsgIHRoZSBzcGVjaWZpZWQgbWVtb3J5LiBBZnRlciB0aGlzIGZ1bmN0aW9uIGhhcyBiZWVuIGNh bGxlZCwgdGhlIEVWUCBjb250ZXh0DQo+ID4+IGNhbm5vdA0KPiA+Pj4gKyAgYmUgdXNlZCBhZ2Fp bi4NCj4gPj4+ICsgIEVWUCBjb250ZXh0IHNob3VsZCBiZSBhbHJlYWR5IGNvcnJlY3RseSBpbml0 aWFsaXplZCBieSBFdnBNZEluaXQoKSwgYW5kDQo+ID4+IHNob3VsZA0KPiA+Pj4gKyAgbm90IGJl IGZpbmFsaXplZCBieSBFdnBNZEZpbmFsKCkuIEJlaGF2aW9yIHdpdGggaW52YWxpZCBFVlAgY29u dGV4dCBpcw0KPiA+PiB1bmRlZmluZWQuDQo+ID4+PiArDQo+ID4+PiArICBJZiBFdnBNZENvbnRl eHQgaXMgTlVMTCwgdGhlbiByZXR1cm4gRkFMU0UuDQo+ID4+PiArICBJZiBEaWdlc3RWYWx1ZSBp cyBOVUxMLCBmcmVlIHRoZSBDb250ZXh0IHRoZW4gcmV0dXJuIEZBTFNFLg0KPiA+Pj4gKw0KPiA+ Pj4gKyAgQHBhcmFtW2luLCBvdXRdICBFdnBNZENvbnRleHQgICBQb2ludGVyIHRvIHRoZSBFVlAg Y29udGV4dC4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAgRGlnZXN0ICAgICAgICAgUG9pbnRl ciB0byBhIGJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRoZSBFVlANCj4gZGlnZXN0DQo+ID4+IHZhbHVl Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBUUlVFICAgRVZQIGRpZ2VzdCBjb21wdXRhdGlv biBzdWNjZWVkZWQuDQo+ID4+PiArICBAcmV0dmFsIEZBTFNFICBFVlAgZGlnZXN0IGNvbXB1dGF0 aW9uIGZhaWxlZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtCT09MRUFODQo+ID4+PiAr RUZJQVBJDQo+ID4+PiArRXZwTWRGaW5hbCAoDQo+ID4+PiArICBJTiBPVVQgIFZPSUQgICAqRXZw TWRDb250ZXh0LA0KPiA+Pj4gKyAgT1VUICAgICBVSU5UOCAgKkRpZ2VzdFZhbHVlDQo+ID4+PiAr ICApDQo+ID4+PiArew0KPiA+Pj4gKyAgVUlOVDMyICAgIExlbmd0aDsNCj4gPj4+ICsgIEJPT0xF QU4gICBSZXR1cm5WYWx1ZTsNCj4gPj4+ICsNCj4gPj4+ICsgIFJldHVyblZhbHVlID0gVFJVRTsN Cj4gPj4+ICsNCj4gPj4+ICsgIC8vDQo+ID4+PiArICAvLyBDaGVjayBpbnB1dCBwYXJhbWV0ZXJz Lg0KPiA+Pj4gKyAgLy8NCj4gPj4+ICsgIGlmIChFdnBNZENvbnRleHQgPT0gTlVMTCkgew0KPiA+ Pj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4+PiArICB9DQo+ID4+PiArICBpZiAoRGlnZXN0VmFs dWUgPT0gTlVMTCkgew0KPiA+Pj4gKyAgICBFVlBfTURfQ1RYX2ZyZWUgKEV2cE1kQ29udGV4dCk7 DQo+ID4+PiArICAgIHJldHVybiBGQUxTRTsNCj4gPj4+ICsgIH0NCj4gPj4+ICsNCj4gPj4+ICsg IC8vDQo+ID4+PiArICAvLyBPcGVuU1NMIEVWUCBkaWdlc3QgZmluYWxpemF0aW9uDQo+ID4+PiAr ICAvLw0KPiA+Pj4gKyAgaWYgKEVWUF9EaWdlc3RGaW5hbF9leCAoRXZwTWRDb250ZXh0LCBEaWdl c3RWYWx1ZSwgJkxlbmd0aCkgIT0gMSkgew0KPiA+Pj4gKyAgICBSZXR1cm5WYWx1ZSA9IEZBTFNF Ow0KPiA+Pj4gKyAgfQ0KPiA+Pg0KPiA+Pg0KPiA+PiAoNykgSSBzdWdnZXN0IGRyb3BwaW5nIHRo ZSAiTGVuZ3RoIiBsb2NhbCB2YXJpYWJsZS4gRVZQX0RpZ2VzdEZpbmFsX2V4KCkNCj4gPj4gZGVh bHMgZmluZSB3aXRoIHRoZSB0aGlyZCBwYXJhbWV0ZXIgYmVpbmcgTlVMTCwgYWNjb3JkaW5nIHRv IHRoZSBkb2NzDQo+ID4+IChhbmQgdGhlIGNvZGUpLg0KPiA+Pg0KPiA+Pg0KPiA+Pj4gKw0KPiA+ Pj4gKyAgLy8NCj4gPj4+ICsgIC8vIEZyZWUgT3BlblNTTCBFVlBfTURfQ1RYIENvbnRleHQNCj4g Pj4+ICsgIC8vDQo+ID4+PiArICBFVlBfTURfQ1RYX2ZyZWUgKEV2cE1kQ29udGV4dCk7DQo+ID4+ PiArDQo+ID4+PiArICByZXR1cm4gUmV0dXJuVmFsdWU7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+ Pj4gKy8qKg0KPiA+Pj4gKyAgQ29tcHV0ZXMgdGhlIG1lc3NhZ2UgZGlnZXN0IG9mIGFuIGlucHV0 IGRhdGEgYnVmZmVyLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgVGhpcyBmdW5jdGlvbiBwZXJmb3JtcyB0 aGUgbWVzc2FnZSBkaWdlc3Qgb2YgYSBnaXZlbiBkYXRhIGJ1ZmZlciwgYW5kDQo+IHBsYWNlcw0K PiA+Pj4gKyAgdGhlIGRpZ2VzdCB2YWx1ZSBpbnRvIHRoZSBzcGVjaWZpZWQgbWVtb3J5Lg0KPiA+ Pj4gKw0KPiA+Pj4gKyAgSWYgRGlnZXN0TmFtZSBpcyBOVUxMLCByZXR1cm4gRkFMU0UuDQo+ID4+ PiArICBJZiBEYXRhIGlzIE5VTEwgYW5kIERhdGFTaXplIGlzIG5vdCB6ZXJvLCByZXR1cm4gRkFM U0UuDQo+ID4+PiArICBJZiBIYXNoVmFsdWUgaXMgTlVMTCwgcmV0dXJuIEZBTFNFLg0KPiA+Pj4g Kw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICBEaWdlc3ROYW1lICAgIFBvaW50ZXIgdG8gdGhlIGRp Z2VzdCBuYW1lLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICBEYXRhICAgICAgICAgIFBvaW50ZXIg dG8gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBkYXRhIHRvIGJlDQo+ID4+IGhhc2hlZC4NCj4g Pj4+ICsgIEBwYXJhbVtpbl0gICAgRGF0YVNpemUgICAgICBTaXplIG9mIERhdGEgYnVmZmVyIGlu IGJ5dGVzLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gICBIYXNoVmFsdWUgICAgIFBvaW50ZXIgdG8g YSBidWZmZXIgdGhhdCByZWNlaXZlcyB0aGUgZGlnZXN0DQo+ID4+IHZhbHVlLg0KPiA+Pj4gKw0K PiA+Pj4gKyAgQHJldHZhbCBUUlVFICAgRGlnZXN0IGNvbXB1dGF0aW9uIHN1Y2NlZWRlZC4NCj4g Pj4+ICsgIEByZXR2YWwgRkFMU0UgIERpZ2VzdCBjb21wdXRhdGlvbiBmYWlsZWQuDQo+ID4+PiAr DQo+ID4+PiArKiovDQo+ID4+PiArQk9PTEVBTg0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0V2cE1k SGFzaEFsbCAoDQo+ID4+PiArICBJTiAgQ09OU1QgQ0hBUjggICAqRGlnZXN0TmFtZSwNCj4gPj4+ ICsgIElOICBDT05TVCBWT0lEICAgICpEYXRhLA0KPiA+Pj4gKyAgSU4gIFVJTlROICAgICAgICAg RGF0YVNpemUsDQo+ID4+PiArICBPVVQgVUlOVDggICAgICAgICAqSGFzaFZhbHVlDQo+ID4+PiAr ICApDQo+ID4+PiArew0KPiA+Pj4gKyAgQk9PTEVBTiAgIFJlc3VsdDsNCj4gPj4+ICsgIFZPSUQg ICAgICAqRXZwTWRDb250ZXh0Ow0KPiA+Pj4gKw0KPiA+Pj4gKyAgRXZwTWRDb250ZXh0ID0gRXZw TWRJbml0IChEaWdlc3ROYW1lKTsNCj4gPj4+ICsgIGlmIChFdnBNZENvbnRleHQgPT0gTlVMTCkg ew0KPiA+Pj4gKyAgICByZXR1cm4gRkFMU0U7DQo+ID4+PiArICB9DQo+ID4+PiArDQo+ID4+PiAr ICBSZXN1bHQgPSBFdnBNZFVwZGF0ZSAoRXZwTWRDb250ZXh0LCBEYXRhLCBEYXRhU2l6ZSk7DQo+ ID4+PiArICBpZiAoUmVzdWx0ID09IEZBTFNFKSB7DQo+ID4+DQo+ID4+ICg4KSBTdHlsZTogcGxl YXNlIHdyaXRlICghUmVzdWx0KS4NCj4gPj4NCj4gPj4NCj4gPj4+ICsgICAgRXZwTWRGaW5hbCAo RXZwTWRDb250ZXh0LCBOVUxMKTsNCj4gPj4+ICsgICAgcmV0dXJuIEZBTFNFOw0KPiA+Pj4gKyAg fQ0KPiA+Pj4gKw0KPiA+Pj4gKyAgUmVzdWx0ID0gRXZwTWRGaW5hbCAoRXZwTWRDb250ZXh0LCBI YXNoVmFsdWUpOw0KPiA+Pj4gKw0KPiA+Pj4gKyAgcmV0dXJuIFJlc3VsdDsNCj4gPj4+ICt9DQo+ ID4+PiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9Dcnlw dEV2cE1kTnVsbC5jDQo+ID4+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9D cnlwdEV2cE1kTnVsbC5jDQo+ID4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+Pj4gaW5kZXgg MDAwMDAwMDAwMC4uMDM4ZjYzODAxZg0KPiA+Pj4gLS0tIC9kZXYvbnVsbA0KPiA+Pj4gKysrIGIv Q3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL0V2cC9DcnlwdEV2cE1kTnVsbC5jDQo+ID4+ PiBAQCAtMCwwICsxLDEyOCBAQA0KPiA+Pj4gKy8qKiBAZmlsZQ0KPiA+Pj4gKyAgRVZQIE1EIFdy YXBwZXIgTnVsbCBMaWJyYXJ5Lg0KPiA+Pj4gKw0KPiA+Pj4gK0NvcHlyaWdodCAoYykgMjAyMCwg SW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQuPEJSPg0KPiA+Pj4gK1NQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4+PiArDQo+ID4+PiAr KiovDQo+ID4+PiArDQo+ID4+PiArI2luY2x1ZGUgIkludGVybmFsQ3J5cHRMaWIuaCINCj4gPj4+ ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIEFsbG9jYXRlcyBhbmQgaW5pdGlhbGl6ZXMgb25lIEVW UF9NRF9DVFggY29udGV4dCBmb3Igc3Vic2VxdWVudA0KPiBFVlBfTUQNCj4gPj4gdXNlLg0KPiA+ Pj4gKw0KPiA+Pj4gKyAgUmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHRoaXMgaW50ZXJmYWNlIGlz IG5vdCBzdXBwb3J0ZWQuDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICAgIERpZ2VzdE5h bWUgICAgUG9pbnRlciB0byB0aGUgZGlnZXN0IG5hbWUgYXMgYSBOVUxMLQ0KPiA+PiB0ZXJtaW5h dGVkIEFTQ0lJIHN0cmluZy4NCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBW YWxpZCBkaWdlc3QgbmFtZXMgYXJlOg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE1ENSwgU0hBMSwgU0hBMjI0LCBTSEEyNTYsIFNIQTM4NCwgU0hBNTEyDQo+ID4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgU0hBMy0yMjQsIFNIQTMtMjU2LCBTSEEzLTM4NCwg U0hBMy01MTINCj4gPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTTMNCj4gPj4+ ICsNCj4gPj4+ICsgIEByZXR1cm4gTlVMTCAgVGhpcyBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRl ZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtWT0lEICoNCj4gPj4+ICtFRklBUEkNCj4g Pj4+ICtFdnBNZEluaXQgKA0KPiA+Pj4gKyAgSU4gIENPTlNUIENIQVI4ICAgKkRpZ2VzdE5hbWUN Cj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ID4+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPj4+ICsg IHJldHVybiBOVUxMOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIE1h a2VzIGEgY29weSBvZiBhbiBleGlzdGluZyBFVlBfTUQgY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ ICsgIFJldHVybiBGQUxTRSB0byBpbmRpY2F0ZSB0aGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9y dGVkLg0KPiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgRXZwTWRDb250ZXh0ICAgICBQb2lu dGVyIHRvIEVWUF9NRCBjb250ZXh0IGJlaW5nIGNvcGllZC4NCj4gPj4+ICsgIEBwYXJhbVtvdXRd IE5ld0V2cE1kQ29udGV4dCAgUG9pbnRlciB0byBuZXcgRVZQX01EIGNvbnRleHQuDQo+ID4+PiAr DQo+ID4+PiArICBAcmV0dmFsIEZBTFNFICBUaGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVk Lg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0JPT0xFQU4NCj4gPj4+ICtFRklBUEkNCj4g Pj4+ICtFdnBNZER1cGxpY2F0ZSAoDQo+ID4+PiArICBJTiAgQ09OU1QgVk9JRCAgICAqRXZwTWRD b250ZXh0LA0KPiA+Pj4gKyAgT1VUIFZPSUQgICAgICAgICAgKk5ld0V2cE1kQ29udGV4dA0KPiA+ Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+Pj4gKyAgcmV0 dXJuIEZBTFNFOw0KPiA+Pj4gK30NCj4gPj4+ICsNCj4gPj4+ICsvKioNCj4gPj4+ICsgIERpZ2Vz dHMgdGhlIGlucHV0IGRhdGEgYW5kIHVwZGF0ZXMgRVZQX01EIGNvbnRleHQuDQo+ID4+PiArDQo+ ID4+PiArICBSZXR1cm4gRkFMU0UgdG8gaW5kaWNhdGUgdGhpcyBpbnRlcmZhY2UgaXMgbm90IHN1 cHBvcnRlZC4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbiwgb3V0XSAgRXZwTWRDb250ZXh0 ICAgICAgIFBvaW50ZXIgdG8gdGhlIEVWUF9NRCBjb250ZXh0Lg0KPiA+Pj4gKyAgQHBhcmFtW2lu XSAgICAgICBEYXRhICAgICAgICAgICAgICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5p bmcgdGhlIGRhdGEgdG8NCj4gYmUNCj4gPj4gZGlnZXN0ZWQuDQo+ID4+PiArICBAcGFyYW1baW5d ICAgICAgIERhdGFTaXplICAgICAgICAgICBTaXplIG9mIERhdGEgYnVmZmVyIGluIGJ5dGVzLg0K PiA+Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBGQUxTRSAgVGhpcyBpbnRlcmZhY2UgaXMgbm90IHN1 cHBvcnRlZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtCT09MRUFODQo+ID4+PiArRUZJ QVBJDQo+ID4+PiArRXZwTWRVcGRhdGUgKA0KPiA+Pj4gKyAgSU4gT1VUICBWT0lEICAgICAgICAq RXZwTWRDb250ZXh0LA0KPiA+Pj4gKyAgSU4gICAgICBDT05TVCBWT0lEICAqRGF0YSwNCj4gPj4+ ICsgIElOICAgICAgVUlOVE4gICAgICAgRGF0YVNpemUNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ ID4+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPj4+ICsgIHJldHVybiBGQUxTRTsNCj4gPj4+ICt9 DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBDb21wbGV0ZXMgY29tcHV0YXRpb24gb2Yg dGhlIEVWUCBkaWdlc3QgdmFsdWUuDQo+ID4+PiArICBSZWxlYXNlcyB0aGUgc3BlY2lmaWVkIEVW UF9NRF9DVFggY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ICsgIFJldHVybiBGQUxTRSB0byBpbmRp Y2F0ZSB0aGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLg0KPiA+Pj4gKw0KPiA+Pj4gKyAg QHBhcmFtW2luLCBvdXRdICBFdnBNZENvbnRleHQgICBQb2ludGVyIHRvIHRoZSBFVlAgY29udGV4 dC4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgICAgRGlnZXN0ICAgICAgICAgUG9pbnRlciB0byBh IGJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRoZSBFVlANCj4gZGlnZXN0DQo+ID4+IHZhbHVlLg0KPiA+ Pj4gKw0KPiA+Pj4gKyAgQHJldHZhbCBGQUxTRSAgVGhpcyBpbnRlcmZhY2UgaXMgbm90IHN1cHBv cnRlZC4NCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ICtCT09MRUFODQo+ID4+PiArRUZJQVBJ DQo+ID4+PiArRXZwTWRGaW5hbCAoDQo+ID4+PiArICBJTiBPVVQgIFZPSUQgICAqRXZwTWRDb250 ZXh0LA0KPiA+Pj4gKyAgT1VUICAgICBVSU5UOCAgKkRpZ2VzdFZhbHVlDQo+ID4+PiArICApDQo+ ID4+PiArew0KPiA+Pj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4+PiArICByZXR1cm4gRkFMU0U7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgQ29tcHV0ZXMgdGhlIG1l c3NhZ2UgZGlnZXN0IG9mIGFuIGlucHV0IGRhdGEgYnVmZmVyLg0KPiA+Pj4gKw0KPiA+Pj4gKyAg UmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHRoaXMgaW50ZXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWQu DQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW5dICAgIERpZ2VzdE5hbWUgICAgUG9pbnRlciB0 byB0aGUgZGlnZXN0IG5hbWUuDQo+ID4+PiArICBAcGFyYW1baW5dICAgIERhdGEgICAgICAgICAg UG9pbnRlciB0byB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGRhdGEgdG8gYmUNCj4gPj4gaGFz aGVkLg0KPiA+Pj4gKyAgQHBhcmFtW2luXSAgICBEYXRhU2l6ZSAgICAgIFNpemUgb2YgRGF0YSBi dWZmZXIgaW4gYnl0ZXMuDQo+ID4+PiArICBAcGFyYW1bb3V0XSAgIEhhc2hWYWx1ZSAgICAgUG9p bnRlciB0byBhIGJ1ZmZlciB0aGF0IHJlY2VpdmVzIHRoZSBkaWdlc3QNCj4gPj4gdmFsdWUuDQo+ ID4+PiArDQo+ID4+PiArICBAcmV0dmFsIEZBTFNFICBUaGlzIGludGVyZmFjZSBpcyBub3Qgc3Vw cG9ydGVkLg0KPiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0JPT0xFQU4NCj4gPj4+ICtFRklB UEkNCj4gPj4+ICtFdnBNZEhhc2hBbGwgKA0KPiA+Pj4gKyAgSU4gIENPTlNUIENIQVI4ICAgKkRp Z2VzdE5hbWUsDQo+ID4+PiArICBJTiAgQ09OU1QgVk9JRCAgICAqRGF0YSwNCj4gPj4+ICsgIElO ICBVSU5UTiAgICAgICAgIERhdGFTaXplLA0KPiA+Pj4gKyAgT1VUIFVJTlQ4ICAgICAgICAgKkhh c2hWYWx1ZQ0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiA+Pj4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+Pj4gK30NCj4gPj4+IGRpZmYgLS1naXQgYS9Dcnlw dG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0V2cC9DcnlwdEV2cE1kTnVsbC5jDQo+ID4+ IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9FdnAvQ3J5cHRFdnBNZE51bGwu Yw0KPiA+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPj4+IGluZGV4IDAwMDAwMDAwMDAuLjAz OGY2MzgwMWYNCj4gPj4+IC0tLSAvZGV2L251bGwNCj4gPj4+ICsrKyBiL0NyeXB0b1BrZy9MaWJy YXJ5L0Jhc2VDcnlwdExpYk51bGwvRXZwL0NyeXB0RXZwTWROdWxsLmMNCj4gPj4+IEBAIC0wLDAg KzEsMTI4IEBADQo+ID4+PiArLyoqIEBmaWxlDQo+ID4+PiArICBFVlAgTUQgV3JhcHBlciBOdWxs IExpYnJhcnkuDQo+ID4+PiArDQo+ID4+PiArQ29weXJpZ2h0IChjKSAyMDIwLCBJbnRlbCBDb3Jw b3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ID4+PiArU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gPj4+ICsNCj4gPj4+ICsqKi8NCj4gPj4+ ICsNCj4gPj4+ICsjaW5jbHVkZSAiSW50ZXJuYWxDcnlwdExpYi5oIg0KPiA+Pj4gKw0KPiA+Pj4g Ky8qKg0KPiA+Pj4gKyAgQWxsb2NhdGVzIGFuZCBpbml0aWFsaXplcyBvbmUgRVZQX01EX0NUWCBj b250ZXh0IGZvciBzdWJzZXF1ZW50DQo+IEVWUF9NRA0KPiA+PiB1c2UuDQo+ID4+PiArDQo+ID4+ PiArICBSZXR1cm4gRkFMU0UgdG8gaW5kaWNhdGUgdGhpcyBpbnRlcmZhY2UgaXMgbm90IHN1cHBv cnRlZC4NCj4gPj4+ICsNCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgRGlnZXN0TmFtZSAgICBQb2lu dGVyIHRvIHRoZSBkaWdlc3QgbmFtZSBhcyBhIE5VTEwtDQo+ID4+IHRlcm1pbmF0ZWQgQVNDSUkg c3RyaW5nLg0KPiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZhbGlkIGRpZ2Vz dCBuYW1lcyBhcmU6DQo+ID4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUQ1LCBT SEExLCBTSEEyMjQsIFNIQTI1NiwgU0hBMzg0LCBTSEE1MTINCj4gPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBTSEEzLTIyNCwgU0hBMy0yNTYsIFNIQTMtMzg0LCBTSEEzLTUxMg0K PiA+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNMw0KPiA+Pj4gKw0KPiA+Pj4g KyAgQHJldHVybiBOVUxMICBUaGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLg0KPiA+Pj4g Kw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK1ZPSUQgKg0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0V2cE1k SW5pdCAoDQo+ID4+PiArICBJTiAgQ09OU1QgQ0hBUjggICAqRGlnZXN0TmFtZQ0KPiA+Pj4gKyAg KQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiA+Pj4gKyAgcmV0dXJuIE5V TEw7DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgTWFrZXMgYSBjb3B5 IG9mIGFuIGV4aXN0aW5nIEVWUF9NRCBjb250ZXh0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgUmV0dXJu IEZBTFNFIHRvIGluZGljYXRlIHRoaXMgaW50ZXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4+ PiArDQo+ID4+PiArICBAcGFyYW1baW5dICBFdnBNZENvbnRleHQgICAgIFBvaW50ZXIgdG8gRVZQ X01EIGNvbnRleHQgYmVpbmcgY29waWVkLg0KPiA+Pj4gKyAgQHBhcmFtW291dF0gTmV3RXZwTWRD b250ZXh0ICBQb2ludGVyIHRvIG5ldyBFVlBfTUQgY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ICsg IEByZXR2YWwgRkFMU0UgIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4+PiAr DQo+ID4+PiArKiovDQo+ID4+PiArQk9PTEVBTg0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4gK0V2cE1k RHVwbGljYXRlICgNCj4gPj4+ICsgIElOICBDT05TVCBWT0lEICAgICpFdnBNZENvbnRleHQsDQo+ ID4+PiArICBPVVQgVk9JRCAgICAgICAgICAqTmV3RXZwTWRDb250ZXh0DQo+ID4+PiArICApDQo+ ID4+PiArew0KPiA+Pj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4+PiArICByZXR1cm4gRkFMU0U7 DQo+ID4+PiArfQ0KPiA+Pj4gKw0KPiA+Pj4gKy8qKg0KPiA+Pj4gKyAgRGlnZXN0cyB0aGUgaW5w dXQgZGF0YSBhbmQgdXBkYXRlcyBFVlBfTUQgY29udGV4dC4NCj4gPj4+ICsNCj4gPj4+ICsgIFJl dHVybiBGQUxTRSB0byBpbmRpY2F0ZSB0aGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLg0K PiA+Pj4gKw0KPiA+Pj4gKyAgQHBhcmFtW2luLCBvdXRdICBFdnBNZENvbnRleHQgICAgICAgUG9p bnRlciB0byB0aGUgRVZQX01EIGNvbnRleHQuDQo+ID4+PiArICBAcGFyYW1baW5dICAgICAgIERh dGEgICAgICAgICAgICAgICBQb2ludGVyIHRvIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0 YSB0bw0KPiBiZQ0KPiA+PiBkaWdlc3RlZC4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgICAgRGF0 YVNpemUgICAgICAgICAgIFNpemUgb2YgRGF0YSBidWZmZXIgaW4gYnl0ZXMuDQo+ID4+PiArDQo+ ID4+PiArICBAcmV0dmFsIEZBTFNFICBUaGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLg0K PiA+Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0JPT0xFQU4NCj4gPj4+ICtFRklBUEkNCj4gPj4+ ICtFdnBNZFVwZGF0ZSAoDQo+ID4+PiArICBJTiBPVVQgIFZPSUQgICAgICAgICpFdnBNZENvbnRl eHQsDQo+ID4+PiArICBJTiAgICAgIENPTlNUIFZPSUQgICpEYXRhLA0KPiA+Pj4gKyAgSU4gICAg ICBVSU5UTiAgICAgICBEYXRhU2l6ZQ0KPiA+Pj4gKyAgKQ0KPiA+Pj4gK3sNCj4gPj4+ICsgIEFT U0VSVCAoRkFMU0UpOw0KPiA+Pj4gKyAgcmV0dXJuIEZBTFNFOw0KPiA+Pj4gK30NCj4gPj4+ICsN Cj4gPj4+ICsvKioNCj4gPj4+ICsgIENvbXBsZXRlcyBjb21wdXRhdGlvbiBvZiB0aGUgRVZQIGRp Z2VzdCB2YWx1ZS4NCj4gPj4+ICsgIFJlbGVhc2VzIHRoZSBzcGVjaWZpZWQgRVZQX01EX0NUWCBj b250ZXh0Lg0KPiA+Pj4gKw0KPiA+Pj4gKyAgUmV0dXJuIEZBTFNFIHRvIGluZGljYXRlIHRoaXMg aW50ZXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ID4+PiArDQo+ID4+PiArICBAcGFyYW1baW4s IG91dF0gIEV2cE1kQ29udGV4dCAgIFBvaW50ZXIgdG8gdGhlIEVWUCBjb250ZXh0Lg0KPiA+Pj4g KyAgQHBhcmFtW291dF0gICAgICBEaWdlc3QgICAgICAgICBQb2ludGVyIHRvIGEgYnVmZmVyIHRo YXQgcmVjZWl2ZXMgdGhlIEVWUA0KPiBkaWdlc3QNCj4gPj4gdmFsdWUuDQo+ID4+PiArDQo+ID4+ PiArICBAcmV0dmFsIEZBTFNFICBUaGlzIGludGVyZmFjZSBpcyBub3Qgc3VwcG9ydGVkLg0KPiA+ Pj4gKw0KPiA+Pj4gKyoqLw0KPiA+Pj4gK0JPT0xFQU4NCj4gPj4+ICtFRklBUEkNCj4gPj4+ICtF dnBNZEZpbmFsICgNCj4gPj4+ICsgIElOIE9VVCAgVk9JRCAgICpFdnBNZENvbnRleHQsDQo+ID4+ PiArICBPVVQgICAgIFVJTlQ4ICAqRGlnZXN0VmFsdWUNCj4gPj4+ICsgICkNCj4gPj4+ICt7DQo+ ID4+PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gPj4+ICsgIHJldHVybiBGQUxTRTsNCj4gPj4+ICt9 DQo+ID4+PiArDQo+ID4+PiArLyoqDQo+ID4+PiArICBDb21wdXRlcyB0aGUgbWVzc2FnZSBkaWdl c3Qgb2YgYW4gaW5wdXQgZGF0YSBidWZmZXIuDQo+ID4+PiArDQo+ID4+PiArICBSZXR1cm4gRkFM U0UgdG8gaW5kaWNhdGUgdGhpcyBpbnRlcmZhY2UgaXMgbm90IHN1cHBvcnRlZC4NCj4gPj4+ICsN Cj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgRGlnZXN0TmFtZSAgICBQb2ludGVyIHRvIHRoZSBkaWdl c3QgbmFtZS4NCj4gPj4+ICsgIEBwYXJhbVtpbl0gICAgRGF0YSAgICAgICAgICBQb2ludGVyIHRv IHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgZGF0YSB0byBiZQ0KPiA+PiBoYXNoZWQuDQo+ID4+ PiArICBAcGFyYW1baW5dICAgIERhdGFTaXplICAgICAgU2l6ZSBvZiBEYXRhIGJ1ZmZlciBpbiBi eXRlcy4NCj4gPj4+ICsgIEBwYXJhbVtvdXRdICAgSGFzaFZhbHVlICAgICBQb2ludGVyIHRvIGEg YnVmZmVyIHRoYXQgcmVjZWl2ZXMgdGhlIGRpZ2VzdA0KPiA+PiB2YWx1ZS4NCj4gPj4+ICsNCj4g Pj4+ICsgIEByZXR2YWwgRkFMU0UgIFRoaXMgaW50ZXJmYWNlIGlzIG5vdCBzdXBwb3J0ZWQuDQo+ ID4+PiArDQo+ID4+PiArKiovDQo+ID4+PiArQk9PTEVBTg0KPiA+Pj4gK0VGSUFQSQ0KPiA+Pj4g K0V2cE1kSGFzaEFsbCAoDQo+ID4+PiArICBJTiAgQ09OU1QgQ0hBUjggICAqRGlnZXN0TmFtZSwN Cj4gPj4+ICsgIElOICBDT05TVCBWT0lEICAgICpEYXRhLA0KPiA+Pj4gKyAgSU4gIFVJTlROICAg ICAgICAgRGF0YVNpemUsDQo+ID4+PiArICBPVVQgVUlOVDggICAgICAgICAqSGFzaFZhbHVlDQo+ ID4+PiArICApDQo+ID4+PiArew0KPiA+Pj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ID4+PiArICBy ZXR1cm4gRkFMU0U7DQo+ID4+PiArfQ0KPiA+Pj4NCj4gPj4NCj4gPj4gVGhhbmtzLA0KPiA+PiBM YXN6bG8NCj4gPg0KDQo=