From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga07.intel.com (mga07.intel.com [134.134.136.100]) by mx.groups.io with SMTP id smtpd.web10.254.1589473297401425124 for ; Thu, 14 May 2020 09:21:37 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=Sz8QJQY3; spf=pass (domain: intel.com, ip: 134.134.136.100, mailfrom: michael.d.kinney@intel.com) IronPort-SDR: urTvGmvmV48brEpDKXbP88VH6tBnyYi1yvXczrNR83c+pXRnwG6q+y/tQH8MyEuZy6ZTFz614Z RJeiXhr6+hlA== X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga105.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 May 2020 09:21:36 -0700 IronPort-SDR: jpbqOkdNqFjnrsun0PZQD/lyPY8bKajJPCCE+eoqFfWUPopCUHas85nFLTRM9iCIM5YphPYYvF ESuHVlSAtikw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.73,392,1583222400"; d="scan'208";a="341668577" Received: from orsmsx103.amr.corp.intel.com ([10.22.225.130]) by orsmga001.jf.intel.com with ESMTP; 14 May 2020 09:21:36 -0700 Received: from orsmsx158.amr.corp.intel.com (10.22.240.20) by ORSMSX103.amr.corp.intel.com (10.22.225.130) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:21:36 -0700 Received: from ORSEDG002.ED.cps.intel.com (10.7.248.5) by ORSMSX158.amr.corp.intel.com (10.22.240.20) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:21:35 -0700 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.168) by edgegateway.intel.com (134.134.137.101) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 14 May 2020 09:21:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=IwRvXq3nRFWUXVTrOd8wuSK+GFMyELfii8XKze3vTNMNb6q6CmsPRe4/zAnQ/iJh6S/1yzHsQDVrzRc2eMkgYVDZ2wokrhZeKsLOe2WIzNH51axy8IbxNv70E1Qyksj5L1X2livYjrAJ0JwU2mvUnat8ZYZ2sMkbPLVSFYp33+ZjpCmQtOpCGon80Eg1QAdaSoD+47FbU5wMA5C2Zl70crSlBYefBy8DuOE6uK0KsN9SysCcmf+XTxOFAEwkerO0NDUyWNv4BimI+GajUwaTgO2Ih7Pe0VJePa3JlmPbciGoD6aU5LskU338C+d7O2QX3zOHLvrNJnRlSk7o96gQ9A== 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=3PXQ45pSM4fng7ddp1avpV4HJAMSDeph+cSTazycan0=; b=ROmCnb3F6lSgKOaY8AAEtXRIF5PNmiKlnDuRQSm7W9/KlvQ/O5Nz5zAP6pG2h6r1H6ijQD6jMPVuvNIBKTF/1rWwLs2s97xWmj5WAVWPy6MflnmKL/YPdQnzTUF+UGA6pOm+XrC0sdlHs5T3T9vcHWX/dpFVvOxk2SPCPqPSP44nAobj3iJ+ViAyDxg7bOUPL4R3OEfloVMzDpM12oPFls0w14Pt1Lfy2YprdY/s2llTptWaUQcOEjccV0vw3vcldwiOlIWDQzbNqPeWKGlZsggUCg7bM24bIJ0BBX0rGXegxLleL1fR7oemUSRnvryV8czVoUDEAMmWoueFKZ+lNw== 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=3PXQ45pSM4fng7ddp1avpV4HJAMSDeph+cSTazycan0=; b=Sz8QJQY3kwMFHIM7bT57Mg74zkbpZ21mjmJO4bwXqb9X1tSYK9wukxNx3fypINdUDLbwWyxa5uPHsZwYKC4E2wlKbm1OTP8v+WyQwkLynudZJ5o+Fb/cZFzu44TcLeYsIojw/Onu1rlXsLoj8ximhwRYZB+EsSu26F7MWwAgye4= Received: from MN2PR11MB4461.namprd11.prod.outlook.com (2603:10b6:208:192::29) by MN2PR11MB4240.namprd11.prod.outlook.com (2603:10b6:208:179::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2979.34; Thu, 14 May 2020 16:21:33 +0000 Received: from MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1]) by MN2PR11MB4461.namprd11.prod.outlook.com ([fe80::10bc:1a4e:4745:ffc1%3]) with mapi id 15.20.2979.033; Thu, 14 May 2020 16:21:33 +0000 From: "Michael D Kinney" To: Sami Mujawar , "devel@edk2.groups.io" , "Kinney, Michael D" CC: "ard.biesheuvel@arm.com" , "leif@nuviainc.com" , "Gao, Liming" , "Alexandru.Elisei@arm.com" , "Andre.Przywara@arm.com" , "Matteo.Carlini@arm.com" , "Laura.Moretta@arm.com" , "nd@arm.com" Subject: Re: [PATCH v1 02/11] MdePkg: Add NULL implementation for PCILib Thread-Topic: [PATCH v1 02/11] MdePkg: Add NULL implementation for PCILib Thread-Index: AQHWKct+hjXCLci9KUKN4MaMZQasJqinw6+g Date: Thu, 14 May 2020 16:21:33 +0000 Message-ID: References: <20200514084019.71368-1-sami.mujawar@arm.com> <20200514084019.71368-3-sami.mujawar@arm.com> In-Reply-To: <20200514084019.71368-3-sami.mujawar@arm.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.2.0.6 authentication-results: arm.com; dkim=none (message not signed) header.d=none;arm.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [134.134.136.220] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 0af08504-9dc4-4bf8-ed7d-08d7f822de1d x-ms-traffictypediagnostic: MN2PR11MB4240: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-forefront-prvs: 040359335D x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 1UqA8uNIVuMz9e7ly6tlwbxWLMLa2kuJcTx8cR+wsfBdy2+xBD0xO/gLAraURgY4em1gBPpLvcLNz6MZDwjEqKD25eVM/qwjjJ3Y/3bJK1ck+caK6igIa1PYqUppuATKiNQ7K/OQU9fKoLU3vYXSzSw/Q/mswfXEGOlmwqPAmjm48Yu4bEghLbtcDo8NAcci2sGKM9tmczm2Vy5MOALbUC9pPjFVnzpMLI7fUpMJNOjfrrUAeusINB8QfYBqBtY45ro7XAifNq+FYFbG2rp9R34sPGLcXCPytFSJJ7FgS9vKx0qE+ak3z7t4/gtgMj3yjn6DfUVWUO69E466tyyGVxDi7tGwiwpO2kQ+bXrPwzaaQtpFDckTwT471g8CzJ7TO4BG/mIGFQTshHzgbPcVGXe4WEIS/g+H1s6v00+C8GXzC2XlnBd3TNuBKvHenKhX x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MN2PR11MB4461.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(376002)(346002)(136003)(39860400002)(366004)(396003)(52536014)(110136005)(30864003)(5660300002)(9686003)(55016002)(54906003)(4326008)(316002)(478600001)(76116006)(33656002)(66476007)(2906002)(8936002)(8676002)(26005)(6506007)(71200400001)(186003)(53546011)(66946007)(86362001)(66446008)(7696005)(64756008)(66556008)(559001)(579004);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: ouKt7T0ecZELWGUqTYlT1euBPd2YGNxUDtBLcbTrckaKuR8NkUEQuBPv00++z5Xyuv9+1ikvCZqLVZaRyKen/4FlxAH2w62O+2resk6JsXsZjqqQ1IfqDrxqJPDoDAxAFw0b3GLNkFYA+LuBWLlOlrCVAi1MuMvfY9D4ukYsFzDeiLtoqXmJI1T3wERonv/ib4Mht2Jq4NFkyx5IgU9IOETnC0aReRmXxfWlIALe68fy/Yw6KvGZ5ZMxvuKGwfxoz99psVp1wfAeJ9fint7GG8KxSs+X0PrdoglaWQ73Xoe3skrPnUp0Z+sM/JJmTcAASUwL8MbZGpSTUvfoS4xblnRpihhqbuJyhSDuaGKiiSBgldnx2Mp+lGMxi/I6FJQFvMRx4sYpMicsLeRlKM1d7JK9h1eyiC2bHYyisf6DCFQNIIXWj9ZAlKXJ9C0CsnRjwrUJEcEAQVyZzOP5juOPc/kruxsG0XYvaLDZwq43Fpv36Hf7TBbvGONq15AJoEwJ MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 0af08504-9dc4-4bf8-ed7d-08d7f822de1d X-MS-Exchange-CrossTenant-originalarrivaltime: 14 May 2020 16:21:33.3785 (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: nIeVz/PaUZRuf32wRNaTbIdOJhFntxPurPfLVFvHwHAY0wU9GEqSHszT+1Xpoet54xQY3sGjZ+6eWspZ85j8dWAsrjq3SuEhZYsvn657kxI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: MN2PR11MB4240 Return-Path: michael.d.kinney@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 U2FtaSwNCg0KQ2FuIHRoZSBjb21iaW5hdGlvbiBvZiBCYXNlUGNpTGliUGNpRXhwcmVzcyBhbmQg QmFzZVBjaUV4cHJlc3NMaWINCmJlIHVzZWQgZm9yIHRoaXMgdXNlIGNhc2U/DQoNCk1pa2UNCg0K PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBTYW1pIE11amF3YXIgPHNhbWku bXVqYXdhckBhcm0uY29tPg0KPiBTZW50OiBUaHVyc2RheSwgTWF5IDE0LCAyMDIwIDE6NDAgQU0N Cj4gVG86IGRldmVsQGVkazIuZ3JvdXBzLmlvDQo+IENjOiBTYW1pIE11amF3YXIgPHNhbWkubXVq YXdhckBhcm0uY29tPjsNCj4gYXJkLmJpZXNoZXV2ZWxAYXJtLmNvbTsgbGVpZkBudXZpYWluYy5j b207IEtpbm5leSwNCj4gTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT47IEdh bywgTGltaW5nDQo+IDxsaW1pbmcuZ2FvQGludGVsLmNvbT47IEFsZXhhbmRydS5FbGlzZWlAYXJt LmNvbTsNCj4gQW5kcmUuUHJ6eXdhcmFAYXJtLmNvbTsgTWF0dGVvLkNhcmxpbmlAYXJtLmNvbTsN Cj4gTGF1cmEuTW9yZXR0YUBhcm0uY29tOyBuZEBhcm0uY29tDQo+IFN1YmplY3Q6IFtQQVRDSCB2 MSAwMi8xMV0gTWRlUGtnOiBBZGQgTlVMTA0KPiBpbXBsZW1lbnRhdGlvbiBmb3IgUENJTGliDQo+ IA0KPiBPbiBzb21lIHBsYXRmb3JtcyB0aGUgU2VyaWFsIDE2NTUwIFVBUlQgaXMgaW50ZXJmYWNl ZA0KPiBvdmVyIFBDSS4gVG8gc3VwcG9ydCBzdWNoIHBsYXRmb3JtcyB0aGUgU2VyaWFsIDE2NTUw DQo+IGRyaXZlciBsaW5rcyB3aXRoIFBjaUxpYi4NCj4gDQo+IEZvciBwbGF0Zm9ybXMgdGhhdCBk byBub3QgaW50ZXJmYWNlIHRoZSBTZXJpYWwgMTY1NTANCj4gVUFSVCBvdmVyIFBDSSwgdGhlIGRy aXZlciBzdGlsbCBuZWVkcyB0byBsaW5rIHdpdGggYQ0KPiBQY2lMaWIgbGlicmFyeS4gTGlua2lu ZyB0byB0aGUgZnVsbCBpbXBsZW1lbnRhdGlvbiBvZg0KPiB0aGUgUENJIGxpYnJhcnkgbWF5IG5v dCBiZSBwb3NzaWJsZSBkdXJpbmcgdGhlIGVhcmx5DQo+IGZpcm13YXJlIGJvb3Qgc3RhZ2UuDQo+ IA0KPiBUbyBmYWNpbGl0YXRlIGVhcmx5IGZpcm13YXJlIGxvZ3Mgb3ZlciB0aGUgc2VyaWFsIHBv cnQNCj4gdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgTlVMTCBQQ0kgbGlicmFyeQ0KPiBpbXBsZW1l bnRhdGlvbi4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IFNhbWkgTXVqYXdhciA8c2FtaS5tdWphd2Fy QGFybS5jb20+DQo+IC0tLQ0KPiAgTWRlUGtnL0xpYnJhcnkvUGNpTGliTnVsbC9QY2lMaWJOdWxs LmMgICB8IDEyMTMNCj4gKysrKysrKysrKysrKysrKysrKysNCj4gIE1kZVBrZy9MaWJyYXJ5L1Bj aUxpYk51bGwvUGNpTGliTnVsbC5pbmYgfCAgIDI1ICsNCj4gIDIgZmlsZXMgY2hhbmdlZCwgMTIz OCBpbnNlcnRpb25zKCspDQo+IA0KPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xpYnJhcnkvUGNpTGli TnVsbC9QY2lMaWJOdWxsLmMNCj4gYi9NZGVQa2cvTGlicmFyeS9QY2lMaWJOdWxsL1BjaUxpYk51 bGwuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleA0KPiAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTg2Y2E5Zjg2ZTVhDQo+IDBjODYwNDcyYjgwMjA5 YWFlOWI5NThhOTVkNw0KPiAtLS0gL2Rldi9udWxsDQo+ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1Bj aUxpYk51bGwvUGNpTGliTnVsbC5jDQo+IEBAIC0wLDAgKzEsMTIxMyBAQA0KPiArLyoqIEBmaWxl DQo+ICsgIFByb3ZpZGVzIGEgTlVMTCBpbXBsZW1lbnRhdGlvbiBvZiBQQ0kgc2VydmljZXMgdXNl ZA0KPiB0byBhY2Nlc3MNCj4gKyAgUENJIENvbmZpZ3VyYXRpb24gU3BhY2UuDQo+ICsNCj4gKyAg Q29weXJpZ2h0IChjKSAyMDE5IC0gMjAyMCwgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMNCj4gcmVz ZXJ2ZWQuDQo+ICsNCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQNCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRlIDxCYXNlLmg+DQo+ICsjaW5jbHVk ZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiArDQo+ICsvKioNCj4gKyAgUmVnaXN0ZXJzIGEgUENJ IGRldmljZSBzbyBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3RlcnMgbWF5IGJlIGFjY2Vzc2Vk IGFmdGVyDQo+ICsgIFNldFZpcnR1YWxBZGRyZXNzTWFwKCkuDQo+ICsNCj4gKyAgUmVnaXN0ZXJz IHRoZSBQQ0kgZGV2aWNlIHNwZWNpZmllZCBieSBBZGRyZXNzIHNvIGFsbA0KPiB0aGUgUENJIGNv bmZpZ3VyYXRpb24NCj4gKyAgcmVnaXN0ZXJzIGFzc29jaWF0ZWQgd2l0aCB0aGF0IFBDSSBkZXZp Y2UgbWF5IGJlDQo+IGFjY2Vzc2VkIGFmdGVyDQo+ICsgIFNldFZpcnR1YWxBZGRyZXNzTWFwKCkg aXMgY2FsbGVkLg0KPiArDQo+ICsgIElmIEFkZHJlc3MgPiAweDBGRkZGRkZGLCB0aGVuIEFTU0VS VCgpLg0KPiArDQo+ICsgIEBwYXJhbSAgQWRkcmVzcyBBZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUg UENJIEJ1cywNCj4gRGV2aWNlLCBGdW5jdGlvbiBhbmQNCj4gKyAgICAgICAgICAgICAgICAgIFJl Z2lzdGVyLg0KPiArDQo+ICsgIEByZXR2YWwgUkVUVVJOX1NVQ0NFU1MgICAgICAgICAgIFRoZSBQ Q0kgZGV2aWNlIHdhcw0KPiByZWdpc3RlcmVkIGZvciBydW50aW1lDQo+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGFjY2Vzcy4NCj4gKyAgQHJldHZhbCBSRVRVUk5fVU5TVVBQ T1JURUQgICAgICAgQW4gYXR0ZW1wdCB3YXMgbWFkZQ0KPiB0byBjYWxsIHRoaXMgZnVuY3Rpb24N Cj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXINCj4gRXhpdEJvb3RT ZXJ2aWNlcygpLg0KPiArICBAcmV0dmFsIFJFVFVSTl9VTlNVUFBPUlRFRCAgICAgICBUaGUgcmVz b3VyY2VzDQo+IHJlcXVpcmVkIHRvIGFjY2VzcyB0aGUgUENJDQo+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGRldmljZSBhdCBydW50aW1lDQo+IGNvdWxkIG5vdCBiZSBtYXBw ZWQuDQo+ICsgIEByZXR2YWwgUkVUVVJOX09VVF9PRl9SRVNPVVJDRVMgIFRoZXJlIGFyZSBub3QN Cj4gZW5vdWdoIHJlc291cmNlcyBhdmFpbGFibGUgdG8NCj4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29tcGxldGUgdGhlDQo+IHJlZ2lzdHJhdGlvbi4NCj4gKw0KPiArKiov DQo+ICtSRVRVUk5fU1RBVFVTDQo+ICtFRklBUEkNCj4gK1BjaVJlZ2lzdGVyRm9yUnVudGltZUFj Y2VzcyAoDQo+ICsgIElOIFVJTlROICBBZGRyZXNzDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcg KChERUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1wbGVtZW50ZWRc biIsIF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gUkVUVVJO X1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZHMgYW4gOC1iaXQgUENJ IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgUmVhZHMgYW5kIHJldHVybnMgdGhl IDgtYml0IFBDSSBjb25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNz Lg0KPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSSByZWFkIGFu ZA0KPiB3cml0ZSBvcGVyYXRpb25zIGFyZQ0KPiArICBzZXJpYWxpemVkLg0KPiArDQo+ICsgIElm IEFkZHJlc3MgPiAweDBGRkZGRkZGLCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbSAg QWRkcmVzcyBBZGRyZXNzIHRoYXQgZW5jb2RlcyB0aGUgUENJIEJ1cywNCj4gRGV2aWNlLCBGdW5j dGlvbiBhbmQNCj4gKyAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyLg0KPiArDQo+ICsgIEByZXR1 cm4gVGhlIHJlYWQgdmFsdWUgZnJvbSB0aGUgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIu DQo+ICsNCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArUGNpUmVhZDggKA0KPiArICBJ TiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcw0KPiArICApDQo+ICt7DQo+ ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGlt cGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0 dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBXcml0ZXMgYW4gOC1iaXQgUENJIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgV3JpdGVzIHRoZSA4LWJpdCBQQ0kgY29uZmln dXJhdGlvbiByZWdpc3Rlcg0KPiBzcGVjaWZpZWQgYnkgQWRkcmVzcyB3aXRoIHRoZQ0KPiArICB2 YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlzIHJldHVybmVkLiBUaGlzDQo+IGZ1bmN0 aW9uIG11c3QgZ3VhcmFudGVlDQo+ICsgIHRoYXQgYWxsIFBDSSByZWFkIGFuZCB3cml0ZSBvcGVy YXRpb25zIGFyZQ0KPiBzZXJpYWxpemVkLg0KPiArDQo+ICsgIElmIEFkZHJlc3MgPiAweDBGRkZG RkZGLCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbSAgQWRkcmVzcyBBZGRyZXNzIHRo YXQgZW5jb2RlcyB0aGUgUENJIEJ1cywNCj4gRGV2aWNlLCBGdW5jdGlvbiBhbmQNCj4gKyAgICAg ICAgICAgICAgICAgIFJlZ2lzdGVyLg0KPiArICBAcGFyYW0gIFZhbHVlICAgVGhlIHZhbHVlIHRv IHdyaXRlLg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBj b25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ4DQo+ICtFRklB UEkNCj4gK1BjaVdyaXRlOCAoDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAg ICBBZGRyZXNzLA0KPiArICBJTiAgICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgVmFsdWUN Cj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9u ICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUGVyZm9ybXMg YSBiaXR3aXNlIE9SIG9mIGFuIDgtYml0IFBDSSBjb25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyIHdp dGgNCj4gKyAgYW4gOC1iaXQgdmFsdWUuDQo+ICsNCj4gKyAgUmVhZHMgdGhlIDgtYml0IFBDSSBj b25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZA0KPiBieSBBZGRyZXNzLCBwZXJmb3JtcyBh DQo+ICsgIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZQ0K PiBzcGVjaWZpZWQgYnkNCj4gKyAgT3JEYXRhLCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhl IDgtYml0IFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyDQo+ICsgIHNwZWNpZmllZCBieSBB ZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVn aXN0ZXIgaXMNCj4gKyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhh dCBhbGwgUENJDQo+IHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMNCj4gKyAgYXJlIHNlcmlhbGl6 ZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNzIEFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgQnVz LA0KPiBEZXZpY2UsIEZ1bmN0aW9uIGFuZA0KPiArICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIu DQo+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgUENJDQo+IGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRl biBiYWNrIHRvIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gKw0KPiArKiov DQo+ICtVSU5UOA0KPiArRUZJQVBJDQo+ICtQY2lPcjggKA0KPiArICBJTiAgICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gKyAgSU4gICAgICBVSU5UOCAgICAgICAgICAg ICAgICAgICAgIE9yRGF0YQ0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1Is ICJFUlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykp Ow0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBQZXJmb3JtcyBhIGJpdHdpc2UgQU5EIG9mIGFuIDgtYml0IFBDSSBjb25maWd1cmF0 aW9uDQo+IHJlZ2lzdGVyIHdpdGggYW4gOC1iaXQNCj4gKyAgdmFsdWUuDQo+ICsNCj4gKyAgUmVh ZHMgdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZA0KPiBieSBB ZGRyZXNzLCBwZXJmb3JtcyBhDQo+ICsgIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVz dWx0IGFuZCB0aGUgdmFsdWUNCj4gc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGFuZA0KPiArICB3cml0 ZXMgdGhlIHJlc3VsdCB0byB0aGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIg c3BlY2lmaWVkIGJ5DQo+ICsgIEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kg Y29uZmlndXJhdGlvbg0KPiByZWdpc3RlciBpcyByZXR1cm5lZC4NCj4gKyAgVGhpcyBmdW5jdGlv biBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQNCj4gd3JpdGUgb3BlcmF0aW9u cyBhcmUNCj4gKyAgc2VyaWFsaXplZC4NCj4gKw0KPiArICBJZiBBZGRyZXNzID4gMHgwRkZGRkZG RiwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEFkZHJlc3MgQWRkcmVzcyB0aGF0 IGVuY29kZXMgdGhlIFBDSSBCdXMsDQo+IERldmljZSwgRnVuY3Rpb24gYW5kDQo+ICsgICAgICAg ICAgICAgICAgICBSZWdpc3Rlci4NCj4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0byBB TkQgd2l0aCB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHJl dHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiBy ZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ICtVSU5UOA0KPiArRUZJQVBJDQo+ICtQY2lBbmQ4ICgN Cj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ICsgIElO ICAgICAgVUlOVDggICAgICAgICAgICAgICAgICAgICBBbmREYXRhDQo+ICsgICkNCj4gK3sNCj4g KyAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1w bGVtZW50ZWRcbiIsIF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2Yg YW4gOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIgd2l0aCBhbiA4LWJpdA0KPiAr ICB2YWx1ZSwgZm9sbG93ZWQgYnkgYSBiaXR3aXNlIE9SIHdpdGggYW5vdGhlciA4LWJpdA0KPiB2 YWx1ZS4NCj4gKw0KPiArICBSZWFkcyB0aGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXIgc3BlY2lmaWVkDQo+IGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGENCj4gKyAgYml0d2lzZSBBTkQg YmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZQ0KPiBzcGVjaWZpZWQgYnkgQW5k RGF0YSwNCj4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0 aGUgQU5EDQo+IG9wZXJhdGlvbiBhbmQNCj4gKyAgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBPckRh dGEsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdA0KPiB0byB0aGUgOC1iaXQgUENJDQo+ICsgIGNvbmZp Z3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZQ0KPiB2YWx1ZSB3cml0 dGVuIHRvIHRoZSBQQ0kNCj4gKyAgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXR1cm5lZC4g VGhpcyBmdW5jdGlvbg0KPiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kNCj4gKyAgcmVhZCBh bmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArICBJZiBBZGRyZXNz ID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEFkZHJlc3Mg QWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsDQo+IERldmljZSwgRnVuY3Rpb24gYW5k DQo+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4NCj4gKyAgQHBhcmFtICBBbmREYXRhIFRo ZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVzdWx0IG9mDQo+ IHRoZSBBTkQgb3BlcmF0aW9uLg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4g YmFjayB0byB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyoqLw0K PiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArUGNpQW5kVGhlbk9yOCAoDQo+ICsgIElOICAgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAgICAgIFVJTlQ4ICAgICAg ICAgICAgICAgICAgICAgQW5kRGF0YSwNCj4gKyAgSU4gICAgICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgIE9yRGF0YQ0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJF UlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0K PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBSZWFkcyBhIGJpdCBmaWVsZCBvZiBhIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0K PiArDQo+ICsgIFJlYWRzIHRoZSBiaXQgZmllbGQgaW4gYW4gOC1iaXQgUENJIGNvbmZpZ3VyYXRp b24NCj4gcmVnaXN0ZXIuIFRoZSBiaXQgZmllbGQgaXMNCj4gKyAgc3BlY2lmaWVkIGJ5IHRoZSBT dGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gVGhlIHZhbHVlDQo+IG9mIHRoZSBiaXQgZmllbGQgaXMN Cj4gKyAgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4g QVNTRVJUKCkuDQo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiA3LCB0aGVuIEFTU0VS VCgpLg0KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuDQo+ ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ICsN Cj4gKyAgQHBhcmFtICBBZGRyZXNzICAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8NCj4g cmVhZC4NCj4gKyAgQHBhcmFtICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0DQo+ IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAgICAgICAgICAgICAg ICBSYW5nZSAwLi43Lg0KPiArICBAcGFyYW0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUg bW9zdA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAg ICAgICAgICAgUmFuZ2UgMC4uNy4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUg Yml0IGZpZWxkIHJlYWQgZnJvbSB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ ICsNCj4gKyoqLw0KPiArVUlOVDgNCj4gK0VGSUFQSQ0KPiArUGNpQml0RmllbGRSZWFkOCAoDQo+ ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAg ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsDQo+ICsgIElOICAgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAo KERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxu IiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgV3JpdGVzIGEgYml0IGZpZWxkIHRvIGEgUENJIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgV3JpdGVzIFZhbHVlIHRvIHRoZSBiaXQgZmllbGQg b2YgdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLiBUaGUgYml0DQo+ICsgIGZpZWxk IGlzIHNwZWNpZmllZCBieSB0aGUgU3RhcnRCaXQgYW5kIHRoZSBFbmRCaXQuDQo+IEFsbCBvdGhl ciBiaXRzIGluIHRoZQ0KPiArICBkZXN0aW5hdGlvbiBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rl ciBhcmUNCj4gcHJlc2VydmVkLiBUaGUgbmV3IHZhbHVlIG9mIHRoZQ0KPiArICA4LWJpdCByZWdp c3RlciBpcyByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBBZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhl biBBU1NFUlQoKS4NCj4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNT RVJUKCkuDQo+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVyIHRoYW4gNywgdGhlbiBBU1NFUlQoKS4N Cj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4g KyAgSWYgVmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2UNCj4gc3Bl Y2lmaWVkIGJ5DQo+ICsgICAgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4g Kw0KPiArICBAcGFyYW0gIEFkZHJlc3MgICBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0bw0K PiB3cml0ZS4NCj4gKyAgQHBhcmFtICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0 DQo+IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAgICAgICAgICAg ICAgICBSYW5nZSAwLi43Lg0KPiArICBAcGFyYW0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0 aGUgbW9zdA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAg ICAgICAgICAgICAgUmFuZ2UgMC4uNy4NCj4gKyAgQHBhcmFtICBWYWx1ZSAgICAgTmV3IHZhbHVl IG9mIHRoZSBiaXQgZmllbGQuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBi YWNrIHRvIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ ICtVSU5UOA0KPiArRUZJQVBJDQo+ICtQY2lCaXRGaWVsZFdyaXRlOCAoDQo+ICsgIElOICAgICAg VUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAgICAgIFVJTlROICAg ICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICBFbmRCaXQsDQo+ICsgIElOICAgICAgVUlOVDggICAgICAgICAgICAgICAgICAg ICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjog RnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0KPiArICBB U1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBS ZWFkcyBhIGJpdCBmaWVsZCBpbiBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbiwNCj4gcGVyZm9y bXMgYSBiaXR3aXNlIE9SLCBhbmQNCj4gKyAgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUg Yml0IGZpZWxkIGluIHRoZSA4LWJpdA0KPiBwb3J0Lg0KPiArDQo+ICsgIFJlYWRzIHRoZSA4LWJp dCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBzcGVjaWZpZWQNCj4gYnkgQWRkcmVzcywgcGVy Zm9ybXMgYQ0KPiArICBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUg dmFsdWUNCj4gc3BlY2lmaWVkIGJ5DQo+ICsgIE9yRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0 IHRvIHRoZSA4LWJpdCBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3Rlcg0KPiArICBzcGVjaWZp ZWQgYnkgQWRkcmVzcy4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSQ0KPiBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyIGlzDQo+ICsgIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFu dGVlIHRoYXQgYWxsIFBDSQ0KPiByZWFkIGFuZCB3cml0ZSBvcGVyYXRpb25zDQo+ICsgIGFyZSBz ZXJpYWxpemVkLiBFeHRyYSBsZWZ0IGJpdHMgaW4gT3JEYXRhIGFyZQ0KPiBzdHJpcHBlZC4NCj4g Kw0KPiArICBJZiBBZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYg U3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEVuZEJp dCBpcyBncmVhdGVyIHRoYW4gNywgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGxl c3MgdGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgT3JEYXRhIGlzIGxhcmdl ciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlDQo+IHNwZWNpZmllZCBieQ0KPiArICAgIFN0 YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRy ZXNzICAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8NCj4gd3JpdGUuDQo+ICsgIEBwYXJh bSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdA0KPiBzaWduaWZpY2FudCBiaXQg aW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uNy4NCj4g KyAgQHBhcmFtICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2YgdGhlIG1vc3QNCj4gc2lnbmlmaWNh bnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAu LjcuDQo+ICsgIEBwYXJhbSAgT3JEYXRhICAgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSBQQ0kN Cj4gY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3 cml0dGVuIGJhY2sgdG8gdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ ICsqKi8NCj4gK1VJTlQ4DQo+ICtFRklBUEkNCj4gK1BjaUJpdEZpZWxkT3I4ICgNCj4gKyAgSU4g ICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ICsgIElOICAgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIEVuZEJpdCwNCj4gKyAgSU4gICAgICBVSU5UOCAgICAgICAgICAgICAg ICAgICAgIE9yRGF0YQ0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJF UlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0K PiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0K PiArICBSZWFkcyBhIGJpdCBmaWVsZCBpbiBhbiA4LWJpdCBQQ0kgY29uZmlndXJhdGlvbg0KPiBy ZWdpc3RlciwgcGVyZm9ybXMgYSBiaXR3aXNlDQo+ICsgIEFORCwgYW5kIHdyaXRlcyB0aGUgcmVz dWx0IGJhY2sgdG8gdGhlIGJpdCBmaWVsZCBpbg0KPiB0aGUgOC1iaXQgcmVnaXN0ZXIuDQo+ICsN Cj4gKyAgUmVhZHMgdGhlIDgtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmll ZA0KPiBieSBBZGRyZXNzLCBwZXJmb3JtcyBhDQo+ICsgIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhl IHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUNCj4gc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGFuZA0K PiArICB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgOC1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4g cmVnaXN0ZXIgc3BlY2lmaWVkIGJ5DQo+ICsgIEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRv IHRoZSBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3RlciBpcyByZXR1cm5lZC4NCj4gKyAgVGhp cyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQNCj4gd3JpdGUg b3BlcmF0aW9ucyBhcmUNCj4gKyAgc2VyaWFsaXplZC4gRXh0cmEgbGVmdCBiaXRzIGluIEFuZERh dGEgYXJlIHN0cmlwcGVkLg0KPiArDQo+ICsgIElmIEFkZHJlc3MgPiAweDBGRkZGRkZGLCB0aGVu IEFTU0VSVCgpLg0KPiArICBJZiBTdGFydEJpdCBpcyBncmVhdGVyIHRoYW4gNywgdGhlbiBBU1NF UlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiA3LCB0aGVuIEFTU0VSVCgpLg0K PiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLg0KPiAr ICBJZiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlDQo+IHNw ZWNpZmllZCBieQ0KPiArICAgIFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNzICAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8N Cj4gd3JpdGUuDQo+ICsgIEBwYXJhbSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFz dA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAg ICAgICAgUmFuZ2UgMC4uNy4NCj4gKyAgQHBhcmFtICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2Yg dGhlIG1vc3QNCj4gc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAg ICAgICAgICAgICAgIFJhbmdlIDAuLjcuDQo+ICsgIEBwYXJhbSAgQW5kRGF0YSAgIFRoZSB2YWx1 ZSB0byBBTkQgd2l0aCB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kNCj4gY29uZmlndXJh dGlvbiByZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ICtVSU5UOA0KPiArRUZJQVBJDQo+ICtQY2lC aXRGaWVsZEFuZDggKA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRk cmVzcywNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LA0K PiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LA0KPiArICBJTiAg ICAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgQW5kRGF0YQ0KPiArICApDQo+ICt7DQo+ICsg IERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxl bWVudGVkXG4iLCBfX2Z1bmNfXykpOw0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJu IDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkcyBhIGJpdCBmaWVsZCBpbiBhbiA4LWJp dCBwb3J0LCBwZXJmb3JtcyBhDQo+IGJpdHdpc2UgQU5EIGZvbGxvd2VkIGJ5IGENCj4gKyAgYml0 d2lzZSBPUiwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGJpdA0KPiBmaWVsZCBp biB0aGUNCj4gKyAgOC1iaXQgcG9ydC4NCj4gKw0KPiArICBSZWFkcyB0aGUgOC1iaXQgUENJIGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkDQo+IGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGEN Cj4gKyAgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlDQo+ IHJlYWQgcmVzdWx0IGFuZA0KPiArICB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGFu ZCB3cml0ZXMgdGhlDQo+IHJlc3VsdCB0byB0aGUgOC1iaXQgUENJDQo+ICsgIGNvbmZpZ3VyYXRp b24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZQ0KPiB2YWx1ZSB3cml0dGVuIHRv IHRoZSBQQ0kNCj4gKyAgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyByZXR1cm5lZC4gVGhpcyBm dW5jdGlvbg0KPiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kNCj4gKyAgcmVhZCBhbmQgd3Jp dGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4gRXh0cmEgbGVmdA0KPiBiaXRzIGluIGJvdGgg QW5kRGF0YSBhbmQNCj4gKyAgT3JEYXRhIGFyZSBzdHJpcHBlZC4NCj4gKw0KPiArICBJZiBBZGRy ZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgU3RhcnRCaXQgaXMgZ3Jl YXRlciB0aGFuIDcsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVyIHRo YW4gNywgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFydEJp dCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQW5kRGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0 bWFzayB2YWx1ZSByYW5nZQ0KPiBzcGVjaWZpZWQgYnkNCj4gKyAgICBTdGFydEJpdCBhbmQgRW5k Qml0LCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBPckRhdGEgaXMgbGFyZ2VyIHRoYW4gdGhlIGJp dG1hc2sgdmFsdWUgcmFuZ2UNCj4gc3BlY2lmaWVkIGJ5DQo+ICsgICAgU3RhcnRCaXQgYW5kIEVu ZEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEFkZHJlc3MgICBQQ0kgY29u ZmlndXJhdGlvbiByZWdpc3RlciB0bw0KPiB3cml0ZS4NCj4gKyAgQHBhcmFtICBTdGFydEJpdCAg VGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0DQo+IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZp ZWxkLg0KPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi43Lg0KPiArICBAcGFyYW0gIEVu ZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhl IGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uNy4NCj4gKyAgQHBh cmFtICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kNCj4gY29uZmlndXJh dGlvbiByZWdpc3Rlci4NCj4gKyAgQHBhcmFtICBPckRhdGEgICAgVGhlIHZhbHVlIHRvIE9SIHdp dGggdGhlIHJlc3VsdCBvZg0KPiB0aGUgQU5EIG9wZXJhdGlvbi4NCj4gKw0KPiArICBAcmV0dXJu IFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lz dGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQ4DQo+ICtFRklBUEkNCj4gK1BjaUJpdEZpZWxkQW5k VGhlbk9yOCAoDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNz LA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsDQo+ICsg IElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQsDQo+ICsgIElOICAgICAg VUlOVDggICAgICAgICAgICAgICAgICAgICBBbmREYXRhLA0KPiArICBJTiAgICAgIFVJTlQ4ICAg ICAgICAgICAgICAgICAgICAgT3JEYXRhDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJV R19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1wbGVtZW50ZWRcbiIsIF9f ZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gMDsNCj4gK30NCj4g Kw0KPiArLyoqDQo+ICsgIFJlYWRzIGEgMTYtYml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVy Lg0KPiArDQo+ICsgIFJlYWRzIGFuZCByZXR1cm5zIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRp b24NCj4gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuDQo+ICsgIFRoaXMgZnVuY3Rpb24g bXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kDQo+IHdyaXRlIG9wZXJhdGlvbnMg YXJlDQo+ICsgIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYs IHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNz IEFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgQnVzLA0KPiBEZXZpY2UsIEZ1bmN0aW9uIGFu ZA0KPiArICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUg cmVhZCB2YWx1ZSBmcm9tIHRoZSBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3Rlci4NCj4gKw0K PiArKiovDQo+ICtVSU5UMTYNCj4gK0VGSUFQSQ0KPiArUGNpUmVhZDE2ICgNCj4gKyAgSU4gICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MNCj4gKyAgKQ0KPiArew0KPiArICBE RUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1l bnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAw Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgV3JpdGVzIGEgMTYtYml0IFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsgIFdyaXRlcyB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyDQo+IHNwZWNpZmllZCBieSBBZGRyZXNzIHdpdGggdGhlDQo+ICsgIHZhbHVl IHNwZWNpZmllZCBieSBWYWx1ZS4gVmFsdWUgaXMgcmV0dXJuZWQuIFRoaXMNCj4gZnVuY3Rpb24g bXVzdCBndWFyYW50ZWUNCj4gKyAgdGhhdCBhbGwgUENJIHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlv bnMgYXJlDQo+IHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYs IHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNz IEFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgQnVzLA0KPiBEZXZpY2UsIEZ1bmN0aW9uIGFu ZA0KPiArICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIuDQo+ICsgIEBwYXJhbSAgVmFsdWUgICBU aGUgdmFsdWUgdG8gd3JpdGUuDQo+ICsNCj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiB0 byB0aGUgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIuDQo+ICsNCj4gKyoqLw0KPiArVUlO VDE2DQo+ICtFRklBUEkNCj4gK1BjaVdyaXRlMTYgKA0KPiArICBJTiAgICAgIFVJTlROICAgICAg ICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAg ICAgICAgIFZhbHVlDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19FUlJPUiwgIkVS Uk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKSk7DQo+ ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFBlcmZvcm1zIGEgYml0d2lzZSBPUiBvZiBhIDE2LWJpdCBQQ0kgY29uZmlndXJhdGlvbg0K PiByZWdpc3RlciB3aXRoDQo+ICsgIGEgMTYtYml0IHZhbHVlLg0KPiArDQo+ICsgIFJlYWRzIHRo ZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4gc3BlY2lmaWVkIGJ5IEFkZHJl c3MsIHBlcmZvcm1zIGENCj4gKyAgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBh bmQgdGhlIHZhbHVlDQo+IHNwZWNpZmllZCBieQ0KPiArICBPckRhdGEsIGFuZCB3cml0ZXMgdGhl IHJlc3VsdCB0byB0aGUgMTYtYml0IFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyDQo+ICsg IHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJDQo+IGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMNCj4gKyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVz dCBndWFyYW50ZWUgdGhhdCBhbGwgUENJDQo+IHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMNCj4g KyAgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRo ZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQg Ym91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNzIEFk ZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgQnVzLA0KPiBEZXZpY2UsIEZ1bmN0aW9uIGFuZA0K PiArICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIuDQo+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUg dmFsdWUgdG8gT1Igd2l0aCB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsN Cj4gKyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kNCj4gY29uZmln dXJhdGlvbiByZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK0VGSUFQSQ0KPiAr UGNpT3IxNiAoDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNz LA0KPiArICBJTiAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgT3JEYXRhDQo+ICsgICkN Cj4gK3sNCj4gKyAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBu b3QNCj4gaW1wbGVtZW50ZWRcbiIsIF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFBlcmZvcm1zIGEgYml0d2lz ZSBBTkQgb2YgYSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIgd2l0aCBhIDE2 LWJpdA0KPiArICB2YWx1ZS4NCj4gKw0KPiArICBSZWFkcyB0aGUgMTYtYml0IFBDSSBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyDQo+IHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3JtcyBhDQo+ICsg IGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUNCj4gc3Bl Y2lmaWVkIGJ5IEFuZERhdGEsIGFuZA0KPiArICB3cml0ZXMgdGhlIHJlc3VsdCB0byB0aGUgMTYt Yml0IFBDSSBjb25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyIHNwZWNpZmllZCBieQ0KPiArICBBZGRy ZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0 ZXIgaXMgcmV0dXJuZWQuDQo+ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFyYW50ZWUgdGhhdCBh bGwgUENJIHJlYWQgYW5kDQo+IHdyaXRlIG9wZXJhdGlvbnMgYXJlDQo+ICsgIHNlcmlhbGl6ZWQu DQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsg IElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4g QVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNzIEFkZHJlc3MgdGhhdCBlbmNvZGVz IHRoZSBQQ0kgQnVzLA0KPiBEZXZpY2UsIEZ1bmN0aW9uIGFuZA0KPiArICAgICAgICAgICAgICAg ICAgUmVnaXN0ZXIuDQo+ICsgIEBwYXJhbSAgQW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdpdGgg dGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsgIEByZXR1cm4gVGhl IHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIu DQo+ICsNCj4gKyoqLw0KPiArVUlOVDE2DQo+ICtFRklBUEkNCj4gK1BjaUFuZDE2ICgNCj4gKyAg SU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ICsgIElOICAgICAg VUlOVDE2ICAgICAgICAgICAgICAgICAgICBBbmREYXRhDQo+ICsgICkNCj4gK3sNCj4gKyAgREVC VUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1wbGVtZW50 ZWRcbiIsIF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gMDsN Cj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFBlcmZvcm1zIGEgYml0d2lzZSBBTkQgb2YgYSAxNi1i aXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIgd2l0aCBhIDE2LWJpdA0KPiArICB2YWx1 ZSwgZm9sbG93ZWQgYSAgYml0d2lzZSBPUiB3aXRoIGFub3RoZXIgMTYtYml0DQo+IHZhbHVlLg0K PiArDQo+ICsgIFJlYWRzIHRoZSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4g c3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZvcm1zIGENCj4gKyAgYml0d2lzZSBBTkQgYmV0d2Vl biB0aGUgcmVhZCByZXN1bHQgYW5kIHRoZSB2YWx1ZQ0KPiBzcGVjaWZpZWQgYnkgQW5kRGF0YSwN Cj4gKyAgcGVyZm9ybXMgYSBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlc3VsdCBvZiB0aGUgQU5E DQo+IG9wZXJhdGlvbiBhbmQNCj4gKyAgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBPckRhdGEsIGFu ZCB3cml0ZXMgdGhlIHJlc3VsdA0KPiB0byB0aGUgMTYtYml0IFBDSQ0KPiArICBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUNCj4gdmFsdWUgd3JpdHRlbiB0 byB0aGUgUENJDQo+ICsgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuIFRoaXMg ZnVuY3Rpb24NCj4gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJDQo+ICsgIHJlYWQgYW5kIHdy aXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4 MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQg b24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFt ICBBZGRyZXNzIEFkZHJlc3MgdGhhdCBlbmNvZGVzIHRoZSBQQ0kgQnVzLA0KPiBEZXZpY2UsIEZ1 bmN0aW9uIGFuZA0KPiArICAgICAgICAgICAgICAgICAgUmVnaXN0ZXIuDQo+ICsgIEBwYXJhbSAg QW5kRGF0YSBUaGUgdmFsdWUgdG8gQU5EIHdpdGggdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJl Z2lzdGVyLg0KPiArICBAcGFyYW0gIE9yRGF0YSAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIHJl c3VsdCBvZg0KPiB0aGUgQU5EIG9wZXJhdGlvbi4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1 ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiAr DQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtQY2lBbmRUaGVuT3IxNiAoDQo+ICsg IElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAgICAg IFVJTlQxNiAgICAgICAgICAgICAgICAgICAgQW5kRGF0YSwNCj4gKyAgSU4gICAgICBVSU5UMTYg ICAgICAgICAgICAgICAgICAgIE9yRGF0YQ0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVC VUdfRVJST1IsICJFUlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBf X2Z1bmNfXykpOw0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBSZWFkcyBhIGJpdCBmaWVsZCBvZiBhIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVyLg0KPiArDQo+ICsgIFJlYWRzIHRoZSBiaXQgZmllbGQgaW4gYSAxNi1iaXQgUENJ IGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIuIFRoZSBiaXQgZmllbGQgaXMNCj4gKyAgc3BlY2lm aWVkIGJ5IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVuZEJpdC4gVGhlIHZhbHVlDQo+IG9mIHRoZSBi aXQgZmllbGQgaXMNCj4gKyAgcmV0dXJuZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZG RkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24g YSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsgIElmIFN0YXJ0Qml0IGlz IGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0 ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBT dGFydEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEFkZHJlc3MgICBQQ0kg Y29uZmlndXJhdGlvbiByZWdpc3RlciB0bw0KPiByZWFkLg0KPiArICBAcGFyYW0gIFN0YXJ0Qml0 ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3QNCj4gc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQg ZmllbGQuDQo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAuLjE1Lg0KPiArICBAcGFyYW0g IEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdA0KPiBzaWduaWZpY2FudCBiaXQgaW4g dGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMTUuDQo+ICsN Cj4gKyAgQHJldHVybiBUaGUgdmFsdWUgb2YgdGhlIGJpdCBmaWVsZCByZWFkIGZyb20gdGhlIFBD SQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiAr RUZJQVBJDQo+ICtQY2lCaXRGaWVsZFJlYWQxNiAoDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgU3RhcnRCaXQsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBF bmRCaXQNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1 bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNT RVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgV3Jp dGVzIGEgYml0IGZpZWxkIHRvIGEgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4g KyAgV3JpdGVzIFZhbHVlIHRvIHRoZSBiaXQgZmllbGQgb2YgdGhlIFBDSQ0KPiBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLiBUaGUgYml0DQo+ICsgIGZpZWxkIGlzIHNwZWNpZmllZCBieSB0aGUgU3Rh cnRCaXQgYW5kIHRoZSBFbmRCaXQuDQo+IEFsbCBvdGhlciBiaXRzIGluIHRoZQ0KPiArICBkZXN0 aW5hdGlvbiBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciBhcmUNCj4gcHJlc2VydmVkLiBUaGUg bmV3IHZhbHVlIG9mIHRoZQ0KPiArICAxNi1iaXQgcmVnaXN0ZXIgaXMgcmV0dXJuZWQuDQo+ICsN Cj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFk ZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJU KCkuDQo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4N Cj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAg SWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYg VmFsdWUgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2UNCj4gc3BlY2lmaWVk IGJ5DQo+ICsgICAgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiAr ICBAcGFyYW0gIEFkZHJlc3MgICBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0bw0KPiB3cml0 ZS4NCj4gKyAgQHBhcmFtICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0DQo+IHNp Z25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAgICAgICAgICAgICAgICBS YW5nZSAwLi4xNS4NCj4gKyAgQHBhcmFtICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2YgdGhlIG1v c3QNCj4gc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAgICAgICAg ICAgICAgIFJhbmdlIDAuLjE1Lg0KPiArICBAcGFyYW0gIFZhbHVlICAgICBOZXcgdmFsdWUgb2Yg dGhlIGJpdCBmaWVsZC4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sg dG8gdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJ TlQxNg0KPiArRUZJQVBJDQo+ICtQY2lCaXRGaWVsZFdyaXRlMTYgKA0KPiArICBJTiAgICAgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gKyAgSU4gICAgICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIFN0YXJ0Qml0LA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAg ICAgICAgICAgRW5kQml0LA0KPiArICBJTiAgICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAg VmFsdWUNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1 bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNT RVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVh ZHMgYSBiaXQgZmllbGQgaW4gYSAxNi1iaXQgUENJIGNvbmZpZ3VyYXRpb24sDQo+IHBlcmZvcm1z IGEgYml0d2lzZSBPUiwgYW5kDQo+ICsgIHdyaXRlcyB0aGUgcmVzdWx0IGJhY2sgdG8gdGhlIGJp dCBmaWVsZCBpbiB0aGUgMTYtDQo+IGJpdCBwb3J0Lg0KPiArDQo+ICsgIFJlYWRzIHRoZSAxNi1i aXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4gc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBl cmZvcm1zIGENCj4gKyAgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhl IHZhbHVlDQo+IHNwZWNpZmllZCBieQ0KPiArICBPckRhdGEsIGFuZCB3cml0ZXMgdGhlIHJlc3Vs dCB0byB0aGUgMTYtYml0IFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyDQo+ICsgIHNwZWNp ZmllZCBieSBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJDQo+IGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIgaXMNCj4gKyAgcmV0dXJuZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBndWFy YW50ZWUgdGhhdCBhbGwgUENJDQo+IHJlYWQgYW5kIHdyaXRlIG9wZXJhdGlvbnMNCj4gKyAgYXJl IHNlcmlhbGl6ZWQuIEV4dHJhIGxlZnQgYml0cyBpbiBPckRhdGEgYXJlDQo+IHN0cmlwcGVkLg0K PiArDQo+ICsgIElmIEFkZHJlc3MgPiAweDBGRkZGRkZGLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJ ZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFT U0VSVCgpLg0KPiArICBJZiBTdGFydEJpdCBpcyBncmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNTRVJU KCkuDQo+ICsgIElmIEVuZEJpdCBpcyBncmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNTRVJUKCkuDQo+ ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRoYW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ICsg IElmIE9yRGF0YSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZQ0KPiBzcGVj aWZpZWQgYnkNCj4gKyAgICBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLg0KPiAr DQo+ICsgIEBwYXJhbSAgQWRkcmVzcyAgIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvDQo+ IHdyaXRlLg0KPiArICBAcGFyYW0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3QN Cj4gc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAgICAgICAgICAg ICAgIFJhbmdlIDAuLjE1Lg0KPiArICBAcGFyYW0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0 aGUgbW9zdA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAg ICAgICAgICAgICAgUmFuZ2UgMC4uMTUuDQo+ICsgIEBwYXJhbSAgT3JEYXRhICAgIFRoZSB2YWx1 ZSB0byBPUiB3aXRoIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gKw0KPiAr ICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSQ0KPiBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtQY2lC aXRGaWVsZE9yMTYgKA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRk cmVzcywNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIFN0YXJ0Qml0LA0K PiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgRW5kQml0LA0KPiArICBJTiAg ICAgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgT3JEYXRhDQo+ICsgICkNCj4gK3sNCj4gKyAg REVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1wbGVt ZW50ZWRcbiIsIF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4g MDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIGluIGEgMTYtYml0 IFBDSSBjb25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyLCBwZXJmb3JtcyBhIGJpdHdpc2UNCj4gKyAg QU5ELCBhbmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgYml0IGZpZWxkIGluDQo+IHRo ZSAxNi1iaXQgcmVnaXN0ZXIuDQo+ICsNCj4gKyAgUmVhZHMgdGhlIDE2LWJpdCBQQ0kgY29uZmln dXJhdGlvbiByZWdpc3Rlcg0KPiBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiAr ICBiaXR3aXNlIEFORCBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlDQo+IHNw ZWNpZmllZCBieSBBbmREYXRhLCBhbmQNCj4gKyAgd3JpdGVzIHRoZSByZXN1bHQgdG8gdGhlIDE2 LWJpdCBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3RlciBzcGVjaWZpZWQgYnkNCj4gKyAgQWRk cmVzcy4gVGhlIHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBDSSBjb25maWd1cmF0aW9uDQo+IHJlZ2lz dGVyIGlzIHJldHVybmVkLg0KPiArICBUaGlzIGZ1bmN0aW9uIG11c3QgZ3VhcmFudGVlIHRoYXQg YWxsIFBDSSByZWFkIGFuZA0KPiB3cml0ZSBvcGVyYXRpb25zIGFyZQ0KPiArICBzZXJpYWxpemVk LiBFeHRyYSBsZWZ0IGJpdHMgaW4gQW5kRGF0YSBhcmUgc3RyaXBwZWQuDQo+ICsNCj4gKyAgSWYg QWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMg bm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsg IElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYg RW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAxNSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0 IGlzIGxlc3MgdGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQW5kRGF0YSBp cyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZQ0KPiBzcGVjaWZpZWQgYnkNCj4g KyAgICBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJh bSAgQWRkcmVzcyAgIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvDQo+IHdyaXRlLg0KPiAr ICBAcGFyYW0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0aGUgbGVhc3QNCj4gc2lnbmlmaWNh bnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAgICAgICAgICAgICAgIFJhbmdlIDAu LjE1Lg0KPiArICBAcGFyYW0gIEVuZEJpdCAgICBUaGUgb3JkaW5hbCBvZiB0aGUgbW9zdA0KPiBz aWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAgICAgICAg UmFuZ2UgMC4uMTUuDQo+ICsgIEBwYXJhbSAgQW5kRGF0YSAgIFRoZSB2YWx1ZSB0byBBTkQgd2l0 aCB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgQHJldHVybiBU aGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3Rl ci4NCj4gKw0KPiArKiovDQo+ICtVSU5UMTYNCj4gK0VGSUFQSQ0KPiArUGNpQml0RmllbGRBbmQx NiAoDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiAr ICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsDQo+ICsgIElOICAg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQsDQo+ICsgIElOICAgICAgVUlOVDE2 ICAgICAgICAgICAgICAgICAgICBBbmREYXRhDQo+ICsgICkNCj4gK3sNCj4gKyAgREVCVUcgKChE RUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1wbGVtZW50ZWRcbiIs IF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gMDsNCj4gK30N Cj4gKw0KPiArLyoqDQo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIGluIGEgMTYtYml0IHBvcnQsIHBl cmZvcm1zIGENCj4gYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYQ0KPiArICBiaXR3aXNlIE9SLCBh bmQgd3JpdGVzIHRoZSByZXN1bHQgYmFjayB0byB0aGUgYml0DQo+IGZpZWxkIGluIHRoZQ0KPiAr ICAxNi1iaXQgcG9ydC4NCj4gKw0KPiArICBSZWFkcyB0aGUgMTYtYml0IFBDSSBjb25maWd1cmF0 aW9uIHJlZ2lzdGVyDQo+IHNwZWNpZmllZCBieSBBZGRyZXNzLCBwZXJmb3JtcyBhDQo+ICsgIGJp dHdpc2UgQU5EIGZvbGxvd2VkIGJ5IGEgYml0d2lzZSBPUiBiZXR3ZWVuIHRoZQ0KPiByZWFkIHJl c3VsdCBhbmQNCj4gKyAgdGhlIHZhbHVlIHNwZWNpZmllZCBieSBBbmREYXRhLCBhbmQgd3JpdGVz IHRoZQ0KPiByZXN1bHQgdG8gdGhlIDE2LWJpdCBQQ0kNCj4gKyAgY29uZmlndXJhdGlvbiByZWdp c3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4gVGhlDQo+IHZhbHVlIHdyaXR0ZW4gdG8gdGhlIFBD SQ0KPiArICBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGlzIHJldHVybmVkLiBUaGlzIGZ1bmN0aW9u DQo+IG11c3QgZ3VhcmFudGVlIHRoYXQgYWxsIFBDSQ0KPiArICByZWFkIGFuZCB3cml0ZSBvcGVy YXRpb25zIGFyZSBzZXJpYWxpemVkLiBFeHRyYSBsZWZ0DQo+IGJpdHMgaW4gYm90aCBBbmREYXRh IGFuZA0KPiArICBPckRhdGEgYXJlIHN0cmlwcGVkLg0KPiArDQo+ICsgIElmIEFkZHJlc3MgPiAw eDBGRkZGRkZGLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBBZGRyZXNzIGlzIG5vdCBhbGlnbmVk IG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuDQo+IEFTU0VSVCgpLg0KPiArICBJZiBTdGFydEJp dCBpcyBncmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEVuZEJpdCBpcyBn cmVhdGVyIHRoYW4gMTUsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEVuZEJpdCBpcyBsZXNzIHRo YW4gU3RhcnRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFuZERhdGEgaXMgbGFyZ2VyIHRo YW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2UNCj4gc3BlY2lmaWVkIGJ5DQo+ICsgICAgU3RhcnRC aXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgT3JEYXRhIGlzIGxhcmdlciB0 aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlDQo+IHNwZWNpZmllZCBieQ0KPiArICAgIFN0YXJ0 Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNz ICAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8NCj4gd3JpdGUuDQo+ICsgIEBwYXJhbSAg U3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdA0KPiBzaWduaWZpY2FudCBiaXQgaW4g dGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMTUuDQo+ICsg IEBwYXJhbSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0DQo+IHNpZ25pZmljYW50 IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4x NS4NCj4gKyAgQHBhcmFtICBBbmREYXRhICAgVGhlIHZhbHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kN Cj4gY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gKyAgQHBhcmFtICBPckRhdGEgICAgVGhlIHZh bHVlIHRvIE9SIHdpdGggdGhlIHJlc3VsdCBvZg0KPiB0aGUgQU5EIG9wZXJhdGlvbi4NCj4gKw0K PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSQ0KPiBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQxNg0KPiArRUZJQVBJDQo+ICtQ Y2lCaXRGaWVsZEFuZFRoZW5PcjE2ICgNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgIEFkZHJlc3MsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBT dGFydEJpdCwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEVuZEJpdCwN Cj4gKyAgSU4gICAgICBVSU5UMTYgICAgICAgICAgICAgICAgICAgIEFuZERhdGEsDQo+ICsgIElO ICAgICAgVUlOVDE2ICAgICAgICAgICAgICAgICAgICBPckRhdGENCj4gKyAgKQ0KPiArew0KPiAr ICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBs ZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVy biAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZHMgYSAzMi1iaXQgUENJIGNvbmZpZ3Vy YXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgUmVhZHMgYW5kIHJldHVybnMgdGhlIDMyLWJpdCBQ Q0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3RlciBzcGVjaWZpZWQgYnkgQWRkcmVzcy4NCj4gKyAg VGhpcyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQNCj4gd3Jp dGUgb3BlcmF0aW9ucyBhcmUNCj4gKyAgc2VyaWFsaXplZC4NCj4gKw0KPiArICBJZiBBZGRyZXNz ID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxp Z25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArICBA cGFyYW0gIEFkZHJlc3MgQWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsDQo+IERldmlj ZSwgRnVuY3Rpb24gYW5kDQo+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4NCj4gKw0KPiAr ICBAcmV0dXJuIFRoZSByZWFkIHZhbHVlIGZyb20gdGhlIFBDSSBjb25maWd1cmF0aW9uDQo+IHJl Z2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQzMg0KPiArRUZJQVBJDQo+ICtQY2lSZWFkMzIg KA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcw0KPiArICAp DQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRnVuY3Rpb24gJWEgaXMg bm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0KPiArICBBU1NFUlQgKEZBTFNFKTsN Cj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBXcml0ZXMgYSAzMi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgV3JpdGVzIHRoZSAzMi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4gc3BlY2lmaWVkIGJ5IEFkZHJlc3Mgd2l0aCB0 aGUNCj4gKyAgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiBWYWx1ZSBpcyByZXR1cm5lZC4gVGhp cw0KPiBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZQ0KPiArICB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQg d3JpdGUgb3BlcmF0aW9ucyBhcmUNCj4gc2VyaWFsaXplZC4NCj4gKw0KPiArICBJZiBBZGRyZXNz ID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxp Z25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArICBA cGFyYW0gIEFkZHJlc3MgQWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsDQo+IERldmlj ZSwgRnVuY3Rpb24gYW5kDQo+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4NCj4gKyAgQHBh cmFtICBWYWx1ZSAgIFRoZSB2YWx1ZSB0byB3cml0ZS4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2 YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3Rlci4NCj4gKw0K PiArKiovDQo+ICtVSU5UMzINCj4gK0VGSUFQSQ0KPiArUGNpV3JpdGUzMiAoDQo+ICsgIElOICAg ICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAgICAgIFVJTlQz MiAgICAgICAgICAgICAgICAgICAgVmFsdWUNCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERF QlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxuIiwg X19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgUGVyZm9ybXMgYSBiaXR3aXNlIE9SIG9mIGEgMzItYml0IFBDSSBj b25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyIHdpdGgNCj4gKyAgYSAzMi1iaXQgdmFsdWUuDQo+ICsN Cj4gKyAgUmVhZHMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlcg0KPiBzcGVj aWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiArICBiaXR3aXNlIE9SIGJldHdlZW4gdGhl IHJlYWQgcmVzdWx0IGFuZCB0aGUgdmFsdWUNCj4gc3BlY2lmaWVkIGJ5DQo+ICsgIE9yRGF0YSwg YW5kIHdyaXRlcyB0aGUgcmVzdWx0IHRvIHRoZSAzMi1iaXQgUENJDQo+IGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXINCj4gKyAgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRv IHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3RlciBpcw0KPiArICByZXR1cm5lZC4gVGhp cyBmdW5jdGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kNCj4gcmVhZCBhbmQgd3JpdGUg b3BlcmF0aW9ucw0KPiArICBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArICBJZiBBZGRyZXNzID4g MHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25l ZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFy YW0gIEFkZHJlc3MgQWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsDQo+IERldmljZSwg RnVuY3Rpb24gYW5kDQo+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4NCj4gKyAgQHBhcmFt ICBPckRhdGEgIFRoZSB2YWx1ZSB0byBPUiB3aXRoIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiBy ZWdpc3Rlci4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhl IFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQzMg0K PiArRUZJQVBJDQo+ICtQY2lPcjMyICgNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgIEFkZHJlc3MsDQo+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBP ckRhdGENCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1 bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNT RVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUGVy Zm9ybXMgYSBiaXR3aXNlIEFORCBvZiBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdp c3RlciB3aXRoIGEgMzItYml0DQo+ICsgIHZhbHVlLg0KPiArDQo+ICsgIFJlYWRzIHRoZSAzMi1i aXQgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4gc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBl cmZvcm1zIGENCj4gKyAgYml0d2lzZSBBTkQgYmV0d2VlbiB0aGUgcmVhZCByZXN1bHQgYW5kIHRo ZSB2YWx1ZQ0KPiBzcGVjaWZpZWQgYnkgQW5kRGF0YSwgYW5kDQo+ICsgIHdyaXRlcyB0aGUgcmVz dWx0IHRvIHRoZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIgc3BlY2lmaWVk IGJ5DQo+ICsgIEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kgY29uZmlndXJh dGlvbg0KPiByZWdpc3RlciBpcyByZXR1cm5lZC4NCj4gKyAgVGhpcyBmdW5jdGlvbiBtdXN0IGd1 YXJhbnRlZSB0aGF0IGFsbCBQQ0kgcmVhZCBhbmQNCj4gd3JpdGUgb3BlcmF0aW9ucyBhcmUNCj4g KyAgc2VyaWFsaXplZC4NCj4gKw0KPiArICBJZiBBZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBB U1NFUlQoKS4NCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3Vu ZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKw0KPiArICBAcGFyYW0gIEFkZHJlc3MgQWRkcmVz cyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMsDQo+IERldmljZSwgRnVuY3Rpb24gYW5kDQo+ICsg ICAgICAgICAgICAgICAgICBSZWdpc3Rlci4NCj4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1 ZSB0byBBTkQgd2l0aCB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4g KyAgQHJldHVybiBUaGUgdmFsdWUgd3JpdHRlbiBiYWNrIHRvIHRoZSBQQ0kNCj4gY29uZmlndXJh dGlvbiByZWdpc3Rlci4NCj4gKw0KPiArKiovDQo+ICtVSU5UMzINCj4gK0VGSUFQSQ0KPiArUGNp QW5kMzIgKA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywN Cj4gKyAgSU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEFuZERhdGENCj4gKyAgKQ0K PiArew0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5v dA0KPiBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUGVyZm9ybXMgYSBiaXR3aXNl IEFORCBvZiBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3RlciB3aXRoIGEgMzIt Yml0DQo+ICsgIHZhbHVlLCBmb2xsb3dlZCBhICBiaXR3aXNlIE9SIHdpdGggYW5vdGhlciAzMi1i aXQNCj4gdmFsdWUuDQo+ICsNCj4gKyAgUmVhZHMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlv biByZWdpc3Rlcg0KPiBzcGVjaWZpZWQgYnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiArICBiaXR3 aXNlIEFORCBiZXR3ZWVuIHRoZSByZWFkIHJlc3VsdCBhbmQgdGhlIHZhbHVlDQo+IHNwZWNpZmll ZCBieSBBbmREYXRhLA0KPiArICBwZXJmb3JtcyBhIGJpdHdpc2UgT1IgYmV0d2VlbiB0aGUgcmVz dWx0IG9mIHRoZSBBTkQNCj4gb3BlcmF0aW9uIGFuZA0KPiArICB0aGUgdmFsdWUgc3BlY2lmaWVk IGJ5IE9yRGF0YSwgYW5kIHdyaXRlcyB0aGUgcmVzdWx0DQo+IHRvIHRoZSAzMi1iaXQgUENJDQo+ ICsgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZQ0KPiB2 YWx1ZSB3cml0dGVuIHRvIHRoZSBQQ0kNCj4gKyAgY29uZmlndXJhdGlvbiByZWdpc3RlciBpcyBy ZXR1cm5lZC4gVGhpcyBmdW5jdGlvbg0KPiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kNCj4g KyAgcmVhZCBhbmQgd3JpdGUgb3BlcmF0aW9ucyBhcmUgc2VyaWFsaXplZC4NCj4gKw0KPiArICBJ ZiBBZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQWRkcmVzcyBp cyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4g Kw0KPiArICBAcGFyYW0gIEFkZHJlc3MgQWRkcmVzcyB0aGF0IGVuY29kZXMgdGhlIFBDSSBCdXMs DQo+IERldmljZSwgRnVuY3Rpb24gYW5kDQo+ICsgICAgICAgICAgICAgICAgICBSZWdpc3Rlci4N Cj4gKyAgQHBhcmFtICBBbmREYXRhIFRoZSB2YWx1ZSB0byBBTkQgd2l0aCB0aGUgUENJDQo+IGNv bmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsgIEBwYXJhbSAgT3JEYXRhICBUaGUgdmFsdWUgdG8g T1Igd2l0aCB0aGUgcmVzdWx0IG9mDQo+IHRoZSBBTkQgb3BlcmF0aW9uLg0KPiArDQo+ICsgIEBy ZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtFRklBUEkNCj4gK1BjaUFuZFRo ZW5PcjMyICgNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3Ms DQo+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBBbmREYXRhLA0KPiArICBJ TiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgT3JEYXRhDQo+ICsgICkNCj4gK3sNCj4g KyAgREVCVUcgKChERUJVR19FUlJPUiwgIkVSUk9SOiBGdW5jdGlvbiAlYSBpcyBub3QNCj4gaW1w bGVtZW50ZWRcbiIsIF9fZnVuY19fKSk7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1 cm4gMDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFJlYWRzIGEgYml0IGZpZWxkIG9mIGEgUENJ IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyAgUmVhZHMgdGhlIGJpdCBmaWVsZCBp biBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWdpc3Rlci4gVGhlIGJpdCBmaWVsZCBp cw0KPiArICBzcGVjaWZpZWQgYnkgdGhlIFN0YXJ0Qml0IGFuZCB0aGUgRW5kQml0LiBUaGUgdmFs dWUNCj4gb2YgdGhlIGJpdCBmaWVsZCBpcw0KPiArICByZXR1cm5lZC4NCj4gKw0KPiArICBJZiBB ZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQWRkcmVzcyBpcyBu b3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKyAg SWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBF bmRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBFbmRCaXQg aXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBwYXJhbSAg QWRkcmVzcyAgIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHRvDQo+IHJlYWQuDQo+ICsgIEBw YXJhbSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFzdA0KPiBzaWduaWZpY2FudCBi aXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEu DQo+ICsgIEBwYXJhbSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9mIHRoZSBtb3N0DQo+IHNpZ25p ZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAgICAgICAgICAgICAgICBSYW5n ZSAwLi4zMS4NCj4gKw0KPiArICBAcmV0dXJuIFRoZSB2YWx1ZSBvZiB0aGUgYml0IGZpZWxkIHJl YWQgZnJvbSB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyoqLw0K PiArVUlOVDMyDQo+ICtFRklBUEkNCj4gK1BjaUJpdEZpZWxkUmVhZDMyICgNCj4gKyAgSU4gICAg ICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEFkZHJlc3MsDQo+ICsgIElOICAgICAgVUlOVE4g ICAgICAgICAgICAgICAgICAgICBTdGFydEJpdCwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIEVuZEJpdA0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJS T1IsICJFUlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNf XykpOw0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBXcml0ZXMgYSBiaXQgZmllbGQgdG8gYSBQQ0kgY29uZmlndXJhdGlvbiByZWdp c3Rlci4NCj4gKw0KPiArICBXcml0ZXMgVmFsdWUgdG8gdGhlIGJpdCBmaWVsZCBvZiB0aGUgUENJ DQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuIFRoZSBiaXQNCj4gKyAgZmllbGQgaXMgc3BlY2lm aWVkIGJ5IHRoZSBTdGFydEJpdCBhbmQgdGhlIEVuZEJpdC4NCj4gQWxsIG90aGVyIGJpdHMgaW4g dGhlDQo+ICsgIGRlc3RpbmF0aW9uIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIGFyZQ0KPiBw cmVzZXJ2ZWQuIFRoZSBuZXcgdmFsdWUgb2YgdGhlDQo+ICsgIDMyLWJpdCByZWdpc3RlciBpcyBy ZXR1cm5lZC4NCj4gKw0KPiArICBJZiBBZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQo KS4NCj4gKyAgSWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwg dGhlbg0KPiBBU1NFUlQoKS4NCj4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0 aGVuIEFTU0VSVCgpLg0KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFT U0VSVCgpLg0KPiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VS VCgpLg0KPiArICBJZiBWYWx1ZSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5n ZQ0KPiBzcGVjaWZpZWQgYnkNCj4gKyAgICBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VS VCgpLg0KPiArDQo+ICsgIEBwYXJhbSAgQWRkcmVzcyAgIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lz dGVyIHRvDQo+IHdyaXRlLg0KPiArICBAcGFyYW0gIFN0YXJ0Qml0ICBUaGUgb3JkaW5hbCBvZiB0 aGUgbGVhc3QNCj4gc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAg ICAgICAgICAgICAgIFJhbmdlIDAuLjMxLg0KPiArICBAcGFyYW0gIEVuZEJpdCAgICBUaGUgb3Jk aW5hbCBvZiB0aGUgbW9zdA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4g KyAgICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEuDQo+ICsgIEBwYXJhbSAgVmFsdWUgICAg IE5ldyB2YWx1ZSBvZiB0aGUgYml0IGZpZWxkLg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHZhbHVl IHdyaXR0ZW4gYmFjayB0byB0aGUgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsN Cj4gKyoqLw0KPiArVUlOVDMyDQo+ICtFRklBUEkNCj4gK1BjaUJpdEZpZWxkV3JpdGUzMiAoDQo+ ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAg ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRCaXQsDQo+ICsgIElOICAgICAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBFbmRCaXQsDQo+ICsgIElOICAgICAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICBWYWx1ZQ0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJS T1IsICJFUlJPUjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNf XykpOw0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBSZWFkcyBhIGJpdCBmaWVsZCBpbiBhIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlv biwNCj4gcGVyZm9ybXMgYSBiaXR3aXNlIE9SLCBhbmQNCj4gKyAgd3JpdGVzIHRoZSByZXN1bHQg YmFjayB0byB0aGUgYml0IGZpZWxkIGluIHRoZSAzMi0NCj4gYml0IHBvcnQuDQo+ICsNCj4gKyAg UmVhZHMgdGhlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3Rlcg0KPiBzcGVjaWZpZWQg YnkgQWRkcmVzcywgcGVyZm9ybXMgYQ0KPiArICBiaXR3aXNlIE9SIGJldHdlZW4gdGhlIHJlYWQg cmVzdWx0IGFuZCB0aGUgdmFsdWUNCj4gc3BlY2lmaWVkIGJ5DQo+ICsgIE9yRGF0YSwgYW5kIHdy aXRlcyB0aGUgcmVzdWx0IHRvIHRoZSAzMi1iaXQgUENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0 ZXINCj4gKyAgc3BlY2lmaWVkIGJ5IEFkZHJlc3MuIFRoZSB2YWx1ZSB3cml0dGVuIHRvIHRoZSBQ Q0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3RlciBpcw0KPiArICByZXR1cm5lZC4gVGhpcyBmdW5j dGlvbiBtdXN0IGd1YXJhbnRlZSB0aGF0IGFsbCBQQ0kNCj4gcmVhZCBhbmQgd3JpdGUgb3BlcmF0 aW9ucw0KPiArICBhcmUgc2VyaWFsaXplZC4gRXh0cmEgbGVmdCBiaXRzIGluIE9yRGF0YSBhcmUN Cj4gc3RyaXBwZWQuDQo+ICsNCj4gKyAgSWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNT RVJUKCkuDQo+ICsgIElmIEFkZHJlc3MgaXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRh cnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAz MSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAzMSwgdGhl biBBU1NFUlQoKS4NCj4gKyAgSWYgRW5kQml0IGlzIGxlc3MgdGhhbiBTdGFydEJpdCwgdGhlbiBB U1NFUlQoKS4NCj4gKyAgSWYgT3JEYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVl IHJhbmdlDQo+IHNwZWNpZmllZCBieQ0KPiArICAgIFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4g QVNTRVJUKCkuDQo+ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNzICAgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXIgdG8NCj4gd3JpdGUuDQo+ICsgIEBwYXJhbSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFs IG9mIHRoZSBsZWFzdA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAg ICAgICAgICAgICAgICAgICAgUmFuZ2UgMC4uMzEuDQo+ICsgIEBwYXJhbSAgRW5kQml0ICAgIFRo ZSBvcmRpbmFsIG9mIHRoZSBtb3N0DQo+IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxk Lg0KPiArICAgICAgICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4NCj4gKyAgQHBhcmFtICBPckRh dGEgICAgVGhlIHZhbHVlIHRvIE9SIHdpdGggdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lz dGVyLg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUgUENJ DQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ICtF RklBUEkNCj4gK1BjaUJpdEZpZWxkT3IzMiAoDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAg ICAgICAgICAgICBBZGRyZXNzLA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAg ICAgU3RhcnRCaXQsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBFbmRC aXQsDQo+ICsgIElOICAgICAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBPckRhdGENCj4gKyAg KQ0KPiArew0KPiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlz IG5vdA0KPiBpbXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7 DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZHMgYSBiaXQgZmll bGQgaW4gYSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gcmVnaXN0ZXIsIHBlcmZvcm1zIGEg Yml0d2lzZQ0KPiArICBBTkQsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQg ZmllbGQgaW4NCj4gdGhlIDMyLWJpdCByZWdpc3Rlci4NCj4gKw0KPiArICBSZWFkcyB0aGUgMzIt Yml0IFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyDQo+IHNwZWNpZmllZCBieSBBZGRyZXNzLCBw ZXJmb3JtcyBhDQo+ICsgIGJpdHdpc2UgQU5EIGJldHdlZW4gdGhlIHJlYWQgcmVzdWx0IGFuZCB0 aGUgdmFsdWUNCj4gc3BlY2lmaWVkIGJ5IEFuZERhdGEsIGFuZA0KPiArICB3cml0ZXMgdGhlIHJl c3VsdCB0byB0aGUgMzItYml0IFBDSSBjb25maWd1cmF0aW9uDQo+IHJlZ2lzdGVyIHNwZWNpZmll ZCBieQ0KPiArICBBZGRyZXNzLiBUaGUgdmFsdWUgd3JpdHRlbiB0byB0aGUgUENJIGNvbmZpZ3Vy YXRpb24NCj4gcmVnaXN0ZXIgaXMgcmV0dXJuZWQuDQo+ICsgIFRoaXMgZnVuY3Rpb24gbXVzdCBn dWFyYW50ZWUgdGhhdCBhbGwgUENJIHJlYWQgYW5kDQo+IHdyaXRlIG9wZXJhdGlvbnMgYXJlDQo+ ICsgIHNlcmlhbGl6ZWQuIEV4dHJhIGxlZnQgYml0cyBpbiBBbmREYXRhIGFyZSBzdHJpcHBlZC4N Cj4gKw0KPiArICBJZiBBZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAg SWYgQWRkcmVzcyBpcyBub3QgYWxpZ25lZCBvbiBhIDMyLWJpdCBib3VuZGFyeSwgdGhlbg0KPiBB U1NFUlQoKS4NCj4gKyAgSWYgU3RhcnRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VS VCgpLg0KPiArICBJZiBFbmRCaXQgaXMgZ3JlYXRlciB0aGFuIDMxLCB0aGVuIEFTU0VSVCgpLg0K PiArICBJZiBFbmRCaXQgaXMgbGVzcyB0aGFuIFN0YXJ0Qml0LCB0aGVuIEFTU0VSVCgpLg0KPiAr ICBJZiBBbmREYXRhIGlzIGxhcmdlciB0aGFuIHRoZSBiaXRtYXNrIHZhbHVlIHJhbmdlDQo+IHNw ZWNpZmllZCBieQ0KPiArICAgIFN0YXJ0Qml0IGFuZCBFbmRCaXQsIHRoZW4gQVNTRVJUKCkuDQo+ ICsNCj4gKyAgQHBhcmFtICBBZGRyZXNzICAgUENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgdG8N Cj4gd3JpdGUuDQo+ICsgIEBwYXJhbSAgU3RhcnRCaXQgIFRoZSBvcmRpbmFsIG9mIHRoZSBsZWFz dA0KPiBzaWduaWZpY2FudCBiaXQgaW4gdGhlIGJpdCBmaWVsZC4NCj4gKyAgICAgICAgICAgICAg ICAgICAgUmFuZ2UgMC4uMzEuDQo+ICsgIEBwYXJhbSAgRW5kQml0ICAgIFRoZSBvcmRpbmFsIG9m IHRoZSBtb3N0DQo+IHNpZ25pZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAg ICAgICAgICAgICAgICBSYW5nZSAwLi4zMS4NCj4gKyAgQHBhcmFtICBBbmREYXRhICAgVGhlIHZh bHVlIHRvIEFORCB3aXRoIHRoZSBQQ0kNCj4gY29uZmlndXJhdGlvbiByZWdpc3Rlci4NCj4gKw0K PiArICBAcmV0dXJuIFRoZSB2YWx1ZSB3cml0dGVuIGJhY2sgdG8gdGhlIFBDSQ0KPiBjb25maWd1 cmF0aW9uIHJlZ2lzdGVyLg0KPiArDQo+ICsqKi8NCj4gK1VJTlQzMg0KPiArRUZJQVBJDQo+ICtQ Y2lCaXRGaWVsZEFuZDMyICgNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAg IEFkZHJlc3MsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBTdGFydEJp dCwNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIEVuZEJpdCwNCj4gKyAg SU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIEFuZERhdGENCj4gKyAgKQ0KPiArew0K PiArICBERUJVRyAoKERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5vdA0KPiBp bXBsZW1lbnRlZFxuIiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJl dHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgUmVhZHMgYSBiaXQgZmllbGQgaW4gYSAz Mi1iaXQgcG9ydCwgcGVyZm9ybXMgYQ0KPiBiaXR3aXNlIEFORCBmb2xsb3dlZCBieSBhDQo+ICsg IGJpdHdpc2UgT1IsIGFuZCB3cml0ZXMgdGhlIHJlc3VsdCBiYWNrIHRvIHRoZSBiaXQNCj4gZmll bGQgaW4gdGhlDQo+ICsgIDMyLWJpdCBwb3J0Lg0KPiArDQo+ICsgIFJlYWRzIHRoZSAzMi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXINCj4gc3BlY2lmaWVkIGJ5IEFkZHJlc3MsIHBlcmZv cm1zIGENCj4gKyAgYml0d2lzZSBBTkQgZm9sbG93ZWQgYnkgYSBiaXR3aXNlIE9SIGJldHdlZW4g dGhlDQo+IHJlYWQgcmVzdWx0IGFuZA0KPiArICB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IEFuZERh dGEsIGFuZCB3cml0ZXMgdGhlDQo+IHJlc3VsdCB0byB0aGUgMzItYml0IFBDSQ0KPiArICBjb25m aWd1cmF0aW9uIHJlZ2lzdGVyIHNwZWNpZmllZCBieSBBZGRyZXNzLiBUaGUNCj4gdmFsdWUgd3Jp dHRlbiB0byB0aGUgUENJDQo+ICsgIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMgcmV0dXJuZWQu IFRoaXMgZnVuY3Rpb24NCj4gbXVzdCBndWFyYW50ZWUgdGhhdCBhbGwgUENJDQo+ICsgIHJlYWQg YW5kIHdyaXRlIG9wZXJhdGlvbnMgYXJlIHNlcmlhbGl6ZWQuIEV4dHJhIGxlZnQNCj4gYml0cyBp biBib3RoIEFuZERhdGEgYW5kDQo+ICsgIE9yRGF0YSBhcmUgc3RyaXBwZWQuDQo+ICsNCj4gKyAg SWYgQWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmIEFkZHJlc3Mg aXMgbm90IGFsaWduZWQgb24gYSAzMi1iaXQgYm91bmRhcnksIHRoZW4NCj4gQVNTRVJUKCkuDQo+ ICsgIElmIFN0YXJ0Qml0IGlzIGdyZWF0ZXIgdGhhbiAzMSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAg SWYgRW5kQml0IGlzIGdyZWF0ZXIgdGhhbiAzMSwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgRW5k Qml0IGlzIGxlc3MgdGhhbiBTdGFydEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgQW5kRGF0 YSBpcyBsYXJnZXIgdGhhbiB0aGUgYml0bWFzayB2YWx1ZSByYW5nZQ0KPiBzcGVjaWZpZWQgYnkN Cj4gKyAgICBTdGFydEJpdCBhbmQgRW5kQml0LCB0aGVuIEFTU0VSVCgpLg0KPiArICBJZiBPckRh dGEgaXMgbGFyZ2VyIHRoYW4gdGhlIGJpdG1hc2sgdmFsdWUgcmFuZ2UNCj4gc3BlY2lmaWVkIGJ5 DQo+ICsgICAgU3RhcnRCaXQgYW5kIEVuZEJpdCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0KPiArICBA cGFyYW0gIEFkZHJlc3MgICBQQ0kgY29uZmlndXJhdGlvbiByZWdpc3RlciB0bw0KPiB3cml0ZS4N Cj4gKyAgQHBhcmFtICBTdGFydEJpdCAgVGhlIG9yZGluYWwgb2YgdGhlIGxlYXN0DQo+IHNpZ25p ZmljYW50IGJpdCBpbiB0aGUgYml0IGZpZWxkLg0KPiArICAgICAgICAgICAgICAgICAgICBSYW5n ZSAwLi4zMS4NCj4gKyAgQHBhcmFtICBFbmRCaXQgICAgVGhlIG9yZGluYWwgb2YgdGhlIG1vc3QN Cj4gc2lnbmlmaWNhbnQgYml0IGluIHRoZSBiaXQgZmllbGQuDQo+ICsgICAgICAgICAgICAgICAg ICAgIFJhbmdlIDAuLjMxLg0KPiArICBAcGFyYW0gIEFuZERhdGEgICBUaGUgdmFsdWUgdG8gQU5E IHdpdGggdGhlIFBDSQ0KPiBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLg0KPiArICBAcGFyYW0gIE9y RGF0YSAgICBUaGUgdmFsdWUgdG8gT1Igd2l0aCB0aGUgcmVzdWx0IG9mDQo+IHRoZSBBTkQgb3Bl cmF0aW9uLg0KPiArDQo+ICsgIEByZXR1cm4gVGhlIHZhbHVlIHdyaXR0ZW4gYmFjayB0byB0aGUg UENJDQo+IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIuDQo+ICsNCj4gKyoqLw0KPiArVUlOVDMyDQo+ ICtFRklBUEkNCj4gK1BjaUJpdEZpZWxkQW5kVGhlbk9yMzIgKA0KPiArICBJTiAgICAgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgQWRkcmVzcywNCj4gKyAgSU4gICAgICBVSU5UTiAgICAgICAg ICAgICAgICAgICAgIFN0YXJ0Qml0LA0KPiArICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgRW5kQml0LA0KPiArICBJTiAgICAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgQW5k RGF0YSwNCj4gKyAgSU4gICAgICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIE9yRGF0YQ0KPiAr ICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJPUjogRnVuY3Rpb24gJWEg aXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0KPiArICBBU1NFUlQgKEZBTFNF KTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBSZWFkcyBhIHJhbmdl IG9mIFBDSSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBpbnRvIGENCj4gY2FsbGVyIHN1cHBsaWVk IGJ1ZmZlci4NCj4gKw0KPiArICBSZWFkcyB0aGUgcmFuZ2Ugb2YgUENJIGNvbmZpZ3VyYXRpb24g cmVnaXN0ZXJzDQo+IHNwZWNpZmllZCBieSBTdGFydEFkZHJlc3MgYW5kDQo+ICsgIFNpemUgaW50 byB0aGUgYnVmZmVyIHNwZWNpZmllZCBieSBCdWZmZXIuIFRoaXMNCj4gZnVuY3Rpb24gb25seSBh bGxvd3MgdGhlIFBDSQ0KPiArICBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBmcm9tIGEgc2luZ2xl IFBDSSBmdW5jdGlvbg0KPiB0byBiZSByZWFkLiBTaXplIGlzDQo+ICsgIHJldHVybmVkLiBXaGVu IHBvc3NpYmxlIDMyLWJpdCBQQ0kgY29uZmlndXJhdGlvbg0KPiByZWFkIGN5Y2xlcyBhcmUgdXNl ZCB0byByZWFkDQo+ICsgIGZyb20gU3RhcnRBZHJlc3MgdG8gU3RhcnRBZGRyZXNzICsgU2l6ZS4g RHVlIHRvDQo+IGFsaWdubWVudCByZXN0cmljdGlvbnMsIDgtYml0DQo+ICsgIGFuZCAxNi1iaXQg UENJIGNvbmZpZ3VyYXRpb24gcmVhZCBjeWNsZXMgbWF5IGJlIHVzZWQNCj4gYXQgdGhlIGJlZ2lu bmluZyBhbmQgdGhlDQo+ICsgIGVuZCBvZiB0aGUgcmFuZ2UuDQo+ICsNCj4gKyAgSWYgU3RhcnRB ZGRyZXNzID4gMHgwRkZGRkZGRiwgdGhlbiBBU1NFUlQoKS4NCj4gKyAgSWYgKChTdGFydEFkZHJl c3MgJiAweEZGRikgKyBTaXplKSA+IDB4MTAwMCwgdGhlbg0KPiBBU1NFUlQoKS4NCj4gKyAgSWYg U2l6ZSA+IDAgYW5kIEJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiArDQo+ICsgIEBw YXJhbSAgU3RhcnRBZGRyZXNzICBTdGFydGluZyBhZGRyZXNzIHRoYXQgZW5jb2Rlcw0KPiB0aGUg UENJIEJ1cywgRGV2aWNlLA0KPiArICAgICAgICAgICAgICAgICAgICAgICAgRnVuY3Rpb24gYW5k IFJlZ2lzdGVyLg0KPiArICBAcGFyYW0gIFNpemUgICAgICAgICAgU2l6ZSBpbiBieXRlcyBvZiB0 aGUgdHJhbnNmZXIuDQo+ICsgIEBwYXJhbSAgQnVmZmVyICAgICAgICBQb2ludGVyIHRvIGEgYnVm ZmVyIHJlY2VpdmluZw0KPiB0aGUgZGF0YSByZWFkLg0KPiArDQo+ICsgIEByZXR1cm4gU2l6ZQ0K PiArDQo+ICsqKi8NCj4gK1VJTlRODQo+ICtFRklBUEkNCj4gK1BjaVJlYWRCdWZmZXIgKA0KPiAr ICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgU3RhcnRBZGRyZXNzLA0KPiArICBJ TiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgU2l6ZSwNCj4gKyAgT1VUICAgICBWT0lE ICAgICAgICAgICAgICAgICAgICAgICpCdWZmZXINCj4gKyAgKQ0KPiArew0KPiArICBERUJVRyAo KERFQlVHX0VSUk9SLCAiRVJST1I6IEZ1bmN0aW9uICVhIGlzIG5vdA0KPiBpbXBsZW1lbnRlZFxu IiwgX19mdW5jX18pKTsNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgQ29waWVzIHRoZSBkYXRhIGluIGEgY2FsbGVyIHN1cHBsaWVk IGJ1ZmZlciB0byBhDQo+IHNwZWNpZmllZCByYW5nZSBvZiBQQ0kNCj4gKyAgY29uZmlndXJhdGlv biBzcGFjZS4NCj4gKw0KPiArICBXcml0ZXMgdGhlIHJhbmdlIG9mIFBDSSBjb25maWd1cmF0aW9u IHJlZ2lzdGVycw0KPiBzcGVjaWZpZWQgYnkgU3RhcnRBZGRyZXNzIGFuZA0KPiArICBTaXplIGZy b20gdGhlIGJ1ZmZlciBzcGVjaWZpZWQgYnkgQnVmZmVyLiBUaGlzDQo+IGZ1bmN0aW9uIG9ubHkg YWxsb3dzIHRoZSBQQ0kNCj4gKyAgY29uZmlndXJhdGlvbiByZWdpc3RlcnMgZnJvbSBhIHNpbmds ZSBQQ0kgZnVuY3Rpb24NCj4gdG8gYmUgd3JpdHRlbi4gU2l6ZSBpcw0KPiArICByZXR1cm5lZC4g V2hlbiBwb3NzaWJsZSAzMi1iaXQgUENJIGNvbmZpZ3VyYXRpb24NCj4gd3JpdGUgY3ljbGVzIGFy ZSB1c2VkIHRvDQo+ICsgIHdyaXRlIGZyb20gU3RhcnRBZHJlc3MgdG8gU3RhcnRBZGRyZXNzICsg U2l6ZS4gRHVlDQo+IHRvIGFsaWdubWVudCByZXN0cmljdGlvbnMsDQo+ICsgIDgtYml0IGFuZCAx Ni1iaXQgUENJIGNvbmZpZ3VyYXRpb24gd3JpdGUgY3ljbGVzIG1heQ0KPiBiZSB1c2VkIGF0IHRo ZSBiZWdpbm5pbmcNCj4gKyAgYW5kIHRoZSBlbmQgb2YgdGhlIHJhbmdlLg0KPiArDQo+ICsgIElm IFN0YXJ0QWRkcmVzcyA+IDB4MEZGRkZGRkYsIHRoZW4gQVNTRVJUKCkuDQo+ICsgIElmICgoU3Rh cnRBZGRyZXNzICYgMHhGRkYpICsgU2l6ZSkgPiAweDEwMDAsIHRoZW4NCj4gQVNTRVJUKCkuDQo+ ICsgIElmIFNpemUgPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gKw0K PiArICBAcGFyYW0gIFN0YXJ0QWRkcmVzcyAgU3RhcnRpbmcgYWRkcmVzcyB0aGF0IGVuY29kZXMN Cj4gdGhlIFBDSSBCdXMsIERldmljZSwNCj4gKyAgICAgICAgICAgICAgICAgICAgICAgIEZ1bmN0 aW9uIGFuZCBSZWdpc3Rlci4NCj4gKyAgQHBhcmFtICBTaXplICAgICAgICAgIFNpemUgaW4gYnl0 ZXMgb2YgdGhlIHRyYW5zZmVyLg0KPiArICBAcGFyYW0gIEJ1ZmZlciAgICAgICAgUG9pbnRlciB0 byBhIGJ1ZmZlciBjb250YWluaW5nDQo+IHRoZSBkYXRhIHRvIHdyaXRlLg0KPiArDQo+ICsgIEBy ZXR1cm4gU2l6ZSB3cml0dGVuIHRvIFN0YXJ0QWRkcmVzcy4NCj4gKw0KPiArKiovDQo+ICtVSU5U Tg0KPiArRUZJQVBJDQo+ICtQY2lXcml0ZUJ1ZmZlciAoDQo+ICsgIElOICAgICAgVUlOVE4gICAg ICAgICAgICAgICAgICAgICBTdGFydEFkZHJlc3MsDQo+ICsgIElOICAgICAgVUlOVE4gICAgICAg ICAgICAgICAgICAgICBTaXplLA0KPiArICBJTiAgICAgIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgKkJ1ZmZlcg0KPiArICApDQo+ICt7DQo+ICsgIERFQlVHICgoREVCVUdfRVJST1IsICJFUlJP UjogRnVuY3Rpb24gJWEgaXMgbm90DQo+IGltcGxlbWVudGVkXG4iLCBfX2Z1bmNfXykpOw0KPiAr ICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+IGRpZmYgLS1naXQgYS9N ZGVQa2cvTGlicmFyeS9QY2lMaWJOdWxsL1BjaUxpYk51bGwuaW5mDQo+IGIvTWRlUGtnL0xpYnJh cnkvUGNpTGliTnVsbC9QY2lMaWJOdWxsLmluZg0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleA0KPiAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNzc4YjQw MjVlNTUwDQo+IDkzOWE2ZDEzYzVjYzQ2NjU2N2NlOTllYmFhNQ0KPiAtLS0gL2Rldi9udWxsDQo+ ICsrKyBiL01kZVBrZy9MaWJyYXJ5L1BjaUxpYk51bGwvUGNpTGliTnVsbC5pbmYNCj4gQEAgLTAs MCArMSwyNSBAQA0KPiArIy8qKiBAZmlsZQ0KPiArIw0KPiArIyAgTnVsbCBpbXBsZW1lbnRhdGlv biBvZiBQY2lsaWINCj4gKyMNCj4gKyMgIENvcHlyaWdodCAoYykgMjAxOSwgQVJNIExpbWl0ZWQu IEFsbCByaWdodHMNCj4gcmVzZXJ2ZWQuDQo+ICsjDQo+ICsjICBTUERYLUxpY2Vuc2UtSWRlbnRp ZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiArIw0KPiArIyoqLw0KPiArDQo+ICtbRGVmaW5l c10NCj4gKyAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgICAgID0gMHgwMDAxMDAxQg0KPiAr ICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBQY2lMaWJOdWxsDQo+ICsgIEZJTEVf R1VJRCAgICAgICAgICAgICAgICAgICAgICA9IEMyRTk1RUNDLTlBMzktNDI5My0NCj4gOUY1Mi00 QzgyQkEzNzA5NTINCj4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAgID0gQkFTRQ0K PiArICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAgPSAxLjANCj4gKyAgTElCUkFSWV9D TEFTUyAgICAgICAgICAgICAgICAgID0gUGNpTGliDQo+ICsNCj4gKw0KPiArW1NvdXJjZXNdDQo+ ICsgIFBjaUxpYk51bGwuYw0KPiArDQo+ICtbUGFja2FnZXNdDQo+ICsgIE1kZVBrZy9NZGVQa2cu ZGVjDQo+ICsNCj4gLS0NCj4gJ0d1aWQoQ0UxNjU2NjktM0VGMy00OTNGLUI4NUQtNjE5MEVFNUI5 NzU5KScNCg0K