From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by mx.groups.io with SMTP id smtpd.web12.9673.1596160534918507640 for ; Thu, 30 Jul 2020 18:55:35 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@intel.onmicrosoft.com header.s=selector2-intel-onmicrosoft-com header.b=c0WPfuDI; spf=pass (domain: intel.com, ip: 134.134.136.126, mailfrom: liming.gao@intel.com) IronPort-SDR: V8o3RkN689XEOzyFugvYCl0+LgoyuIFqMDg4bwtZc6F/bEH+5gJG3RE6g+vmoNH9NCtx1xC3i/ GcObWPJXmSYQ== X-IronPort-AV: E=McAfee;i="6000,8403,9698"; a="139279960" X-IronPort-AV: E=Sophos;i="5.75,416,1589266800"; d="scan'208";a="139279960" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga007.fm.intel.com ([10.253.24.52]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jul 2020 18:55:33 -0700 IronPort-SDR: rrJGHxgRGvyFvlk/ElcfXa5pLjgOEgvF7ZogFZjdN/dkveP9sbnxIbQkQvIIVLfe0GNXtKo9U9 uulu1Q2QgJnw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.75,416,1589266800"; d="scan'208";a="273087049" Received: from fmsmsx603.amr.corp.intel.com ([10.18.126.83]) by fmsmga007.fm.intel.com with ESMTP; 30 Jul 2020 18:55:33 -0700 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) 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; Thu, 30 Jul 2020 18:55:24 -0700 Received: from FMSEDG002.ED.cps.intel.com (10.1.192.134) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Thu, 30 Jul 2020 18:55:24 -0700 Received: from NAM10-BN7-obe.outbound.protection.outlook.com (104.47.70.106) by edgegateway.intel.com (192.55.55.69) with Microsoft SMTP Server (TLS) id 14.3.439.0; Thu, 30 Jul 2020 18:55:18 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=NEhey8YFmx4FaoznjbOP7hpbz0zYMyDtgoTcDrqrMQDrLj4DX1pSyCJ/2R9Z7gNv/QbRXsVLbBTTtr4q4xvO462V3+AsMwLiMRSQngO8PnYl+U1aaw1/zdVflyT8zrJ44WKpcCix+YqDcbAexKAoC0+YGHECmkeDnX+KMMR4366LnGqmEjS/8EIB+ByY3FcT0vuxdfH5zQ/NECaHR9oYutSP2Sz6+rbGRG6HGDSvLhdb40VHiTUzhnqcuLw4DgvNFLcav5f5iK+OTKCnlLGZPOJfVgS0xkSZ6ekaCjFvbzRVRnXs64R9SI4JRdQg1MGG+2rFNp1sdkguXjCRm6qz0g== 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=ngOSp9U0usmdcDi/ys/uPFhhmn23xvXw3CQd+75BZao=; b=GOU9j0hwMKJ2U1AnH+2CmFObcnNi59H9Rn7WNg6mbtoJ7tUzn9VgYZpp8m3yx4wUGxCrMxaWX+G3HfTHIoQhfR3/L9HfXJ60p2TFzgGf6y2oQfheALG75Ep8stA/Bm5F10bGWFbxJU2QNBiHbJ8aC2pfeRxyteTqBhD1Euy9Wuwk7sFwmrTtBakwe4nM720tED8FvNipYeAvtUESJHDMsqf3IHU/3Ksd6+ig3xQ0axPWau92y+nHqZmWuESjYztp7D3jsfPNXjY8FAq/aueZtj/lqsFjkCUtnKvUrgPkWLtbJ0NmiUzR1nRouKP4BgNlRI4JbXj5pArBj0hTXS+qNg== 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=ngOSp9U0usmdcDi/ys/uPFhhmn23xvXw3CQd+75BZao=; b=c0WPfuDIoANWAkS+sUmLD17TYIaXuR5UEBwjiSn5mrWxv2/SpjxUytTM27XreGu5+z4zTyp/UsFwoKGhYlJ6Y/KK464R+9mZJXxNpPawKXIpy2l2GJrYM9lY1GNsFQX/nMrTTQomYPnvvnNqSeW+TxVPo0XyxHf5e674aYo4e5w= Received: from CY4PR11MB1526.namprd11.prod.outlook.com (2603:10b6:910:7::10) by CY4PR11MB2007.namprd11.prod.outlook.com (2603:10b6:903:30::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3216.25; Fri, 31 Jul 2020 01:55:14 +0000 Received: from CY4PR11MB1526.namprd11.prod.outlook.com ([fe80::f8c4:711:84e3:4c97]) by CY4PR11MB1526.namprd11.prod.outlook.com ([fe80::f8c4:711:84e3:4c97%4]) with mapi id 15.20.3216.034; Fri, 31 Jul 2020 01:55:14 +0000 From: "Liming Gao" To: "devel@edk2.groups.io" , "mw@semihalf.com" , Leif Lindholm CC: "Zhang, Shenglei" , Ard Biesheuvel , "Kinney, Michael D" , Ming Huang , Pete Batard Subject: Re: [edk2-devel] [PATCH] MdePkg: Remove code wrapped by DISABLE_NEW_DEPRECATED_INTERFACES Thread-Topic: [edk2-devel] [PATCH] MdePkg: Remove code wrapped by DISABLE_NEW_DEPRECATED_INTERFACES Thread-Index: AQHWOxEaixzocQtXeEudRUS81s42ZajQR8pggE49B/CAAEtlgIAAE76AgAG9dICAAKNYQA== Date: Fri, 31 Jul 2020 01:55:14 +0000 Message-ID: References: <20200605081233.20400-1-shenglei.zhang@intel.com> <1616E217E641F212.17072@groups.io> <20200729122415.GJ31778@vanye> <20200729133455.GK31778@vanye> 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: edk2.groups.io; dkim=none (message not signed) header.d=none;edk2.groups.io; dmarc=none action=none header.from=intel.com; x-originating-ip: [192.198.147.194] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 69ff33b5-703e-4b23-7b66-08d834f4c46d x-ms-traffictypediagnostic: CY4PR11MB2007: 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: 2bX69uTcu6l630lM7D7kyrST96SQTYlllkNuHCE1xW9Sdj2XPwDyleea8zK2zTfVzcQZO3kPHjvYp2YyVeqgxWGUVLh1Z5lff9W18YC1unN7w3lQCud7zH4KuVQfYr+4vavoPLuPoM+MFGqFmOP5FR7GmlKp1ncrjv9xJYa9MyYloJ2qKpjvc3XR97vWT1aBevl/ypw5df6efndoMm7aUPuv+jg+WRT6B2Ejapj2vKWYLMdy284IAZ9wTBfNqOSBdoOScnCobhPPL/W5kYq/ogbEI5CML8quCVKYfSXJMkWm/feDaCoF1ihA+t/OrQbMPNFWgFTc9wp81CSG74K6hcveeiN4BPUrHhpZoT91y/0Megb4SUZBAcjMZqHYmgQllZXKBqQAnmNHWM3Aad+Db2cF9Ds4GwL3JayldnMX+SK/uSDWAo6BTOOPONXAB5X7 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CY4PR11MB1526.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFTY:;SFS:(4636009)(376002)(39860400002)(346002)(396003)(136003)(366004)(54906003)(86362001)(2906002)(110136005)(66946007)(33656002)(66556008)(76116006)(71200400001)(66476007)(6506007)(83380400001)(186003)(26005)(7696005)(53546011)(64756008)(66446008)(316002)(19627235002)(478600001)(5660300002)(52536014)(4326008)(8936002)(9686003)(8676002)(55016002)(966005)(30864003)(569008);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: u6xUowFykfpBju+bm0rtfy+dQ9NpTVf3kO5muaZufTtO13yFbiDvPDXovXVJG96Nczbzoz2BSbij2ZmFLFwZONwgyoGaTZlj+6xnu/iZHVy7HCU0Sc4xRDRLlYRwqfyA9wyeffmx9yhYWZQDn6ffoQsVExGWB95uIQbTA/m70o/KHSqygLwI4QKLEQE1rjJxQedzj3zrroP2Ny9edaaPQ/+4eTyfEGtvckjRIZ0rOfe/c2NVEK7zq/Aula8Eao5BT1GISLSOv19+3M9MHof0XtDZC7ngfw7sk/ZuzXOuz9o62rtK2Id+V6bkBj0S+Fpejh3iJLnTPWhcgInLf60yMI0qv7SNw8T3pVCwB3qan3yxYUnD1aQp5CayCQJr+SkRP0pCDSuaCuTuHpU8N0o88F+70DMqHfaYSQd5s0TeNE1JSGUsbaAS6zPMKLsvufssCMlYq9z0KZwYxm4BcRUuTL0sxs4DjXyuwmQYmn33fZ53cui1TfCV8741G3M22/oE MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CY4PR11MB1526.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 69ff33b5-703e-4b23-7b66-08d834f4c46d X-MS-Exchange-CrossTenant-originalarrivaltime: 31 Jul 2020 01:55:14.2710 (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: ZPS0TMsiY/NcQOlPPl+bOWY3hGlpuMq7PUzZqOuOsmK9r6oUfZBn5SW4qLP8EI54shfrny1pJMk6ncdEmxqgEA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CY4PR11MB2007 Return-Path: liming.gao@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 VGhhbmtzIE1hcmNpbi4NCg0KTGVpZjoNCiAgSXMgdGhlcmUgdGhlIHdheSB0byBnZXQgdGhlIGZp eCBwbGFuIGZyb20gdGhlIHBsYXRmb3JtIG93bmVyPyBJZiBzbywgSSBjYW4gd29yayB0aGUgcGxh biB0byBtZXJnZSB0aGlzIGNoYW5nZS4NCg0KVGhhbmtzDQpMaW1pbmcNCi0tLS0tT3JpZ2luYWwg TWVzc2FnZS0tLS0tDQpGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91 cHMuaW8+IE9uIEJlaGFsZiBPZiBNYXJjaW4gV29qdGFzDQpTZW50OiAyMDIw5bm0N+aciDMx5pel IDA6MDkNClRvOiBMZWlmIExpbmRob2xtIDxsZWlmQG51dmlhaW5jLmNvbT4NCkNjOiBHYW8sIExp bWluZyA8bGltaW5nLmdhb0BpbnRlbC5jb20+OyBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgWmhhbmcs IFNoZW5nbGVpIDxzaGVuZ2xlaS56aGFuZ0BpbnRlbC5jb20+OyBBcmQgQmllc2hldXZlbCA8YXJk LmJpZXNoZXV2ZWxAYXJtLmNvbT47IEtpbm5leSwgTWljaGFlbCBEIDxtaWNoYWVsLmQua2lubmV5 QGludGVsLmNvbT47IE1pbmcgSHVhbmcgPGh1YW5nbWluZzIzQGh1YXdlaS5jb20+OyBQZXRlIEJh dGFyZCA8cGV0ZUBha2VvLmllPg0KU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0hdIE1k ZVBrZzogUmVtb3ZlIGNvZGUgd3JhcHBlZCBieSBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lOVEVS RkFDRVMNCg0KSGkgTGVpZiwNCg0KDQrFm3IuLCAyOSBsaXAgMjAyMCBvIDE1OjM1IExlaWYgTGlu ZGhvbG0gPGxlaWZAbnV2aWFpbmMuY29tPiBuYXBpc2HFgihhKToNCj4NCj4gUmlnaHQsIHNvIHRo ZSBmb2xsb3dpbmcgcGxhdGZvcm1zIGJyZWFrIG9uY2UgdGhpcyBwYXRjaCBpcyBtZXJnZWQ6DQo+ DQo+IC0gQU1EIE92ZXJkcml2ZSwgT3ZlcmRyaXZlIDEwMDAsIENlbGxvDQo+IC0gSGlzaWxpY29u IEQwMywgRDA1LCBEMDYgKHNvbWUgb2YgdGhlc2UgZHVlIHRvIGJpbmFyeSBkcml2ZXJzIGluDQo+ ICAgZWRrMi1ub24tb3NpKQ0KPiAtIE1hcnZlbGwgQXJtYWRhIDc4eDAvODB4MCwgTWFjY2hpYXRv QklODQoNCkZpeCBmb3IgTWFydmVsbCBwbGF0Zm9ybXMgc3VibWl0dGVkOg0KaHR0cHM6Ly9lZGsy Lmdyb3Vwcy5pby9nL2RldmVsL21lc3NhZ2UvNjM0NzINCg0KQmVzdCByZWdhcmRzLA0KTWFyY2lu DQoNCj4gLSBSYXNwYmVycnkgUGkgMy80DQo+DQo+IEkgdGhpbmsgdGhpcyBwcm92aWRlcyBlbm91 Z2ggYXJndW1lbnQgdG8gcHVzaCB0aGlzIHBhdGNoIGF0IGxlYXN0DQo+IHVudGlsIGFmdGVyIEF1 Z3VzdCBzdGFibGUgdGFnLg0KPg0KPiBBcyBmYXIgYXMgSSBjYW4gdGVsbCwgYWxsIG9mIHRoZXNl IGFyZSBkdWUgdG8gdGhlIFBjZFNldCBBbmQNCj4gVW5pY29kZVN0clRvQXNjaWlTdHIgZnVuY3Rp b25zL21hY3JvcyBkaXNhcHBlYXJpbmcuIFByZXN1bWFibHkgdGhlc2UNCj4gc2hvdWxkIGJlIHJl cGxhY2VkIHdpdGggdGhlaXIgUy1zdWZmaXhlZCBjb3VudGVycGFydHMuDQo+DQo+IE1haW50YWlu ZXJzL3Jldmlld2VycyBvbiBjYy4gSSdkIGFwcHJlY2lhdGUgaWYgeW91IGNvdWxkIHVwZGF0ZSBh bmQNCj4gc2FuaXR5IGNoZWNrIHlvdXIgcGxhdGZvcm1zIGFuZCBzZW5kIG91dCBwYXRjaGVzLg0K Pg0KPiBCZXN0IFJlZ2FyZHMsDQo+DQo+IExlaWYNCj4NCj4gT24gV2VkLCBKdWwgMjksIDIwMjAg YXQgMTM6MjQ6MTUgKzAxMDAsIExlaWYgTGluZGhvbG0gd3JvdGU6DQo+ID4gVGhhbmtzIExpbWlu ZywNCj4gPg0KPiA+IFllcywgdGhpcyBkb2VzIGFmZmVjdCBzZXZlcmFsIEFSTSBwbGF0Zm9ybXMu IEN1cnJlbnRseSBydW5uaW5nIGEgYnVpbGQNCj4gPiB0ZXN0IHRvIGRldGVybWluZSBqdXN0IGhv dyBtYW55LiBNeSBwcmVmZXJlbmNlIHdvdWxkIGJlIGZvciBhIGNoYW5nZQ0KPiA+IG9mIHRoaXMg bWFnbml0dWRlIHRvIGdvIGluIGp1c3QgYWZ0ZXIgYSBzdGFibGUgdGFnIC0gd2hhdCwgaWYgYW55 LCBhcmUNCj4gPiB0aGUgcGxhbnMgZm9yIHRoaXMgcGF0Y2g/DQo+ID4NCj4gPiBCZXN0IFJlZ2Fy ZHMsDQo+ID4NCj4gPiBMZWlmDQo+ID4NCj4gPiBPbiBXZWQsIEp1bCAyOSwgMjAyMCBhdCAwNzo1 NTowOSArMDAwMCwgR2FvLCBMaW1pbmcgd3JvdGU6DQo+ID4gPiBJbmNsdWRlIExlaWYgYW5kIEFy ZC4gVGhpcyBjaGFuZ2UgbWF5IGltcGFjdCBBUk0gcGxhdGZvcm0uDQo+ID4gPg0KPiA+ID4gVGhh bmtzDQo+ID4gPiBMaW1pbmcNCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4g PiBGcm9tOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbyA8ZGV2ZWxAZWRrMi5ncm91cHMuaW8+IE9uIEJl aGFsZiBPZiBMaW1pbmcgR2FvDQo+ID4gPiBTZW50OiAyMDIw5bm0NuaciDnml6UgMjE6MDgNCj4g PiA+IFRvOiBaaGFuZywgU2hlbmdsZWkgPHNoZW5nbGVpLnpoYW5nQGludGVsLmNvbT47IGRldmVs QGVkazIuZ3JvdXBzLmlvDQo+ID4gPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hhZWwuZC5r aW5uZXlAaW50ZWwuY29tPg0KPiA+ID4gU3ViamVjdDogUmU6IFtlZGsyLWRldmVsXSBbUEFUQ0hd IE1kZVBrZzogUmVtb3ZlIGNvZGUgd3JhcHBlZCBieSBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lO VEVSRkFDRVMNCj4gPiA+DQo+ID4gPiBTaGVuZ2xlaToNCj4gPiA+ICAgUGxlYXNlIGFsc28gcmVt b3ZlIHRoZSBkZXByZWNhdGVkIGNvZGUgaW4gTWRlTW9kdWxlUGtnLg0KPiA+ID4NCj4gPiA+IFRo YW5rcw0KPiA+ID4gTGltaW5nDQo+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ ID4gPiA+IEZyb206IFpoYW5nLCBTaGVuZ2xlaSA8c2hlbmdsZWkuemhhbmdAaW50ZWwuY29tPg0K PiA+ID4gPiBTZW50OiBGcmlkYXksIEp1bmUgNSwgMjAyMCA0OjEzIFBNDQo+ID4gPiA+IFRvOiBk ZXZlbEBlZGsyLmdyb3Vwcy5pbw0KPiA+ID4gPiBDYzogS2lubmV5LCBNaWNoYWVsIEQgPG1pY2hh ZWwuZC5raW5uZXlAaW50ZWwuY29tPjsgR2FvLCBMaW1pbmcgPGxpbWluZy5nYW9AaW50ZWwuY29t Pg0KPiA+ID4gPiBTdWJqZWN0OiBbUEFUQ0hdIE1kZVBrZzogUmVtb3ZlIGNvZGUgd3JhcHBlZCBi eSBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4NCj4gPiA+ID4gUkVG OiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTI3NzcNCj4g PiA+ID4gQ29kZSB3cmFwcGVkIGJ5IERJU0FCTEVfTkVXX0RFUFJFQ0FURURfSU5URVJGQUNFUyBp cyBkZXByZWNhdGVkLg0KPiA+ID4gPiBTbyByZW1vdmUgaXQuDQo+ID4gPiA+DQo+ID4gPiA+IENj OiBNaWNoYWVsIEQgS2lubmV5IDxtaWNoYWVsLmQua2lubmV5QGludGVsLmNvbT4NCj4gPiA+ID4g Q2M6IExpbWluZyBHYW8gPGxpbWluZy5nYW9AaW50ZWwuY29tPg0KPiA+ID4gPiBTaWduZWQtb2Zm LWJ5OiBTaGVuZ2xlaSBaaGFuZyA8c2hlbmdsZWkuemhhbmdAaW50ZWwuY29tPg0KPiA+ID4gPiAt LS0NCj4gPiA+ID4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VMaWIvU3RyaW5nLmMgICAgICAgIHwgNjI2 IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gPiA+ID4gIE1kZVBrZy9MaWJyYXJ5L0Jhc2VQ Y2RMaWJOdWxsL1BjZExpYi5jIHwgMzYxIC0tLS0tLS0tLS0tLS0tDQo+ID4gPiA+ICBNZGVQa2cv TGlicmFyeS9CYXNlUHJpbnRMaWIvUHJpbnRMaWIuYyB8IDExOCAtLS0tLQ0KPiA+ID4gPiAgTWRl UGtnL0xpYnJhcnkvRHhlUGNkTGliL0R4ZVBjZExpYi5jICAgfCAzOTkgLS0tLS0tLS0tLS0tLS0t LQ0KPiA+ID4gPiAgTWRlUGtnL0xpYnJhcnkvUGVpUGNkTGliL1BlaVBjZExpYi5jICAgfCAzOTcg LS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gPiAgTWRlUGtnL0xpYnJhcnkvVWVmaUxpYi9VZWZpTGli LmMgICAgICAgfCAgOTIgLS0tLQ0KPiA+ID4gPiAgTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNl TGliLmggICAgICAgfCA0MDkgLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ID4gPiAgTWRlUGtnL0luY2x1 ZGUvTGlicmFyeS9QY2RMaWIuaCAgICAgICAgfCA1MjAgLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4g PiA+ID4gIE1kZVBrZy9JbmNsdWRlL0xpYnJhcnkvUHJpbnRMaWIuaCAgICAgIHwgMTEwIC0tLS0t DQo+ID4gPiA+ICBNZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1VlZmlMaWIuaCAgICAgICB8ICA1MyAt LS0NCj4gPiA+ID4gIE1kZVBrZy9NZGVQa2cuZHNjICAgICAgICAgICAgICAgICAgICAgIHwgICAx IC0NCj4gPiA+ID4gIDExIGZpbGVzIGNoYW5nZWQsIDMwODYgZGVsZXRpb25zKC0pDQo+ID4gPiA+ DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9CYXNlTGliL1N0cmluZy5jIGIv TWRlUGtnL0xpYnJhcnkvQmFzZUxpYi9TdHJpbmcuYw0KPiA+ID4gPiBpbmRleCA0NTE5ODM3M2Yy NWMuLmY0ODU0ZjM1N2UzYSAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvQmFz ZUxpYi9TdHJpbmcuYw0KPiA+ID4gPiArKysgYi9NZGVQa2cvTGlicmFyeS9CYXNlTGliL1N0cmlu Zy5jDQo+ID4gPiA+IEBAIC04LDEzNSArOCw2IEBADQo+ID4gPiA+DQo+ID4gPiA+ICAjaW5jbHVk ZSAiQmFzZUxpYkludGVybmFscy5oIg0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxF X05FV19ERVBSRUNBVEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4g PiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBkZXByZWNhdGVkIGZvciBz ZWN1cml0eSByZWFzb24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQ29waWVzIG9uZSBOdWxsLXRl cm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgdG8gYW5vdGhlciBOdWxsLXRlcm1pbmF0ZWQgVW5pY29k ZQ0KPiA+ID4gPiAtICBzdHJpbmcgYW5kIHJldHVybnMgdGhlIG5ldyBVbmljb2RlIHN0cmluZy4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIGNvcGllcyB0aGUgY29udGVudHMg b2YgdGhlIFVuaWNvZGUgc3RyaW5nIFNvdXJjZSB0byB0aGUgVW5pY29kZQ0KPiA+ID4gPiAtICBz dHJpbmcgRGVzdGluYXRpb24sIGFuZCByZXR1cm5zIERlc3RpbmF0aW9uLiBJZiBTb3VyY2UgYW5k IERlc3RpbmF0aW9uDQo+ID4gPiA+IC0gIG92ZXJsYXAsIHRoZW4gdGhlIHJlc3VsdHMgYXJlIHVu ZGVmaW5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBEZXN0aW5hdGlvbiBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBEZXN0aW5hdGlvbiBpcyBub3QgYWxpZ25lZCBv biBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNl IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBub3QgYWxp Z25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYg U291cmNlIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAt ICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJj ZSBjb250YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdM ZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZQ0KPiA+ID4gPiAtICBO dWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBh cmFtICBEZXN0aW5hdGlvbiBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBz dHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgU291cmNlICAgICAgQSBwb2ludGVyIHRvIGEgTnVs bC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1 cm4gRGVzdGluYXRpb24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQ0hBUjE2 ICoNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtU3RyQ3B5ICgNCj4gPiA+ID4gLSAgT1VUICAg ICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpEZXN0aW5hdGlvbiwNCj4gPiA+ID4gLSAgSU4g ICAgICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpTb3VyY2UNCj4gPiA+ID4gLSAgKQ0KPiA+ ID4gPiAtew0KPiA+ID4gPiAtICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICAgICAgICAgKlJl dHVyblZhbHVlOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIC8vIERlc3Rp bmF0aW9uIGNhbm5vdCBiZSBOVUxMDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIEFTU0VSVCAo RGVzdGluYXRpb24gIT0gTlVMTCk7DQo+ID4gPiA+IC0gIEFTU0VSVCAoKChVSU5UTikgRGVzdGlu YXRpb24gJiBCSVQwKSA9PSAwKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAt ICAvLyBEZXN0aW5hdGlvbiBhbmQgc291cmNlIGNhbm5vdCBvdmVybGFwDQo+ID4gPiA+IC0gIC8v DQo+ID4gPiA+IC0gIEFTU0VSVCAoKFVJTlROKShEZXN0aW5hdGlvbiAtIFNvdXJjZSkgPiBTdHJM ZW4gKFNvdXJjZSkpOw0KPiA+ID4gPiAtICBBU1NFUlQgKChVSU5UTikoU291cmNlIC0gRGVzdGlu YXRpb24pID4gU3RyTGVuIChTb3VyY2UpKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBSZXR1cm5W YWx1ZSA9IERlc3RpbmF0aW9uOw0KPiA+ID4gPiAtICB3aGlsZSAoKlNvdXJjZSAhPSAwKSB7DQo+ ID4gPiA+IC0gICAgKihEZXN0aW5hdGlvbisrKSA9ICooU291cmNlKyspOw0KPiA+ID4gPiAtICB9 DQo+ID4gPiA+IC0gICpEZXN0aW5hdGlvbiA9IDA7DQo+ID4gPiA+IC0gIHJldHVybiBSZXR1cm5W YWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtB VFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSBkZXByZWNhdGVkIGZvciBzZWN1cml0eSBy ZWFzb24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQ29waWVzIHVwIHRvIGEgc3BlY2lmaWVkIGxl bmd0aCBmcm9tIG9uZSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgIHRvDQo+ID4gPiA+ IC0gIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIGFuZCByZXR1cm5zIHRo ZSBuZXcgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlv biBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVbmljb2RlIHN0cmluZyBTb3VyY2UgdG8gdGhl IFVuaWNvZGUNCj4gPiA+ID4gLSAgc3RyaW5nIERlc3RpbmF0aW9uLCBhbmQgcmV0dXJucyBEZXN0 aW5hdGlvbi4gQXQgbW9zdCwgTGVuZ3RoIFVuaWNvZGUNCj4gPiA+ID4gLSAgY2hhcmFjdGVycyBh cmUgY29waWVkIGZyb20gU291cmNlIHRvIERlc3RpbmF0aW9uLiBJZiBMZW5ndGggaXMgMCwgdGhl bg0KPiA+ID4gPiAtICBEZXN0aW5hdGlvbiBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLiBJZiBMZW5n dGggaXMgZ3JlYXRlciB0aGF0IHRoZSBudW1iZXIgb2YNCj4gPiA+ID4gLSAgVW5pY29kZSBjaGFy YWN0ZXJzIGluIFNvdXJjZSwgdGhlbiBEZXN0aW5hdGlvbiBpcyBwYWRkZWQgd2l0aCBOdWxsIFVu aWNvZGUNCj4gPiA+ID4gLSAgY2hhcmFjdGVycy4gSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbiBv dmVybGFwLCB0aGVuIHRoZSByZXN1bHRzIGFyZQ0KPiA+ID4gPiAtICB1bmRlZmluZWQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgSWYgTGVuZ3RoID4gMCBhbmQgRGVzdGluYXRpb24gaXMgTlVMTCwg dGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgTGVuZ3RoID4gMCBhbmQgRGVzdGluYXRpb24g aXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4g PiA+IC0gIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0K PiA+ID4gPiAtICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAx Ni1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQg RGVzdGluYXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4 aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBMZW5ndGggaXMgZ3JlYXRl ciB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoLCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBu b3QgemVybywgYW5kIFNvdXJjZSBjb250YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4 aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5n IHRoZSBOdWxsLXRlcm1pbmF0b3IsDQo+ID4gPiA+IC0gIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0aW5hdGlvbiBBIHBvaW50ZXIgdG8gYSBOdWxsLXRl cm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgU291cmNlICAgICAg QSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAt ICBAcGFyYW0gIExlbmd0aCAgICAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBVbmljb2RlIGNoYXJh Y3RlcnMgdG8gY29weS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIERlc3RpbmF0aW9u Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLUNIQVIxNiAqDQo+ID4gPiA+IC1F RklBUEkNCj4gPiA+ID4gLVN0cm5DcHkgKA0KPiA+ID4gPiAtICBPVVQgICAgIENIQVIxNiAgICAg ICAgICAgICAgICAgICAgKkRlc3RpbmF0aW9uLA0KPiA+ID4gPiAtICBJTiAgICAgIENPTlNUIENI QVIxNiAgICAgICAgICAgICAgKlNvdXJjZSwNCj4gPiA+ID4gLSAgSU4gICAgICBVSU5UTiAgICAg ICAgICAgICAgICAgICAgIExlbmd0aA0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+ IC0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmV0dXJuVmFsdWU7DQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgaWYgKExlbmd0aCA9PSAwKSB7DQo+ID4gPiA+IC0gICAgcmV0dXJu IERlc3RpbmF0aW9uOw0KPiA+ID4gPiAtICB9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgLy8NCj4g PiA+ID4gLSAgLy8gRGVzdGluYXRpb24gY2Fubm90IGJlIE5VTEwgaWYgTGVuZ3RoIGlzIG5vdCB6 ZXJvDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIEFTU0VSVCAoRGVzdGluYXRpb24gIT0gTlVM TCk7DQo+ID4gPiA+IC0gIEFTU0VSVCAoKChVSU5UTikgRGVzdGluYXRpb24gJiBCSVQwKSA9PSAw KTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBEZXN0aW5hdGlvbiBh bmQgc291cmNlIGNhbm5vdCBvdmVybGFwDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIEFTU0VS VCAoKFVJTlROKShEZXN0aW5hdGlvbiAtIFNvdXJjZSkgPiBTdHJMZW4gKFNvdXJjZSkpOw0KPiA+ ID4gPiAtICBBU1NFUlQgKChVSU5UTikoU291cmNlIC0gRGVzdGluYXRpb24pID49IExlbmd0aCk7 DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgaWYgKFBjZEdldDMyIChQY2RNYXhpbXVtVW5pY29kZVN0 cmluZ0xlbmd0aCkgIT0gMCkgew0KPiA+ID4gPiAtICAgIEFTU0VSVCAoTGVuZ3RoIDw9IFBjZEdl dDMyIChQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCkpOw0KPiA+ID4gPiAtICB9DQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgUmV0dXJuVmFsdWUgPSBEZXN0aW5hdGlvbjsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtICB3aGlsZSAoKCpTb3VyY2UgIT0gTCdcMCcpICYmIChMZW5ndGggPiAwKSkgew0K PiA+ID4gPiAtICAgICooRGVzdGluYXRpb24rKykgPSAqKFNvdXJjZSsrKTsNCj4gPiA+ID4gLSAg ICBMZW5ndGgtLTsNCj4gPiA+ID4gLSAgfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFplcm9NZW0g KERlc3RpbmF0aW9uLCBMZW5ndGggKiBzaXplb2YgKCpEZXN0aW5hdGlvbikpOw0KPiA+ID4gPiAt ICByZXR1cm4gUmV0dXJuVmFsdWU7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0jZW5kaWYNCj4gPiA+ ID4NCj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAgICBSZXR1cm5zIHRoZSBsZW5ndGggb2YgYSBOdWxs LXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IEBAIC0zMjAsMTIxICsxOTEsNiBA QCBTdHJuQ21wICgNCj4gPiA+ID4gICAgcmV0dXJuICpGaXJzdFN0cmluZyAtICpTZWNvbmRTdHJp bmc7DQo+ID4gPiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0jaWZuZGVmIERJU0FCTEVfTkVXX0RF UFJFQ0FURURfSU5URVJGQUNFUw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAg W0FUVEVOVElPTl0gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgZm9yIHNlY3VyaXR5 IHJlYXNvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBDb25jYXRlbmF0ZXMgb25lIE51bGwtdGVy bWluYXRlZCBVbmljb2RlIHN0cmluZyB0byBhbm90aGVyIE51bGwtdGVybWluYXRlZA0KPiA+ID4g PiAtICBVbmljb2RlIHN0cmluZywgYW5kIHJldHVybnMgdGhlIGNvbmNhdGVuYXRlZCBVbmljb2Rl IHN0cmluZy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIGNvbmNhdGVuYXRl cyB0d28gTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5ncy4gVGhlIGNvbnRlbnRzDQo+ID4g PiA+IC0gIG9mIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZyBTb3VyY2UgYXJlIGNvbmNh dGVuYXRlZCB0byB0aGUgZW5kIG9mDQo+ID4gPiA+IC0gIE51bGwtdGVybWluYXRlZCBVbmljb2Rl IHN0cmluZyBEZXN0aW5hdGlvbi4gVGhlIE51bGwtdGVybWluYXRlZCBjb25jYXRlbmF0ZWQNCj4g PiA+ID4gLSAgVW5pY29kZSBTdHJpbmcgaXMgcmV0dXJuZWQuIElmIFNvdXJjZSBhbmQgRGVzdGlu YXRpb24gb3ZlcmxhcCwgdGhlbiB0aGUNCj4gPiA+ID4gLSAgcmVzdWx0cyBhcmUgdW5kZWZpbmVk Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIERlc3RpbmF0aW9uIGlzIE5VTEwsIHRoZW4gQVNT RVJUKCkuDQo+ID4gPiA+IC0gIElmIERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYt Yml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTb3VyY2UgaXMgTlVM TCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGlzIG5vdCBhbGlnbmVkIG9u IGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTb3VyY2Ug YW5kIERlc3RpbmF0aW9uIG92ZXJsYXAsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBj ZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQgRGVzdGluYXRpb24g Y29udGFpbnMgbW9yZQ0KPiA+ID4gPiAtICB0aGFuIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVu Z3RoIFVuaWNvZGUgY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0aGUNCj4gPiA+ID4gLSAgTnVs bC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtVW5p Y29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJjZSBjb250YWlucyBtb3JlIHRo YW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFy YWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZQ0KPiA+ID4gPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRo ZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3Ro IGlzIG5vdCB6ZXJvLCBhbmQgY29uY2F0ZW5hdGluZyBEZXN0aW5hdGlvbg0KPiA+ID4gPiAtICBh bmQgU291cmNlIHJlc3VsdHMgaW4gYSBVbmljb2RlIHN0cmluZyB3aXRoIG1vcmUgdGhhbg0KPiA+ ID4gPiAtICBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMs IG5vdCBpbmNsdWRpbmcgdGhlDQo+ID4gPiA+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NF UlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gIERlc3RpbmF0aW9uIEEgcG9pbnRl ciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBhcmFt ICBTb3VyY2UgICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJp bmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBEZXN0aW5hdGlvbi4NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1DSEFSMTYgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4g PiA+IC1TdHJDYXQgKA0KPiA+ID4gPiAtICBJTiBPVVQgIENIQVIxNiAgICAgICAgICAgICAgICAg ICAgKkRlc3RpbmF0aW9uLA0KPiA+ID4gPiAtICBJTiAgICAgIENPTlNUIENIQVIxNiAgICAgICAg ICAgICAgKlNvdXJjZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIFN0ckNw eSAoRGVzdGluYXRpb24gKyBTdHJMZW4gKERlc3RpbmF0aW9uKSwgU291cmNlKTsNCj4gPiA+ID4g LQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBTaXplIG9mIHRoZSByZXN1bHRpbmcgc3Ry aW5nIHNob3VsZCBuZXZlciBiZSB6ZXJvLg0KPiA+ID4gPiAtICAvLyBQY2RNYXhpbXVtVW5pY29k ZVN0cmluZ0xlbmd0aCBpcyB0ZXN0ZWQgaW5zaWRlIFN0ckxlbigpLg0KPiA+ID4gPiAtICAvLw0K PiA+ID4gPiAtICBBU1NFUlQgKFN0clNpemUgKERlc3RpbmF0aW9uKSAhPSAwKTsNCj4gPiA+ID4g LSAgcmV0dXJuIERlc3RpbmF0aW9uOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0v KioNCj4gPiA+ID4gLSAgW0FUVEVOVElPTl0gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0 ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBDb25jYXRlbmF0 ZXMgdXAgdG8gYSBzcGVjaWZpZWQgbGVuZ3RoIG9uZSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSB0 byB0aGUgZW5kDQo+ID4gPiA+IC0gIG9mIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUg c3RyaW5nLCBhbmQgcmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkDQo+ID4gPiA+IC0gIFVuaWNvZGUg c3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVz IHR3byBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmdzLiBUaGUgY29udGVudHMNCj4gPiA+ ID4gLSAgb2YgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIFNvdXJjZSBhcmUgY29uY2F0 ZW5hdGVkIHRvIHRoZSBlbmQgb2YNCj4gPiA+ID4gLSAgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUg c3RyaW5nIERlc3RpbmF0aW9uLCBhbmQgRGVzdGluYXRpb24gaXMgcmV0dXJuZWQuIEF0DQo+ID4g PiA+IC0gIG1vc3QsIExlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIGNvbmNhdGVuYXRlZCBm cm9tIFNvdXJjZSB0byB0aGUgZW5kIG9mDQo+ID4gPiA+IC0gIERlc3RpbmF0aW9uLCBhbmQgRGVz dGluYXRpb24gaXMgYWx3YXlzIE51bGwtdGVybWluYXRlZC4gSWYgTGVuZ3RoIGlzIDAsIHRoZW4N Cj4gPiA+ID4gLSAgRGVzdGluYXRpb24gaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4gSWYgU291cmNl IGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuDQo+ID4gPiA+IC0gIHRoZSByZXN1bHRzIGFy ZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgTlVM TCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgTGVuZ3RoID4gMCBhbmQgRGVzdGluYXRp b24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ ID4gPiA+IC0gIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiA+ID4gPiAtICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24g YSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBh bmQgRGVzdGluYXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNk TWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBMZW5ndGggaXMgZ3Jl YXRlciB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoLCB0aGVu IEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBp cyBub3QgemVybywgYW5kIERlc3RpbmF0aW9uIGNvbnRhaW5zIG1vcmUNCj4gPiA+ID4gLSAgdGhh biBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMsIG5vdCBp bmNsdWRpbmcgdGhlDQo+ID4gPiA+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4N Cj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8s IGFuZCBTb3VyY2UgY29udGFpbnMgbW9yZSB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmlj b2RlU3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0aGUNCj4g PiA+ID4gLSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQ Y2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIGNvbmNhdGVuYXRp bmcgRGVzdGluYXRpb24NCj4gPiA+ID4gLSAgYW5kIFNvdXJjZSByZXN1bHRzIGluIGEgVW5pY29k ZSBzdHJpbmcgd2l0aCBtb3JlIHRoYW4gUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGgNCj4g PiA+ID4gLSAgVW5pY29kZSBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1p bmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0 aW5hdGlvbiBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ ID4gPiA+IC0gIEBwYXJhbSAgU291cmNlICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5h dGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIExlbmd0aCAgICAgIFRoZSBt YXhpbXVtIG51bWJlciBvZiBVbmljb2RlIGNoYXJhY3RlcnMgdG8gY29uY2F0ZW5hdGUgZnJvbQ0K PiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZS4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBAcmV0dXJuIERlc3RpbmF0aW9uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ ID4gLUNIQVIxNiAqDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLVN0cm5DYXQgKA0KPiA+ID4g PiAtICBJTiBPVVQgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKkRlc3RpbmF0aW9uLA0KPiA+ ID4gPiAtICBJTiAgICAgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAgKlNvdXJjZSwNCj4gPiA+ ID4gLSAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0aA0KPiA+ID4gPiAt ICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIFVJTlROICAgRGVzdGluYXRpb25MZW47DQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgRGVzdGluYXRpb25MZW4gPSBTdHJMZW4gKERlc3RpbmF0aW9uKTsN Cj4gPiA+ID4gLSAgU3RybkNweSAoRGVzdGluYXRpb24gKyBEZXN0aW5hdGlvbkxlbiwgU291cmNl LCBMZW5ndGgpOw0KPiA+ID4gPiAtICBEZXN0aW5hdGlvbltEZXN0aW5hdGlvbkxlbiArIExlbmd0 aF0gPSBMJ1wwJzsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBTaXpl IG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIHNob3VsZCBuZXZlciBiZSB6ZXJvLg0KPiA+ID4gPiAt ICAvLyBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyB0ZXN0ZWQgaW5zaWRlIFN0ckxl bigpLg0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICBBU1NFUlQgKFN0clNpemUgKERlc3RpbmF0 aW9uKSAhPSAwKTsNCj4gPiA+ID4gLSAgcmV0dXJuIERlc3RpbmF0aW9uOw0KPiA+ID4gPiAtfQ0K PiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+DQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAgUmV0dXJu cyB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN1Yi1z dHJpbmcNCj4gPiA+ID4gQEAgLTg0NSwyMDggKzYwMSw2IEBAIEludGVybmFsQXNjaWlJc0hleGFE ZWNpbWFsRGlnaXRDaGFyYWN0ZXIgKA0KPiA+ID4gPiAgICAgIChDaGFyID49ICdhJyAmJiBDaGFy IDw9ICdmJykpOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxF X05FV19ERVBSRUNBVEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4g PiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJp dHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvbnZlcnQgYSBOdWxsLXRlcm1pbmF0 ZWQgVW5pY29kZSBzdHJpbmcgdG8gYSBOdWxsLXRlcm1pbmF0ZWQNCj4gPiA+ID4gLSAgQVNDSUkg c3RyaW5nIGFuZCByZXR1cm5zIHRoZSBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY29udGVudCBvZiB0aGUgVW5pY29kZSBzdHJp bmcgU291cmNlDQo+ID4gPiA+IC0gIHRvIHRoZSBBU0NJSSBzdHJpbmcgRGVzdGluYXRpb24gYnkg Y29weWluZyB0aGUgbG93ZXIgOCBiaXRzIG9mDQo+ID4gPiA+IC0gIGVhY2ggVW5pY29kZSBjaGFy YWN0ZXIuIEl0IHJldHVybnMgRGVzdGluYXRpb24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhl IGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBtYWtlIHN1cmUgRGVzdGluYXRpb24gcG9pbnRzIHRv IGEgYnVmZmVyIHdpdGggc2l6ZQ0KPiA+ID4gPiAtICBlcXVhbCBvciBncmVhdGVyIHRoYW4gKChT dHJMZW4gKFNvdXJjZSkgKyAxKSAqIHNpemVvZiAoQ0hBUjgpKSBpbiBieXRlcy4NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtICBJZiBhbnkgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFNvdXJjZSBjb250YWlu IG5vbi16ZXJvIHZhbHVlIGluDQo+ID4gPiA+IC0gIHRoZSB1cHBlciA4IGJpdHMsIHRoZW4gQVNT RVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBub3QgYWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFy eSwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbiBv dmVybGFwLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIFBjZE1heGlt dW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQgU291cmNlIGNvbnRhaW5zDQo+ ID4gPiA+IC0gIG1vcmUgdGhhbiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2Rl IGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcNCj4gPiA+ID4gLSAgdGhlIE51bGwtdGVybWluYXRv ciwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNj aWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBTb3VyY2UgY29udGFpbnMgbW9yZQ0KPiA+ ID4gPiAtICB0aGFuIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3Rl cnMsIG5vdCBpbmNsdWRpbmcgdGhlDQo+ID4gPiA+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBB U1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gIFNvdXJjZSAgICAgICAgQSBw b2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtICBA cGFyYW0gIERlc3RpbmF0aW9uICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJ IHN0cmluZy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIERlc3RpbmF0aW9uLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLUNIQVI4ICoNCj4gPiA+ID4gLUVGSUFQSQ0K PiA+ID4gPiAtVW5pY29kZVN0clRvQXNjaWlTdHIgKA0KPiA+ID4gPiAtICBJTiAgICAgIENPTlNU IENIQVIxNiAgICAgICAgICAgICAgKlNvdXJjZSwNCj4gPiA+ID4gLSAgT1VUICAgICBDSEFSOCAg ICAgICAgICAgICAgICAgICAgICpEZXN0aW5hdGlvbg0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17 DQo+ID4gPiA+IC0gIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXR1cm5W YWx1ZTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBBU1NFUlQgKERlc3RpbmF0aW9uICE9IE5VTEwp Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIC8vIEFTU0VSVCBpZiBTb3Vy Y2UgaXMgbG9uZyB0aGFuIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoLg0KPiA+ID4gPiAt ICAvLyBMZW5ndGggdGVzdHMgYXJlIHBlcmZvcm1lZCBpbnNpZGUgU3RyTGVuKCkuDQo+ID4gPiA+ IC0gIC8vDQo+ID4gPiA+IC0gIEFTU0VSVCAoU3RyU2l6ZSAoU291cmNlKSAhPSAwKTsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBTb3VyY2UgYW5kIERlc3RpbmF0aW9u IHNob3VsZCBub3Qgb3ZlcmxhcA0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICBBU1NFUlQgKChV SU5UTikgKERlc3RpbmF0aW9uIC0gKENIQVI4ICopIFNvdXJjZSkgPj0gU3RyU2l6ZSAoU291cmNl KSk7DQo+ID4gPiA+IC0gIEFTU0VSVCAoKFVJTlROKSAoKENIQVI4ICopIFNvdXJjZSAtIERlc3Rp bmF0aW9uKSA+IFN0ckxlbiAoU291cmNlKSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBSZXR1cm5WYWx1ZSA9IERlc3RpbmF0aW9uOw0KPiA+ID4gPiAtICB3aGlsZSAoKlNvdXJj ZSAhPSAnXDAnKSB7DQo+ID4gPiA+IC0gICAgLy8NCj4gPiA+ID4gLSAgICAvLyBJZiBhbnkgVW5p Y29kZSBjaGFyYWN0ZXJzIGluIFNvdXJjZSBjb250YWluDQo+ID4gPiA+IC0gICAgLy8gbm9uLXpl cm8gdmFsdWUgaW4gdGhlIHVwcGVyIDggYml0cywgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAg ICAvLw0KPiA+ID4gPiAtICAgIEFTU0VSVCAoKlNvdXJjZSA8IDB4MTAwKTsNCj4gPiA+ID4gLSAg ICAqKERlc3RpbmF0aW9uKyspID0gKENIQVI4KSAqKFNvdXJjZSsrKTsNCj4gPiA+ID4gLSAgfQ0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gICpEZXN0aW5hdGlvbiA9ICdcMCc7DQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgLy8NCj4gPiA+ID4gLSAgLy8gQVNTRVJUIE9yaWdpbmFsIERlc3RpbmF0aW9uIGlz IGxlc3MgbG9uZyB0aGFuIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aC4NCj4gPiA+ID4gLSAg Ly8gTGVuZ3RoIHRlc3RzIGFyZSBwZXJmb3JtZWQgaW5zaWRlIEFzY2lpU3RyTGVuKCkuDQo+ID4g PiA+IC0gIC8vDQo+ID4gPiA+IC0gIEFTU0VSVCAoQXNjaWlTdHJTaXplIChSZXR1cm5WYWx1ZSkg IT0gMCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIFJldHVyblZhbHVlOw0KPiA+ID4g PiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgW0FUVEVOVElPTl0gVGhp cyBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbi4NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICBDb3BpZXMgb25lIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcg dG8gYW5vdGhlciBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkNCj4gPiA+ID4gLSAgc3RyaW5nIGFuZCBy ZXR1cm5zIHRoZSBuZXcgQVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMg ZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBvZiB0aGUgQVNDSUkgc3RyaW5nIFNvdXJjZSB0 byB0aGUgQVNDSUkNCj4gPiA+ID4gLSAgc3RyaW5nIERlc3RpbmF0aW9uLCBhbmQgcmV0dXJucyBE ZXN0aW5hdGlvbi4gSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbg0KPiA+ID4gPiAtICBvdmVybGFw LCB0aGVuIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg SWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291 cmNlIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQgRGVz dGluYXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11 bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvIGFuZCBTb3VyY2UgY29udGFpbnMgbW9yZSB0 aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBBU0NJSSBjaGFyYWN0 ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0b3IsDQo+ID4gPiA+IC0gIHRoZW4g QVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0aW5hdGlvbiBBIHBv aW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtICBAcGFy YW0gIFNvdXJjZSAgICAgIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJp bmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBEZXN0aW5hdGlvbg0KPiA+ID4gPiAt DQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLUNIQVI4ICoNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4g PiAtQXNjaWlTdHJDcHkgKA0KPiA+ID4gPiAtICBPVVQgICAgIENIQVI4ICAgICAgICAgICAgICAg ICAgICAgKkRlc3RpbmF0aW9uLA0KPiA+ID4gPiAtICBJTiAgICAgIENPTlNUIENIQVI4ICAgICAg ICAgICAgICAgKlNvdXJjZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIENI QVI4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqUmV0dXJuVmFsdWU7DQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSAgLy8NCj4gPiA+ID4gLSAgLy8gRGVzdGluYXRpb24gY2Fubm90IGJlIE5VTEwN Cj4gPiA+ID4gLSAgLy8NCj4gPiA+ID4gLSAgQVNTRVJUIChEZXN0aW5hdGlvbiAhPSBOVUxMKTsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBEZXN0aW5hdGlvbiBhbmQg c291cmNlIGNhbm5vdCBvdmVybGFwDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIEFTU0VSVCAo KFVJTlROKShEZXN0aW5hdGlvbiAtIFNvdXJjZSkgPiBBc2NpaVN0ckxlbiAoU291cmNlKSk7DQo+ ID4gPiA+IC0gIEFTU0VSVCAoKFVJTlROKShTb3VyY2UgLSBEZXN0aW5hdGlvbikgPiBBc2NpaVN0 ckxlbiAoU291cmNlKSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgUmV0dXJuVmFsdWUgPSBEZXN0 aW5hdGlvbjsNCj4gPiA+ID4gLSAgd2hpbGUgKCpTb3VyY2UgIT0gMCkgew0KPiA+ID4gPiAtICAg ICooRGVzdGluYXRpb24rKykgPSAqKFNvdXJjZSsrKTsNCj4gPiA+ID4gLSAgfQ0KPiA+ID4gPiAt ICAqRGVzdGluYXRpb24gPSAwOw0KPiA+ID4gPiAtICByZXR1cm4gUmV0dXJuVmFsdWU7DQo+ID4g PiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBbQVRURU5USU9OXSBU aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIENvcGllcyB1cCB0byBhIHNwZWNpZmllZCBsZW5ndGggb25lIE51 bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgdG8gYW5vdGhlcg0KPiA+ID4gPiAtICBOdWxsLXRl cm1pbmF0ZWQgQVNDSUkgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBuZXcgQVNDSUkgc3RyaW5nLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29waWVzIHRoZSBjb250ZW50cyBv ZiB0aGUgQVNDSUkgc3RyaW5nIFNvdXJjZSB0byB0aGUgQVNDSUkNCj4gPiA+ID4gLSAgc3RyaW5n IERlc3RpbmF0aW9uLCBhbmQgcmV0dXJucyBEZXN0aW5hdGlvbi4gQXQgbW9zdCwgTGVuZ3RoIEFT Q0lJIGNoYXJhY3RlcnMNCj4gPiA+ID4gLSAgYXJlIGNvcGllZCBmcm9tIFNvdXJjZSB0byBEZXN0 aW5hdGlvbi4gSWYgTGVuZ3RoIGlzIDAsIHRoZW4gRGVzdGluYXRpb24gaXMNCj4gPiA+ID4gLSAg cmV0dXJuZWQgdW5tb2RpZmllZC4gSWYgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhdCB0aGUgbnVtYmVy IG9mIEFTQ0lJIGNoYXJhY3RlcnMNCj4gPiA+ID4gLSAgaW4gU291cmNlLCB0aGVuIERlc3RpbmF0 aW9uIGlzIHBhZGRlZCB3aXRoIE51bGwgQVNDSUkgY2hhcmFjdGVycy4gSWYgU291cmNlDQo+ID4g PiA+IC0gIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuIHRoZSByZXN1bHRzIGFyZSB1bmRl ZmluZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NF UlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6 ZXJvLCBhbmQgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbg0KPiA+ID4gPiAtICBQY2RNYXhpbXVtQXNj aWlTdHJpbmdMZW5ndGgsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBjZE1heGltdW1B c2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJjZSBjb250YWlucyBtb3JlIHRo YW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFTQ0lJIGNoYXJhY3Rl cnMsIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvciwNCj4gPiA+ID4gLSAgdGhlbiBB U1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gIERlc3RpbmF0aW9uIEEgcG9p bnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJh bSAgU291cmNlICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmlu Zy4NCj4gPiA+ID4gLSAgQHBhcmFtICBMZW5ndGggICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2Yg QVNDSUkgY2hhcmFjdGVycyB0byBjb3B5Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4g RGVzdGluYXRpb24NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1DSEFSOCAqDQo+ ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUFzY2lpU3RybkNweSAoDQo+ID4gPiA+IC0gIE9VVCAg ICAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAqRGVzdGluYXRpb24sDQo+ID4gPiA+IC0gIElO ICAgICAgQ09OU1QgQ0hBUjggICAgICAgICAgICAgICAqU291cmNlLA0KPiA+ID4gPiAtICBJTiAg ICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoDQo+ID4gPiA+IC0gICkNCj4gPiA+ ID4gLXsNCj4gPiA+ID4gLSAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICpSZXR1 cm5WYWx1ZTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBpZiAoTGVuZ3RoID09IDApIHsNCj4gPiA+ ID4gLSAgICByZXR1cm4gRGVzdGluYXRpb247DQo+ID4gPiA+IC0gIH0NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBEZXN0aW5hdGlvbiBjYW5ub3QgYmUgTlVMTA0KPiA+ ID4gPiAtICAvLw0KPiA+ID4gPiAtICBBU1NFUlQgKERlc3RpbmF0aW9uICE9IE5VTEwpOw0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIC8vIERlc3RpbmF0aW9uIGFuZCBzb3Vy Y2UgY2Fubm90IG92ZXJsYXANCj4gPiA+ID4gLSAgLy8NCj4gPiA+ID4gLSAgQVNTRVJUICgoVUlO VE4pKERlc3RpbmF0aW9uIC0gU291cmNlKSA+IEFzY2lpU3RyTGVuIChTb3VyY2UpKTsNCj4gPiA+ ID4gLSAgQVNTRVJUICgoVUlOVE4pKFNvdXJjZSAtIERlc3RpbmF0aW9uKSA+PSBMZW5ndGgpOw0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIGlmIChQY2RHZXQzMiAoUGNkTWF4aW11bUFzY2lpU3RyaW5n TGVuZ3RoKSAhPSAwKSB7DQo+ID4gPiA+IC0gICAgQVNTRVJUIChMZW5ndGggPD0gUGNkR2V0MzIg KFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCkpOw0KPiA+ID4gPiAtICB9DQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSAgUmV0dXJuVmFsdWUgPSBEZXN0aW5hdGlvbjsNCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICB3aGlsZSAoKlNvdXJjZSAhPSAwICYmIExlbmd0aCA+IDApIHsNCj4gPiA+ID4gLSAgICAq KERlc3RpbmF0aW9uKyspID0gKihTb3VyY2UrKyk7DQo+ID4gPiA+IC0gICAgTGVuZ3RoLS07DQo+ ID4gPiA+IC0gIH0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBaZXJvTWVtIChEZXN0aW5hdGlvbiwg TGVuZ3RoICogc2l6ZW9mICgqRGVzdGluYXRpb24pKTsNCj4gPiA+ID4gLSAgcmV0dXJuIFJldHVy blZhbHVlOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+DQo+ID4gPiA+ICAv KioNCj4gPiA+ID4gICAgUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgTnVsbC10ZXJtaW5hdGVkIEFT Q0lJIHN0cmluZy4NCj4gPiA+ID4gQEAgLTEzMjksMTE0ICs4ODMsNiBAQCBBc2NpaVN0cm5DbXAg KA0KPiA+ID4gPiAgICByZXR1cm4gKkZpcnN0U3RyaW5nIC0gKlNlY29uZFN0cmluZzsNCj4gPiA+ ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gLSNpZm5kZWYgRElTQUJMRV9ORVdfREVQUkVDQVRFRF9J TlRFUkZBQ0VTDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBbQVRURU5USU9O XSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvbmNhdGVuYXRlcyBvbmUgTnVsbC10ZXJtaW5hdGVkIEFT Q0lJIHN0cmluZyB0byBhbm90aGVyIE51bGwtdGVybWluYXRlZA0KPiA+ID4gPiAtICBBU0NJSSBz dHJpbmcsIGFuZCByZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHR3byBOdWxsLXRlcm1p bmF0ZWQgQVNDSUkgc3RyaW5ncy4gVGhlIGNvbnRlbnRzIG9mDQo+ID4gPiA+IC0gIE51bGwtdGVy bWluYXRlZCBBU0NJSSBzdHJpbmcgU291cmNlIGFyZSBjb25jYXRlbmF0ZWQgdG8gdGhlIGVuZCBv ZiBOdWxsLQ0KPiA+ID4gPiAtICB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBEZXN0aW5hdGlvbi4g VGhlIE51bGwtdGVybWluYXRlZCBjb25jYXRlbmF0ZWQgQVNDSUkNCj4gPiA+ID4gLSAgU3RyaW5n IGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIERlc3RpbmF0aW9uIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90 IHplcm8gYW5kIERlc3RpbmF0aW9uIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiA+ID4gPiAtICBQY2RN YXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggQVNDSUkgY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0 aGUgTnVsbC10ZXJtaW5hdG9yLA0KPiA+ID4gPiAtICB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAt ICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8gYW5kIFNvdXJjZSBj b250YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3Ro IEFTQ0lJIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvciwNCj4g PiA+ID4gLSAgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3Ry aW5nTGVuZ3RoIGlzIG5vdCB6ZXJvIGFuZCBjb25jYXRlbmF0aW5nIERlc3RpbmF0aW9uIGFuZA0K PiA+ID4gPiAtICBTb3VyY2UgcmVzdWx0cyBpbiBhIEFTQ0lJIHN0cmluZyB3aXRoIG1vcmUgdGhh biBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgNCj4gPiA+ID4gLSAgQVNDSUkgY2hhcmFjdGVy cywgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gIERlc3RpbmF0 aW9uIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+ IC0gIEBwYXJhbSAgU291cmNlICAgICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFT Q0lJIHN0cmluZy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIERlc3RpbmF0aW9uDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQ0hBUjggKg0KPiA+ID4gPiAtRUZJQVBJ DQo+ID4gPiA+IC1Bc2NpaVN0ckNhdCAoDQo+ID4gPiA+IC0gIElOIE9VVCBDSEFSOCAgICAqRGVz dGluYXRpb24sDQo+ID4gPiA+IC0gIElOIENPTlNUIENIQVI4ICAqU291cmNlDQo+ID4gPiA+IC0g ICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgQXNjaWlTdHJDcHkgKERlc3RpbmF0aW9uICsgQXNj aWlTdHJMZW4gKERlc3RpbmF0aW9uKSwgU291cmNlKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAv Lw0KPiA+ID4gPiAtICAvLyBTaXplIG9mIHRoZSByZXN1bHRpbmcgc3RyaW5nIHNob3VsZCBuZXZl ciBiZSB6ZXJvLg0KPiA+ID4gPiAtICAvLyBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBp cyB0ZXN0ZWQgaW5zaWRlIFN0ckxlbigpLg0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICBBU1NF UlQgKEFzY2lpU3RyU2l6ZSAoRGVzdGluYXRpb24pICE9IDApOw0KPiA+ID4gPiAtICByZXR1cm4g RGVzdGluYXRpb247DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4g PiAtICBbQVRURU5USU9OXSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBmb3Igc2Vj dXJpdHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvbmNhdGVuYXRlcyB1cCB0byBh IHNwZWNpZmllZCBsZW5ndGggb25lIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgdG8NCj4g PiA+ID4gLSAgdGhlIGVuZCBvZiBhbm90aGVyIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcs IGFuZCByZXR1cm5zIHRoZQ0KPiA+ID4gPiAtICBjb25jYXRlbmF0ZWQgQVNDSUkgc3RyaW5nLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHR3byBOdWxs LXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5ncy4gVGhlIGNvbnRlbnRzDQo+ID4gPiA+IC0gIG9mIE51 bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgU291cmNlIGFyZSBjb25jYXRlbmF0ZWQgdG8gdGhl IGVuZCBvZiBOdWxsLQ0KPiA+ID4gPiAtICB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBEZXN0aW5h dGlvbiwgYW5kIERlc3RpbmF0aW9uIGlzIHJldHVybmVkLiBBdCBtb3N0LA0KPiA+ID4gPiAtICBM ZW5ndGggQVNDSUkgY2hhcmFjdGVycyBhcmUgY29uY2F0ZW5hdGVkIGZyb20gU291cmNlIHRvIHRo ZSBlbmQgb2YNCj4gPiA+ID4gLSAgRGVzdGluYXRpb24sIGFuZCBEZXN0aW5hdGlvbiBpcyBhbHdh eXMgTnVsbC10ZXJtaW5hdGVkLiBJZiBMZW5ndGggaXMgMCwgdGhlbg0KPiA+ID4gPiAtICBEZXN0 aW5hdGlvbiBpcyByZXR1cm5lZCB1bm1vZGlmaWVkLiBJZiBTb3VyY2UgYW5kIERlc3RpbmF0aW9u IG92ZXJsYXAsIHRoZW4NCj4gPiA+ID4gLSAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBMZW5ndGggPiAwIGFuZCBEZXN0aW5hdGlvbiBpcyBOVUxM LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2UgaXMg TlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGFuZCBEZXN0aW5hdGlv biBvdmVybGFwLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlT dHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBMZW5ndGggaXMgZ3JlYXRlciB0aGFuDQo+ID4g PiA+IC0gIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ ID4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQgRGVz dGluYXRpb24gY29udGFpbnMgbW9yZSB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Bc2NpaVN0 cmluZ0xlbmd0aCBBU0NJSSBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1p bmF0b3IsDQo+ID4gPiA+IC0gIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBjZE1heGlt dW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJjZSBjb250YWlucyBtb3Jl IHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFTQ0lJIGNoYXJh Y3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvciwNCj4gPiA+ID4gLSAgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIGlz IG5vdCB6ZXJvLCBhbmQgY29uY2F0ZW5hdGluZyBEZXN0aW5hdGlvbiBhbmQNCj4gPiA+ID4gLSAg U291cmNlIHJlc3VsdHMgaW4gYSBBU0NJSSBzdHJpbmcgd2l0aCBtb3JlIHRoYW4gUGNkTWF4aW11 bUFzY2lpU3RyaW5nTGVuZ3RoDQo+ID4gPiA+IC0gIEFTQ0lJIGNoYXJhY3RlcnMsIG5vdCBpbmNs dWRpbmcgdGhlIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtICBAcGFyYW0gIERlc3RpbmF0aW9uIEEgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRl ZCBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgU291cmNlICAgICAgQSBwb2ludGVy IHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBhcmFtICBM ZW5ndGggICAgICBUaGUgbWF4aW11bSBudW1iZXIgb2YgQVNDSUkgY2hhcmFjdGVycyB0byBjb25j YXRlbmF0ZSBmcm9tDQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgU291cmNlLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gRGVzdGluYXRpb24NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtKiovDQo+ID4gPiA+IC1DSEFSOCAqDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUFzY2lp U3RybkNhdCAoDQo+ID4gPiA+IC0gIElOIE9VVCAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAq RGVzdGluYXRpb24sDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgQ0hBUjggICAgICAgICAgICAg ICAqU291cmNlLA0KPiA+ID4gPiAtICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg TGVuZ3RoDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgVUlOVE4gICBEZXN0 aW5hdGlvbkxlbjsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBEZXN0aW5hdGlvbkxlbiA9IEFzY2lp U3RyTGVuIChEZXN0aW5hdGlvbik7DQo+ID4gPiA+IC0gIEFzY2lpU3RybkNweSAoRGVzdGluYXRp b24gKyBEZXN0aW5hdGlvbkxlbiwgU291cmNlLCBMZW5ndGgpOw0KPiA+ID4gPiAtICBEZXN0aW5h dGlvbltEZXN0aW5hdGlvbkxlbiArIExlbmd0aF0gPSAnXDAnOw0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIC8vDQo+ID4gPiA+IC0gIC8vIFNpemUgb2YgdGhlIHJlc3VsdGluZyBzdHJpbmcgc2hvdWxk IG5ldmVyIGJlIHplcm8uDQo+ID4gPiA+IC0gIC8vIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVu Z3RoIGlzIHRlc3RlZCBpbnNpZGUgU3RyTGVuKCkuDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0g IEFTU0VSVCAoQXNjaWlTdHJTaXplIChEZXN0aW5hdGlvbikgIT0gMCk7DQo+ID4gPiA+IC0gIHJl dHVybiBEZXN0aW5hdGlvbjsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPg0K PiA+ID4gPiAgLyoqDQo+ID4gPiA+ICAgIFJldHVybnMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2Yg YSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3ViLXN0cmluZw0KPiA+ID4gPiBAQCAtMTY4NCw3OCAr MTEzMCw2IEBAIEFzY2lpU3RySGV4VG9VaW50NjQgKA0KPiA+ID4gPiAgICByZXR1cm4gUmVzdWx0 Ow0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBS RUNBVEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtB VFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29u Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvbnZlcnQgb25lIE51bGwtdGVybWluYXRlZCBBU0NJ SSBzdHJpbmcgdG8gYSBOdWxsLXRlcm1pbmF0ZWQNCj4gPiA+ID4gLSAgVW5pY29kZSBzdHJpbmcg YW5kIHJldHVybnMgdGhlIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRo aXMgZnVuY3Rpb24gY29udmVydHMgdGhlIGNvbnRlbnRzIG9mIHRoZSBBU0NJSSBzdHJpbmcgU291 cmNlIHRvIHRoZSBVbmljb2RlDQo+ID4gPiA+IC0gIHN0cmluZyBEZXN0aW5hdGlvbiwgYW5kIHJl dHVybnMgRGVzdGluYXRpb24uICBUaGUgZnVuY3Rpb24gdGVybWluYXRlcyB0aGUNCj4gPiA+ID4g LSAgVW5pY29kZSBzdHJpbmcgRGVzdGluYXRpb24gYnkgYXBwZW5kaW5nIGEgTnVsbC10ZXJtaW5h dG9yIGNoYXJhY3RlciBhdCB0aGUgZW5kLg0KPiA+ID4gPiAtICBUaGUgY2FsbGVyIGlzIHJlc3Bv bnNpYmxlIHRvIG1ha2Ugc3VyZSBEZXN0aW5hdGlvbiBwb2ludHMgdG8gYSBidWZmZXIgd2l0aCBz aXplDQo+ID4gPiA+IC0gIGVxdWFsIG9yIGdyZWF0ZXIgdGhhbiAoKEFzY2lpU3RyTGVuIChTb3Vy Y2UpICsgMSkgKiBzaXplb2YgKENIQVIxNikpIGluIGJ5dGVzLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIElmIERlc3RpbmF0aW9uIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElm IERlc3RpbmF0aW9uIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTb3VyY2UgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4g PiA+ID4gLSAgSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuIEFTU0VSVCgp Lg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8s IGFuZCBTb3VyY2UgY29udGFpbnMgbW9yZSB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Bc2Np aVN0cmluZ0xlbmd0aCBBU0NJSSBjaGFyYWN0ZXJzIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVy bWluYXRvciwNCj4gPiA+ID4gLSAgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4 aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBTb3VyY2UgY29udGFpbnMg bW9yZSB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIEFTQ0lJ IGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZyB0aGUNCj4gPiA+ID4gLSAgTnVsbC10ZXJtaW5hdG9y LCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbSAgU291cmNlICAg ICAgICBBIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiA+ID4g PiAtICBAcGFyYW0gIERlc3RpbmF0aW9uICAgQSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVk IFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gRGVzdGluYXRp b24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQ0hBUjE2ICoNCj4gPiA+ID4g LUVGSUFQSQ0KPiA+ID4gPiAtQXNjaWlTdHJUb1VuaWNvZGVTdHIgKA0KPiA+ID4gPiAtICBJTiAg ICAgIENPTlNUIENIQVI4ICAgICAgICAgICAgICAgKlNvdXJjZSwNCj4gPiA+ID4gLSAgT1VUICAg ICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpEZXN0aW5hdGlvbg0KPiA+ID4gPiAtICApDQo+ ID4gPiA+IC17DQo+ID4gPiA+IC0gIENIQVIxNiAgICAgICAgICAgICAgICAgICAgICAgICAgICAq UmV0dXJuVmFsdWU7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQVNTRVJUIChEZXN0aW5hdGlvbiAh PSBOVUxMKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBBU1NFUlQg U291cmNlIGlzIGxlc3MgbG9uZyB0aGFuIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aA0KPiA+ ID4gPiAtICAvLw0KPiA+ID4gPiAtICBBU1NFUlQgKEFzY2lpU3RyU2l6ZSAoU291cmNlKSAhPSAw KTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBTb3VyY2UgYW5kIERl c3RpbmF0aW9uIHNob3VsZCBub3Qgb3ZlcmxhcA0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICBB U1NFUlQgKChVSU5UTikgKChDSEFSOCAqKSBEZXN0aW5hdGlvbiAtIFNvdXJjZSkgPiBBc2NpaVN0 ckxlbiAoU291cmNlKSk7DQo+ID4gPiA+IC0gIEFTU0VSVCAoKFVJTlROKSAoU291cmNlIC0gKENI QVI4ICopIERlc3RpbmF0aW9uKSA+PSAoQXNjaWlTdHJTaXplIChTb3VyY2UpICogc2l6ZW9mIChD SEFSMTYpKSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBSZXR1cm5WYWx1ZSA9 IERlc3RpbmF0aW9uOw0KPiA+ID4gPiAtICB3aGlsZSAoKlNvdXJjZSAhPSAnXDAnKSB7DQo+ID4g PiA+IC0gICAgKihEZXN0aW5hdGlvbisrKSA9IChDSEFSMTYpKFVJTlQ4KSAqKFNvdXJjZSsrKTsN Cj4gPiA+ID4gLSAgfQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAvLyBFbmQgdGhlIERlc3Rp bmF0aW9uIHdpdGggYSBOVUxMLg0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAqRGVzdGluYXRp b24gPSAnXDAnOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIC8vIEFTU0VS VCBPcmlnaW5hbCBEZXN0aW5hdGlvbiBpcyBsZXNzIGxvbmcgdGhhbiBQY2RNYXhpbXVtVW5pY29k ZVN0cmluZ0xlbmd0aA0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICBBU1NFUlQgKFN0clNpemUg KFJldHVyblZhbHVlKSAhPSAwKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gUmV0dXJu VmFsdWU7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPg0K PiA+ID4gPiAgU1RBVElDIENIQVI4IEVuY29kaW5nVGFibGVbXSA9ICJBQkNERUZHSElKS0xNTk9Q UVJTVFVWV1hZWiINCj4gPiA+ID4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFi Y2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ig0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xp YnJhcnkvQmFzZVBjZExpYk51bGwvUGNkTGliLmMgYi9NZGVQa2cvTGlicmFyeS9CYXNlUGNkTGli TnVsbC9QY2RMaWIuYw0KPiA+ID4gPiBpbmRleCA0OTQ0Nzg4MGFlOGIuLjI2NWZhZTVkNzM2OCAx MDA2NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvQmFzZVBjZExpYk51bGwvUGNkTGli LmMNCj4gPiA+ID4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZVBjZExpYk51bGwvUGNkTGliLmMN Cj4gPiA+ID4gQEAgLTM4NiwzNjcgKzM4Niw2IEBAIExpYlBjZEdldEV4U2l6ZSAoDQo+ID4gPiA+ ICB9DQo+ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNpZm5kZWYgRElTQUJM RV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhp cyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBh IGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSA4LWJpdCB2 YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlcg0KPiA+ID4gPiAtICB0 byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiAgVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2Vu IG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2lu XSAgVmFsdWUgICAgICAgICBUaGUgOC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVUlOVDgNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAt TGliUGNkU2V0OCAoDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVy LA0KPiA+ID4gPiAtICBJTiBVSU5UOCAgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ ID4gPiA+IC17DQo+ID4gPiA+IC0gIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIHJldHVybiAwOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFu cyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgMTYtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lm aWVkIGJ5IFRva2VuTnVtYmVyDQo+ID4gPiA+IC0gIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkg VmFsdWUuICBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1b aW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJlbnQg dmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgIFRoZSAxNi1i aXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRo ZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAt VUlOVDE2DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldDE2ICgNCj4gPiA+ID4g LSAgSU4gVUlOVE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIFVJTlQx NiAgICAgICAgICAgIFZhbHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAg QVNTRVJUIChGQUxTRSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIDA7DQo+ID4gPiA+ IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZh bHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRo ZSAzMi1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXINCj4g PiA+ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZhbHVlIGlzIHJldHVy bmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhl IFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0g IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDMyLWJpdCB2YWx1ZSB0byBzZXQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2FzIHNldC4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMzINCj4gPiA+ID4gLUVGSUFQ SQ0KPiA+ID4gPiAtTGliUGNkU2V0MzIgKA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAg ICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDMyICAgICAgICAgICAgVmFsdWUNCj4g PiA+ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICBBU1NFUlQgKEZBTFNFKTsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gMDsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHBy b3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRv a2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDY0LWJpdCB2YWx1ZSBmb3IgdGhl IHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlcg0KPiA+ID4gPiAtICB0byB0aGUgdmFsdWUg c3BlY2lmaWVkIGJ5IFZhbHVlLiAgVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBz ZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAg ICAgICBUaGUgNjQtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0 dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0q Ki8NCj4gPiA+ID4gLVVJTlQ2NA0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXQ2 NCAoDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4g PiAtICBJTiBVSU5UNjQgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17 DQo+ID4gPiA+IC0gIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVy biAwOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGlj aCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgU2V0cyBhIGJ1ZmZlciBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJl ciB0byB0aGUgdmFsdWUNCj4gPiA+ID4gLSAgc3BlY2lmaWVkIGJ5IEJ1ZmZlciBhbmQgU2l6ZU9m QnVmZmVyLiAgQnVmZmVyIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIg aXMgZ3JlYXRlciB0aGFuIHRoZSBtYXhpbXVtIHNpemUgc3VwcG9ydCBieSBUb2tlbk51bWJlciwN Cj4gPiA+ID4gLSAgdGhlbiBzZXQgU2l6ZU9mQnVmZmVyIHRvIHRoZSBtYXhpbXVtIHNpemUgc3Vw cG9ydGVkIGJ5IFRva2VuTnVtYmVyIGFuZA0KPiA+ID4gPiAtICByZXR1cm4gTlVMTCB0byBpbmRp Y2F0ZSB0aGF0IHRoZSBzZXQgb3BlcmF0aW9uIHdhcyBub3QgYWN0dWFsbHkgcGVyZm9ybWVkLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBzZXQgdG8gTUFYX0FERFJF U1MsIHRoZW4gU2l6ZU9mQnVmZmVyIG11c3QgYmUgc2V0IHRvIHRoZQ0KPiA+ID4gPiAtICBtYXhp bXVtIHNpemUgc3VwcG9ydGVkIGJ5IFRva2VuTmFtZSBhbmQgTlVMTCBtdXN0IGJlIHJldHVybmVk Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIgPiAwIGFuZCBCdWZmZXIgaXMgTlVM TCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICAgICAg VG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVl IGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luLCBvdXRdIFNpemVPZkJ1ZmZlciAgVGhlIHNpemUs IGluIGJ5dGVzLCBvZiBCdWZmZXIuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gICAgICBCdWZmZXIg ICAgICAgIEEgcG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBAcmV0dXJuIFJldHVybiB0aGUgcG9pbnRlciBmb3IgdGhlIGJ1ZmZlciBiZWVuIHNldC4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1WT0lEICoNCj4gPiA+ID4gLUVGSUFQ SQ0KPiA+ID4gPiAtTGliUGNkU2V0UHRyICgNCj4gPiA+ID4gLSAgSU4gICAgICAgIFVJTlROICAg ICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBPVVQgICAgVUlOVE4gICAgICAg ICAgICAgKlNpemVPZkJ1ZmZlciwNCj4gPiA+ID4gLSAgSU4gQ09OU1QgIFZPSUQgICAgICAgICAg ICAgICpCdWZmZXINCj4gPiA+ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICBBU1NFUlQg KEZBTFNFKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gLX0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAt ICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUg Zm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIEJv b2xlYW4gdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXINCj4gPiA+ ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZhbHVlIGlzIHJldHVybmVk Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBD RCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBw YXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIGJvb2xlYW4gdmFsdWUgdG8gc2V0Lg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQk9PTEVBTg0KPiA+ID4gPiAtRUZJQVBJ DQo+ID4gPiA+IC1MaWJQY2RTZXRCb29sICgNCj4gPiA+ID4gLSAgSU4gVUlOVE4gICAgICAgICAg ICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIEJPT0xFQU4gICAgICAgICAgIFZhbHVlDQo+ ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUIChGQUxTRSk7DQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIEZBTFNFOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rp b24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQ Q0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgOC1iaXQgdmFsdWUgZm9y IHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXIgYW5kDQo+ID4gPiA+IC0gIEd1aWQg dG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgVGhlIHBvaW50ZXIgdG8g YSAxMjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0DQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1lc3BhY2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4N Cj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJl ciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFs dWUgICAgICAgICBUaGUgOC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSoqLw0KPiA+ID4gPiAtVUlOVDgNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNk U2V0RXg4ICgNCj4gPiA+ID4gLSAgSU4gQ09OU1QgR1VJRCAgICAgICAgKkd1aWQsDQo+ID4gPiA+ IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBVSU5U OCAgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0g IEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiAwOw0KPiA+ID4g PiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4g PiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2 YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0 aGUgMTYtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyIGFu ZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuIFZhbHVl IGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAgICAg ICAgIFRoZSBwb2ludGVyIHRvIGEgMTI4LWJpdCB1bmlxdWUgdmFsdWUgdGhhdA0KPiA+ID4gPiAt ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0ZXMgd2hpY2ggbmFtZXNwYWNlIHRv IHNldCBhIHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAg VGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+ IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDE2LWJpdCB2YWx1ZSB0byBzZXQuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2FzIHNl dC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMTYNCj4gPiA+ID4gLUVG SUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0RXgxNiAoDQo+ID4gPiA+IC0gIElOIENPTlNUIEdVSUQg ICAgICAgICpHdWlkLA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJl ciwNCj4gPiA+ID4gLSAgSU4gVUlOVDE2ICAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKQ0K PiA+ID4gPiAtew0KPiA+ID4gPiAtICBBU1NFUlQgKEZBTFNFKTsNCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICByZXR1cm4gMDsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVh bnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDMyLWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNp ZmllZCBieSBUb2tlbk51bWJlciBhbmQNCj4gPiA+ID4gLSAgR3VpZCB0byB0aGUgdmFsdWUgc3Bl Y2lmaWVkIGJ5IFZhbHVlLiBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg QHBhcmFtW2luXSAgR3VpZCAgICAgICAgICBUaGUgcG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVl IHZhbHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ25h dGVzIHdoaWNoIG5hbWVzcGFjZSB0byBzZXQgYSB2YWx1ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFy YW1baW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJl bnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgIFRoZSAz Mi1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJu IHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4g PiAtVUlOVDMyDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4MzIgKA0KPiA+ ID4gPiAtICBJTiBDT05TVCBHVUlEICAgICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gVUlOVE4g ICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIFVJTlQzMiAgICAgICAgICAg IFZhbHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUIChGQUxT RSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIDA7DQo+ID4gPiA+IC19DQo+ID4gPiA+ IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBm dW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdp dmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSA2NC1iaXQgdmFs dWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXIgYW5kDQo+ID4gPiA+IC0g IEd1aWQgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gVmFsdWUgaXMgcmV0dXJuZWQu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgVGhlIHBvaW50 ZXIgdG8gYSAxMjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0DQo+ID4gPiA+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1lc3BhY2UgdG8gc2V0IGEgdmFsdWUg ZnJvbS4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2Vu IG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2lu XSAgVmFsdWUgICAgICAgICBUaGUgNjQtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAt DQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQ2NA0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+ IC1MaWJQY2RTZXRFeDY0ICgNCj4gPiA+ID4gLSAgSU4gQ09OU1QgR1VJRCAgICAgICAgKkd1aWQs DQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAt ICBJTiBVSU5UNjQgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ ID4gPiA+IC0gIEFTU0VSVCAoRkFMU0UpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiAw Ow0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt LyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0 byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgU2V0cyBhIGJ1ZmZlciBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlciB0 byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gPiA+IC0gIEJ1ZmZlciBhbmQgU2l6ZU9mQnVm ZmVyLiAgQnVmZmVyIGlzIHJldHVybmVkLiAgSWYgU2l6ZU9mQnVmZmVyIGlzIGdyZWF0ZXIgdGhh bg0KPiA+ID4gPiAtICB0aGUgbWF4aW11bSBzaXplIHN1cHBvcnQgYnkgVG9rZW5OdW1iZXIsIHRo ZW4gc2V0IFNpemVPZkJ1ZmZlciB0byB0aGUgbWF4aW11bSBzaXplDQo+ID4gPiA+IC0gIHN1cHBv cnRlZCBieSBUb2tlbk51bWJlciBhbmQgcmV0dXJuIE5VTEwgdG8gaW5kaWNhdGUgdGhhdCB0aGUg c2V0IG9wZXJhdGlvbg0KPiA+ID4gPiAtICB3YXMgbm90IGFjdHVhbGx5IHBlcmZvcm1lZC4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4g PiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAt ICBJZiBTaXplT2ZCdWZmZXIgPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAgICAgICAgICAgICBUaGUg cG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1lc3BhY2UgdG8gc2V0 IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICAgICAg VGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+ IC0gIEBwYXJhbVtpbiwgb3V0XSBTaXplT2ZCdWZmZXIgIFRoZSBzaXplLCBpbiBieXRlcywgb2Yg QnVmZmVyLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBCdWZmZXIgICAgICAgICAgICBBIHBvaW50 ZXIgdG8gdGhlIGJ1ZmZlciB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBS ZXR1cm4gdGhlIHBpbnRlciB0byB0aGUgYnVmZmVyIGJlZW4gc2V0Lg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0qKi8NCj4gPiA+ID4gLVZPSUQgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQ Y2RTZXRFeFB0ciAoDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgR1VJRCAgICAgICAgKkd1aWQs DQo+ID4gPiA+IC0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4g PiA+IC0gIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgKlNpemVPZkJ1ZmZlciwNCj4gPiA+ID4g LSAgSU4gICAgICBWT0lEICAgICAgICAgICAgICAqQnVmZmVyDQo+ID4gPiA+IC0gICkNCj4gPiA+ ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUIChGQUxTRSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg cmV0dXJuIE5VTEw7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt DQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5z IGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtICBTZXRzIHRoZSBCb29sZWFuIHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lm aWVkIGJ5IFRva2VuTnVtYmVyIGFuZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBA cGFyYW1baW5dICBHdWlkICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgMTI4LWJpdCB1bmlxdWUg dmFsdWUgdGhhdA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0 ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBhIHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJh bVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVu dCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIEJv b2xlYW4gdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJu IHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4g PiAtQk9PTEVBTg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXRFeEJvb2wgKA0K PiA+ID4gPiAtICBJTiBDT05TVCBHVUlEICAgICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gVUlO VE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIEJPT0xFQU4gICAgICAg ICAgIFZhbHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUIChG QUxTRSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIEZBTFNFOw0KPiA+ID4gPiAtfQ0K PiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+IC0NCj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAgICBUaGlz IGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEg Z2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL0xp YnJhcnkvQmFzZVByaW50TGliL1ByaW50TGliLmMgYi9NZGVQa2cvTGlicmFyeS9CYXNlUHJpbnRM aWIvUHJpbnRMaWIuYw0KPiA+ID4gPiBpbmRleCBhZjc3MTY1MmU0YjAuLjhiZmJhYjA1ZjU4YyAx MDA2NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL0xpYnJhcnkvQmFzZVByaW50TGliL1ByaW50TGli LmMNCj4gPiA+ID4gKysrIGIvTWRlUGtnL0xpYnJhcnkvQmFzZVByaW50TGliL1ByaW50TGliLmMN Cj4gPiA+ID4gQEAgLTM0Myw2NSArMzQzLDYgQEAgVW5pY29kZVNQcmludEFzY2lpRm9ybWF0ICgN Cj4gPiA+ID4gICAgcmV0dXJuIE51bWJlck9mUHJpbnRlZDsNCj4gPiA+ID4gIH0NCj4gPiA+ID4N Cj4gPiA+ID4gLSNpZm5kZWYgRElTQUJMRV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ID4g PiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBbQVRURU5USU9OXSBUaGlzIGZ1bmN0aW9u IGlzIGRlcHJlY2F0ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBDb252ZXJ0cyBhIGRlY2ltYWwgdmFsdWUgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBz dHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQ29udmVydHMgdGhlIGRlY2ltYWwgbnVtYmVy IHNwZWNpZmllZCBieSBWYWx1ZSB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlDQo+ID4gPiA+ IC0gIHN0cmluZyBzcGVjaWZpZWQgYnkgQnVmZmVyIGNvbnRhaW5pbmcgYXQgbW9zdCBXaWR0aCBj aGFyYWN0ZXJzLiBObyBwYWRkaW5nIG9mIHNwYWNlcw0KPiA+ID4gPiAtICBpcyBldmVyIHBlcmZv cm1lZC4gSWYgV2lkdGggaXMgMCB0aGVuIGEgd2lkdGggb2YgTUFYSU1VTV9WQUxVRV9DSEFSQUNU RVJTIGlzIGFzc3VtZWQuDQo+ID4gPiA+IC0gIFRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0 ZXJzIGluIEJ1ZmZlciBpcyByZXR1cm5lZCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0 b3IuDQo+ID4gPiA+IC0gIElmIHRoZSBjb252ZXJzaW9uIGNvbnRhaW5zIG1vcmUgdGhhbiBXaWR0 aCBjaGFyYWN0ZXJzLCB0aGVuIG9ubHkgdGhlIGZpcnN0DQo+ID4gPiA+IC0gIFdpZHRoIGNoYXJh Y3RlcnMgYXJlIHJldHVybmVkLCBhbmQgdGhlIHRvdGFsIG51bWJlciBvZiBjaGFyYWN0ZXJzDQo+ ID4gPiA+IC0gIHJlcXVpcmVkIHRvIHBlcmZvcm0gdGhlIGNvbnZlcnNpb24gaXMgcmV0dXJuZWQu DQo+ID4gPiA+IC0gIEFkZGl0aW9uYWwgY29udmVyc2lvbiBwYXJhbWV0ZXJzIGFyZSBzcGVjaWZp ZWQgaW4gRmxhZ3MuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhlIEZsYWdzIGJpdCBMRUZUX0pV U1RJRlkgaXMgYWx3YXlzIGlnbm9yZWQuDQo+ID4gPiA+IC0gIEFsbCBjb252ZXJzaW9ucyBhcmUg bGVmdCBqdXN0aWZpZWQgaW4gQnVmZmVyLg0KPiA+ID4gPiAtICBJZiBXaWR0aCBpcyAwLCBQUkVG SVhfWkVSTyBpcyBpZ25vcmVkIGluIEZsYWdzLg0KPiA+ID4gPiAtICBJZiBDT01NQV9UWVBFIGlz IHNldCBpbiBGbGFncywgdGhlbiBQUkVGSVhfWkVSTyBpcyBpZ25vcmVkIGluIEZsYWdzLCBhbmQg Y29tbWFzDQo+ID4gPiA+IC0gIGFyZSBpbnNlcnRlZCBldmVyeSAzcmQgZGlnaXQgc3RhcnRpbmcg ZnJvbSB0aGUgcmlnaHQuDQo+ID4gPiA+IC0gIElmIFJBRElYX0hFWCBpcyBzZXQgaW4gRmxhZ3Ms IHRoZW4gdGhlIG91dHB1dCBidWZmZXIgd2lsbCBiZQ0KPiA+ID4gPiAtICBmb3JtYXR0ZWQgaW4g aGV4YWRlY2ltYWwgZm9ybWF0Lg0KPiA+ID4gPiAtICBJZiBWYWx1ZSBpcyA8IDAgYW5kIFJBRElY X0hFWCBpcyBub3Qgc2V0IGluIEZsYWdzLCB0aGVuIHRoZSBmaXN0IGNoYXJhY3RlciBpbiBCdWZm ZXIgaXMgYSAnLScuDQo+ID4gPiA+IC0gIElmIFBSRUZJWF9aRVJPIGlzIHNldCBpbiBGbGFncyBh bmQgUFJFRklYX1pFUk8gaXMgbm90IGJlaW5nIGlnbm9yZWQsDQo+ID4gPiA+IC0gIHRoZW4gQnVm ZmVyIGlzIHBhZGRlZCB3aXRoICcwJyBjaGFyYWN0ZXJzIHNvIHRoZSBjb21iaW5hdGlvbiBvZiB0 aGUgb3B0aW9uYWwgJy0nDQo+ID4gPiA+IC0gIHNpZ24gY2hhcmFjdGVyLCAnMCcgY2hhcmFjdGVy cywgZGlnaXQgY2hhcmFjdGVycyBmb3IgVmFsdWUsIGFuZCB0aGUgTnVsbC10ZXJtaW5hdG9yDQo+ ID4gPiA+IC0gIGFkZCB1cCB0byBXaWR0aCBjaGFyYWN0ZXJzLg0KPiA+ID4gPiAtICBJZiBib3Ro IENPTU1BX1RZUEUgYW5kIFJBRElYX0hFWCBhcmUgc2V0IGluIEZsYWdzLCB0aGVuIEFTU0VSVCgp Lg0KPiA+ID4gPiAtICBJZiBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4g LSAgSWYgQnVmZmVyIGlzIG5vdCBhbGlnbmVkIG9uIGEgMTYtYml0IGJvdW5kYXJ5LCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiB1bnN1cHBvcnRlZCBiaXRzIGFyZSBzZXQgaW4gRmxhZ3Ms IHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIGJvdGggQ09NTUFfVFlQRSBhbmQgUkFESVhf SEVYIGFyZSBzZXQgaW4gRmxhZ3MsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFdpZHRo ID49IE1BWElNVU1fVkFMVUVfQ0hBUkFDVEVSUywgdGhlbiBBU1NFUlQoKQ0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZl ciBmb3IgdGhlIHByb2R1Y2VkIE51bGwtdGVybWluYXRlZA0KPiA+ID4gPiAtICAgICAgICAgICAg ICAgICAgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgRmxhZ3MgICBUaGUgYml0 bWFzayBvZiBmbGFncyB0aGF0IHNwZWNpZnkgbGVmdCBqdXN0aWZpY2F0aW9uLCB6ZXJvIHBhZCwg YW5kIGNvbW1hcy4NCj4gPiA+ID4gLSAgQHBhcmFtICBWYWx1ZSAgIFRoZSA2NC1iaXQgc2lnbmVk IHZhbHVlIHRvIGNvbnZlcnQgdG8gYSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgV2lkdGgg ICBUaGUgbWF4aW11bSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIHRvIHBsYWNlIGluIEJ1 ZmZlciwgbm90IGluY2x1ZGluZw0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgdGhlIE51bGwt dGVybWluYXRvci4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFRoZSBudW1iZXIgb2Yg VW5pY29kZSBjaGFyYWN0ZXJzIGluIEJ1ZmZlciBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1p bmF0b3IuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVUlOVE4NCj4gPiA+ID4g LUVGSUFQSQ0KPiA+ID4gPiAtVW5pY29kZVZhbHVlVG9TdHJpbmcgKA0KPiA+ID4gPiAtICBJTiBP VVQgQ0hBUjE2ICAqQnVmZmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICBGbGFncywNCj4g PiA+ID4gLSAgSU4gSU5UNjQgICAgICAgVmFsdWUsDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAg IFdpZHRoDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUX1VOSUNP REVfQlVGRkVSKEJ1ZmZlcik7DQo+ID4gPiA+IC0gIHJldHVybiBCYXNlUHJpbnRMaWJDb252ZXJ0 VmFsdWVUb1N0cmluZyAoKENIQVI4ICopQnVmZmVyLCBGbGFncywgVmFsdWUsIFdpZHRoLCAyKTsN Cj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+DQo+ID4gPiA+ ICAvKioNCj4gPiA+ID4gICAgQ29udmVydHMgYSBkZWNpbWFsIHZhbHVlIHRvIGEgTnVsbC10ZXJt aW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiBAQCAtNzgwLDY1ICs3MjEsNiBAQCBBc2Np aVNQcmludFVuaWNvZGVGb3JtYXQgKA0KPiA+ID4gPiAgICByZXR1cm4gTnVtYmVyT2ZQcmludGVk Ow0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0jaWZuZGVmIERJU0FC TEVfTkVXX0RFUFJFQ0FURURfSU5URVJGQUNFUw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4g PiA+ID4gLSAgW0FUVEVOVElPTl0gVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGZvciBzZWN1 cml0eSByZWFzb24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQ29udmVydHMgYSBkZWNpbWFsIHZh bHVlIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBDb252ZXJ0cyB0aGUgZGVjaW1hbCBudW1iZXIgc3BlY2lmaWVkIGJ5IFZhbHVlIHRvIGEg TnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZw0KPiA+ID4gPiAtICBzcGVjaWZpZWQgYnkgQnVm ZmVyIGNvbnRhaW5pbmcgYXQgbW9zdCBXaWR0aCBjaGFyYWN0ZXJzLiBObyBwYWRkaW5nIG9mIHNw YWNlcw0KPiA+ID4gPiAtICBpcyBldmVyIHBlcmZvcm1lZC4NCj4gPiA+ID4gLSAgSWYgV2lkdGgg aXMgMCB0aGVuIGEgd2lkdGggb2YgIE1BWElNVU1fVkFMVUVfQ0hBUkFDVEVSUyBpcyBhc3N1bWVk Lg0KPiA+ID4gPiAtICBUaGUgbnVtYmVyIG9mIEFTQ0lJIGNoYXJhY3RlcnMgaW4gQnVmZmVyIGlz IHJldHVybmVkIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvci4NCj4gPiA+ID4gLSAg SWYgdGhlIGNvbnZlcnNpb24gY29udGFpbnMgbW9yZSB0aGFuIFdpZHRoIGNoYXJhY3RlcnMsIHRo ZW4gb25seSB0aGUgZmlyc3QgV2lkdGgNCj4gPiA+ID4gLSAgY2hhcmFjdGVycyBhcmUgcmV0dXJu ZWQsIGFuZCB0aGUgdG90YWwgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcmVxdWlyZWQgdG8gcGVyZm9y bQ0KPiA+ID4gPiAtICB0aGUgY29udmVyc2lvbiBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLSAgQWRk aXRpb25hbCBjb252ZXJzaW9uIHBhcmFtZXRlcnMgYXJlIHNwZWNpZmllZCBpbiBGbGFncy4NCj4g PiA+ID4gLSAgVGhlIEZsYWdzIGJpdCBMRUZUX0pVU1RJRlkgaXMgYWx3YXlzIGlnbm9yZWQuDQo+ ID4gPiA+IC0gIEFsbCBjb252ZXJzaW9ucyBhcmUgbGVmdCBqdXN0aWZpZWQgaW4gQnVmZmVyLg0K PiA+ID4gPiAtICBJZiBXaWR0aCBpcyAwLCBQUkVGSVhfWkVSTyBpcyBpZ25vcmVkIGluIEZsYWdz Lg0KPiA+ID4gPiAtICBJZiBDT01NQV9UWVBFIGlzIHNldCBpbiBGbGFncywgdGhlbiBQUkVGSVhf WkVSTyBpcyBpZ25vcmVkIGluIEZsYWdzLCBhbmQgY29tbWFzDQo+ID4gPiA+IC0gIGFyZSBpbnNl cnRlZCBldmVyeSAzcmQgZGlnaXQgc3RhcnRpbmcgZnJvbSB0aGUgcmlnaHQuDQo+ID4gPiA+IC0g IElmIFJBRElYX0hFWCBpcyBzZXQgaW4gRmxhZ3MsIHRoZW4gdGhlIG91dHB1dCBidWZmZXIgd2ls bCBiZQ0KPiA+ID4gPiAtICBmb3JtYXR0ZWQgaW4gaGV4YWRlY2ltYWwgZm9ybWF0Lg0KPiA+ID4g PiAtICBJZiBWYWx1ZSBpcyA8IDAgYW5kIFJBRElYX0hFWCBpcyBub3Qgc2V0IGluIEZsYWdzLCB0 aGVuIHRoZSBmaXN0IGNoYXJhY3RlciBpbiBCdWZmZXIgaXMgYSAnLScuDQo+ID4gPiA+IC0gIElm IFBSRUZJWF9aRVJPIGlzIHNldCBpbiBGbGFncyBhbmQgUFJFRklYX1pFUk8gaXMgbm90IGJlaW5n IGlnbm9yZWQsDQo+ID4gPiA+IC0gIHRoZW4gQnVmZmVyIGlzIHBhZGRlZCB3aXRoICcwJyBjaGFy YWN0ZXJzIHNvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgb3B0aW9uYWwgJy0nDQo+ID4gPiA+IC0g IHNpZ24gY2hhcmFjdGVyLCAnMCcgY2hhcmFjdGVycywgZGlnaXQgY2hhcmFjdGVycyBmb3IgVmFs dWUsIGFuZCB0aGUgTnVsbC10ZXJtaW5hdG9yDQo+ID4gPiA+IC0gIGFkZCB1cCB0byBXaWR0aCBj aGFyYWN0ZXJzLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEJ1ZmZlciBpcyBOVUxMLCB0aGVu IEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiB1bnN1cHBvcnRlZCBiaXRzIGFyZSBzZXQgaW4gRmxh Z3MsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIGJvdGggQ09NTUFfVFlQRSBhbmQgUkFE SVhfSEVYIGFyZSBzZXQgaW4gRmxhZ3MsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFdp ZHRoID49IE1BWElNVU1fVkFMVUVfQ0hBUkFDVEVSUywgdGhlbiBBU1NFUlQoKQ0KPiA+ID4gPiAt DQo+ID4gPiA+IC0gIEBwYXJhbSAgQnVmZmVyICBUaGUgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1 ZmZlciBmb3IgdGhlIHByb2R1Y2VkIE51bGwtdGVybWluYXRlZA0KPiA+ID4gPiAtICAgICAgICAg ICAgICAgICAgQVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIEZsYWdzICAgVGhlIGJp dG1hc2sgb2YgZmxhZ3MgdGhhdCBzcGVjaWZ5IGxlZnQganVzdGlmaWNhdGlvbiwgemVybyBwYWQs IGFuZCBjb21tYXMuDQo+ID4gPiA+IC0gIEBwYXJhbSAgVmFsdWUgICBUaGUgNjQtYml0IHNpZ25l ZCB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgc3RyaW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIFdpZHRo ICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIEFTQ0lJIGNoYXJhY3RlcnMgdG8gcGxhY2UgaW4gQnVm ZmVyLCBub3QgaW5jbHVkaW5nDQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICB0aGUgTnVsbC10 ZXJtaW5hdG9yLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gVGhlIG51bWJlciBvZiBB U0NJSSBjaGFyYWN0ZXJzIGluIEJ1ZmZlciBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0 b3IuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVUlOVE4NCj4gPiA+ID4gLUVG SUFQSQ0KPiA+ID4gPiAtQXNjaWlWYWx1ZVRvU3RyaW5nICgNCj4gPiA+ID4gLSAgT1VUIENIQVI4 ICAgICAgKkJ1ZmZlciwNCj4gPiA+ID4gLSAgSU4gIFVJTlROICAgICAgRmxhZ3MsDQo+ID4gPiA+ IC0gIElOICBJTlQ2NCAgICAgIFZhbHVlLA0KPiA+ID4gPiAtICBJTiAgVUlOVE4gICAgICBXaWR0 aA0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIHJldHVybiBCYXNlUHJpbnRM aWJDb252ZXJ0VmFsdWVUb1N0cmluZyAoQnVmZmVyLCBGbGFncywgVmFsdWUsIFdpZHRoLCAxKTsN Cj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+IC0NCj4gPiA+ ID4gIC8qKg0KPiA+ID4gPiAgICBDb252ZXJ0cyBhIGRlY2ltYWwgdmFsdWUgdG8gYSBOdWxsLXRl cm1pbmF0ZWQgQXNjaWkgc3RyaW5nLg0KPiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvTWRl UGtnL0xpYnJhcnkvRHhlUGNkTGliL0R4ZVBjZExpYi5jIGIvTWRlUGtnL0xpYnJhcnkvRHhlUGNk TGliL0R4ZVBjZExpYi5jDQo+ID4gPiA+IGluZGV4IDZlM2U0ZTcwNjk3Zi4uMmFjY2FlZGEyY2Q2 IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9NZGVQa2cvTGlicmFyeS9EeGVQY2RMaWIvRHhlUGNkTGli LmMNCj4gPiA+ID4gKysrIGIvTWRlUGtnL0xpYnJhcnkvRHhlUGNkTGliL0R4ZVBjZExpYi5jDQo+ ID4gPiA+IEBAIC00NzQsNDA1ICs0NzQsNiBAQCBMaWJQY2RHZXRFeFNpemUgKA0KPiA+ID4gPiAg fQ0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0jaWZuZGVmIERJU0FCTEVf TkVXX0RFUFJFQ0FURURfSU5URVJGQUNFUw0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMg ZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBn aXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgOC1iaXQgdmFs dWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXINCj4gPiA+ID4gLSAgdG8g dGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBu dW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0g IFZhbHVlICAgICAgICAgVGhlIDgtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQ4DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxp YlBjZFNldDggKA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwN Cj4gPiA+ID4gLSAgSU4gVUlOVDggICAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKQ0KPiA+ ID4gPiAtew0KPiA+ID4gPiAtICBHZXRQY2RQcm90b2NvbCgpLT5TZXQ4IChUb2tlbk51bWJlciwg VmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAt ICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUg Zm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDE2 LWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlcg0KPiA+ID4g PiAtICB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiAgVmFsdWUgaXMgcmV0dXJuZWQu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENE IHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBh cmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgMTYtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQxNg0KPiA+ID4gPiAtRUZJQVBJDQo+ ID4gPiA+IC1MaWJQY2RTZXQxNiAoDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRv a2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UMTYgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4g PiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIEdldFBjZFByb3RvY29sKCktPlNldDE2IChU b2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiBWYWx1ZTsN Cj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8q Kg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8g c2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IFNldHMgdGhlIDMyLWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51 bWJlcg0KPiA+ID4gPiAtICB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiAgVmFsdWUg aXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1i ZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4g PiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgMzItYml0IHZhbHVlIHRvIHNl dC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3 YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQzMg0KPiA+ID4g PiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXQzMiAoDQo+ID4gPiA+IC0gIElOIFVJTlROICAg ICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UMzIgICAgICAgICAgICBW YWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIEdldFBjZFByb3RvY29s KCktPlNldDMyIChUb2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJl dHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMg Ynkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAt DQo+ID4gPiA+IC0gIFNldHMgdGhlIDY0LWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmll ZCBieSBUb2tlbk51bWJlcg0KPiA+ID4gPiAtICB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZh bHVlLiAgVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2lu XSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZh bHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgNjQtYml0 IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUg dmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJ TlQ2NA0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXQ2NCAoDQo+ID4gPiA+IC0g IElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UNjQg ICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIEdl dFBjZFByb3RvY29sKCktPlNldDY0IChUb2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIHJldHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt DQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3Zp ZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2Vu Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgYSBidWZmZXIgZm9yIHRoZSB0b2tlbiBzcGVj aWZpZWQgYnkgVG9rZW5OdW1iZXIgdG8gdGhlIHZhbHVlDQo+ID4gPiA+IC0gIHNwZWNpZmllZCBi eSBCdWZmZXIgYW5kIFNpemVPZkJ1ZmZlci4gIEJ1ZmZlciBpcyByZXR1cm5lZC4NCj4gPiA+ID4g LSAgSWYgU2l6ZU9mQnVmZmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBzaXplIHN1cHBv cnQgYnkgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIHRoZW4gc2V0IFNpemVPZkJ1ZmZlciB0byB0 aGUgbWF4aW11bSBzaXplIHN1cHBvcnRlZCBieSBUb2tlbk51bWJlciBhbmQNCj4gPiA+ID4gLSAg cmV0dXJuIE5VTEwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2V0IG9wZXJhdGlvbiB3YXMgbm90IGFj dHVhbGx5IHBlcmZvcm1lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIg aXMgc2V0IHRvIE1BWF9BRERSRVNTLCB0aGVuIFNpemVPZkJ1ZmZlciBtdXN0IGJlIHNldCB0byB0 aGUNCj4gPiA+ID4gLSAgbWF4aW11bSBzaXplIHN1cHBvcnRlZCBieSBUb2tlbk5hbWUgYW5kIE5V TEwgbXVzdCBiZSByZXR1cm5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZm ZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyID4g MCBhbmQgQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgQHBhcmFtW2luXSAgICAgIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8g c2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbiwgb3V0XSBTaXpl T2ZCdWZmZXIgIFRoZSBzaXplLCBpbiBieXRlcywgb2YgQnVmZmVyLg0KPiA+ID4gPiAtICBAcGFy YW1baW5dICAgICAgQnVmZmVyICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzZXQu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHBvaW50ZXIgZm9yIHRo ZSBidWZmZXIgYmVlbiBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVk9J RCAqDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldFB0ciAoDQo+ID4gPiA+IC0g IElOICAgICAgICBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4g T1VUICAgIFVJTlROICAgICAgICAgICAgICpTaXplT2ZCdWZmZXIsDQo+ID4gPiA+IC0gIElOIENP TlNUICBWT0lEICAgICAgICAgICAgICAqQnVmZmVyDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsN Cj4gPiA+ID4gLSAgRUZJX1NUQVRVUyBTdGF0dXM7DQo+ID4gPiA+IC0gIFVJTlROICAgICAgSW5w dXRTaXplT2ZCdWZmZXI7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQVNTRVJUIChTaXplT2ZCdWZm ZXIgIT0gTlVMTCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgaWYgKCpTaXplT2ZCdWZmZXIgPiAw KSB7DQo+ID4gPiA+IC0gICAgQVNTRVJUIChCdWZmZXIgIT0gTlVMTCk7DQo+ID4gPiA+IC0gIH0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJbnB1dFNpemVPZkJ1ZmZlciA9ICpTaXplT2ZCdWZmZXI7 DQo+ID4gPiA+IC0gIFN0YXR1cyA9IEdldFBjZFByb3RvY29sKCktPlNldFB0ciAoVG9rZW5OdW1i ZXIsIFNpemVPZkJ1ZmZlciwgKFZPSUQgKikgQnVmZmVyKTsNCj4gPiA+ID4gLSAgaWYgKEVGSV9F UlJPUiAoU3RhdHVzKSAmJiAoKlNpemVPZkJ1ZmZlciA8IElucHV0U2l6ZU9mQnVmZmVyKSkgew0K PiA+ID4gPiAtICAgIHJldHVybiBOVUxMOw0KPiA+ID4gPiAtICB9DQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgcmV0dXJuIChWT0lEICopQnVmZmVyOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24g cHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0Qg dG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgQm9vbGVhbiB2YWx1ZSBmb3Ig dGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlcg0KPiA+ID4gPiAtICB0byB0aGUgdmFs dWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiAgVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0 byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUg ICAgICAgICBUaGUgYm9vbGVhbiB2YWx1ZSB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg QHJldHVybiBSZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtKiovDQo+ID4gPiA+IC1CT09MRUFODQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBj ZFNldEJvb2wgKA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwN Cj4gPiA+ID4gLSAgSU4gQk9PTEVBTiAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKQ0KPiA+ ID4gPiAtew0KPiA+ID4gPiAtICBHZXRQY2RQcm90b2NvbCgpLT5TZXRCb29sIChUb2tlbk51bWJl ciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiBWYWx1ZTsNCj4gPiA+ID4g LX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4g PiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFs dWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhl IDgtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyIGFuZA0K PiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlz IHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBB U1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAgICAgICAg IFRoZSBwb2ludGVyIHRvIGEgMTI4LWJpdCB1bmlxdWUgdmFsdWUgdGhhdA0KPiA+ID4gPiAtICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNl dCBhIHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhl IFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0g IEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDgtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQ4DQo+ID4gPiA+IC1FRklBUEkN Cj4gPiA+ID4gLUxpYlBjZFNldEV4OCAoDQo+ID4gPiA+IC0gIElOIENPTlNUIEdVSUQgICAgICAg ICpHdWlkLA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4g PiA+ID4gLSAgSU4gVUlOVDggICAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKQ0KPiA+ID4g PiAtew0KPiA+ID4gPiAtICBBU1NFUlQgKEd1aWQgIT0gTlVMTCk7DQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgR2V0UGlQY2RQcm90b2NvbCgpLT5TZXQ4IChHdWlkLCBUb2tlbk51bWJlciwgVmFsdWUp Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlz IGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEg Z2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDE2LWJpdCB2 YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlciBhbmQNCj4gPiA+ID4g LSAgR3VpZCB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiBWYWx1ZSBpcyByZXR1cm5l ZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgR3VpZCAgICAgICAgICBUaGUgcG9p bnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXNpZ25hdGVzIHdoaWNoIG5hbWVzcGFjZSB0byBzZXQgYSB2YWx1 ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9r ZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1b aW5dICBWYWx1ZSAgICAgICAgIFRoZSAxNi1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVUlOVDE2DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ ID4gLUxpYlBjZFNldEV4MTYgKA0KPiA+ID4gPiAtICBJTiBDT05TVCBHVUlEICAgICAgICAqR3Vp ZCwNCj4gPiA+ID4gLSAgSU4gVUlOVE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+ IC0gIElOIFVJTlQxNiAgICAgICAgICAgIFZhbHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsN Cj4gPiA+ID4gLSAgQVNTRVJUIChHdWlkICE9IE5VTEwpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IEdldFBpUGNkUHJvdG9jb2woKS0+U2V0MTYgKEd1aWQsIFRva2VuTnVtYmVyLCBWYWx1ZSk7DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIFZhbHVlOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAt DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVu Y3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZl biBQQ0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgMzItYml0IHZhbHVl IGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyIGFuZA0KPiA+ID4gPiAtICBH dWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlzIHJldHVybmVkLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAgICAgICAgIFRoZSBwb2ludGVy IHRvIGEgMTI4LWJpdCB1bmlxdWUgdmFsdWUgdGhhdA0KPiA+ID4gPiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGRlc2lnbmF0ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBhIHZhbHVlIGZy b20uDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBu dW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0g IFZhbHVlICAgICAgICAgVGhlIDMyLWJpdCB2YWx1ZSB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMzINCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAt TGliUGNkU2V0RXgzMiAoDQo+ID4gPiA+IC0gIElOIENPTlNUIEdVSUQgICAgICAgICpHdWlkLA0K PiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAg SU4gVUlOVDMyICAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ ID4gPiAtICBBU1NFUlQgKEd1aWQgIT0gTlVMTCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgR2V0 UGlQY2RQcm90b2NvbCgpLT5TZXQzMiAoR3VpZCwgVG9rZW5OdW1iZXIsIFZhbHVlKTsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gVmFsdWU7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlv biBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBD RCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSA2NC1iaXQgdmFsdWUgZm9y IHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXIgYW5kDQo+ID4gPiA+IC0gIEd1aWQg dG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgVGhlIHBvaW50ZXIgdG8g YSAxMjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0DQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1lc3BhY2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4N Cj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJl ciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFs dWUgICAgICAgICBUaGUgNjQtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQ2NA0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQ Y2RTZXRFeDY0ICgNCj4gPiA+ID4gLSAgSU4gQ09OU1QgR1VJRCAgICAgICAgKkd1aWQsDQo+ID4g PiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBV SU5UNjQgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+ IC0gIEFTU0VSVCAoR3VpZCAhPSBOVUxMKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBHZXRQaVBj ZFByb3RvY29sKCktPlNldDY0IChHdWlkLCBUb2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAt DQo+ID4gPiA+IC0gIHJldHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHBy b3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRv a2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgYSBidWZmZXIgZm9yIHRoZSB0b2tlbiBz cGVjaWZpZWQgYnkgVG9rZW5OdW1iZXIgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieQ0KPiA+ID4g PiAtICBCdWZmZXIgYW5kIFNpemVPZkJ1ZmZlci4gIEJ1ZmZlciBpcyByZXR1cm5lZC4gIElmIFNp emVPZkJ1ZmZlciBpcyBncmVhdGVyIHRoYW4NCj4gPiA+ID4gLSAgdGhlIG1heGltdW0gc2l6ZSBz dXBwb3J0IGJ5IFRva2VuTnVtYmVyLCB0aGVuIHNldCBTaXplT2ZCdWZmZXIgdG8gdGhlIG1heGlt dW0gc2l6ZQ0KPiA+ID4gPiAtICBzdXBwb3J0ZWQgYnkgVG9rZW5OdW1iZXIgYW5kIHJldHVybiBO VUxMIHRvIGluZGljYXRlIHRoYXQgdGhlIHNldCBvcGVyYXRpb24NCj4gPiA+ID4gLSAgd2FzIG5v dCBhY3R1YWxseSBwZXJmb3JtZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgR3VpZCBpcyBO VUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIgaXMgTlVMTCwg dGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyID4gMCBhbmQgQnVmZmVy IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2lu XSAgR3VpZCAgICAgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gYSAxMjgtYml0IHVuaXF1ZSB2YWx1 ZSB0aGF0DQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0 ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBhIHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJh bVtpbl0gIFRva2VuTnVtYmVyICAgICAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1 cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW4sIG91dF0gU2l6ZU9mQnVmZmVy ICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIEJ1ZmZlci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAg QnVmZmVyICAgICAgICAgICAgQSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc2V0Lg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIg YmVlbiBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVk9JRCAqDQo+ID4g PiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4UHRyICgNCj4gPiA+ID4gLSAgSU4gICAg ICBDT05TVCBHVUlEICAgICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gICAgICBVSU5UTiAgICAg ICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gT1VUICBVSU5UTiAgICAgICAgICAg ICAqU2l6ZU9mQnVmZmVyLA0KPiA+ID4gPiAtICBJTiAgICAgIFZPSUQgICAgICAgICAgICAgICpC dWZmZXINCj4gPiA+ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICBFRklfU1RBVFVTICBT dGF0dXM7DQo+ID4gPiA+IC0gIFVJTlROICAgICAgIElucHV0U2l6ZU9mQnVmZmVyOw0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEFTU0VSVCAoR3VpZCAhPSBOVUxMKTsNCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBBU1NFUlQgKFNpemVPZkJ1ZmZlciAhPSBOVUxMKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBpZiAoKlNpemVPZkJ1ZmZlciA+IDApIHsNCj4gPiA+ID4gLSAgICBBU1NFUlQgKEJ1ZmZlciAh PSBOVUxMKTsNCj4gPiA+ID4gLSAgfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElucHV0U2l6ZU9m QnVmZmVyID0gKlNpemVPZkJ1ZmZlcjsNCj4gPiA+ID4gLSAgU3RhdHVzID0gR2V0UGlQY2RQcm90 b2NvbCgpLT5TZXRQdHIgKEd1aWQsIFRva2VuTnVtYmVyLCBTaXplT2ZCdWZmZXIsIEJ1ZmZlcik7 DQo+ID4gPiA+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykgJiYgKCpTaXplT2ZCdWZmZXIgPCBJ bnB1dFNpemVPZkJ1ZmZlcikpIHsNCj4gPiA+ID4gLSAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4g LSAgfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiBCdWZmZXI7DQo+ID4gPiA+IC19DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAg VGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZv ciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSBCb29s ZWFuIHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyIGFuZA0KPiA+ ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlzIHJl dHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NF UlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAgICAgICAgIFRo ZSBwb2ludGVyIHRvIGEgMTI4LWJpdCB1bmlxdWUgdmFsdWUgdGhhdA0KPiA+ID4gPiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBh IHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBD RCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBw YXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIEJvb2xlYW4gdmFsdWUgdG8gc2V0Lg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQk9PTEVBTg0KPiA+ID4gPiAtRUZJQVBJ DQo+ID4gPiA+IC1MaWJQY2RTZXRFeEJvb2wgKA0KPiA+ID4gPiAtICBJTiBDT05TVCBHVUlEICAg ICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gVUlOVE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIs DQo+ID4gPiA+IC0gIElOIEJPT0xFQU4gICAgICAgICAgIFZhbHVlDQo+ID4gPiA+IC0gICkNCj4g PiA+ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUIChHdWlkICE9IE5VTEwpOw0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIEdldFBpUGNkUHJvdG9jb2woKS0+U2V0Qm9vbCAoR3VpZCwgVG9rZW5OdW1iZXIs IFZhbHVlKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gVmFsdWU7DQo+ID4gPiA+IC19 DQo+ID4gPiA+IC0jZW5kaWYNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgLyoqDQo+ID4gPiA+ICAgIFRo aXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3Ig YSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9NZGVQa2cv TGlicmFyeS9QZWlQY2RMaWIvUGVpUGNkTGliLmMgYi9NZGVQa2cvTGlicmFyeS9QZWlQY2RMaWIv UGVpUGNkTGliLmMNCj4gPiA+ID4gaW5kZXggOTE2YTJjMDg0NGViLi5kOTc5YjI4Y2M4ZGQgMTAw NjQ0DQo+ID4gPiA+IC0tLSBhL01kZVBrZy9MaWJyYXJ5L1BlaVBjZExpYi9QZWlQY2RMaWIuYw0K PiA+ID4gPiArKysgYi9NZGVQa2cvTGlicmFyeS9QZWlQY2RMaWIvUGVpUGNkTGliLmMNCj4gPiA+ ID4gQEAgLTQ3NCw0MDMgKzQ3NCw2IEBAIExpYlBjZEdldEV4U2l6ZSAoDQo+ID4gPiA+ICB9DQo+ ID4gPiA+DQo+ID4gPiA+DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNpZm5kZWYgRElTQUJMRV9ORVdf REVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5j dGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVu IFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSA4LWJpdCB2YWx1ZSBm b3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlcg0KPiA+ID4gPiAtICB0byB0aGUg dmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiAgVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJl ciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFs dWUgICAgICAgICBUaGUgOC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSoqLw0KPiA+ID4gPiAtVUlOVDgNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNk U2V0OCAoDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ ID4gPiAtICBJTiBVSU5UOCAgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+ IC17DQo+ID4gPiA+IC0gIChHZXRQY2RQcGlQb2ludGVyICgpKS0+U2V0OCAoVG9rZW5OdW1iZXIs IFZhbHVlKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gVmFsdWU7DQo+ID4gPiA+IC19 DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4g LSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVl IGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSAx Ni1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXINCj4gPiA+ ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZhbHVlIGlzIHJldHVybmVk Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBD RCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBw YXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDE2LWJpdCB2YWx1ZSB0byBzZXQuDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHZhbHVlIHRoYXQgd2FzIHNldC4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMTYNCj4gPiA+ID4gLUVGSUFQSQ0K PiA+ID4gPiAtTGliUGNkU2V0MTYgKA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBU b2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDE2ICAgICAgICAgICAgVmFsdWUNCj4gPiA+ ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICAoR2V0UGNkUHBpUG9pbnRlciAoKSktPlNl dDE2IChUb2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIHJldHVybiBW YWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hp Y2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0gIFNldHMgdGhlIDMyLWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBU b2tlbk51bWJlcg0KPiA+ID4gPiAtICB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiAg VmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9r ZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZv ci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgMzItYml0IHZhbHVl IHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgdmFsdWUg dGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQzMg0K PiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXQzMiAoDQo+ID4gPiA+IC0gIElOIFVJ TlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UMzIgICAgICAg ICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIChHZXRQY2RQ cGlQb2ludGVyICgpKS0+U2V0MzIgKFRva2VuTnVtYmVyLCBWYWx1ZSk7DQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgcmV0dXJuIFZhbHVlOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlk ZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4u DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgNjQtYml0IHZhbHVlIGZvciB0aGUgdG9r ZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyDQo+ID4gPiA+IC0gIHRvIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkgVmFsdWUuICBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBAcGFyYW1baW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBh IGN1cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAg IFRoZSA2NC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4g UmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0K PiA+ID4gPiAtVUlOVDY0DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldDY0ICgN Cj4gPiA+ID4gLSAgSU4gVUlOVE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0g IElOIFVJTlQ2NCAgICAgICAgICAgIFZhbHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4g PiA+ID4gLSAgKEdldFBjZFBwaVBvaW50ZXIgKCkpLT5TZXQ2NCAoVG9rZW5OdW1iZXIsIFZhbHVl KTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gVmFsdWU7DQo+ID4gPiA+IC19DQo+ID4g PiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhp cyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBh IGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBTZXRzIGEgYnVmZmVyIGZv ciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyIHRvIHRoZSB2YWx1ZQ0KPiA+ID4g PiAtICBzcGVjaWZpZWQgYnkgQnVmZmVyIGFuZCBTaXplT2ZCdWZmZXIuICBCdWZmZXIgaXMgcmV0 dXJuZWQuDQo+ID4gPiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBncmVhdGVyIHRoYW4gdGhlIG1h eGltdW0gc2l6ZSBzdXBwb3J0IGJ5IFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICB0aGVuIHNldCBT aXplT2ZCdWZmZXIgdG8gdGhlIG1heGltdW0gc2l6ZSBzdXBwb3J0ZWQgYnkgVG9rZW5OdW1iZXIg YW5kDQo+ID4gPiA+IC0gIHJldHVybiBOVUxMIHRvIGluZGljYXRlIHRoYXQgdGhlIHNldCBvcGVy YXRpb24gd2FzIG5vdCBhY3R1YWxseSBwZXJmb3JtZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg SWYgU2l6ZU9mQnVmZmVyIGlzIHNldCB0byBNQVhfQUREUkVTUywgdGhlbiBTaXplT2ZCdWZmZXIg bXVzdCBiZSBzZXQgdG8gdGhlDQo+ID4gPiA+IC0gIG1heGltdW0gc2l6ZSBzdXBwb3J0ZWQgYnkg VG9rZW5OYW1lIGFuZCBOVUxMIG11c3QgYmUgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgSWYgU2l6ZU9mQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElm IFNpemVPZkJ1ZmZlciA+IDAgYW5kIEJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gICAgICBUb2tlbk51bWJlciAgIFRoZSBQQ0Qg dG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFy YW1baW4sIG91dF0gU2l6ZU9mQnVmZmVyICBUaGUgc2l6ZSwgaW4gYnl0ZXMsIG9mIEJ1ZmZlci4N Cj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgICAgIEJ1ZmZlciAgICAgICAgQSBwb2ludGVyIHRvIHRo ZSBidWZmZXIgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRo ZSBwb2ludGVyIGZvciB0aGUgYnVmZmVyIGJlZW4gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0q Ki8NCj4gPiA+ID4gLVZPSUQgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXRQ dHIgKA0KPiA+ID4gPiAtICBJTiAgICAgICAgVUlOVE4gICAgICAgICAgICAgVG9rZW5OdW1iZXIs DQo+ID4gPiA+IC0gIElOIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAqU2l6ZU9mQnVmZmVyLA0K PiA+ID4gPiAtICBJTiBDT05TVCAgVk9JRCAgICAgICAgICAgICAgKkJ1ZmZlcg0KPiA+ID4gPiAt ICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIEVGSV9TVEFUVVMgU3RhdHVzOw0KPiA+ID4gPiAt ICBVSU5UTiAgICAgIElucHV0U2l6ZU9mQnVmZmVyOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEFT U0VSVCAoU2l6ZU9mQnVmZmVyICE9IE5VTEwpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIGlmICgq U2l6ZU9mQnVmZmVyID4gMCkgew0KPiA+ID4gPiAtICAgIEFTU0VSVCAoQnVmZmVyICE9IE5VTEwp Ow0KPiA+ID4gPiAtICB9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSW5wdXRTaXplT2ZCdWZmZXIg PSAqU2l6ZU9mQnVmZmVyOw0KPiA+ID4gPiAtICBTdGF0dXMgPSAoR2V0UGNkUHBpUG9pbnRlciAo KSktPlNldFB0ciAoVG9rZW5OdW1iZXIsIFNpemVPZkJ1ZmZlciwgKFZPSUQgKikgQnVmZmVyKTsN Cj4gPiA+ID4gLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSAmJiAoKlNpemVPZkJ1ZmZlciA8IElu cHV0U2l6ZU9mQnVmZmVyKSkgew0KPiA+ID4gPiAtICAgIHJldHVybiBOVUxMOw0KPiA+ID4gPiAt ICB9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgcmV0dXJuIChWT0lEICopIEJ1ZmZlcjsNCj4gPiA+ ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEg dmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMg dGhlIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXIN Cj4gPiA+ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZhbHVlIGlzIHJl dHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAg VGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+ IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIGJvb2xlYW4gdmFsdWUgdG8gc2V0Lg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSB2YWx1ZSB0aGF0IHdhcyBz ZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQk9PTEVBTg0KPiA+ID4gPiAt RUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXRCb29sICgNCj4gPiA+ID4gLSAgSU4gVUlOVE4gICAg ICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIEJPT0xFQU4gICAgICAgICAgIFZh bHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgKEdldFBjZFBwaVBvaW50 ZXIgKCkpLT5TZXRCb29sIChUb2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIHJldHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEg bWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDgtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3Bl Y2lmaWVkIGJ5IFRva2VuTnVtYmVyIGFuZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBz cGVjaWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBAcGFyYW1baW5dICBHdWlkICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgMTI4LWJpdCB1bmlx dWUgdmFsdWUgdGhhdA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2ln bmF0ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBhIHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBw YXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3Vy cmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhl IDgtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVy biB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ ID4gLVVJTlQ4DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4OCAoDQo+ID4g PiA+IC0gIElOIENPTlNUIEdVSUQgICAgICAgICpHdWlkLA0KPiA+ID4gPiAtICBJTiBVSU5UTiAg ICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDggICAgICAgICAgICAg VmFsdWUNCj4gPiA+ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICBBU1NFUlQgKEd1aWQg IT0gTlVMTCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgKEdldFBpUGNkUHBpUG9pbnRlciAoKSkt PlNldDggKEd1aWQsIFRva2VuTnVtYmVyLCBWYWx1ZSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg cmV0dXJuIFZhbHVlOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFu cyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgMTYtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lm aWVkIGJ5IFRva2VuTnVtYmVyIGFuZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVj aWZpZWQgYnkgVmFsdWUuIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBA cGFyYW1baW5dICBHdWlkICAgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgMTI4LWJpdCB1bmlxdWUg dmFsdWUgdGhhdA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2lnbmF0 ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBhIHZhbHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJh bVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVu dCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDE2 LWJpdCB2YWx1ZSB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4g dGhlIHZhbHVlIHRoYXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+ IC1VSU5UMTYNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0RXgxNiAoDQo+ID4g PiA+IC0gIElOIENPTlNUIEdVSUQgICAgICAgICpHdWlkLA0KPiA+ID4gPiAtICBJTiBVSU5UTiAg ICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDE2ICAgICAgICAgICAg VmFsdWUNCj4gPiA+ID4gLSAgKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtICBBU1NFUlQgKEd1aWQg IT0gTlVMTCk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgKEdldFBpUGNkUHBpUG9pbnRlciAoKSkt PlNldDE2IChHdWlkLCBUb2tlbk51bWJlciwgVmFsdWUpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IHJldHVybiBWYWx1ZTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVh bnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDMyLWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNp ZmllZCBieSBUb2tlbk51bWJlciBhbmQNCj4gPiA+ID4gLSAgR3VpZCB0byB0aGUgdmFsdWUgc3Bl Y2lmaWVkIGJ5IFZhbHVlLiBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg QHBhcmFtW2luXSAgR3VpZCAgICAgICAgICBUaGUgcG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVl IHZhbHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ25h dGVzIHdoaWNoIG5hbWVzcGFjZSB0byBzZXQgYSB2YWx1ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFy YW1baW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJl bnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgIFRoZSAz Mi1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJu IHRoZSB2YWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4g PiAtVUlOVDMyDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4MzIgKA0KPiA+ ID4gPiAtICBJTiBDT05TVCBHVUlEICAgICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gVUlOVE4g ICAgICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIFVJTlQzMiAgICAgICAgICAg IFZhbHVlDQo+ID4gPiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgQVNTRVJUIChHdWlk ICE9IE5VTEwpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIChHZXRQaVBjZFBwaVBvaW50ZXIgKCkp LT5TZXQzMiAoR3VpZCwgVG9rZW5OdW1iZXIsIFZhbHVlKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICByZXR1cm4gVmFsdWU7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1l YW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSA2NC1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVj aWZpZWQgYnkgVG9rZW5OdW1iZXIgYW5kDQo+ID4gPiA+IC0gIEd1aWQgdG8gdGhlIHZhbHVlIHNw ZWNpZmllZCBieSBWYWx1ZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgVGhlIHBvaW50ZXIgdG8gYSAxMjgtYml0IHVuaXF1 ZSB2YWx1ZSB0aGF0DQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWdu YXRlcyB3aGljaCBuYW1lc3BhY2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBh cmFtW2luXSAgVG9rZW5OdW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJy ZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUg NjQtYml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVy biB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ ID4gLVVJTlQ2NA0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1MaWJQY2RTZXRFeDY0ICgNCj4g PiA+ID4gLSAgSU4gQ09OU1QgR1VJRCAgICAgICAgKkd1aWQsDQo+ID4gPiA+IC0gIElOIFVJTlRO ICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UNjQgICAgICAgICAg ICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0gIEFTU0VSVCAoR3Vp ZCAhPSBOVUxMKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAoR2V0UGlQY2RQcGlQb2ludGVyICgp KS0+U2V0NjQgKEd1aWQsIFRva2VuTnVtYmVyLCBWYWx1ZSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgcmV0dXJuIFZhbHVlOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBt ZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgU2V0cyBhIGJ1ZmZlciBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBi eSBUb2tlbk51bWJlciB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5DQo+ID4gPiA+IC0gIEJ1ZmZl ciBhbmQgU2l6ZU9mQnVmZmVyLiAgQnVmZmVyIGlzIHJldHVybmVkLiAgSWYgU2l6ZU9mQnVmZmVy IGlzIGdyZWF0ZXIgdGhhbg0KPiA+ID4gPiAtICB0aGUgbWF4aW11bSBzaXplIHN1cHBvcnQgYnkg VG9rZW5OdW1iZXIsIHRoZW4gc2V0IFNpemVPZkJ1ZmZlciB0byB0aGUgbWF4aW11bSBzaXplDQo+ ID4gPiA+IC0gIHN1cHBvcnRlZCBieSBUb2tlbk51bWJlciBhbmQgcmV0dXJuIE5VTEwgdG8gaW5k aWNhdGUgdGhhdCB0aGUgc2V0IG9wZXJhdGlvbg0KPiA+ID4gPiAtICB3YXMgbm90IGFjdHVhbGx5 IHBlcmZvcm1lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4g QVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VS VCgpLg0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIgPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwg dGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAg ICAgICAgICAgICBUaGUgcG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRoYXQNCj4g PiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBu YW1lc3BhY2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9r ZW5OdW1iZXIgICAgICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1 ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbiwgb3V0XSBTaXplT2ZCdWZmZXIgIFRoZSBzaXpl LCBpbiBieXRlcywgb2YgQnVmZmVyLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBCdWZmZXIgICAg ICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHBpbnRlciB0byB0aGUgYnVmZmVyIGJlZW4gc2V0Lg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVZPSUQgKg0KPiA+ID4gPiAtRUZJQVBJ DQo+ID4gPiA+IC1MaWJQY2RTZXRFeFB0ciAoDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgR1VJ RCAgICAgICAgKkd1aWQsDQo+ID4gPiA+IC0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAgVG9r ZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIE9VVCAgVUlOVE4gICAgICAgICAgICAgKlNpemVPZkJ1 ZmZlciwNCj4gPiA+ID4gLSAgSU4gICAgICBWT0lEICAgICAgICAgICAgICAqQnVmZmVyDQo+ID4g PiA+IC0gICkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLSAgRUZJX1NUQVRVUyAgICAgIFN0YXR1czsN Cj4gPiA+ID4gLSAgVUlOVE4gICAgICAgICAgIElucHV0U2l6ZU9mQnVmZmVyOw0KPiA+ID4gPiAt DQo+ID4gPiA+IC0gIEFTU0VSVCAoU2l6ZU9mQnVmZmVyICE9IE5VTEwpOw0KPiA+ID4gPiAtICBp ZiAoKlNpemVPZkJ1ZmZlciA+IDApIHsNCj4gPiA+ID4gLSAgICBBU1NFUlQgKEJ1ZmZlciAhPSBO VUxMKTsNCj4gPiA+ID4gLSAgfQ0KPiA+ID4gPiAtICBBU1NFUlQgKEd1aWQgIT0gTlVMTCk7DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSAgSW5wdXRTaXplT2ZCdWZmZXIgPSAqU2l6ZU9mQnVmZmVyOw0K PiA+ID4gPiAtICBTdGF0dXMgPSAoR2V0UGlQY2RQcGlQb2ludGVyICgpKS0+U2V0UHRyIChHdWlk LCBUb2tlbk51bWJlciwgU2l6ZU9mQnVmZmVyLCBCdWZmZXIpOw0KPiA+ID4gPiAtICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpICYmICgqU2l6ZU9mQnVmZmVyIDwgSW5wdXRTaXplT2ZCdWZmZXIpKSB7 DQo+ID4gPiA+IC0gICAgcmV0dXJuIE5VTEw7DQo+ID4gPiA+IC0gIH0NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtICByZXR1cm4gQnVmZmVyOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlk ZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4u DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgQm9vbGVhbiB2YWx1ZSBmb3IgdGhlIHRv a2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlciBhbmQNCj4gPiA+ID4gLSAgR3VpZCB0byB0aGUg dmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgQHBhcmFtW2luXSAgR3VpZCAgICAgICAgICBUaGUgcG9pbnRlciB0byBhIDEyOC1i aXQgdW5pcXVlIHZhbHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkZXNpZ25hdGVzIHdoaWNoIG5hbWVzcGFjZSB0byBzZXQgYSB2YWx1ZSBmcm9tLg0KPiA+ID4g PiAtICBAcGFyYW1baW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNl dCBhIGN1cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAg ICAgIFRoZSBCb29sZWFuIHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0 dXJuIFJldHVybiB0aGUgdmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0q Ki8NCj4gPiA+ID4gLUJPT0xFQU4NCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0 RXhCb29sICgNCj4gPiA+ID4gLSAgSU4gQ09OU1QgR1VJRCAgICAgICAgKkd1aWQsDQo+ID4gPiA+ IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBCT09M RUFOICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0g IEFTU0VSVCAoR3VpZCAhPSBOVUxMKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAoR2V0UGlQY2RQ cGlQb2ludGVyICgpKS0+U2V0Qm9vbCAoR3VpZCwgVG9rZW5OdW1iZXIsIFZhbHVlKTsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gVmFsdWU7DQo+ID4gPiA+IC19DQo+ID4gPiA+IC0jZW5k aWYNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgLyoqDQo+ID4gPiA+ICAgIFRoaXMgZnVuY3Rpb24gcHJv dmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9r ZW4uDQo+ID4gPiA+DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9NZGVQa2cvTGlicmFyeS9VZWZpTGli L1VlZmlMaWIuYyBiL01kZVBrZy9MaWJyYXJ5L1VlZmlMaWIvVWVmaUxpYi5jDQo+ID4gPiA+IGlu ZGV4IDA3YzQ1ZDFlOTFmZi4uODM1MjE4Zjk4MjRmIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9NZGVQ a2cvTGlicmFyeS9VZWZpTGliL1VlZmlMaWIuYw0KPiA+ID4gPiArKysgYi9NZGVQa2cvTGlicmFy eS9VZWZpTGliL1VlZmlMaWIuYw0KPiA+ID4gPiBAQCAtMTI4NSw5OCArMTI4NSw2IEBAIEZyZWVV bmljb2RlU3RyaW5nVGFibGUgKA0KPiA+ID4gPiAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQo+ID4g PiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0jaWZuZGVmIERJU0FCTEVfTkVXX0RFUFJFQ0FURURf SU5URVJGQUNFUw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgW0FUVEVOVElP Tl0gVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbi4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBSZXR1cm5zIGEgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQg YnVmZmVyIHRoYXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGENCj4gPiA+ID4gLSAgdmFyaWFi bGUgcmV0cmlldmVkIHRocm91Z2ggdGhlIFVFRkkgUnVudGltZSBTZXJ2aWNlIEdldFZhcmlhYmxl KCkuICBUaGUNCj4gPiA+ID4gLSAgcmV0dXJuZWQgYnVmZmVyIGlzIGFsbG9jYXRlZCB1c2luZyBB bGxvY2F0ZVBvb2woKS4gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUNCj4gPiA+ID4gLSAgZm9y IGZyZWVpbmcgdGhpcyBidWZmZXIgd2l0aCBGcmVlUG9vbCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIElmIE5hbWUgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgR3VpZCBp cyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0g IE5hbWUgIFRoZSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0K PiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICBUaGUgcG9pbnRlciB0byBhbiBFRklfR1VJRCBz dHJ1Y3R1cmUNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dmFsIE5VTEwgICBUaGUgdmFyaWFi bGUgY291bGQgbm90IGJlIHJldHJpZXZlZC4NCj4gPiA+ID4gLSAgQHJldHZhbCBOVUxMICAgVGhl cmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIGF2YWlsYWJsZSBmb3IgdGhlIHZhcmlhYmxlIGNv bnRlbnRzLg0KPiA+ID4gPiAtICBAcmV0dmFsIE90aGVyICBBIHBvaW50ZXIgdG8gYWxsb2NhdGVk IGJ1ZmZlciBjb250YWluaW5nIHRoZSB2YXJpYWJsZSBjb250ZW50cy4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtKiovDQo+ID4gPiA+IC1WT0lEICoNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtR2V0 VmFyaWFibGUgKA0KPiA+ID4gPiAtICBJTiBDT05TVCBDSEFSMTYgICAgKk5hbWUsDQo+ID4gPiA+ IC0gIElOIENPTlNUIEVGSV9HVUlEICAqR3VpZA0KPiA+ID4gPiAtICApDQo+ID4gPiA+IC17DQo+ ID4gPiA+IC0gIEVGSV9TVEFUVVMgIFN0YXR1czsNCj4gPiA+ID4gLSAgVUlOVE4gICAgICAgU2l6 ZTsNCj4gPiA+ID4gLSAgVk9JRCAgICAgICAgKlZhbHVlOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IEFTU0VSVCAoTmFtZSAhPSBOVUxMKTsNCj4gPiA+ID4gLSAgQVNTRVJUIChHdWlkICE9IE5VTEwp Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIC8vIFRyeSB0byBnZXQgdGhl IHZhcmlhYmxlIHNpemUuDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIFZhbHVlID0gTlVMTDsN Cj4gPiA+ID4gLSAgU2l6ZSA9IDA7DQo+ID4gPiA+IC0gIFN0YXR1cyA9IGdSVC0+R2V0VmFyaWFi bGUgKChDSEFSMTYgKikgTmFtZSwgKEVGSV9HVUlEICopIEd1aWQsIE5VTEwsICZTaXplLCBWYWx1 ZSk7DQo+ID4gPiA+IC0gIGlmIChTdGF0dXMgIT0gRUZJX0JVRkZFUl9UT09fU01BTEwpIHsNCj4g PiA+ID4gLSAgICByZXR1cm4gTlVMTDsNCj4gPiA+ID4gLSAgfQ0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIC8vDQo+ID4gPiA+IC0gIC8vIEFsbG9jYXRlIGJ1ZmZlciB0byBnZXQgdGhlIHZhcmlhYmxl Lg0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICBWYWx1ZSA9IEFsbG9jYXRlUG9vbCAoU2l6ZSk7 DQo+ID4gPiA+IC0gIGlmIChWYWx1ZSA9PSBOVUxMKSB7DQo+ID4gPiA+IC0gICAgcmV0dXJuIE5V TEw7DQo+ID4gPiA+IC0gIH0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICAvLw0KPiA+ID4gPiAtICAv LyBHZXQgdGhlIHZhcmlhYmxlIGRhdGEuDQo+ID4gPiA+IC0gIC8vDQo+ID4gPiA+IC0gIFN0YXR1 cyA9IGdSVC0+R2V0VmFyaWFibGUgKChDSEFSMTYgKikgTmFtZSwgKEVGSV9HVUlEICopIEd1aWQs IE5VTEwsICZTaXplLCBWYWx1ZSk7DQo+ID4gPiA+IC0gIGlmIChFRklfRVJST1IgKFN0YXR1cykp IHsNCj4gPiA+ID4gLSAgICBGcmVlUG9vbChWYWx1ZSk7DQo+ID4gPiA+IC0gICAgcmV0dXJuIE5V TEw7DQo+ID4gPiA+IC0gIH0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICByZXR1cm4gVmFsdWU7DQo+ ID4gPiA+IC19DQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBbQVRURU5USU9O XSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIFJldHVybnMgYSBwb2ludGVyIHRvIGFuIGFsbG9jYXRlZCBi dWZmZXIgdGhhdCBjb250YWlucyB0aGUgY29udGVudHMgb2YgYQ0KPiA+ID4gPiAtICB2YXJpYWJs ZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgVUVGSSBSdW50aW1lIFNlcnZpY2UgR2V0VmFyaWFibGUo KS4gIFRoaXMNCj4gPiA+ID4gLSAgZnVuY3Rpb24gYWx3YXlzIHVzZXMgdGhlIEVGSV9HTE9CQUxf VkFSSUFCTEUgR1VJRCB0byByZXRyaWV2ZSB2YXJpYWJsZXMuDQo+ID4gPiA+IC0gIFRoZSByZXR1 cm5lZCBidWZmZXIgaXMgYWxsb2NhdGVkIHVzaW5nIEFsbG9jYXRlUG9vbCgpLiAgVGhlIGNhbGxl ciBpcw0KPiA+ID4gPiAtICByZXNwb25zaWJsZSBmb3IgZnJlZWluZyB0aGlzIGJ1ZmZlciB3aXRo IEZyZWVQb29sKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgTmFtZSBpcyBOVUxMLCB0aGVu IEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIE5hbWUgIFRoZSBw b2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIEByZXR2YWwgTlVMTCAgIFRoZSB2YXJpYWJsZSBjb3VsZCBub3QgYmUgcmV0cmll dmVkLg0KPiA+ID4gPiAtICBAcmV0dmFsIE5VTEwgICBUaGVyZSBhcmUgbm90IGVub3VnaCByZXNv dXJjZXMgYXZhaWxhYmxlIGZvciB0aGUgdmFyaWFibGUgY29udGVudHMuDQo+ID4gPiA+IC0gIEBy ZXR2YWwgT3RoZXIgIEEgcG9pbnRlciB0byBhbGxvY2F0ZWQgYnVmZmVyIGNvbnRhaW5pbmcgdGhl IHZhcmlhYmxlIGNvbnRlbnRzLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVZP SUQgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1HZXRFZmlHbG9iYWxWYXJpYWJsZSAoDQo+ ID4gPiA+IC0gIElOIENPTlNUIENIQVIxNiAgKk5hbWUNCj4gPiA+ID4gLSAgKQ0KPiA+ID4gPiAt ew0KPiA+ID4gPiAtICByZXR1cm4gR2V0VmFyaWFibGUgKE5hbWUsICZnRWZpR2xvYmFsVmFyaWFi bGVHdWlkKTsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPg0KPiA+ID4gPiAg LyoqDQo+ID4gPiA+ICAgIFJldHVybnMgdGhlIHN0YXR1cyB3aGV0aGVyIGdldCB0aGUgdmFyaWFi bGUgc3VjY2Vzcy4gVGhlIGZ1bmN0aW9uIHJldHJpZXZlcw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEv TWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmggYi9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5 L0Jhc2VMaWIuaA0KPiA+ID4gPiBpbmRleCA4ZTdiODdjYmRhNGUuLmI5MmExYTNhNDAyOCAxMDA2 NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmgNCj4gPiA+ ID4gKysrIGIvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9CYXNlTGliLmgNCj4gPiA+ID4gQEAgLTk2 Miw4MiArOTYyLDYgQEAgQXNjaWlTdHJIZXhUb1VpbnQ2NFMgKA0KPiA+ID4gPiAgICApOw0KPiA+ ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lO VEVSRkFDRVMNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRFTlRJT05d IFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIENvcGllcyBvbmUgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5n IHRvIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUNCj4gPiA+ID4gLSAgc3RyaW5nIGFu ZCByZXR1cm5zIHRoZSBuZXcgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg VGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVbmljb2RlIHN0cmluZyBT b3VyY2UgdG8gdGhlIFVuaWNvZGUNCj4gPiA+ID4gLSAgc3RyaW5nIERlc3RpbmF0aW9uLCBhbmQg cmV0dXJucyBEZXN0aW5hdGlvbi4gSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbg0KPiA+ID4gPiAt ICBvdmVybGFwLCB0aGVuIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4g LSAgSWYgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRo ZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgp Lg0KPiA+ID4gPiAtICBJZiBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRh cnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQgRGVzdGluYXRpb24g b3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVT dHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBTb3VyY2UgY29udGFpbnMgbW9yZSB0aGFuDQo+ ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVy cyBub3QgaW5jbHVkaW5nIHRoZQ0KPiA+ID4gPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNT RVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0aW5hdGlvbiBUaGUgcG9p bnRlciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBh cmFtICBTb3VyY2UgICAgICBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2Rl IHN0cmluZy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIERlc3RpbmF0aW9uLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLUNIQVIxNiAqDQo+ID4gPiA+IC1FRklBUEkN Cj4gPiA+ID4gLVN0ckNweSAoDQo+ID4gPiA+IC0gIE9VVCAgICAgQ0hBUjE2ICAgICAgICAgICAg ICAgICAgICAqRGVzdGluYXRpb24sDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgQ0hBUjE2ICAg ICAgICAgICAgICAqU291cmNlDQo+ID4gPiA+IC0gICk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gaXMgZGVw cmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvcGll cyB1cCB0byBhIHNwZWNpZmllZCBsZW5ndGggZnJvbSBvbmUgTnVsbC10ZXJtaW5hdGVkIFVuaWNv ZGUgc3RyaW5nIHRvDQo+ID4gPiA+IC0gIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUg c3RyaW5nIGFuZCByZXR1cm5zIHRoZSBuZXcgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBVbmljb2Rl IHN0cmluZyBTb3VyY2UgdG8gdGhlIFVuaWNvZGUNCj4gPiA+ID4gLSAgc3RyaW5nIERlc3RpbmF0 aW9uLCBhbmQgcmV0dXJucyBEZXN0aW5hdGlvbi4gQXQgbW9zdCwgTGVuZ3RoIFVuaWNvZGUNCj4g PiA+ID4gLSAgY2hhcmFjdGVycyBhcmUgY29waWVkIGZyb20gU291cmNlIHRvIERlc3RpbmF0aW9u LiBJZiBMZW5ndGggaXMgMCwgdGhlbg0KPiA+ID4gPiAtICBEZXN0aW5hdGlvbiBpcyByZXR1cm5l ZCB1bm1vZGlmaWVkLiBJZiBMZW5ndGggaXMgZ3JlYXRlciB0aGF0IHRoZSBudW1iZXIgb2YNCj4g PiA+ID4gLSAgVW5pY29kZSBjaGFyYWN0ZXJzIGluIFNvdXJjZSwgdGhlbiBEZXN0aW5hdGlvbiBp cyBwYWRkZWQgd2l0aCBOdWxsIFVuaWNvZGUNCj4gPiA+ID4gLSAgY2hhcmFjdGVycy4gSWYgU291 cmNlIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuIHRoZSByZXN1bHRzIGFyZQ0KPiA+ID4g PiAtICB1bmRlZmluZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgTGVuZ3RoID4gMCBhbmQg RGVzdGluYXRpb24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgTGVuZ3Ro ID4gMCBhbmQgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnks IHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZSBpcyBO VUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2Ug aXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4g PiA+IC0gIElmIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4N Cj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8s IGFuZCBMZW5ndGggaXMgZ3JlYXRlciB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2Rl U3RyaW5nTGVuZ3RoLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtVW5p Y29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJjZSBjb250YWlucyBtb3JlIHRo YW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29kZSBjaGFy YWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0b3IsDQo+ID4gPiA+IC0gIHRo ZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0aW5hdGlvbiBU aGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4gPiA+ID4g LSAgQHBhcmFtICBTb3VyY2UgICAgICBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBV bmljb2RlIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBhcmFtICBMZW5ndGggICAgICBUaGUgbWF4aW11 bSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIHRvIGNvcHkuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgQHJldHVybiBEZXN0aW5hdGlvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4g PiA+IC1DSEFSMTYgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1TdHJuQ3B5ICgNCj4gPiA+ ID4gLSAgT1VUICAgICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpEZXN0aW5hdGlvbiwNCj4g PiA+ID4gLSAgSU4gICAgICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpTb3VyY2UsDQo+ID4g PiA+IC0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgNCj4gPiA+ID4g LSAgKTsNCj4gPiA+ID4gLSNlbmRpZiAvLyAhZGVmaW5lZCAoRElTQUJMRV9ORVdfREVQUkVDQVRF RF9JTlRFUkZBQ0VTKQ0KPiA+ID4gPiAtDQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAgUmV0dXJu cyB0aGUgbGVuZ3RoIG9mIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0KPiA+ID4g Pg0KPiA+ID4gPiBAQCAtMTE2NCw5OSArMTA4OCw2IEBAIFN0cm5DbXAgKA0KPiA+ID4gPiAgICAp Ow0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNB VEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRF TlRJT05dIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvbmNhdGVuYXRlcyBvbmUgTnVsbC10ZXJtaW5hdGVkIFVu aWNvZGUgc3RyaW5nIHRvIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkDQo+ID4gPiA+IC0gIFVuaWNv ZGUgc3RyaW5nLCBhbmQgcmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkIFVuaWNvZGUgc3RyaW5nLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHR3byBOdWxs LXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmdzLiBUaGUgY29udGVudHMNCj4gPiA+ID4gLSAgb2Yg TnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIFNvdXJjZSBhcmUgY29uY2F0ZW5hdGVkIHRv IHRoZSBlbmQgb2YNCj4gPiA+ID4gLSAgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIERl c3RpbmF0aW9uLiBUaGUgTnVsbC10ZXJtaW5hdGVkIGNvbmNhdGVuYXRlZA0KPiA+ID4gPiAtICBV bmljb2RlIFN0cmluZyBpcyByZXR1cm5lZC4gSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbiBvdmVy bGFwLCB0aGVuIHRoZQ0KPiA+ID4gPiAtICByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4g PiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRh cnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQg Ym91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQgRGVzdGlu YXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bVVu aWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBEZXN0aW5hdGlvbiBjb250YWlucyBt b3JlDQo+ID4gPiA+IC0gIHRoYW4gUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggVW5pY29k ZSBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZQ0KPiA+ID4gPiAtICBOdWxsLXRlcm1pbmF0 b3IsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5n TGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQgU291cmNlIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiA+ID4g PiAtICBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMsIG5v dCBpbmNsdWRpbmcgdGhlDQo+ID4gPiA+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQo KS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHpl cm8sIGFuZCBjb25jYXRlbmF0aW5nIERlc3RpbmF0aW9uDQo+ID4gPiA+IC0gIGFuZCBTb3VyY2Ug cmVzdWx0cyBpbiBhIFVuaWNvZGUgc3RyaW5nIHdpdGggbW9yZSB0aGFuDQo+ID4gPiA+IC0gIFBj ZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywgbm90IGluY2x1 ZGluZyB0aGUNCj4gPiA+ID4gLSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbSAgRGVzdGluYXRpb24gVGhlIHBvaW50ZXIgdG8gYSBO dWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgU291cmNl ICAgICAgVGhlIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBEZXN0aW5hdGlvbi4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtKiovDQo+ID4gPiA+IC1DSEFSMTYgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1T dHJDYXQgKA0KPiA+ID4gPiAtICBJTiBPVVQgIENIQVIxNiAgICAgICAgICAgICAgICAgICAgKkRl c3RpbmF0aW9uLA0KPiA+ID4gPiAtICBJTiAgICAgIENPTlNUIENIQVIxNiAgICAgICAgICAgICAg KlNvdXJjZQ0KPiA+ID4gPiAtICApOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8q Kg0KPiA+ID4gPiAtICBbQVRURU5USU9OXSBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgZm9y IHNlY3VyaXR5IHJlYXNvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBDb25jYXRlbmF0ZXMgdXAg dG8gYSBzcGVjaWZpZWQgbGVuZ3RoIG9uZSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSB0byB0aGUg ZW5kDQo+ID4gPiA+IC0gIG9mIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5n LCBhbmQgcmV0dXJucyB0aGUgY29uY2F0ZW5hdGVkDQo+ID4gPiA+IC0gIFVuaWNvZGUgc3RyaW5n Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHR3byBO dWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmdzLiBUaGUgY29udGVudHMNCj4gPiA+ID4gLSAg b2YgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5nIFNvdXJjZSBhcmUgY29uY2F0ZW5hdGVk IHRvIHRoZSBlbmQgb2YNCj4gPiA+ID4gLSAgTnVsbC10ZXJtaW5hdGVkIFVuaWNvZGUgc3RyaW5n IERlc3RpbmF0aW9uLCBhbmQgRGVzdGluYXRpb24gaXMgcmV0dXJuZWQuIEF0DQo+ID4gPiA+IC0g IG1vc3QsIExlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMgYXJlIGNvbmNhdGVuYXRlZCBmcm9tIFNv dXJjZSB0byB0aGUgZW5kIG9mDQo+ID4gPiA+IC0gIERlc3RpbmF0aW9uLCBhbmQgRGVzdGluYXRp b24gaXMgYWx3YXlzIE51bGwtdGVybWluYXRlZC4gSWYgTGVuZ3RoIGlzIDAsIHRoZW4NCj4gPiA+ ID4gLSAgRGVzdGluYXRpb24gaXMgcmV0dXJuZWQgdW5tb2RpZmllZC4gSWYgU291cmNlIGFuZCBE ZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuDQo+ID4gPiA+IC0gIHRoZSByZXN1bHRzIGFyZSB1bmRl ZmluZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgTGVuZ3RoID4gMCBhbmQgRGVzdGluYXRpb24gaXMg bm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ IC0gIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ ID4gPiAtICBJZiBMZW5ndGggPiAwIGFuZCBTb3VyY2UgaXMgbm90IGFsaWduZWQgb24gYSAxNi1i aXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQgRGVz dGluYXRpb24gb3ZlcmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11 bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBMZW5ndGggaXMgZ3JlYXRlciB0 aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoLCB0aGVuIEFTU0VS VCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3Qg emVybywgYW5kIERlc3RpbmF0aW9uIGNvbnRhaW5zIG1vcmUNCj4gPiA+ID4gLSAgdGhhbiBQY2RN YXhpbXVtVW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRp bmcgdGhlDQo+ID4gPiA+IC0gIE51bGwtdGVybWluYXRvciwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ ID4gLSAgSWYgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBT b3VyY2UgY29udGFpbnMgbW9yZSB0aGFuDQo+ID4gPiA+IC0gIFBjZE1heGltdW1Vbmljb2RlU3Ry aW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0aGUNCj4gPiA+ID4g LSAgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhp bXVtVW5pY29kZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIGNvbmNhdGVuYXRpbmcgRGVz dGluYXRpb24NCj4gPiA+ID4gLSAgYW5kIFNvdXJjZSByZXN1bHRzIGluIGEgVW5pY29kZSBzdHJp bmcgd2l0aCBtb3JlIHRoYW4gUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGgNCj4gPiA+ID4g LSAgVW5pY29kZSBjaGFyYWN0ZXJzLCBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0b3Is IHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0aW5hdGlv biBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4gPiA+ ID4gLSAgQHBhcmFtICBTb3VyY2UgICAgICBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRl ZCBVbmljb2RlIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBhcmFtICBMZW5ndGggICAgICBUaGUgbWF4 aW11bSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIHRvIGNvbmNhdGVuYXRlIGZyb20NCj4g PiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgQHJldHVybiBEZXN0aW5hdGlvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+ IC1DSEFSMTYgKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1TdHJuQ2F0ICgNCj4gPiA+ID4g LSAgSU4gT1VUICBDSEFSMTYgICAgICAgICAgICAgICAgICAgICpEZXN0aW5hdGlvbiwNCj4gPiA+ ID4gLSAgSU4gICAgICBDT05TVCBDSEFSMTYgICAgICAgICAgICAgICpTb3VyY2UsDQo+ID4gPiA+ IC0gIElOICAgICAgVUlOVE4gICAgICAgICAgICAgICAgICAgICBMZW5ndGgNCj4gPiA+ID4gLSAg KTsNCj4gPiA+ID4gLSNlbmRpZiAvLyAhZGVmaW5lZCAoRElTQUJMRV9ORVdfREVQUkVDQVRFRF9J TlRFUkZBQ0VTKQ0KPiA+ID4gPiAtDQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAgUmV0dXJucyB0 aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN1Yi1zdHJp bmcNCj4gPiA+ID4gICAgaW4gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ID4g PiA+IEBAIC0xNjU1LDUxICsxNDg2LDYgQEAgU3RySGV4VG9CeXRlcyAoDQo+ID4gPiA+ICAgIElO ICBVSU5UTiAgICAgICAgICAgICAgTWF4QnVmZmVyU2l6ZQ0KPiA+ID4gPiAgICApOw0KPiA+ID4g Pg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lOVEVSRkFDRVMNCj4g PiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVuY3Rp b24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIENvbnZlcnQgYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcgdG8gYSBOdWxsLXRl cm1pbmF0ZWQNCj4gPiA+ID4gLSAgQVNDSUkgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBBU0NJSSBz dHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBjb252ZXJ0cyB0aGUg Y29udGVudCBvZiB0aGUgVW5pY29kZSBzdHJpbmcgU291cmNlDQo+ID4gPiA+IC0gIHRvIHRoZSBB U0NJSSBzdHJpbmcgRGVzdGluYXRpb24gYnkgY29weWluZyB0aGUgbG93ZXIgOCBiaXRzIG9mDQo+ ID4gPiA+IC0gIGVhY2ggVW5pY29kZSBjaGFyYWN0ZXIuIEl0IHJldHVybnMgRGVzdGluYXRpb24u DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSB0byBtYWtl IHN1cmUgRGVzdGluYXRpb24gcG9pbnRzIHRvIGEgYnVmZmVyIHdpdGggc2l6ZQ0KPiA+ID4gPiAt ICBlcXVhbCBvciBncmVhdGVyIHRoYW4gKChTdHJMZW4gKFNvdXJjZSkgKyAxKSAqIHNpemVvZiAo Q0hBUjgpKSBpbiBieXRlcy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBhbnkgVW5pY29kZSBj aGFyYWN0ZXJzIGluIFNvdXJjZSBjb250YWluIG5vbi16ZXJvIHZhbHVlIGluDQo+ID4gPiA+IC0g IHRoZSB1cHBlciA4IGJpdHMsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg SWYgRGVzdGluYXRpb24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291 cmNlIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBub3Qg YWxpZ25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAg SWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIElmIFBjZE1heGltdW1Vbmljb2RlU3RyaW5nTGVuZ3RoIGlzIG5vdCB6 ZXJvLCBhbmQgU291cmNlIGNvbnRhaW5zDQo+ID4gPiA+IC0gIG1vcmUgdGhhbiBQY2RNYXhpbXVt VW5pY29kZVN0cmluZ0xlbmd0aCBVbmljb2RlIGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZw0KPiA+ ID4gPiAtICB0aGUgTnVsbC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIElmIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5k IFNvdXJjZSBjb250YWlucyBtb3JlDQo+ID4gPiA+IC0gIHRoYW4gUGNkTWF4aW11bUFzY2lpU3Ry aW5nTGVuZ3RoIFVuaWNvZGUgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nIHRoZQ0KPiA+ID4gPiAt ICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg QHBhcmFtICBTb3VyY2UgICAgICAgIFRoZSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVu aWNvZGUgc3RyaW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIERlc3RpbmF0aW9uICAgVGhlIHBvaW50 ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIEByZXR1cm4gRGVzdGluYXRpb24uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4g PiAtQ0hBUjggKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1Vbmljb2RlU3RyVG9Bc2NpaVN0 ciAoDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgQ0hBUjE2ICAgICAgICAgICAgICAqU291cmNl LA0KPiA+ID4gPiAtICBPVVQgICAgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgKkRlc3RpbmF0 aW9uDQo+ID4gPiA+IC0gICk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSNlbmRpZiAvLyAhZGVmaW5l ZCAoRElTQUJMRV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTKQ0KPiA+ID4gPg0KPiA+ID4gPiAg LyoqDQo+ID4gPiA+ICAgIENvbnZlcnQgYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcg dG8gYSBOdWxsLXRlcm1pbmF0ZWQNCj4gPiA+ID4gQEAgLTE4MDIsNzYgKzE1ODgsNiBAQCBVbmlj b2RlU3RyblRvQXNjaWlTdHJTICgNCj4gPiA+ID4gICAgT1VUICAgICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgICpEZXN0aW5hdGlvbkxlbmd0aA0KPiA+ID4gPiAgICApOw0KPiA+ID4gPg0KPiA+ ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4g LQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gaXMg ZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIENv cGllcyBvbmUgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyB0byBhbm90aGVyIE51bGwtdGVy bWluYXRlZCBBU0NJSQ0KPiA+ID4gPiAtICBzdHJpbmcgYW5kIHJldHVybnMgdGhlIG5ldyBBU0NJ SSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBjb3BpZXMgdGhl IGNvbnRlbnRzIG9mIHRoZSBBU0NJSSBzdHJpbmcgU291cmNlIHRvIHRoZSBBU0NJSQ0KPiA+ID4g PiAtICBzdHJpbmcgRGVzdGluYXRpb24sIGFuZCByZXR1cm5zIERlc3RpbmF0aW9uLiBJZiBTb3Vy Y2UgYW5kIERlc3RpbmF0aW9uDQo+ID4gPiA+IC0gIG92ZXJsYXAsIHRoZW4gdGhlIHJlc3VsdHMg YXJlIHVuZGVmaW5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBEZXN0aW5hdGlvbiBpcyBO VUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTb3VyY2UgaXMgTlVMTCwgdGhlbiBB U1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgg aXMgbm90IHplcm8gYW5kIFNvdXJjZSBjb250YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNk TWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFTQ0lJIGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZyB0 aGUgTnVsbC10ZXJtaW5hdG9yLA0KPiA+ID4gPiAtICB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAt DQo+ID4gPiA+IC0gIEBwYXJhbSAgRGVzdGluYXRpb24gVGhlIHBvaW50ZXIgdG8gYSBOdWxsLXRl cm1pbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIFNvdXJjZSAgICAgIFRo ZSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtICBAcmV0dXJuIERlc3RpbmF0aW9uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0K PiA+ID4gPiAtQ0hBUjggKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1Bc2NpaVN0ckNweSAo DQo+ID4gPiA+IC0gIE9VVCAgICAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAqRGVzdGluYXRp b24sDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgQ0hBUjggICAgICAgICAgICAgICAqU291cmNl DQo+ID4gPiA+IC0gICk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4g PiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJp dHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvcGllcyB1cCB0byBhIHNwZWNpZmll ZCBsZW5ndGggb25lIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcgdG8gYW5vdGhlcg0KPiA+ ID4gPiAtICBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIGFuZCByZXR1cm5zIHRoZSBuZXcg QVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29waWVz IHRoZSBjb250ZW50cyBvZiB0aGUgQVNDSUkgc3RyaW5nIFNvdXJjZSB0byB0aGUgQVNDSUkNCj4g PiA+ID4gLSAgc3RyaW5nIERlc3RpbmF0aW9uLCBhbmQgcmV0dXJucyBEZXN0aW5hdGlvbi4gQXQg bW9zdCwgTGVuZ3RoIEFTQ0lJIGNoYXJhY3RlcnMNCj4gPiA+ID4gLSAgYXJlIGNvcGllZCBmcm9t IFNvdXJjZSB0byBEZXN0aW5hdGlvbi4gSWYgTGVuZ3RoIGlzIDAsIHRoZW4gRGVzdGluYXRpb24g aXMNCj4gPiA+ID4gLSAgcmV0dXJuZWQgdW5tb2RpZmllZC4gSWYgTGVuZ3RoIGlzIGdyZWF0ZXIg dGhhdCB0aGUgbnVtYmVyIG9mIEFTQ0lJIGNoYXJhY3RlcnMNCj4gPiA+ID4gLSAgaW4gU291cmNl LCB0aGVuIERlc3RpbmF0aW9uIGlzIHBhZGRlZCB3aXRoIE51bGwgQVNDSUkgY2hhcmFjdGVycy4g SWYgU291cmNlDQo+ID4gPiA+IC0gIGFuZCBEZXN0aW5hdGlvbiBvdmVybGFwLCB0aGVuIHRoZSBy ZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRp b24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU291cmNlIGlzIE5VTEws IHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gb3Zl cmxhcCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5n TGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQgTGVuZ3RoIGlzIGdyZWF0ZXIgdGhhbg0KPiA+ID4gPiAt ICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0g IElmIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJjZSBj b250YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3Ro IEFTQ0lJIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvciwNCj4g PiA+ID4gLSAgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gIERl c3RpbmF0aW9uIFRoZSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4N Cj4gPiA+ID4gLSAgQHBhcmFtICBTb3VyY2UgICAgICBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVy bWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbSAgTGVuZ3RoICAgICAgVGhl IG1heGltdW0gbnVtYmVyIG9mIEFTQ0lJIGNoYXJhY3RlcnMgdG8gY29weS4NCj4gPiA+ID4gLQ0K PiA+ID4gPiAtICBAcmV0dXJuIERlc3RpbmF0aW9uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0K PiA+ID4gPiAtQ0hBUjggKg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1Bc2NpaVN0cm5DcHkg KA0KPiA+ID4gPiAtICBPVVQgICAgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgKkRlc3RpbmF0 aW9uLA0KPiA+ID4gPiAtICBJTiAgICAgIENPTlNUIENIQVI4ICAgICAgICAgICAgICAgKlNvdXJj ZSwNCj4gPiA+ID4gLSAgSU4gICAgICBVSU5UTiAgICAgICAgICAgICAgICAgICAgIExlbmd0aA0K PiA+ID4gPiAtICApOw0KPiA+ID4gPiAtI2VuZGlmIC8vICFkZWZpbmVkIChESVNBQkxFX05FV19E RVBSRUNBVEVEX0lOVEVSRkFDRVMpDQo+ID4gPiA+DQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAg UmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4g PiA+ID4gQEAgLTIwMzEsOTIgKzE3NDcsNiBAQCBBc2NpaVN0cm5DbXAgKA0KPiA+ID4gPiAgICAp Ow0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNB VEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRF TlRJT05dIFRoaXMgZnVuY3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIENvbmNhdGVuYXRlcyBvbmUgTnVsbC10ZXJtaW5hdGVkIEFT Q0lJIHN0cmluZyB0byBhbm90aGVyIE51bGwtdGVybWluYXRlZA0KPiA+ID4gPiAtICBBU0NJSSBz dHJpbmcsIGFuZCByZXR1cm5zIHRoZSBjb25jYXRlbmF0ZWQgQVNDSUkgc3RyaW5nLg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gY29uY2F0ZW5hdGVzIHR3byBOdWxsLXRlcm1p bmF0ZWQgQVNDSUkgc3RyaW5ncy4gVGhlIGNvbnRlbnRzIG9mDQo+ID4gPiA+IC0gIE51bGwtdGVy bWluYXRlZCBBU0NJSSBzdHJpbmcgU291cmNlIGFyZSBjb25jYXRlbmF0ZWQgdG8gdGhlIGVuZCBv ZiBOdWxsLQ0KPiA+ID4gPiAtICB0ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyBEZXN0aW5hdGlvbi4g VGhlIE51bGwtdGVybWluYXRlZCBjb25jYXRlbmF0ZWQgQVNDSUkNCj4gPiA+ID4gLSAgU3RyaW5n IGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIERlc3RpbmF0aW9uIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90 IHplcm8gYW5kIERlc3RpbmF0aW9uIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiA+ID4gPiAtICBQY2RN YXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggQVNDSUkgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nIHRo ZSBOdWxsLXRlcm1pbmF0b3IsDQo+ID4gPiA+IC0gIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0g IElmIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybyBhbmQgU291cmNlIGNv bnRhaW5zIG1vcmUgdGhhbg0KPiA+ID4gPiAtICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGgg QVNDSUkgY2hhcmFjdGVycyBub3QgaW5jbHVkaW5nIHRoZSBOdWxsLXRlcm1pbmF0b3IsDQo+ID4g PiA+IC0gIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBjZE1heGltdW1Bc2NpaVN0cmlu Z0xlbmd0aCBpcyBub3QgemVybyBhbmQgY29uY2F0ZW5hdGluZyBEZXN0aW5hdGlvbiBhbmQNCj4g PiA+ID4gLSAgU291cmNlIHJlc3VsdHMgaW4gYSBBU0NJSSBzdHJpbmcgd2l0aCBtb3JlIHRoYW4g UGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoDQo+ID4gPiA+IC0gIEFTQ0lJIGNoYXJhY3RlcnMs IHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBEZXN0aW5hdGlv biBUaGUgcG9pbnRlciB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+ IC0gIEBwYXJhbSAgU291cmNlICAgICAgVGhlIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQg QVNDSUkgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gRGVzdGluYXRpb24N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1DSEFSOCAqDQo+ID4gPiA+IC1FRklB UEkNCj4gPiA+ID4gLUFzY2lpU3RyQ2F0ICgNCj4gPiA+ID4gLSAgSU4gT1VUIENIQVI4ICAgICpE ZXN0aW5hdGlvbiwNCj4gPiA+ID4gLSAgSU4gQ09OU1QgQ0hBUjggICpTb3VyY2UNCj4gPiA+ID4g LSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgW0FU VEVOVElPTl0gVGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGZvciBzZWN1cml0eSByZWFzb24u DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQ29uY2F0ZW5hdGVzIHVwIHRvIGEgc3BlY2lmaWVkIGxl bmd0aCBvbmUgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyB0bw0KPiA+ID4gPiAtICB0aGUg ZW5kIG9mIGFub3RoZXIgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZywgYW5kIHJldHVybnMg dGhlDQo+ID4gPiA+IC0gIGNvbmNhdGVuYXRlZCBBU0NJSSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4g PiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBjb25jYXRlbmF0ZXMgdHdvIE51bGwtdGVybWluYXRlZCBB U0NJSSBzdHJpbmdzLiBUaGUgY29udGVudHMNCj4gPiA+ID4gLSAgb2YgTnVsbC10ZXJtaW5hdGVk IEFTQ0lJIHN0cmluZyBTb3VyY2UgYXJlIGNvbmNhdGVuYXRlZCB0byB0aGUgZW5kIG9mIE51bGwt DQo+ID4gPiA+IC0gIHRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIERlc3RpbmF0aW9uLCBhbmQgRGVz dGluYXRpb24gaXMgcmV0dXJuZWQuIEF0IG1vc3QsDQo+ID4gPiA+IC0gIExlbmd0aCBBU0NJSSBj aGFyYWN0ZXJzIGFyZSBjb25jYXRlbmF0ZWQgZnJvbSBTb3VyY2UgdG8gdGhlIGVuZCBvZg0KPiA+ ID4gPiAtICBEZXN0aW5hdGlvbiwgYW5kIERlc3RpbmF0aW9uIGlzIGFsd2F5cyBOdWxsLXRlcm1p bmF0ZWQuIElmIExlbmd0aCBpcyAwLCB0aGVuDQo+ID4gPiA+IC0gIERlc3RpbmF0aW9uIGlzIHJl dHVybmVkIHVubW9kaWZpZWQuIElmIFNvdXJjZSBhbmQgRGVzdGluYXRpb24gb3ZlcmxhcCwgdGhl bg0KPiA+ID4gPiAtICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0gIElmIExlbmd0aCA+IDAgYW5kIERlc3RpbmF0aW9uIGlzIE5VTEwsIHRoZW4gQVNTRVJU KCkuDQo+ID4gPiA+IC0gIElmIExlbmd0aCA+IDAgYW5kIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFT U0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTb3VyY2UgYW5kIERlc3RpbmF0aW9uIG92ZXJsYXAsIHRo ZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBp cyBub3QgemVybywgYW5kIExlbmd0aCBpcyBncmVhdGVyIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4 aW11bUFzY2lpU3RyaW5nTGVuZ3RoLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RN YXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFuZCBEZXN0aW5hdGlvbiBjb250 YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVuZ3RoIEFT Q0lJIGNoYXJhY3RlcnMsIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvciwNCj4gPiA+ ID4gLSAgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgUGNkTWF4aW11bUFzY2lpU3RyaW5n TGVuZ3RoIGlzIG5vdCB6ZXJvLCBhbmQgU291cmNlIGNvbnRhaW5zIG1vcmUgdGhhbg0KPiA+ID4g PiAtICBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggQVNDSUkgY2hhcmFjdGVycywgbm90IGlu Y2x1ZGluZyB0aGUgTnVsbC10ZXJtaW5hdG9yLA0KPiA+ID4gPiAtICB0aGVuIEFTU0VSVCgpLg0K PiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdMZW5ndGggaXMgbm90IHplcm8sIGFu ZCBjb25jYXRlbmF0aW5nIERlc3RpbmF0aW9uIGFuZA0KPiA+ID4gPiAtICBTb3VyY2UgcmVzdWx0 cyBpbiBhIEFTQ0lJIHN0cmluZyB3aXRoIG1vcmUgdGhhbiBQY2RNYXhpbXVtQXNjaWlTdHJpbmdM ZW5ndGgNCj4gPiA+ID4gLSAgQVNDSUkgY2hhcmFjdGVycywgbm90IGluY2x1ZGluZyB0aGUgTnVs bC10ZXJtaW5hdG9yLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJh bSAgRGVzdGluYXRpb24gVGhlIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3Ry aW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIFNvdXJjZSAgICAgIFRoZSBwb2ludGVyIHRvIGEgTnVs bC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBhcmFtICBMZW5ndGggICAg ICBUaGUgbWF4aW11bSBudW1iZXIgb2YgQVNDSUkgY2hhcmFjdGVycyB0byBjb25jYXRlbmF0ZSBm cm9tDQo+ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgU291cmNlLg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIEByZXR1cm4gRGVzdGluYXRpb24NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ ID4gPiA+IC1DSEFSOCAqDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUFzY2lpU3RybkNhdCAo DQo+ID4gPiA+IC0gIElOIE9VVCAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAqRGVzdGluYXRp b24sDQo+ID4gPiA+IC0gIElOICAgICAgQ09OU1QgQ0hBUjggICAgICAgICAgICAgICAqU291cmNl LA0KPiA+ID4gPiAtICBJTiAgICAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoDQo+ ID4gPiA+IC0gICk7DQo+ID4gPiA+IC0jZW5kaWYgLy8gIWRlZmluZWQgKERJU0FCTEVfTkVXX0RF UFJFQ0FURURfSU5URVJGQUNFUykNCj4gPiA+ID4gLQ0KPiA+ID4gPiAgLyoqDQo+ID4gPiA+ICAg IFJldHVybnMgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgYSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkg c3ViLXN0cmluZw0KPiA+ID4gPiAgICBpbiBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcu DQo+ID4gPiA+IEBAIC0yNDk2LDQ1ICsyMTI2LDYgQEAgQXNjaWlTdHJIZXhUb0J5dGVzICgNCj4g PiA+ID4gICAgSU4gIFVJTlROICAgICAgICAgICAgICBNYXhCdWZmZXJTaXplDQo+ID4gPiA+ICAg ICk7DQo+ID4gPiA+DQo+ID4gPiA+IC0jaWZuZGVmIERJU0FCTEVfTkVXX0RFUFJFQ0FURURfSU5U RVJGQUNFUw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgW0FUVEVOVElPTl0g VGhpcyBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGZvciBzZWN1cml0eSByZWFzb24uDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgQ29udmVydCBvbmUgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZyB0 byBhIE51bGwtdGVybWluYXRlZA0KPiA+ID4gPiAtICBVbmljb2RlIHN0cmluZyBhbmQgcmV0dXJu cyB0aGUgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlv biBjb252ZXJ0cyB0aGUgY29udGVudHMgb2YgdGhlIEFTQ0lJIHN0cmluZyBTb3VyY2UgdG8gdGhl IFVuaWNvZGUNCj4gPiA+ID4gLSAgc3RyaW5nIERlc3RpbmF0aW9uLCBhbmQgcmV0dXJucyBEZXN0 aW5hdGlvbi4gIFRoZSBmdW5jdGlvbiB0ZXJtaW5hdGVzIHRoZQ0KPiA+ID4gPiAtICBVbmljb2Rl IHN0cmluZyBEZXN0aW5hdGlvbiBieSBhcHBlbmRpbmcgYSBOdWxsLXRlcm1pbmF0b3IgY2hhcmFj dGVyIGF0IHRoZSBlbmQuDQo+ID4gPiA+IC0gIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgdG8g bWFrZSBzdXJlIERlc3RpbmF0aW9uIHBvaW50cyB0byBhIGJ1ZmZlciB3aXRoIHNpemUNCj4gPiA+ ID4gLSAgZXF1YWwgb3IgZ3JlYXRlciB0aGFuICgoQXNjaWlTdHJMZW4gKFNvdXJjZSkgKyAxKSAq IHNpemVvZiAoQ0hBUjE2KSkgaW4gYnl0ZXMuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgRGVz dGluYXRpb24gaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgRGVzdGluYXRp b24gaXMgbm90IGFsaWduZWQgb24gYSAxNi1iaXQgYm91bmRhcnksIHRoZW4gQVNTRVJUKCkuDQo+ ID4gPiA+IC0gIElmIFNvdXJjZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJ ZiBTb3VyY2UgYW5kIERlc3RpbmF0aW9uIG92ZXJsYXAsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+ IC0gIElmIFBjZE1heGltdW1Bc2NpaVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJj ZSBjb250YWlucyBtb3JlIHRoYW4NCj4gPiA+ID4gLSAgUGNkTWF4aW11bUFzY2lpU3RyaW5nTGVu Z3RoIEFTQ0lJIGNoYXJhY3RlcnMgbm90IGluY2x1ZGluZyB0aGUgTnVsbC10ZXJtaW5hdG9yLA0K PiA+ID4gPiAtICB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBQY2RNYXhpbXVtVW5pY29k ZVN0cmluZ0xlbmd0aCBpcyBub3QgemVybywgYW5kIFNvdXJjZSBjb250YWlucyBtb3JlIHRoYW4N Cj4gPiA+ID4gLSAgUGNkTWF4aW11bVVuaWNvZGVTdHJpbmdMZW5ndGggQVNDSUkgY2hhcmFjdGVy cyBub3QgaW5jbHVkaW5nIHRoZQ0KPiA+ID4gPiAtICBOdWxsLXRlcm1pbmF0b3IsIHRoZW4gQVNT RVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBTb3VyY2UgICAgICAgIFRoZSBw b2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFTQ0lJIHN0cmluZy4NCj4gPiA+ID4gLSAgQHBh cmFtICBEZXN0aW5hdGlvbiAgIFRoZSBwb2ludGVyIHRvIGEgTnVsbC10ZXJtaW5hdGVkIFVuaWNv ZGUgc3RyaW5nLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gRGVzdGluYXRpb24uDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtQ0hBUjE2ICoNCj4gPiA+ID4gLUVGSUFQ SQ0KPiA+ID4gPiAtQXNjaWlTdHJUb1VuaWNvZGVTdHIgKA0KPiA+ID4gPiAtICBJTiAgICAgIENP TlNUIENIQVI4ICAgICAgICAgICAgICAgKlNvdXJjZSwNCj4gPiA+ID4gLSAgT1VUICAgICBDSEFS MTYgICAgICAgICAgICAgICAgICAgICpEZXN0aW5hdGlvbg0KPiA+ID4gPiAtICApOw0KPiA+ID4g PiAtDQo+ID4gPiA+IC0jZW5kaWYgLy8gIWRlZmluZWQgKERJU0FCTEVfTkVXX0RFUFJFQ0FURURf SU5URVJGQUNFUykNCj4gPiA+ID4NCj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAgICBDb252ZXJ0IG9u ZSBOdWxsLXRlcm1pbmF0ZWQgQVNDSUkgc3RyaW5nIHRvIGEgTnVsbC10ZXJtaW5hdGVkDQo+ID4g PiA+IGRpZmYgLS1naXQgYS9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1BjZExpYi5oIGIvTWRlUGtn L0luY2x1ZGUvTGlicmFyeS9QY2RMaWIuaA0KPiA+ID4gPiBpbmRleCBmMDkwNTNlM2NiODYuLjcx NzM4ODU3YWQxOSAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9Q Y2RMaWIuaA0KPiA+ID4gPiArKysgYi9NZGVQa2cvSW5jbHVkZS9MaWJyYXJ5L1BjZExpYi5oDQo+ ID4gPiA+IEBAIC00ODEsMTA2ICs0ODEsNiBAQCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNE LTItQ2xhdXNlLVBhdGVudA0KPiA+ID4gPiAgKiovDQo+ID4gPiA+ICAjZGVmaW5lIFBjZEdldEV4 U2l6ZShHdWlkLCBUb2tlbk5hbWUpIExpYlBjZEdldEV4U2l6ZSAoKEd1aWQpLCBQY2RUb2tlbkV4 KEd1aWQsVG9rZW5OYW1lKSkNCj4gPiA+ID4NCj4gPiA+ID4gLSNpZm5kZWYgRElTQUJMRV9ORVdf REVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgU2V0cyBhbiA4 LWJpdCBQQ0QgdG9rZW4gdmFsdWUgYmFzZWQgb24gYSB0b2tlbiBuYW1lLg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIFNldHMgdGhlIDgtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5 IFRva2VuTmFtZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0gIElmIFRva2VuTmFtZSBp cyBub3QgYSB2YWxpZCB0b2tlbiBpbiB0aGUgdG9rZW4gc3BhY2UsIHRoZW4gdGhlIG1vZHVsZSB3 aWxsIG5vdCBidWlsZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gICBUb2tlbk5hbWUg IFRoZSBuYW1lIG9mIHRoZSBQQ0QgdG9rZW4gdG8gcmV0cmlldmUgYSBjdXJyZW50IHZhbHVlIGZv ci4NCj4gPiA+ID4gLSAgQHBhcmFtICAgVmFsdWUgICAgICBUaGUgOC1iaXQgdmFsdWUgdG8gc2V0 Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdh cyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXQ4 KFRva2VuTmFtZSwgVmFsdWUpICAgICAgICAgICBfUENEX1NFVF9NT0RFXzhfIyNUb2tlbk5hbWUg ICAgICgoVmFsdWUpKQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4g PiAtICBTZXRzIGEgMTYtYml0IFBDRCB0b2tlbiB2YWx1ZSBiYXNlZCBvbiBhIHRva2VuIG5hbWUu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgMTYtYml0IHZhbHVlIGZvciB0aGUgdG9r ZW4gc3BlY2lmaWVkIGJ5IFRva2VuTmFtZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0g IElmIFRva2VuTmFtZSBpcyBub3QgYSB2YWxpZCB0b2tlbiBpbiB0aGUgdG9rZW4gc3BhY2UsIHRo ZW4gdGhlIG1vZHVsZSB3aWxsIG5vdCBidWlsZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFy YW0gICBUb2tlbk5hbWUgIFRoZSBuYW1lIG9mIHRoZSBQQ0QgdG9rZW4gdG8gcmV0cmlldmUgYSBj dXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAgQHBhcmFtICAgVmFsdWUgICAgICBUaGUgMTYt Yml0IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0 aGUgVmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4g LSNkZWZpbmUgUGNkU2V0MTYoVG9rZW5OYW1lLCBWYWx1ZSkgICAgICAgICAgX1BDRF9TRVRfTU9E RV8xNl8jI1Rva2VuTmFtZSAgICAoKFZhbHVlKSkNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0vKioNCj4gPiA+ID4gLSAgU2V0cyBhIDMyLWJpdCBQQ0QgdG9rZW4gdmFsdWUgYmFzZWQg b24gYSB0b2tlbiBuYW1lLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDMyLWJpdCB2 YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk5hbWUuIFZhbHVlIGlzIHJldHVy bmVkLg0KPiA+ID4gPiAtICBJZiBUb2tlbk5hbWUgaXMgbm90IGEgdmFsaWQgdG9rZW4gaW4gdGhl IHRva2VuIHNwYWNlLCB0aGVuIHRoZSBtb2R1bGUgd2lsbCBub3QgYnVpbGQuDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSAgQHBhcmFtICAgVG9rZW5OYW1lICBUaGUgbmFtZSBvZiB0aGUgUENEIHRva2Vu IHRvIHJldHJpZXZlIGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbSAgIFZh bHVlICAgICAgVGhlIDMyLWJpdCB2YWx1ZSB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg QHJldHVybiBSZXR1cm4gdGhlIFZhbHVlIHRoYXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtKiovDQo+ID4gPiA+IC0jZGVmaW5lIFBjZFNldDMyKFRva2VuTmFtZSwgVmFsdWUpICAgICAg ICAgIF9QQ0RfU0VUX01PREVfMzJfIyNUb2tlbk5hbWUgICAgKChWYWx1ZSkpDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFNldHMgYSA2NC1iaXQgUENEIHRv a2VuIHZhbHVlIGJhc2VkIG9uIGEgdG9rZW4gbmFtZS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBT ZXRzIHRoZSA2NC1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OYW1l LiBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLSAgSWYgVG9rZW5OYW1lIGlzIG5vdCBhIHZh bGlkIHRva2VuIGluIHRoZSB0b2tlbiBzcGFjZSwgdGhlbiB0aGUgbW9kdWxlIHdpbGwgbm90IGJ1 aWxkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbSAgIFRva2VuTmFtZSAgVGhlIG5hbWUg b2YgdGhlIFBDRCB0b2tlbiB0byByZXRyaWV2ZSBhIGN1cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4g PiAtICBAcGFyYW0gICBWYWx1ZSAgICAgIFRoZSA2NC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdhcyBzZXQuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXQ2NChUb2tlbk5h bWUsIFZhbHVlKSAgICAgICAgICBfUENEX1NFVF9NT0RFXzY0XyMjVG9rZW5OYW1lICAgICgoVmFs dWUpKQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBTZXRz IGEgcG9pbnRlciB0byBhIFBDRCB0b2tlbiBidWZmZXIgYmFzZWQgb24gYSB0b2tlbiBuYW1lLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIGJ1ZmZlciBmb3IgdGhlIHRva2VuIHNwZWNp ZmllZCBieSBUb2tlbk5hbWUuIEJ1ZmZlciBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLSAgSWYgU2l6 ZU9mQnVmZmVyIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbWF4aW11bSBzaXplIHN1cHBvcnRlZCBieSBU b2tlbk5hbWUsDQo+ID4gPiA+IC0gIHRoZW4gc2V0IFNpemVPZkJ1ZmZlciB0byB0aGUgbWF4aW11 bSBzaXplIHN1cHBvcnRlZCBieSBUb2tlbk5hbWUgYW5kIHJldHVybiBOVUxMDQo+ID4gPiA+IC0g IHRvIGluZGljYXRlIHRoYXQgdGhlIHNldCBvcGVyYXRpb24gd2FzIG5vdCBhY3R1YWxseSBwZXJm b3JtZWQuICBJZiBTaXplT2ZCdWZmZXINCj4gPiA+ID4gLSAgaXMgc2V0IHRvIE1BWF9BRERSRVNT LCB0aGVuIFNpemVPZkJ1ZmZlciBtdXN0IGJlIHNldCB0byB0aGUgbWF4aW11bSBzaXplIHN1cHBv cnRlZA0KPiA+ID4gPiAtICBieSBUb2tlbk5hbWUgYW5kIE5VTEwgbXVzdCBiZSByZXR1cm5lZC4N Cj4gPiA+ID4gLSAgSWYgVG9rZW5OYW1lIGlzIG5vdCBhIHZhbGlkIHRva2VuIGluIHRoZSB0b2tl biBzcGFjZSwgdGhlbiB0aGUgbW9kdWxlIHdpbGwgbm90IGJ1aWxkLg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAt ICBJZiBTaXplT2ZCdWZmZXIgPiAwIGFuZCBCdWZmZXIgaXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gICBUb2tlbk5hbWUgICAgICBUaGUgbmFtZSBv ZiB0aGUgUENEIHRva2VuIHRvIHNldCB0aGUgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0g IEBwYXJhbSAgIFNpemVPZkJ1ZmZlciAgIEEgcG9pbnRlciB0byB0aGUgc2l6ZSwgaW4gYnl0ZXMs IG9mIEJ1ZmZlci4NCj4gPiA+ID4gLSAgQHBhcmFtICAgQnVmZmVyICAgICAgICAgQSBwb2ludGVy IHRvIHRoZSBidWZmZXIgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0 dXJuIHRoZSBwb2ludGVyIHRvIHRoZSBCdWZmZXIgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0qKi8NCj4gPiA+ID4gLSNkZWZpbmUgUGNkU2V0UHRyKFRva2VuTmFtZSwgU2l6ZU9m QnVmZmVyLCBCdWZmZXIpIFwNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX1BDRF9TRVRfTU9ERV9QVFJfIyNUb2tlbk5hbWUgICAoKFNpemVPZkJ1 ZmZlciksIChCdWZmZXIpKQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgU2V0 cyBhIEJvb2xlYW4gUENEIHRva2VuIHZhbHVlIGJhc2VkIG9uIGEgdG9rZW4gbmFtZS4NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSBCb29sZWFuIHZhbHVlIGZvciB0aGUgdG9rZW4gc3Bl Y2lmaWVkIGJ5IFRva2VuTmFtZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0gIElmIFRv a2VuTmFtZSBpcyBub3QgYSB2YWxpZCB0b2tlbiBpbiB0aGUgdG9rZW4gc3BhY2UsIHRoZW4gdGhl IG1vZHVsZSB3aWxsIG5vdCBidWlsZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gICBU b2tlbk5hbWUgICAgICBUaGUgbmFtZSBvZiB0aGUgUENEIHRva2VuIHRvIHNldCB0aGUgY3VycmVu dCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbSAgIEJ1ZmZlciAgICAgICAgIFRoZSBCb29s ZWFuIHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0 aGUgVmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4g LSNkZWZpbmUgUGNkU2V0Qm9vbChUb2tlbk5hbWUsIFZhbHVlKSAgICAgICAgX1BDRF9TRVRfTU9E RV9CT09MXyMjVG9rZW5OYW1lICAoKFZhbHVlKSkNCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPiAt DQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAgU2V0cyBhIDgtYml0IFBDRCB0b2tlbiB2YWx1ZSBi YXNlZCBvbiBhIHRva2VuIG5hbWUuDQo+ID4gPiA+DQo+ID4gPiA+IEBAIC04MDYsMTM3ICs3MDYs NiBAQCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBhdGVudA0KPiA+ID4g Pg0KPiA+ID4gPg0KPiA+ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNB VEVEX0lOVEVSRkFDRVMNCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBTZXRzIGFuIDgtYml0IFBD RCB0b2tlbiB2YWx1ZSBiYXNlZCBvbiBhIEdVSUQgYW5kIGEgdG9rZW4gbmFtZS4NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtICBTZXRzIHRoZSA4LWJpdCB2YWx1ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmll ZCBieSBHdWlkIGFuZCBUb2tlbk5hbWUuIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtICBJ ZiBUb2tlbk5hbWUgaXMgbm90IGEgdmFsaWQgdG9rZW4gaW4gdGhlIHRva2VuIHNwYWNlIHNwZWNp ZmllZCBieSBHdWlkLA0KPiA+ID4gPiAtICB0aGVuIHRoZSBtb2R1bGUgd2lsbCBub3QgYnVpbGQu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0K PiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbSAgIEd1aWQgICAgICAgIFBvaW50ZXIgdG8gYSAx MjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0IGRlc2lnbmF0ZXMNCj4gPiA+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgd2hpY2ggbmFtZXNwYWNlIHRvIHJldHJpZXZlIGEgdmFsdWUgZnJvbS4NCj4g PiA+ID4gLSAgQHBhcmFtICAgVG9rZW5OYW1lICAgVGhlIG5hbWUgb2YgdGhlIFBDRCB0b2tlbiB0 byBzZXQgdGhlIGN1cnJlbnQgdmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW0gICBWYWx1ZSAg ICAgICBUaGUgOC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1 cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoq Lw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXRFeDgoR3VpZCwgVG9rZW5OYW1lLCBWYWx1ZSkgICBM aWJQY2RTZXRFeDggICAoKEd1aWQpLCBQY2RUb2tlbkV4KEd1aWQsVG9rZW5OYW1lKSwgKFZhbHVl KSkNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgU2V0cyBh IDE2LWJpdCBQQ0QgdG9rZW4gdmFsdWUgYmFzZWQgb24gYSBHVUlEIGFuZCBhIHRva2VuIG5hbWUu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgMTYtYml0IHZhbHVlIGZvciB0aGUgdG9r ZW4gc3BlY2lmaWVkIGJ5IEd1aWQgYW5kIFRva2VuTmFtZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ ID4gPiA+IC0gIElmIFRva2VuTmFtZSBpcyBub3QgYSB2YWxpZCB0b2tlbiBpbiB0aGUgdG9rZW4g c3BhY2Ugc3BlY2lmaWVkIGJ5IEd1aWQsDQo+ID4gPiA+IC0gIHRoZW4gdGhlIG1vZHVsZSB3aWxs IG5vdCBidWlsZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4g QVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICAgR3VpZCAgICAgICAgUG9p bnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRoYXQgZGVzaWduYXRlcw0KPiA+ID4gPiAt ICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBuYW1lc3BhY2UgdG8gcmV0cmlldmUgYSB2YWx1 ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFyYW0gICBUb2tlbk5hbWUgICBUaGUgbmFtZSBvZiB0aGUg UENEIHRva2VuIHRvIHNldCB0aGUgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJh bSAgIFZhbHVlICAgICAgIFRoZSAxNi1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXRFeDE2KEd1aWQsIFRva2VuTmFt ZSwgVmFsdWUpICBMaWJQY2RTZXRFeDE2ICAoKEd1aWQpLCBQY2RUb2tlbkV4KEd1aWQsVG9rZW5O YW1lKSwgKFZhbHVlKSkNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ ID4gLSAgU2V0cyBhIDMyLWJpdCBQQ0QgdG9rZW4gdmFsdWUgYmFzZWQgb24gYSBHVUlEIGFuZCBh IHRva2VuIG5hbWUuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgMzItYml0IHZhbHVl IGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IEd1aWQgYW5kIFRva2VuTmFtZS4gVmFsdWUgaXMg cmV0dXJuZWQuDQo+ID4gPiA+IC0gIElmIFRva2VuTmFtZSBpcyBub3QgYSB2YWxpZCB0b2tlbiBp biB0aGUgdG9rZW4gc3BhY2Ugc3BlY2lmaWVkIGJ5IEd1aWQsDQo+ID4gPiA+IC0gIHRoZW4gdGhl IG1vZHVsZSB3aWxsIG5vdCBidWlsZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBHdWlkIGlz IE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICAgR3Vp ZCAgICAgICAgUG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRoYXQgZGVzaWduYXRl cw0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBuYW1lc3BhY2UgdG8gcmV0 cmlldmUgYSB2YWx1ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFyYW0gICBUb2tlbk5hbWUgICBUaGUg bmFtZSBvZiB0aGUgUENEIHRva2VuIHRvIHNldCB0aGUgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4g PiA+IC0gIEBwYXJhbSAgIFZhbHVlICAgICAgIFRoZSAzMi1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdhcyBzZXQu DQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXRFeDMyKEd1 aWQsIFRva2VuTmFtZSwgVmFsdWUpICBMaWJQY2RTZXRFeDMyICAoKEd1aWQpLCBQY2RUb2tlbkV4 KEd1aWQsVG9rZW5OYW1lKSwgKFZhbHVlKSkNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0vKioNCj4gPiA+ID4gLSAgU2V0cyBhIDY0LWJpdCBQQ0QgdG9rZW4gdmFsdWUgYmFzZWQgb24g YSBHVUlEIGFuZCBhIHRva2VuIG5hbWUuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUg NjQtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IEd1aWQgYW5kIFRva2VuTmFt ZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0gIElmIFRva2VuTmFtZSBpcyBub3QgYSB2 YWxpZCB0b2tlbiBpbiB0aGUgdG9rZW4gc3BhY2Ugc3BlY2lmaWVkIGJ5IEd1aWQsDQo+ID4gPiA+ IC0gIHRoZW4gdGhlIG1vZHVsZSB3aWxsIG5vdCBidWlsZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAg QHBhcmFtICAgR3VpZCAgICAgICAgUG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRo YXQgZGVzaWduYXRlcw0KPiA+ID4gPiAtICB3aGljaCBuYW1lc3BhY2UgdG8gcmV0cmlldmUgYSB2 YWx1ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFyYW0gICBUb2tlbk5hbWUgICBUaGUgbmFtZSBvZiB0 aGUgUENEIHRva2VuIHRvIHNldCB0aGUgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBw YXJhbSAgIFZhbHVlICAgICAgIFRoZSA2NC1iaXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXRFeDY0KEd1aWQsIFRva2Vu TmFtZSwgVmFsdWUpICBMaWJQY2RTZXRFeDY0ICAoKEd1aWQpLCBQY2RUb2tlbkV4KEd1aWQsVG9r ZW5OYW1lKSwgKFZhbHVlKSkNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4g PiA+ID4gLSAgU2V0cyBhIHBvaW50ZXIgdG8gYSBQQ0QgdG9rZW4gYnVmZmVyIGJhc2VkIG9uIGEg R1VJRCBhbmQgYSB0b2tlbiBuYW1lLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIGJ1 ZmZlciBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBHdWlkIGFuZCBUb2tlbk5hbWUuIEJ1ZmZl ciBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyIGlzIGdyZWF0ZXIgdGhh biB0aGUgbWF4aW11bSBzaXplIHN1cHBvcnRlZCBieSBHdWlkIGFuZCBUb2tlbk5hbWUsDQo+ID4g PiA+IC0gIHRoZW4gc2V0IFNpemVPZkJ1ZmZlciB0byB0aGUgbWF4aW11bSBzaXplIHN1cHBvcnRl ZCBieSBHdWlkIGFuZCBUb2tlbk5hbWUgYW5kIHJldHVybg0KPiA+ID4gPiAtICBOVUxMIHRvIGlu ZGljYXRlIHRoYXQgdGhlIHNldCBvcGVyYXRpb24gd2FzIG5vdCBhY3R1YWxseSBwZXJmb3JtZWQu IElmIFNpemVPZkJ1ZmZlcg0KPiA+ID4gPiAtICBpcyBzZXQgdG8gTUFYX0FERFJFU1MsIHRoZW4g U2l6ZU9mQnVmZmVyIG11c3QgYmUgc2V0IHRvIHRoZSBtYXhpbXVtIHNpemUgc3VwcG9ydGVkIGJ5 DQo+ID4gPiA+IC0gIEd1aWQgYW5kIFRva2VuTmFtZSBhbmQgTlVMTCBtdXN0IGJlIHJldHVybmVk Lg0KPiA+ID4gPiAtICBJZiBUb2tlbk5hbWUgaXMgbm90IGEgdmFsaWQgdG9rZW4gaW4gdGhlIHRv a2VuIHNwYWNlIHNwZWNpZmllZCBieSBHdWlkLA0KPiA+ID4gPiAtICB0aGVuIHRoZSBtb2R1bGUg d2lsbCBub3QgYnVpbGQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgR3VpZCBpcyBOVUxMLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIgaXMgTlVMTCwgdGhlbiBB U1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyID4gMCBhbmQgQnVmZmVyIGlzIE5V TEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICAgR3VpZCAg ICAgICAgICAgUG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZhbHVlIHRoYXQgZGVzaWduYXRl cw0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCBuYW1lc3BhY2UgdG8g cmV0cmlldmUgYSB2YWx1ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFyYW0gICBUb2tlbk5hbWUgICAg ICBUaGUgbmFtZSBvZiB0aGUgUENEIHRva2VuIHRvIHNldCB0aGUgY3VycmVudCB2YWx1ZSBmb3Iu DQo+ID4gPiA+IC0gIEBwYXJhbSAgIFNpemVPZkJ1ZmZlciAgIEEgcG9pbnRlciB0byB0aGUgc2l6 ZSwgaW4gYnl0ZXMsIG9mIEJ1ZmZlci4NCj4gPiA+ID4gLSAgQHBhcmFtICAgQnVmZmVyICAgICAg ICAgUG9pbnRlciB0byB0aGUgYnVmZmVyIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBA cmV0dXJuIFJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgQnVmZmVyIHRoYXQgd2FzIHNldC4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC0jZGVmaW5lIFBjZFNldEV4UHRyKEd1aWQs IFRva2VuTmFtZSwgU2l6ZU9mQnVmZmVyLCBCdWZmZXIpIFwNCj4gPiA+ID4gLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGliUGNkU2V0RXhQdHIgKChHdWlkKSwg UGNkVG9rZW5FeChHdWlkLFRva2VuTmFtZSksIChTaXplT2ZCdWZmZXIpLCAoQnVmZmVyKSkNCj4g PiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgU2V0cyBhIEJvb2xl YW4gUENEIHRva2VuIHZhbHVlIGJhc2VkIG9uIGEgR1VJRCBhbmQgYSB0b2tlbiBuYW1lLg0KPiA+ ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIEJvb2xlYW4gdmFsdWUgZm9yIHRoZSB0b2tlbiBz cGVjaWZpZWQgYnkgR3VpZCBhbmQgVG9rZW5OYW1lLiBWYWx1ZSBpcyByZXR1cm5lZC4NCj4gPiA+ ID4gLSAgSWYgVG9rZW5OYW1lIGlzIG5vdCBhIHZhbGlkIHRva2VuIGluIHRoZSB0b2tlbiBzcGFj ZSBzcGVjaWZpZWQgYnkgR3VpZCwNCj4gPiA+ID4gLSAgdGhlbiB0aGUgbW9kdWxlIHdpbGwgbm90 IGJ1aWxkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMgTlVMTCwgdGhlbiBBU1NF UlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gICBHdWlkICAgICAgICAgICBQb2lu dGVyIHRvIGEgMTI4LWJpdCB1bmlxdWUgdmFsdWUgdGhhdCBkZXNpZ25hdGVzDQo+ID4gPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWNoIG5hbWVzcGFjZSB0byByZXRyaWV2ZSBhIHZh bHVlIGZyb20uDQo+ID4gPiA+IC0gIEBwYXJhbSAgIFRva2VuTmFtZSAgICAgIFRoZSBuYW1lIG9m IHRoZSBQQ0QgdG9rZW4gdG8gc2V0IHRoZSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4gLSAg QHBhcmFtICAgVmFsdWUgICAgICAgICAgVGhlIEJvb2xlYW4gdmFsdWUgdG8gc2V0Lg0KPiA+ID4g PiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdhcyBzZXQuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtI2RlZmluZSBQY2RTZXRFeEJvb2woR3Vp ZCwgVG9rZW5OYW1lLCBWYWx1ZSkgXA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaWJQY2RTZXRFeEJvb2woKEd1aWQpLCBQY2RUb2tlbkV4KEd1 aWQsVG9rZW5OYW1lKSwgKFZhbHVlKSkNCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPiAtDQo+ID4g PiA+ICAvKioNCj4gPiA+ID4gICAgU2V0cyBhbiA4LWJpdCBQQ0QgdG9rZW4gdmFsdWUgYmFzZWQg b24gYSBHVUlEIGFuZCBhIHRva2VuIG5hbWUuDQo+ID4gPiA+DQo+ID4gPiA+IEBAIC0xMzQ4LDI5 NSArMTExNyw2IEBAIExpYlBjZEdldEV4U2l6ZSAoDQo+ID4gPiA+ICAgICk7DQo+ID4gPiA+DQo+ ID4gPiA+DQo+ID4gPiA+IC0jaWZuZGVmIERJU0FCTEVfTkVXX0RFUFJFQ0FURURfSU5URVJGQUNF Uw0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFu cyBieSB3aGljaCB0byBzZXQgYSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgU2V0cyB0aGUgOC1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZp ZWQgYnkgVG9rZW5OdW1iZXINCj4gPiA+ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBW YWx1ZS4gIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtp bl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2 YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDgtYml0 IHZhbHVlIHRvIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUg VmFsdWUgdGhhdCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJ TlQ4DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldDggKA0KPiA+ID4gPiAtICBJ TiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDggICAg ICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdo aWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtICBTZXRzIHRoZSAxNi1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkg VG9rZW5OdW1iZXINCj4gPiA+ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4g IFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRv a2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBm b3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDE2LWJpdCB2YWx1 ZSB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIFZhbHVl IHRoYXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMTYN Cj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0MTYgKA0KPiA+ID4gPiAtICBJTiBV SU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDE2ICAgICAg ICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNo IHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBTZXRzIHRoZSAzMi1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9r ZW5OdW1iZXINCj4gPiA+ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZh bHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2Vu TnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3Iu DQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDMyLWJpdCB2YWx1ZSB0 byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIFZhbHVlIHRo YXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMzINCj4g PiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0MzIgKA0KPiA+ID4gPiAtICBJTiBVSU5U TiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDMyICAgICAgICAg ICAgVmFsdWUNCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0v KioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRv IHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBTZXRzIHRoZSA2NC1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5O dW1iZXINCj4gPiA+ID4gLSAgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieSBWYWx1ZS4gIFZhbHVl IGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVt YmVyICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZhbHVlICAgICAgICAgVGhlIDY0LWJpdCB2YWx1ZSB0byBz ZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIFZhbHVlIHRoYXQg d2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UNjQNCj4gPiA+ ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0NjQgKA0KPiA+ID4gPiAtICBJTiBVSU5UTiAg ICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gVUlOVDY0ICAgICAgICAgICAg VmFsdWUNCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioN Cj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNl dCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBT ZXRzIGEgYnVmZmVyIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVyIHRvIHRo ZSB2YWx1ZQ0KPiA+ID4gPiAtICBzcGVjaWZpZWQgYnkgQnVmZmVyIGFuZCBTaXplT2ZCdWZmZXIu ICBCdWZmZXIgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0gIElmIFNpemVPZkJ1ZmZlciBpcyBncmVh dGVyIHRoYW4gdGhlIG1heGltdW0gc2l6ZSBzdXBwb3J0IGJ5IFRva2VuTnVtYmVyLA0KPiA+ID4g PiAtICB0aGVuIHNldCBTaXplT2ZCdWZmZXIgdG8gdGhlIG1heGltdW0gc2l6ZSBzdXBwb3J0ZWQg YnkgVG9rZW5OdW1iZXIgYW5kDQo+ID4gPiA+IC0gIHJldHVybiBOVUxMIHRvIGluZGljYXRlIHRo YXQgdGhlIHNldCBvcGVyYXRpb24gd2FzIG5vdCBhY3R1YWxseSBwZXJmb3JtZWQuDQo+ID4gPiA+ IC0NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyIGlzIHNldCB0byBNQVhfQUREUkVTUywgdGhl biBTaXplT2ZCdWZmZXIgbXVzdCBiZSBzZXQgdG8gdGhlDQo+ID4gPiA+IC0gIG1heGltdW0gc2l6 ZSBzdXBwb3J0ZWQgYnkgVG9rZW5OYW1lIGFuZCBOVUxMIG11c3QgYmUgcmV0dXJuZWQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCku DQo+ID4gPiA+IC0gIElmIFNpemVPZkJ1ZmZlciA+IDAgYW5kIEJ1ZmZlciBpcyBOVUxMLCB0aGVu IEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gICAgICBUb2tlbk51 bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJlbnQgdmFsdWUgZm9yLg0K PiA+ID4gPiAtICBAcGFyYW1baW4sIG91dF0gU2l6ZU9mQnVmZmVyICBUaGUgc2l6ZSwgaW4gYnl0 ZXMsIG9mIEJ1ZmZlci4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgICAgIEJ1ZmZlciAgICAgICAg QSBwb2ludGVyIHRvIHRoZSBidWZmZXIgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEBy ZXR1cm4gUmV0dXJuIHRoZSBwb2ludGVyIGZvciB0aGUgQnVmZmVyIHRoYXQgd2FzIHNldC4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1WT0lEICoNCj4gPiA+ID4gLUVGSUFQSQ0K PiA+ID4gPiAtTGliUGNkU2V0UHRyICgNCj4gPiA+ID4gLSAgSU4gICAgICAgIFVJTlROICAgICAg ICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBPVVQgICAgVUlOVE4gICAgICAgICAg ICAgKlNpemVPZkJ1ZmZlciwNCj4gPiA+ID4gLSAgSU4gQ09OU1QgIFZPSUQgICAgICAgICAgICAg ICpCdWZmZXINCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0v KioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRv IHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBTZXRzIHRoZSBCb29sZWFuIHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2Vu TnVtYmVyDQo+ID4gPiA+IC0gIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuICBWYWx1 ZSBpcyByZXR1cm5lZC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBUb2tlbk51 bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJlbnQgdmFsdWUgZm9yLg0K PiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgIFRoZSBib29sZWFuIHZhbHVlIHRv IHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgVmFsdWUgdGhh dCB3YXMgc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLUJPT0xFQU4NCj4g PiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0Qm9vbCAoDQo+ID4gPiA+IC0gIElOIFVJ TlROICAgICAgICAgICAgIFRva2VuTnVtYmVyLA0KPiA+ID4gPiAtICBJTiBCT09MRUFOICAgICAg ICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4g LS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2gg dG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIFNldHMgdGhlIDgtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2Vu TnVtYmVyIGFuZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFs dWUuIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMg TlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBH dWlkICAgICAgICAgIFBvaW50ZXIgdG8gYSAxMjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0DQo+ID4g PiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1lc3Bh Y2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1i ZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4g PiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgOC1iaXQgdmFsdWUgdG8gc2V0 Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRoZSBWYWx1ZSB0aGF0IHdh cyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVUlOVDgNCj4gPiA+ID4g LUVGSUFQSQ0KPiA+ID4gPiAtTGliUGNkU2V0RXg4ICgNCj4gPiA+ID4gLSAgSU4gQ09OU1QgR1VJ RCAgICAgICAgKkd1aWQsDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVt YmVyLA0KPiA+ID4gPiAtICBJTiBVSU5UOCAgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICAp Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1 bmN0aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2 ZW4gUENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgdGhlIDE2LWJpdCB2YWx1 ZSBmb3IgdGhlIHRva2VuIHNwZWNpZmllZCBieSBUb2tlbk51bWJlciBhbmQNCj4gPiA+ID4gLSAg R3VpZCB0byB0aGUgdmFsdWUgc3BlY2lmaWVkIGJ5IFZhbHVlLiBWYWx1ZSBpcyByZXR1cm5lZC4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgR3VpZCAgICAgICAgICBQb2ludGVyIHRv IGEgMTI4LWJpdCB1bmlxdWUgdmFsdWUgdGhhdA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGRlc2lnbmF0ZXMgd2hpY2ggbmFtZXNwYWNlIHRvIHNldCBhIHZhbHVlIGZyb20u DQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFRva2VuTnVtYmVyICAgVGhlIFBDRCB0b2tlbiBudW1i ZXIgdG8gc2V0IGEgY3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIFZh bHVlICAgICAgICAgVGhlIDE2LWJpdCB2YWx1ZSB0byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgQHJldHVybiBSZXR1cm4gdGhlIFZhbHVlIHRoYXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UMTYNCj4gPiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtTGli UGNkU2V0RXgxNiAoDQo+ID4gPiA+IC0gIElOIENPTlNUIEdVSUQgICAgICAgICpHdWlkLA0KPiA+ ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4g VUlOVDE2ICAgICAgICAgICAgVmFsdWUNCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4g PiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1l YW5zIGJ5IHdoaWNoIHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtICBTZXRzIHRoZSAzMi1iaXQgdmFsdWUgZm9yIHRoZSB0b2tlbiBzcGVj aWZpZWQgYnkgVG9rZW5OdW1iZXIgYW5kDQo+ID4gPiA+IC0gIEd1aWQgdG8gdGhlIHZhbHVlIHNw ZWNpZmllZCBieSBWYWx1ZS4gVmFsdWUgaXMgcmV0dXJuZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgSWYgR3VpZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0g IEBwYXJhbVtpbl0gIEd1aWQgICAgICAgICAgUG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZh bHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNpZ25hdGVz IHdoaWNoIG5hbWVzcGFjZSB0byBzZXQgYSB2YWx1ZSBmcm9tLg0KPiA+ID4gPiAtICBAcGFyYW1b aW5dICBUb2tlbk51bWJlciAgIFRoZSBQQ0QgdG9rZW4gbnVtYmVyIHRvIHNldCBhIGN1cnJlbnQg dmFsdWUgZm9yLg0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBWYWx1ZSAgICAgICAgIFRoZSAzMi1i aXQgdmFsdWUgdG8gc2V0Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIEByZXR1cm4gUmV0dXJuIHRo ZSBWYWx1ZSB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAt VUlOVDMyDQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4MzIgKA0KPiA+ID4g PiAtICBJTiBDT05TVCBHVUlEICAgICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gVUlOVE4gICAg ICAgICAgICAgVG9rZW5OdW1iZXIsDQo+ID4gPiA+IC0gIElOIFVJTlQzMiAgICAgICAgICAgIFZh bHVlDQo+ID4gPiA+IC0gICk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ ID4gPiA+IC0gIFRoaXMgZnVuY3Rpb24gcHJvdmlkZXMgYSBtZWFucyBieSB3aGljaCB0byBzZXQg YSB2YWx1ZSBmb3IgYSBnaXZlbiBQQ0QgdG9rZW4uDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgU2V0 cyB0aGUgNjQtYml0IHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRva2VuTnVtYmVy IGFuZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkgVmFsdWUuIFZh bHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQgaXMgTlVMTCwg dGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBHdWlkICAg ICAgICAgIFBvaW50ZXIgdG8gYSAxMjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0DQo+ID4gPiA+IC0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1lc3BhY2UgdG8g c2V0IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5OdW1iZXIgICBU aGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4NCj4gPiA+ID4g LSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgNjQtYml0IHZhbHVlIHRvIHNldC4NCj4g PiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dXJuIFJldHVybiB0aGUgVmFsdWUgdGhhdCB3YXMgc2V0 Lg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8NCj4gPiA+ID4gLVVJTlQ2NA0KPiA+ID4gPiAtRUZJ QVBJDQo+ID4gPiA+IC1MaWJQY2RTZXRFeDY0ICgNCj4gPiA+ID4gLSAgSU4gQ09OU1QgR1VJRCAg ICAgICAgKkd1aWQsDQo+ID4gPiA+IC0gIElOIFVJTlROICAgICAgICAgICAgIFRva2VuTnVtYmVy LA0KPiA+ID4gPiAtICBJTiBVSU5UNjQgICAgICAgICAgICBWYWx1ZQ0KPiA+ID4gPiAtICApOw0K PiA+ID4gPiAtDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4gPiAtICBUaGlzIGZ1bmN0 aW9uIHByb3ZpZGVzIGEgbWVhbnMgYnkgd2hpY2ggdG8gc2V0IGEgdmFsdWUgZm9yIGEgZ2l2ZW4g UENEIHRva2VuLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFNldHMgYSBidWZmZXIgZm9yIHRoZSB0 b2tlbiBzcGVjaWZpZWQgYnkgVG9rZW5OdW1iZXIgdG8gdGhlIHZhbHVlIHNwZWNpZmllZCBieQ0K PiA+ID4gPiAtICBCdWZmZXIgYW5kIFNpemVPZkJ1ZmZlci4gIEJ1ZmZlciBpcyByZXR1cm5lZC4g IElmIFNpemVPZkJ1ZmZlciBpcyBncmVhdGVyIHRoYW4NCj4gPiA+ID4gLSAgdGhlIG1heGltdW0g c2l6ZSBzdXBwb3J0IGJ5IFRva2VuTnVtYmVyLCB0aGVuIHNldCBTaXplT2ZCdWZmZXIgdG8gdGhl IG1heGltdW0gc2l6ZQ0KPiA+ID4gPiAtICBzdXBwb3J0ZWQgYnkgVG9rZW5OdW1iZXIgYW5kIHJl dHVybiBOVUxMIHRvIGluZGljYXRlIHRoYXQgdGhlIHNldCBvcGVyYXRpb24NCj4gPiA+ID4gLSAg d2FzIG5vdCBhY3R1YWxseSBwZXJmb3JtZWQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgSWYgR3Vp ZCBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBTaXplT2ZCdWZmZXIgaXMg TlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgU2l6ZU9mQnVmZmVyID4gMCBhbmQg QnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBh cmFtW2luXSAgR3VpZCAgICAgICAgICAgICAgUG9pbnRlciB0byBhIDEyOC1iaXQgdW5pcXVlIHZh bHVlIHRoYXQNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWdu YXRlcyB3aGljaCBuYW1lc3BhY2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBh cmFtW2luXSAgVG9rZW5OdW1iZXIgICAgICAgVGhlIFBDRCB0b2tlbiBudW1iZXIgdG8gc2V0IGEg Y3VycmVudCB2YWx1ZSBmb3IuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbiwgb3V0XSBTaXplT2ZCdWZm ZXIgIFRoZSBzaXplLCBpbiBieXRlcywgb2YgQnVmZmVyLg0KPiA+ID4gPiAtICBAcGFyYW1baW5d ICBCdWZmZXIgICAgICAgICAgICBBIHBvaW50ZXIgdG8gdGhlIGJ1ZmZlciB0byBzZXQuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIHBvaW50ZXIgdG8gdGhlIEJ1ZmZl ciB0aGF0IHdhcyBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSoqLw0KPiA+ID4gPiAtVk9JRCAq DQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4UHRyICgNCj4gPiA+ID4gLSAg SU4gICAgICBDT05TVCBHVUlEICAgICAgICAqR3VpZCwNCj4gPiA+ID4gLSAgSU4gICAgICBVSU5U TiAgICAgICAgICAgICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gT1VUICBVSU5UTiAgICAg ICAgICAgICAqU2l6ZU9mQnVmZmVyLA0KPiA+ID4gPiAtICBJTiAgICAgIFZPSUQgICAgICAgICAg ICAgICpCdWZmZXINCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0vKioNCj4gPiA+ID4gLSAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNo IHRvIHNldCBhIHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtICBTZXRzIHRoZSBCb29sZWFuIHZhbHVlIGZvciB0aGUgdG9rZW4gc3BlY2lmaWVkIGJ5IFRv a2VuTnVtYmVyIGFuZA0KPiA+ID4gPiAtICBHdWlkIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWQgYnkg VmFsdWUuIFZhbHVlIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIEd1aWQg aXMgTlVMTCwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5d ICBHdWlkICAgICAgICAgIFBvaW50ZXIgdG8gYSAxMjgtYml0IHVuaXF1ZSB2YWx1ZSB0aGF0DQo+ ID4gPiA+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzaWduYXRlcyB3aGljaCBuYW1l c3BhY2UgdG8gc2V0IGEgdmFsdWUgZnJvbS4NCj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVG9rZW5O dW1iZXIgICBUaGUgUENEIHRva2VuIG51bWJlciB0byBzZXQgYSBjdXJyZW50IHZhbHVlIGZvci4N Cj4gPiA+ID4gLSAgQHBhcmFtW2luXSAgVmFsdWUgICAgICAgICBUaGUgQm9vbGVhbiB2YWx1ZSB0 byBzZXQuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHJldHVybiBSZXR1cm4gdGhlIFZhbHVlIHRo YXQgd2FzIHNldC4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1CT09MRUFODQo+ ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUxpYlBjZFNldEV4Qm9vbCAoDQo+ID4gPiA+IC0gIElO IENPTlNUIEdVSUQgICAgICAgICpHdWlkLA0KPiA+ID4gPiAtICBJTiBVSU5UTiAgICAgICAgICAg ICBUb2tlbk51bWJlciwNCj4gPiA+ID4gLSAgSU4gQk9PTEVBTiAgICAgICAgICAgVmFsdWUNCj4g PiA+ID4gLSAgKTsNCj4gPiA+ID4gLSNlbmRpZg0KPiA+ID4gPiAtDQo+ID4gPiA+ICAvKioNCj4g PiA+ID4gICAgVGhpcyBmdW5jdGlvbiBwcm92aWRlcyBhIG1lYW5zIGJ5IHdoaWNoIHRvIHNldCBh IHZhbHVlIGZvciBhIGdpdmVuIFBDRCB0b2tlbi4NCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdp dCBhL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvUHJpbnRMaWIuaCBiL01kZVBrZy9JbmNsdWRlL0xp YnJhcnkvUHJpbnRMaWIuaA0KPiA+ID4gPiBpbmRleCBkZmJjZDFiMzQwYmUuLjBiMzhkYTYwODRl MSAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL0luY2x1ZGUvTGlicmFyeS9QcmludExpYi5o DQo+ID4gPiA+ICsrKyBiL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvUHJpbnRMaWIuaA0KPiA+ID4g PiBAQCAtNDg1LDYyICs0ODUsNiBAQCBVbmljb2RlU1ByaW50QXNjaWlGb3JtYXQgKA0KPiA+ID4g PiAgICAuLi4NCj4gPiA+ID4gICAgKTsNCj4gPiA+ID4NCj4gPiA+ID4gLSNpZm5kZWYgRElTQUJM RV9ORVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ ID4gPiAtICBbQVRURU5USU9OXSBUaGlzIGZ1bmN0aW9uIGlzIGRlcHJlY2F0ZWQgZm9yIHNlY3Vy aXR5IHJlYXNvbi4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBDb252ZXJ0cyBhIGRlY2ltYWwgdmFs dWUgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5pY29kZSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgQ29udmVydHMgdGhlIGRlY2ltYWwgbnVtYmVyIHNwZWNpZmllZCBieSBWYWx1ZSB0byBh IE51bGwtdGVybWluYXRlZCBVbmljb2RlDQo+ID4gPiA+IC0gIHN0cmluZyBzcGVjaWZpZWQgYnkg QnVmZmVyIGNvbnRhaW5pbmcgYXQgbW9zdCBXaWR0aCBjaGFyYWN0ZXJzLiBObyBwYWRkaW5nIG9m IHNwYWNlcw0KPiA+ID4gPiAtICBpcyBldmVyIHBlcmZvcm1lZC4gSWYgV2lkdGggaXMgMCB0aGVu IGEgd2lkdGggb2YgTUFYSU1VTV9WQUxVRV9DSEFSQUNURVJTIGlzIGFzc3VtZWQuDQo+ID4gPiA+ IC0gIFRoZSBudW1iZXIgb2YgVW5pY29kZSBjaGFyYWN0ZXJzIGluIEJ1ZmZlciBpcyByZXR1cm5l ZCwgbm90IGluY2x1ZGluZyB0aGUgTnVsbC10ZXJtaW5hdG9yLg0KPiA+ID4gPiAtICBJZiB0aGUg Y29udmVyc2lvbiBjb250YWlucyBtb3JlIHRoYW4gV2lkdGggY2hhcmFjdGVycywgdGhlbiBvbmx5 IHRoZSBmaXJzdA0KPiA+ID4gPiAtICBXaWR0aCBjaGFyYWN0ZXJzIGFyZSByZXR1cm5lZCwgYW5k IHRoZSB0b3RhbCBudW1iZXIgb2YgY2hhcmFjdGVycw0KPiA+ID4gPiAtICByZXF1aXJlZCB0byBw ZXJmb3JtIHRoZSBjb252ZXJzaW9uIGlzIHJldHVybmVkLg0KPiA+ID4gPiAtICBBZGRpdGlvbmFs IGNvbnZlcnNpb24gcGFyYW1ldGVycyBhcmUgc3BlY2lmaWVkIGluIEZsYWdzLg0KPiA+ID4gPiAt DQo+ID4gPiA+IC0gIFRoZSBGbGFncyBiaXQgTEVGVF9KVVNUSUZZIGlzIGFsd2F5cyBpZ25vcmVk Lg0KPiA+ID4gPiAtICBBbGwgY29udmVyc2lvbnMgYXJlIGxlZnQganVzdGlmaWVkIGluIEJ1ZmZl ci4NCj4gPiA+ID4gLSAgSWYgV2lkdGggaXMgMCwgUFJFRklYX1pFUk8gaXMgaWdub3JlZCBpbiBG bGFncy4NCj4gPiA+ID4gLSAgSWYgQ09NTUFfVFlQRSBpcyBzZXQgaW4gRmxhZ3MsIHRoZW4gUFJF RklYX1pFUk8gaXMgaWdub3JlZCBpbiBGbGFncywgYW5kIGNvbW1hcw0KPiA+ID4gPiAtICBhcmUg aW5zZXJ0ZWQgZXZlcnkgM3JkIGRpZ2l0IHN0YXJ0aW5nIGZyb20gdGhlIHJpZ2h0Lg0KPiA+ID4g PiAtICBJZiBSQURJWF9IRVggaXMgc2V0IGluIEZsYWdzLCB0aGVuIHRoZSBvdXRwdXQgYnVmZmVy IHdpbGwgYmUNCj4gPiA+ID4gLSAgZm9ybWF0dGVkIGluIGhleGFkZWNpbWFsIGZvcm1hdC4NCj4g PiA+ID4gLSAgSWYgVmFsdWUgaXMgPCAwIGFuZCBSQURJWF9IRVggaXMgbm90IHNldCBpbiBGbGFn cywgdGhlbiB0aGUgZmlzdCBjaGFyYWN0ZXIgaW4gQnVmZmVyIGlzIGEgJy0nLg0KPiA+ID4gPiAt ICBJZiBQUkVGSVhfWkVSTyBpcyBzZXQgaW4gRmxhZ3MgYW5kIFBSRUZJWF9aRVJPIGlzIG5vdCBi ZWluZyBpZ25vcmVkLA0KPiA+ID4gPiAtICB0aGVuIEJ1ZmZlciBpcyBwYWRkZWQgd2l0aCAnMCcg Y2hhcmFjdGVycyBzbyB0aGUgY29tYmluYXRpb24gb2YgdGhlIG9wdGlvbmFsICctJw0KPiA+ID4g PiAtICBzaWduIGNoYXJhY3RlciwgJzAnIGNoYXJhY3RlcnMsIGRpZ2l0IGNoYXJhY3RlcnMgZm9y IFZhbHVlLCBhbmQgdGhlIE51bGwtdGVybWluYXRvcg0KPiA+ID4gPiAtICBhZGQgdXAgdG8gV2lk dGggY2hhcmFjdGVycy4NCj4gPiA+ID4gLSAgSWYgYm90aCBDT01NQV9UWVBFIGFuZCBSQURJWF9I RVggYXJlIHNldCBpbiBGbGFncywgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgQnVmZmVy IGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIEJ1ZmZlciBpcyBub3QgYWxp Z25lZCBvbiBhIDE2LWJpdCBib3VuZGFyeSwgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYg dW5zdXBwb3J0ZWQgYml0cyBhcmUgc2V0IGluIEZsYWdzLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4g PiAtICBJZiBib3RoIENPTU1BX1RZUEUgYW5kIFJBRElYX0hFWCBhcmUgc2V0IGluIEZsYWdzLCB0 aGVuIEFTU0VSVCgpLg0KPiA+ID4gPiAtICBJZiBXaWR0aCA+PSBNQVhJTVVNX1ZBTFVFX0NIQVJB Q1RFUlMsIHRoZW4gQVNTRVJUKCkNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW0gIEJ1ZmZl ciAgVGhlIHBvaW50ZXIgdG8gdGhlIG91dHB1dCBidWZmZXIgZm9yIHRoZSBwcm9kdWNlZCBOdWxs LXRlcm1pbmF0ZWQNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgIFVuaWNvZGUgc3RyaW5nLg0K PiA+ID4gPiAtICBAcGFyYW0gIEZsYWdzICAgVGhlIGJpdG1hc2sgb2YgZmxhZ3MgdGhhdCBzcGVj aWZ5IGxlZnQganVzdGlmaWNhdGlvbiwgemVybyBwYWQsIGFuZCBjb21tYXMuDQo+ID4gPiA+IC0g IEBwYXJhbSAgVmFsdWUgICBUaGUgNjQtYml0IHNpZ25lZCB2YWx1ZSB0byBjb252ZXJ0IHRvIGEg c3RyaW5nLg0KPiA+ID4gPiAtICBAcGFyYW0gIFdpZHRoICAgVGhlIG1heGltdW0gbnVtYmVyIG9m IFVuaWNvZGUgY2hhcmFjdGVycyB0byBwbGFjZSBpbiBCdWZmZXIsIG5vdCBpbmNsdWRpbmcNCj4g PiA+ID4gLSAgICAgICAgICAgICAgICAgIHRoZSBOdWxsLXRlcm1pbmF0b3IuDQo+ID4gPiA+IC0N Cj4gPiA+ID4gLSAgQHJldHVybiBUaGUgbnVtYmVyIG9mIFVuaWNvZGUgY2hhcmFjdGVycyBpbiBC dWZmZXIsIG5vdCBpbmNsdWRpbmcgdGhlIE51bGwtdGVybWluYXRvci4NCj4gPiA+ID4gLQ0KPiA+ ID4gPiAtKiovDQo+ID4gPiA+IC1VSU5UTg0KPiA+ID4gPiAtRUZJQVBJDQo+ID4gPiA+IC1Vbmlj b2RlVmFsdWVUb1N0cmluZyAoDQo+ID4gPiA+IC0gIElOIE9VVCBDSEFSMTYgICpCdWZmZXIsDQo+ ID4gPiA+IC0gIElOIFVJTlROICAgICAgIEZsYWdzLA0KPiA+ID4gPiAtICBJTiBJTlQ2NCAgICAg ICBWYWx1ZSwNCj4gPiA+ID4gLSAgSU4gVUlOVE4gICAgICAgV2lkdGgNCj4gPiA+ID4gLSAgKTsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+IC0NCj4gPiA+ID4gIC8qKg0KPiA+ ID4gPiAgICBDb252ZXJ0cyBhIGRlY2ltYWwgdmFsdWUgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5p Y29kZSBzdHJpbmcuDQo+ID4gPiA+DQo+ID4gPiA+IEBAIC04ODIsNjAgKzgyNiw2IEBAIEFzY2lp U1ByaW50VW5pY29kZUZvcm1hdCAoDQo+ID4gPiA+ICAgIC4uLg0KPiA+ID4gPiAgICApOw0KPiA+ ID4gPg0KPiA+ID4gPiAtI2lmbmRlZiBESVNBQkxFX05FV19ERVBSRUNBVEVEX0lOVEVSRkFDRVMN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gIFtBVFRFTlRJT05dIFRoaXMgZnVu Y3Rpb24gaXMgZGVwcmVjYXRlZCBmb3Igc2VjdXJpdHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4g PiA+IC0gIENvbnZlcnRzIGEgZGVjaW1hbCB2YWx1ZSB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJ SSBzdHJpbmcuDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQ29udmVydHMgdGhlIGRlY2ltYWwgbnVt YmVyIHNwZWNpZmllZCBieSBWYWx1ZSB0byBhIE51bGwtdGVybWluYXRlZCBBU0NJSSBzdHJpbmcN Cj4gPiA+ID4gLSAgc3BlY2lmaWVkIGJ5IEJ1ZmZlciBjb250YWluaW5nIGF0IG1vc3QgV2lkdGgg Y2hhcmFjdGVycy4gTm8gcGFkZGluZyBvZiBzcGFjZXMNCj4gPiA+ID4gLSAgaXMgZXZlciBwZXJm b3JtZWQuDQo+ID4gPiA+IC0gIElmIFdpZHRoIGlzIDAgdGhlbiBhIHdpZHRoIG9mICBNQVhJTVVN X1ZBTFVFX0NIQVJBQ1RFUlMgaXMgYXNzdW1lZC4NCj4gPiA+ID4gLSAgVGhlIG51bWJlciBvZiBB U0NJSSBjaGFyYWN0ZXJzIGluIEJ1ZmZlciBpcyByZXR1cm5lZCwgbm90IGluY2x1ZGluZyB0aGUg TnVsbC10ZXJtaW5hdG9yLg0KPiA+ID4gPiAtICBJZiB0aGUgY29udmVyc2lvbiBjb250YWlucyBt b3JlIHRoYW4gV2lkdGggY2hhcmFjdGVycywgdGhlbiBvbmx5IHRoZSBmaXJzdCBXaWR0aA0KPiA+ ID4gPiAtICBjaGFyYWN0ZXJzIGFyZSByZXR1cm5lZCwgYW5kIHRoZSB0b3RhbCBudW1iZXIgb2Yg Y2hhcmFjdGVycyByZXF1aXJlZCB0byBwZXJmb3JtDQo+ID4gPiA+IC0gIHRoZSBjb252ZXJzaW9u IGlzIHJldHVybmVkLg0KPiA+ID4gPiAtICBBZGRpdGlvbmFsIGNvbnZlcnNpb24gcGFyYW1ldGVy cyBhcmUgc3BlY2lmaWVkIGluIEZsYWdzLg0KPiA+ID4gPiAtICBUaGUgRmxhZ3MgYml0IExFRlRf SlVTVElGWSBpcyBhbHdheXMgaWdub3JlZC4NCj4gPiA+ID4gLSAgQWxsIGNvbnZlcnNpb25zIGFy ZSBsZWZ0IGp1c3RpZmllZCBpbiBCdWZmZXIuDQo+ID4gPiA+IC0gIElmIFdpZHRoIGlzIDAsIFBS RUZJWF9aRVJPIGlzIGlnbm9yZWQgaW4gRmxhZ3MuDQo+ID4gPiA+IC0gIElmIENPTU1BX1RZUEUg aXMgc2V0IGluIEZsYWdzLCB0aGVuIFBSRUZJWF9aRVJPIGlzIGlnbm9yZWQgaW4gRmxhZ3MsIGFu ZCBjb21tYXMNCj4gPiA+ID4gLSAgYXJlIGluc2VydGVkIGV2ZXJ5IDNyZCBkaWdpdCBzdGFydGlu ZyBmcm9tIHRoZSByaWdodC4NCj4gPiA+ID4gLSAgSWYgUkFESVhfSEVYIGlzIHNldCBpbiBGbGFn cywgdGhlbiB0aGUgb3V0cHV0IGJ1ZmZlciB3aWxsIGJlDQo+ID4gPiA+IC0gIGZvcm1hdHRlZCBp biBoZXhhZGVjaW1hbCBmb3JtYXQuDQo+ID4gPiA+IC0gIElmIFZhbHVlIGlzIDwgMCBhbmQgUkFE SVhfSEVYIGlzIG5vdCBzZXQgaW4gRmxhZ3MsIHRoZW4gdGhlIGZpc3QgY2hhcmFjdGVyIGluIEJ1 ZmZlciBpcyBhICctJy4NCj4gPiA+ID4gLSAgSWYgUFJFRklYX1pFUk8gaXMgc2V0IGluIEZsYWdz IGFuZCBQUkVGSVhfWkVSTyBpcyBub3QgYmVpbmcgaWdub3JlZCwNCj4gPiA+ID4gLSAgdGhlbiBC dWZmZXIgaXMgcGFkZGVkIHdpdGggJzAnIGNoYXJhY3RlcnMgc28gdGhlIGNvbWJpbmF0aW9uIG9m IHRoZSBvcHRpb25hbCAnLScNCj4gPiA+ID4gLSAgc2lnbiBjaGFyYWN0ZXIsICcwJyBjaGFyYWN0 ZXJzLCBkaWdpdCBjaGFyYWN0ZXJzIGZvciBWYWx1ZSwgYW5kIHRoZSBOdWxsLXRlcm1pbmF0b3IN Cj4gPiA+ID4gLSAgYWRkIHVwIHRvIFdpZHRoIGNoYXJhY3RlcnMuDQo+ID4gPiA+IC0NCj4gPiA+ ID4gLSAgSWYgQnVmZmVyIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0gIElmIHVu c3VwcG9ydGVkIGJpdHMgYXJlIHNldCBpbiBGbGFncywgdGhlbiBBU1NFUlQoKS4NCj4gPiA+ID4g LSAgSWYgYm90aCBDT01NQV9UWVBFIGFuZCBSQURJWF9IRVggYXJlIHNldCBpbiBGbGFncywgdGhl biBBU1NFUlQoKS4NCj4gPiA+ID4gLSAgSWYgV2lkdGggPj0gTUFYSU1VTV9WQUxVRV9DSEFSQUNU RVJTLCB0aGVuIEFTU0VSVCgpDQo+ID4gPiA+IC0NCj4gPiA+ID4gLSAgQHBhcmFtICBCdWZmZXIg IEEgcG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBmb3IgdGhlIHByb2R1Y2VkIE51bGwtdGVy bWluYXRlZA0KPiA+ID4gPiAtICAgICAgICAgICAgICAgICAgQVNDSUkgc3RyaW5nLg0KPiA+ID4g PiAtICBAcGFyYW0gIEZsYWdzICAgVGhlIGJpdG1hc2sgb2YgZmxhZ3MgdGhhdCBzcGVjaWZ5IGxl ZnQganVzdGlmaWNhdGlvbiwgemVybyBwYWQsIGFuZCBjb21tYXMuDQo+ID4gPiA+IC0gIEBwYXJh bSAgVmFsdWUgICBUaGUgNjQtYml0IHNpZ25lZCB2YWx1ZSB0byBjb252ZXJ0IHRvIGEgc3RyaW5n Lg0KPiA+ID4gPiAtICBAcGFyYW0gIFdpZHRoICAgVGhlIG1heGltdW0gbnVtYmVyIG9mIEFTQ0lJ IGNoYXJhY3RlcnMgdG8gcGxhY2UgaW4gQnVmZmVyLCBub3QgaW5jbHVkaW5nDQo+ID4gPiA+IC0g ICAgICAgICAgICAgICAgICB0aGUgTnVsbC10ZXJtaW5hdG9yLg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0gIEByZXR1cm4gVGhlIG51bWJlciBvZiBBU0NJSSBjaGFyYWN0ZXJzIGluIEJ1ZmZlciwgbm90 IGluY2x1ZGluZyB0aGUgTnVsbC10ZXJtaW5hdG9yLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0qKi8N Cj4gPiA+ID4gLVVJTlRODQo+ID4gPiA+IC1FRklBUEkNCj4gPiA+ID4gLUFzY2lpVmFsdWVUb1N0 cmluZyAoDQo+ID4gPiA+IC0gIE9VVCBDSEFSOCAgICAgICpCdWZmZXIsDQo+ID4gPiA+IC0gIElO ICBVSU5UTiAgICAgIEZsYWdzLA0KPiA+ID4gPiAtICBJTiAgSU5UNjQgICAgICBWYWx1ZSwNCj4g PiA+ID4gLSAgSU4gIFVJTlROICAgICAgV2lkdGgNCj4gPiA+ID4gLSAgKTsNCj4gPiA+ID4gLQ0K PiA+ID4gPiAtI2VuZGlmDQo+ID4gPiA+DQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAgQ29udmVy dHMgYSBkZWNpbWFsIHZhbHVlIHRvIGEgTnVsbC10ZXJtaW5hdGVkIEFzY2lpIHN0cmluZy4NCj4g PiA+ID4gZGlmZiAtLWdpdCBhL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvVWVmaUxpYi5oIGIvTWRl UGtnL0luY2x1ZGUvTGlicmFyeS9VZWZpTGliLmgNCj4gPiA+ID4gaW5kZXggMGFiYjQwZDZlY2Jk Li5mNTZmZmRlMTIzMGUgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL01kZVBrZy9JbmNsdWRlL0xpYnJh cnkvVWVmaUxpYi5oDQo+ID4gPiA+ICsrKyBiL01kZVBrZy9JbmNsdWRlL0xpYnJhcnkvVWVmaUxp Yi5oDQo+ID4gPiA+IEBAIC02ODAsNTkgKzY4MCw2IEBAIEZyZWVVbmljb2RlU3RyaW5nVGFibGUg KA0KPiA+ID4gPiAgICBJTiBFRklfVU5JQ09ERV9TVFJJTkdfVEFCTEUgICpVbmljb2RlU3RyaW5n VGFibGUNCj4gPiA+ID4gICAgKTsNCj4gPiA+ID4NCj4gPiA+ID4gLSNpZm5kZWYgRElTQUJMRV9O RVdfREVQUkVDQVRFRF9JTlRFUkZBQ0VTDQo+ID4gPiA+IC0NCj4gPiA+ID4gLS8qKg0KPiA+ID4g PiAtICBbQVRURU5USU9OXSBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGVwcmVjYXRlZCBmb3Igc2Vj dXJpdHkgcmVhc29uLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIFJldHVybnMgYSBwb2ludGVyIHRv IGFuIGFsbG9jYXRlZCBidWZmZXIgdGhhdCBjb250YWlucyB0aGUgY29udGVudHMgb2YgYQ0KPiA+ ID4gPiAtICB2YXJpYWJsZSByZXRyaWV2ZWQgdGhyb3VnaCB0aGUgVUVGSSBSdW50aW1lIFNlcnZp Y2UgR2V0VmFyaWFibGUoKS4gIFRoZQ0KPiA+ID4gPiAtICByZXR1cm5lZCBidWZmZXIgaXMgYWxs b2NhdGVkIHVzaW5nIEFsbG9jYXRlUG9vbCgpLiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZQ0K PiA+ID4gPiAtICBmb3IgZnJlZWluZyB0aGlzIGJ1ZmZlciB3aXRoIEZyZWVQb29sKCkuDQo+ID4g PiA+IC0NCj4gPiA+ID4gLSAgSWYgTmFtZSBpcyBOVUxMLCB0aGVuIEFTU0VSVCgpLg0KPiA+ID4g PiAtICBJZiBHdWlkIGlzIE5VTEwsIHRoZW4gQVNTRVJUKCkuDQo+ID4gPiA+IC0NCj4gPiA+ID4g LSAgQHBhcmFtW2luXSAgTmFtZSAgVGhlIHBvaW50ZXIgdG8gYSBOdWxsLXRlcm1pbmF0ZWQgVW5p Y29kZSBzdHJpbmcuDQo+ID4gPiA+IC0gIEBwYXJhbVtpbl0gIEd1aWQgIFRoZSBwb2ludGVyIHRv IGFuIEVGSV9HVUlEIHN0cnVjdHVyZS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcmV0dmFsIE5V TEwgICBUaGUgdmFyaWFibGUgY291bGQgbm90IGJlIHJldHJpZXZlZC4NCj4gPiA+ID4gLSAgQHJl dHZhbCBOVUxMICAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIGF2YWlsYWJsZSBmb3Ig dGhlIHZhcmlhYmxlIGNvbnRlbnRzLg0KPiA+ID4gPiAtICBAcmV0dmFsIE90aGVyICBBIHBvaW50 ZXIgdG8gYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSB2YXJpYWJsZSBjb250ZW50cy4N Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1WT0lEICoNCj4gPiA+ID4gLUVGSUFQ SQ0KPiA+ID4gPiAtR2V0VmFyaWFibGUgKA0KPiA+ID4gPiAtICBJTiBDT05TVCBDSEFSMTYgICAg Kk5hbWUsDQo+ID4gPiA+IC0gIElOIENPTlNUIEVGSV9HVUlEICAqR3VpZA0KPiA+ID4gPiAtICAp Ow0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAgW0FUVEVOVElPTl0gVGhpcyBm dW5jdGlvbiB3aWxsIGJlIGRlcHJlY2F0ZWQgZm9yIHNlY3VyaXR5IHJlYXNvbi4NCj4gPiA+ID4g LQ0KPiA+ID4gPiAtICBSZXR1cm5zIGEgcG9pbnRlciB0byBhbiBhbGxvY2F0ZWQgYnVmZmVyIHRo YXQgY29udGFpbnMgdGhlIGNvbnRlbnRzIG9mIGENCj4gPiA+ID4gLSAgdmFyaWFibGUgcmV0cmll dmVkIHRocm91Z2ggdGhlIFVFRkkgUnVudGltZSBTZXJ2aWNlIEdldFZhcmlhYmxlKCkuICBUaGlz DQo+ID4gPiA+IC0gIGZ1bmN0aW9uIGFsd2F5cyB1c2VzIHRoZSBFRklfR0xPQkFMX1ZBUklBQkxF IEdVSUQgdG8gcmV0cmlldmUgdmFyaWFibGVzLg0KPiA+ID4gPiAtICBUaGUgcmV0dXJuZWQgYnVm ZmVyIGlzIGFsbG9jYXRlZCB1c2luZyBBbGxvY2F0ZVBvb2woKS4gIFRoZSBjYWxsZXIgaXMNCj4g PiA+ID4gLSAgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhpcyBidWZmZXIgd2l0aCBGcmVlUG9v bCgpLg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0gIElmIE5hbWUgaXMgTlVMTCwgdGhlbiBBU1NFUlQo KS4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtICBAcGFyYW1baW5dICBOYW1lICBUaGUgcG9pbnRlciB0 byBhIE51bGwtdGVybWluYXRlZCBVbmljb2RlIHN0cmluZy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAt ICBAcmV0dmFsIE5VTEwgICBUaGUgdmFyaWFibGUgY291bGQgbm90IGJlIHJldHJpZXZlZC4NCj4g PiA+ID4gLSAgQHJldHZhbCBOVUxMICAgVGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIGF2 YWlsYWJsZSBmb3IgdGhlIHZhcmlhYmxlIGNvbnRlbnRzLg0KPiA+ID4gPiAtICBAcmV0dmFsIE90 aGVyICBBIHBvaW50ZXIgdG8gYWxsb2NhdGVkIGJ1ZmZlciBjb250YWluaW5nIHRoZSB2YXJpYWJs ZSBjb250ZW50cy4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtKiovDQo+ID4gPiA+IC1WT0lEICoNCj4g PiA+ID4gLUVGSUFQSQ0KPiA+ID4gPiAtR2V0RWZpR2xvYmFsVmFyaWFibGUgKA0KPiA+ID4gPiAt ICBJTiBDT05TVCBDSEFSMTYgICpOYW1lDQo+ID4gPiA+IC0gICk7DQo+ID4gPiA+IC0jZW5kaWYN Cj4gPiA+ID4gLQ0KPiA+ID4gPg0KPiA+ID4gPiAgLyoqDQo+ID4gPiA+ICAgIFJldHVybnMgdGhl IHN0YXR1cyB3aGV0aGVyIGdldCB0aGUgdmFyaWFibGUgc3VjY2Vzcy4gVGhlIGZ1bmN0aW9uIHJl dHJpZXZlcw0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvTWRlUGtnL01kZVBrZy5kc2MgYi9NZGVQa2cv TWRlUGtnLmRzYw0KPiA+ID4gPiBpbmRleCA2Y2QzOGU3ZWMzYzkuLjA0NzdlMDIwNTE4OCAxMDA2 NDQNCj4gPiA+ID4gLS0tIGEvTWRlUGtnL01kZVBrZy5kc2MNCj4gPiA+ID4gKysrIGIvTWRlUGtn L01kZVBrZy5kc2MNCj4gPiA+ID4gQEAgLTE3Miw0ICsxNzIsMyBAQCBbQ29tcG9uZW50cy5BUk0s IENvbXBvbmVudHMuQUFSQ0g2NF0NCj4gPiA+ID4gICAgTWRlUGtnL0xpYnJhcnkvQmFzZVN0YWNr Q2hlY2tMaWIvQmFzZVN0YWNrQ2hlY2tMaWIuaW5mDQo+ID4gPiA+DQo+ID4gPiA+ICBbQnVpbGRP cHRpb25zXQ0KPiA+ID4gPiAtICAqXypfKl9DQ19GTEFHUyA9IC1EIERJU0FCTEVfTkVXX0RFUFJF Q0FURURfSU5URVJGQUNFUw0KPiA+ID4gPiAtLQ0KPiA+ID4gPiAyLjE4LjAud2luZG93cy4xDQo+ ID4gPg0KPiA+ID4NCj4gPiA+IA0KPiA+ID4NCg0KDQoNCg==