From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga12.intel.com (mga12.intel.com [192.55.52.136]) by mx.groups.io with SMTP id smtpd.web09.21091.1643562517944696646 for ; Sun, 30 Jan 2022 09:08:38 -0800 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=QSNbTbCL; spf=pass (domain: intel.com, ip: 192.55.52.136, mailfrom: yi1.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1643562517; x=1675098517; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-transfer-encoding:mime-version; bh=1DKNeapyZP+mqbImbT8IHuNSdnCvEpT3HXX02jublX4=; b=QSNbTbCL7ukC9x2z59Z8CkeIneyuHy3bg9M55XlZQoXVlwPJVNhRNb4t RPPvhkg7aOT8VfQymjP0G7pSeibzJr6BX5Grz4A16uwo0tBI6GqCN/eCF 5qb2+tKuVbQcMsvap8uRxtT2+N8tVAH8Yo4accw8IFtQBLHmlBvxfsa8G aUs6JKMsUKju0lF0Qv521H9k2XXoEeeGmAn2B92hKXrRFLjcOpgbggQL1 RsTaWD3Xok5jVA1GbTsiI+OjYvhpF7y+kD3saJIfiIP6uW6o7FN7J0X/1 yWR2kj92K5T63sSv7zpQsBgleusc4R32k7UO9dcs5pKSk4Xp3EQXlO6Sl A==; X-IronPort-AV: E=McAfee;i="6200,9189,10242"; a="227335285" X-IronPort-AV: E=Sophos;i="5.88,329,1635231600"; d="scan'208";a="227335285" Received: from fmsmga005.fm.intel.com ([10.253.24.32]) by fmsmga106.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 30 Jan 2022 09:08:37 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.88,329,1635231600"; d="scan'208";a="770569008" Received: from fmsmsx602.amr.corp.intel.com ([10.18.126.82]) by fmsmga005.fm.intel.com with ESMTP; 30 Jan 2022 09:08:37 -0800 Received: from fmsmsx611.amr.corp.intel.com (10.18.126.91) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sun, 30 Jan 2022 09:08:36 -0800 Received: from fmsmsx606.amr.corp.intel.com (10.18.126.86) by fmsmsx611.amr.corp.intel.com (10.18.126.91) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20; Sun, 30 Jan 2022 09:08:36 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx606.amr.corp.intel.com (10.18.126.86) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2308.20 via Frontend Transport; Sun, 30 Jan 2022 09:08:36 -0800 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (104.47.74.49) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2308.20; Sun, 30 Jan 2022 09:08:36 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=G39rx326Et/wiuVt0iysl3WK2fPyGmRiVZ4MPSNIl9MfUrRAwfwinLKGUuF1VVJDmHjcdACZi5wPiuZ62CkrV9vFUEtCjXfUeh3m96lygpQPUr1gHZWRhDz540YNG9rvZXlFnVMf/qEhIl23T5xv6iIdtiPKKGItguYYy5X20voF0t2C/jU9LbFAmaJBkcbUh//ryNKp7ooa/ko0RBSO34E7wN73OfDew2/q31iZTf0CDmFyWx53QWm0Mt/JrWEr+Dh6KxN8XBgPNkaqbypeG6ZFVQ5SqrIIe6VsqQuU9HtVMZAzXWCptvpDCeBBJeEJSEXqiN+nJyIJwnUtRfY+lg== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1DKNeapyZP+mqbImbT8IHuNSdnCvEpT3HXX02jublX4=; b=NpXtZIPFZm2Ow3qqnWj/93vGAaMHWwppGJHLnAD3lfAmw0XUrKNCxT7kiq/d6718gvHRpTsYUsADb3R49OspEWaGbm6xowP6/sAczAdHPxevO7pLUEWZ1iI0or8owERu78oNWihS8fq/Q+wqg0xZg045igDmiJa50zrht8lJjj52aefSSyzigCwipg40JTNsSOGjK8L9RUbpDz2kqf3AlVk+m7FNoJRVH928KFz3CKVPMzqydvHRL5qlcd7wQQTxAQhTP8SosBNoAbF+n+YocFoqDoBnHFtsjxzb8N+eSqNBOv/kGw4NbxKuZ8GW9oa8hJ7MPa7/zua2WIImeNb2mA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none Received: from MWHPR11MB1791.namprd11.prod.outlook.com (2603:10b6:300:10f::10) by DM6PR11MB2905.namprd11.prod.outlook.com (2603:10b6:5:62::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4930.18; Sun, 30 Jan 2022 17:08:33 +0000 Received: from MWHPR11MB1791.namprd11.prod.outlook.com ([fe80::cdcd:5513:e4b8:d494]) by MWHPR11MB1791.namprd11.prod.outlook.com ([fe80::cdcd:5513:e4b8:d494%11]) with mapi id 15.20.4930.021; Sun, 30 Jan 2022 17:08:32 +0000 From: "yi1 li" To: "Yao, Jiewen" CC: "devel@edk2.groups.io" , "Wang, Jian J" , Xiaoyu Lu , "Jiang, Guomin" Subject: Re: [PATCH 2/2] CryptoPkg: Add BigNum NullLib Thread-Topic: [PATCH 2/2] CryptoPkg: Add BigNum NullLib Thread-Index: AQHYFVz43+17lvOh4EuV8AynuyvYAax6rxuAgAEaukA= Date: Sun, 30 Jan 2022 17:08:32 +0000 Message-ID: References: <2453B62F-8856-4915-A6B4-7819F9B991C4@intel.com> In-Reply-To: <2453B62F-8856-4915-A6B4-7819F9B991C4@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-version: 11.6.200.16 dlp-reaction: no-action authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6e6e3fdd-5b25-48da-7019-08d9e4132537 x-ms-traffictypediagnostic: DM6PR11MB2905:EE_ x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1468; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: ZlW4bTlyvIWt1lBPloFQvyI1uffmfDy65bQFQy7GR9T0+CX0Xi0QQogbP+tu/u4f3OZ6mLb7Ncip8YFYzxhorNvUfQ9R7HkoJDwlTgt/eZni5OIGATu6rEk4awIo5Yc+bygtj5dGltcOse7EjaI277uKpeVwr8ZbzZ/B5ko5T6UrrRvSdkxGfcJCJmz2CCiwBBdJSRJilXLm1Gp0+eis3FyhSTrejFO/oX8AXBKws5RYuzEfDLmIXyLHA82N2wV5M0dBHyZjYvnRTFnPM2hnHAZJdc09jnZflCQ0EiHr3HmibQ8vYfSjJdTf0Jdx2EdBv/wGkmeqrbPangb7QoZbfXAlW2vFs/e8zOwqJSS6CljF4jdUYxfQqDctdqW6Aj1xQV7ggekfX131EP8BqoYsasFvkcT1ARC+Pq195Ik+OQRjmA/glAknkbJDekMytV0Pmq8E9TfizIW2x+KfExqrARlFqzBfqqFklWL6IDj/UJfQHLt2WiJBTBvZJa1fmHMnA6FY5qIlej2xGEiSUA6elJaKHmC7Trh++kJYcPLpJZ8UPrEINYIKeEkFOyNcs+8hf6tm4CS3bA+9BFV0tKdbiByk7/qBCACGp9oJwNWLyjFxto45mKOSGwKm6MLKTzdXFQmAXWrhq4rY+e0xvrkRGFe69ZtbYqROgCav2pNtrVL+GgrzNt5gZ529ebbVbz2Kg9xcaYmKQzImvtVKiFCjWg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR11MB1791.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(366004)(107886003)(7696005)(53546011)(6506007)(55016003)(71200400001)(9686003)(38070700005)(508600001)(122000001)(33656002)(38100700002)(52536014)(54906003)(6636002)(316002)(66446008)(86362001)(83380400001)(82960400001)(5660300002)(4326008)(6862004)(66946007)(66556008)(8676002)(66476007)(8936002)(76116006)(2906002)(64756008)(186003)(26005)(30864003)(559001)(579004)(20210929001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?ajB0bXNTSVpRd3gzYzNVdkFBcHFNS1ZMUzZXTGtQcDBNdmRrYVpGWXhHRDlW?= =?utf-8?B?WVFkMVQvaUgwTVpjT05lL05tZzZkajBXMExHZnpjL3JkNTBxcEJTS0JtOEh4?= =?utf-8?B?Qk4zVDEyWVpFdVp1bmhicldRWWV4dGd3L1hQczFieFhhNjFGUHczRFE3N1Iv?= =?utf-8?B?ZTdEajhFQS9HVGJwRUVabHdyK0VZR3RTTjlGWEJFbDFIMVQ2UmtlZFkvTEFs?= =?utf-8?B?Q3RKWFowa2o3WGxjVFBaUFE5RTM5NDNKanZtdlRnWnN4QTdFTVorS2NEN0FZ?= =?utf-8?B?KzVsQnRyU2hUS1dVOC9DRFU3SG5hWFV2NnFtTVljTE9iL1UrZlY0OURWbE4v?= =?utf-8?B?c21DOFBuYXZSNE5QUG1ETk9iRUFyaXpvTWwvYnI1KzNhcmtBZm1JWUM5Kytu?= =?utf-8?B?OEJxbFJuWWd1UXZabjdXYTBDTDdEODNnNEdVc2xuL0ZEN2d5MHpZNTJ6WWd0?= =?utf-8?B?YWNhRlRjUmU5aStadVBWMTFQUTFJbHdmYkpoR0l4Yy8wYTVSNmNpblRGMEpJ?= =?utf-8?B?UHJCRmRvaC9uQytZeFo3R1RpcGVSSVlWaml4bTNlc0l1cm9UYW05Wmcrblhh?= =?utf-8?B?dC9PWGttN0tUc1p4QWV4MWdic29BaEZUemFlWEZnK2NKVDdrTjNmUE0yS2dm?= =?utf-8?B?SkQ1eWlubjl1dC9YRFFZWGpnaXBWc3lnK0ExR0E2dHZGQUYyL3FSVVdEQUU3?= =?utf-8?B?RXFmUW81cTNoZEdIaGVQVGxyMFJuelc5WHVteTY0SmQwa2lGUFU0M25rMWJv?= =?utf-8?B?OERBNmF0RjRLNXdVOFdoMzZKWENMTmNrM3RWL3ZqK3RMWmxYVW5LcUk1bWJq?= =?utf-8?B?Mmhua1RUVG03elBCanFVc1pXZ2lVOFpsUFMvc0M1Mll3NGh6ZVl5dDRNZTBh?= =?utf-8?B?QU96bURMSElVZjVTQU8rUFJieTVjWEYyTlF6RGFzWXlLeHlXVktDNnBpWkZ2?= =?utf-8?B?NWh3Wm1nSEI3bkhPenBTMGQ4QW9LYTYxSDdwUmNnQm5QSUZnNGFXaWhWa0hO?= =?utf-8?B?MFo3cTZZNHlDd3pRdVZiWlhxZjJ4V04xbE5YU1pUSDBHOXdIenpNYjdYSjFL?= =?utf-8?B?YXIwVkhIallESWVjeXE1T2lyM1M2YWZVaDdpSkltS0V2WnJ5S0FyblFTSDB2?= =?utf-8?B?bEVHUmt5S3hEUTluc3hLUjlYd0FLS1BiRk9wOWNTNjJrY1lNK2lWQlNGakZ0?= =?utf-8?B?Ung4SXd3Vlg5bVY2RE5SVmtEYWRBMXBkSFdVbnZTM01PdnhPZGlLWEdnQUVG?= =?utf-8?B?R1dSdmk1b0pBQUxzWEswZW5ZL1pvRXlsQkp1M0tvejRCV1dvS2JaaGRlQmJt?= =?utf-8?B?bmZCZGlqNDdiWVBBcmVha1RsRHFXNEdvT3N0Wk5KQU55QVJZVzBVYjZ3YjJ6?= =?utf-8?B?cC95b1dBTVo0OE55LzNLSWY3SnFQR0VXc3BBNGY2RGgvZTFNK0pVbUorZFpT?= =?utf-8?B?RE5aQXpEblZGaDVCOXRyY1ZNNmN6WmNNcUIvUStBUHJ2UUZRaFB3ZlJveHA4?= =?utf-8?B?Ry84d05TTmJZdWdpc3FBVUlsY1h5OHZEU2o5eXBWcnVMSDkzUW0vUWRhSHJo?= =?utf-8?B?MVJXcTZzaVNWTzVxSzk2S2wxWlZDUTVDUXBiaWJmeit2OTVMaUlqYVB1SWNu?= =?utf-8?B?c3REVWszd09ob3RScTAyTTMyVTJ2NGV2WEY4UHJUWW9HWGFQakliYUhWYjNl?= =?utf-8?B?U3VyeTBycEE1bGNpUVd5WUdLODl3VEdWYjZYYy9lWTMrWGNHSmpPOGdaNjJP?= =?utf-8?B?UkZleXU2aWZyWmFsazBqMEMrelVjYm1HeC8yZGdjRWc3TmhkUW5HUW9nSlRP?= =?utf-8?B?VzNkQVRKZ0xwVHVKNHJ3NXBhUUIva1FOaUlQcmwzd1N0VytLN2JOZHlXQ1VK?= =?utf-8?B?OXYzbjJwcUNJK2hIWEZFcE1VdzBYRHJUSWlmMHBlbDZTUUYrZHhJeFo5NTVW?= =?utf-8?B?d0RpYWRHWEUwTXNRZTlzT2d0dGp2WUowQ0lPVkhQeGZPNHdnOEVwTmpjZEw2?= =?utf-8?B?RmVNMUwrcWlESklaSlpiOHB3bGdNYVB4VVRsaHZuQWhHbnZ2Y2dxc3YvdVhs?= =?utf-8?B?d1lJajgvUFNRZExOM25SSU41VTRBVUtKbEFwZStiVUR6cGhCTk5selJaZlg1?= =?utf-8?B?YjMxaFdjYmJGNjNiUGljbWZPTjlURTFQNGFqU1RRQ1l5YkpNdW9YZFA4b3lx?= =?utf-8?Q?teGgKhNMiLvKMYP5l0mgn8c=3D?= MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MWHPR11MB1791.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e6e3fdd-5b25-48da-7019-08d9e4132537 X-MS-Exchange-CrossTenant-originalarrivaltime: 30 Jan 2022 17:08:32.3913 (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: H1CFBbQC4u8iiVdQniJ3HjNHN8kdpO7vj2k1s/I3Yv2+YReHw2Yyh552riwY0SjZf1hFOQp6sQ33P5U6uYB/9w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB2905 Return-Path: yi1.li@intel.com X-OriginatorOrg: intel.com Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgSmlld2VuDQpXaXRoIGJ1aWxkIGNtZCAnYnVpbGQgLXAgLlxFZGsyXENyeXB0b1BrZ1xDcnlw dG9Qa2cuZHNjIC10IFZTMjAxOSAtYSBYNjQgLUQgQ1JZUFRPX1NFUlZJQ0VTPUFMTCc6DQpDcnlw dER4ZS5lZmkgd2lsbCBiZSA4MTMsNTA0IGJ5dGVzIHdpdGhvdXQgQ3J5cHRCbjsNCndpbGwgYmUg ODE1LDA0MCBieXRlcyB3aXRoIENyeXB0Qm5OdWxsOw0Kd2lsbCBiZSA4MTUsMzYwIGJ5dGVzIHdp dGggQ3J5cHRCbjsNClRoaXMgcGF0Y2ggaGFzIGxpdHRsZSBlZmZlY3Qgb24gYmluYXJ5IHNpemUg c2luY2UgdGhlIGRlcGVuZGVudCBPcGVuc3NsIGxpYnJhcnkgaXMgYWxyZWFkeSBlbmFibGVkIGlu IEVESzIuDQpBbmQgQ3J5cHRCbk51bGwgY2FuIGFsc28gYmUgdXNlZCBpbiBkcml2ZXJzKHN1Y2gg cGVpLHNtbSkgd2hpY2ggZG8gbm90IG5lZWQgQm4gaW5zdGFuY2UuDQoNClRoYW5rcy4NCi0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpGcm9tOiBZYW8sIEppZXdlbiA8amlld2VuLnlhb0BpbnRl bC5jb20+IA0KU2VudDogU3VuZGF5LCBKYW51YXJ5IDMwLCAyMDIyIDg6MDQgQU0NClRvOiBMaSwg WWkxIDx5aTEubGlAaW50ZWwuY29tPg0KQ2M6IGRldmVsQGVkazIuZ3JvdXBzLmlvOyBXYW5nLCBK aWFuIEogPGppYW4uai53YW5nQGludGVsLmNvbT47IFhpYW95dSBMdSA8eGlhb3l1eC5sdUBpbnRl bC5jb20+OyBKaWFuZywgR3VvbWluIDxndW9taW4uamlhbmdAaW50ZWwuY29tPg0KU3ViamVjdDog UmU6IFtQQVRDSCAyLzJdIENyeXB0b1BrZzogQWRkIEJpZ051bSBOdWxsTGliDQoNCnRoYW5rIHlv dQ0Kc2luY2UgeW91IGFyZSB0YWxraW5nIGFib3V0IHNpemUgb3B0aW1pemF0aW9uLCB3b3VsZCB5 b3UgcGxlYXNlIHNoYXJlIHRoZSByZXN1bHQ/DQoNCnRoYW5rIHlvdSENCllhbywgSmlld2VuDQoN Cg0KPiDlnKggMjAyMuW5tDHmnIgzMOaXpe+8jOS4iuWNiDY6MTDvvIxMaSwgWWkxIDx5aTEubGlA aW50ZWwuY29tPiDlhpnpgZPvvJoNCj4gDQo+IO+7v1RoaXMgcGF0Y2ggaXMgdXNlZCB0byBhZGQg Q3J5cHRCbk51bGwgbGlicmFyeSwgd2hpY2ggaXMgdXNlZCB0byANCj4gb3B0aW1pemUgY29kZSBz aXplLg0KPiANCj4gU2lnbmVkLW9mZi1ieTogeWkxIGxpIDx5aTEubGlAaW50ZWwuY29tPg0KPiAN Cj4gQ2M6IEppZXdlbiBZYW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiBDYzogSmlhbiBKIFdh bmcgPGppYW4uai53YW5nQGludGVsLmNvbT4NCj4gQ2M6IFhpYW95dSBMdSA8eGlhb3l1eC5sdUBp bnRlbC5jb20+DQo+IENjOiBHdW9taW4gSmlhbmcgPGd1b21pbi5qaWFuZ0BpbnRlbC5jb20+DQo+ IC0tLQ0KPiAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvQm4vQ3J5cHRCbk51bGwuYyAgICAgfCA1 MjUgKysrKysrKysrKysrKysrKysrDQo+IC4uLi9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlw dExpYi5pbmYgICAgICB8ICAgMiArLQ0KPiAuLi4vTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5 cHRMaWIuaW5mICAgICAgfCAgIDIgKy0NCj4gLi4uL0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0 TGliTnVsbC5pbmYgICAgIHwgICAxICsNCj4gLi4uL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9C bi9DcnlwdEJuTnVsbC5jIHwgNTI1ICsrKysrKysrKysrKysrKysrKw0KPiA1IGZpbGVzIGNoYW5n ZWQsIDEwNTMgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkgY3JlYXRlIG1vZGUgMTAwNjQ0 IA0KPiBDcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQm4vQ3J5cHRCbk51bGwuYw0KPiBj cmVhdGUgbW9kZSAxMDA2NDQgQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9Cbi9D cnlwdEJuTnVsbC5jDQo+IA0KPiBkaWZmIC0tZ2l0IGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNy eXB0TGliL0JuL0NyeXB0Qm5OdWxsLmMgDQo+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0 TGliL0JuL0NyeXB0Qm5OdWxsLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDAw MDAwMDAwMDAwLi45ZjIyMGJhNDEwNTgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9DcnlwdG9Q a2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvQm4vQ3J5cHRCbk51bGwuYw0KPiBAQCAtMCwwICsxLDUy NSBAQA0KPiArLyoqIEBmaWxlDQo+ICsgIEJpZyBudW1iZXIgQVBJIGltcGxlbWVudGF0aW9uIGJh c2VkIG9uIE9wZW5TU0wNCj4gKw0KPiArICBDb3B5cmlnaHQgKGMpIDIwMjIsIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLjxCUj4NCj4gKyAgU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCj4gKw0KPiArKiovDQo+ICsNCj4gKyNpbmNsdWRl IDxMaWJyYXJ5L0Jhc2VDcnlwdExpYi5oPg0KPiArI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIu aD4NCj4gKw0KPiArLyoqDQo+ICsgIEFsbG9jYXRlIG5ldyBCaWcgTnVtYmVyLg0KPiArDQo+ICsg IEByZXR2YWwgTmV3IEJpZ051bSBvcGFxdWUgc3RydWN0dXJlIG9yIE5VTEwgb24gZmFpbHVyZS4N Cj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0JpZ051bUluaXQgKA0KPiArICBWT0lE DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQWxsb2NhdGUgbmV3IEJpZyBOdW1iZXIgYW5kIGFzc2ln biB0aGUgcHJvdmlkZWQgdmFsdWUgdG8gaXQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJ1ZiAg ICBCaWcgZW5kaWFuIGVuY29kZWQgYnVmZmVyLg0KPiArICBAcGFyYW1baW5dICAgTGVuICAgIEJ1 ZmZlciBsZW5ndGguDQo+ICsNCj4gKyAgQHJldHZhbCBOZXcgQmlnTnVtIG9wYXF1ZSBzdHJ1Y3R1 cmUgb3IgTlVMTCBvbiBmYWlsdXJlLg0KPiArKiovDQo+ICtWT0lEICoNCj4gK0VGSUFQSQ0KPiAr QmlnTnVtRnJvbUJpbiAoDQo+ICsgIElOIENPTlNUIFVJTlQ4ICAqQnVmLA0KPiArICBJTiBVSU5U TiAgICAgICAgTGVuDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJl dHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29udmVydCB0aGUgYWJzb2x1dGUg dmFsdWUgb2YgQm4gaW50byBiaWctZW5kaWFuIGZvcm0gYW5kIHN0b3JlIGl0IGF0IEJ1Zi4NCj4g KyAgVGhlIEJ1ZiBhcnJheSBzaG91bGQgaGF2ZSBhdCBsZWFzdCBCaWdOdW1CeXRlcygpIGluIGl0 Lg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlciB0byBjb252ZXJ0Lg0K PiArICBAcGFyYW1bb3V0XSAgQnVmICAgIE91dHB1dCBidWZmZXIuDQo+ICsNCj4gKyAgQHJldHZh bCBUaGUgbGVuZ3RoIG9mIHRoZSBiaWctZW5kaWFuIG51bWJlciBwbGFjZWQgYXQgQnVmIG9yIC0x IG9uIGVycm9yLg0KPiArKiovDQo+ICtJTlRODQo+ICtFRklBUEkNCj4gK0JpZ051bVRvQmluICgN Cj4gKyAgSU4gVk9JRCAgICAqQm4sDQo+ICsgIE9VVCBVSU5UOCAgKkJ1Zg0KPiArICApDQo+ICt7 DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gLTE7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBGcmVlIHRoZSBCaWcgTnVtYmVyLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbiAg ICAgIEJpZyBudW1iZXIgdG8gZnJlZS4NCj4gKyAgQHBhcmFtW2luXSAgIENsZWFyICAgVFJVRSBp ZiB0aGUgYnVmZmVyIHNob3VsZCBiZSBjbGVhcmVkLg0KPiArKiovDQo+ICtWT0lEDQo+ICtFRklB UEkNCj4gK0JpZ051bUZyZWUgKA0KPiArICBJTiBWT0lEICAgICAqQm4sDQo+ICsgIElOIEJPT0xF QU4gIENsZWFyDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBDYWxjdWxhdGUgdGhlIHN1bSBvZiB0d28gQmlnIE51bWJlcnMuDQo+ICsg IFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHBy b3Blcmx5IA0KPiAraW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkg b3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5B ICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcgbnVtYmVyLg0K PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0IG9mIEJuQSArIEJuQi4NCj4gKw0K PiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2 YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVT DQo+ICtFRklBUEkNCj4gK0JpZ051bUFkZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ ICsgIElOIENPTlNUIFZPSUQgICpCbkIsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPiAr ICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9S VEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU3VidHJhY3QgdHdvIEJpZyBOdW1iZXJzLg0K PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBi ZSBwcm9wZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5p dCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg IEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAgQmlnIG51bWJl ci4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCBvZiBCbkEgLSBCbkIuDQo+ ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBA cmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJX1NU QVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1TdWIgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5B LA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5CLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMN Cj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNV UFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENhbGN1bGF0ZSByZW1haW5kZXI6IEJu UmVzID0gQm5BICUgQm5CLg0KPiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIg YXJndW1lbnRzIHNob3VsZCBiZSBwcm9wZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNh bGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAg IEJuQiAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3Vs dCBvZiBCbkEgJSBCbkIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBP biBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2Yg aW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xf RVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiAr QmlnTnVtTW9kICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwNCj4gKyAgSU4gQ09OU1QgVk9J RCAgKkJuQiwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4gKyAg QVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBDb21wdXRlIEJuQSB0byB0aGUgQm5QLXRoIHBvd2VyIG1vZHVsbyBCbk0u DQo+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxk IGJlIHByb3Blcmx5IGluaXRpYWxpemVkLg0KPiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQo KSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBC bkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCblAgICAgIEJpZyBudW1iZXIg KHBvd2VyKS4NCj4gKyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAobW9kdWxvKS4N Cj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCBvZiAoQm5BIF4gQm5QKSAlIEJu TS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxv Y2F0aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVy d2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1FeHBNb2Qg KA0KPiArICBJTiBWT0lEICAgKkJuQSwNCj4gKyAgSU4gVk9JRCAgICpCblAsDQo+ICsgIElOIFZP SUQgICAqQm5NLA0KPiArICBPVVQgVk9JRCAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNT RVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsNCj4g Ky8qKg0KPiArICBDb21wdXRlIEJuQSBpbnZlcnNlIG1vZHVsbyBCbk0uDQo+ICsgIFBsZWFzZSBu b3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IA0K PiAraW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVt RnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcg bnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0K PiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSAqIEJu UmVzKSAlIEJuTSA9PSAxLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg T24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9m IGludGVybmFsIGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09M X0VSUk9SICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4g K0JpZ051bUludmVyc2VNb2QgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBD T05TVCBWT0lEICAqQm5NLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiAr ew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIERpdmlkZSB0d28gQmlnIE51bWJlcnMuDQo+ICsgIFBsZWFz ZSBub3RlLCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5 IA0KPiAraW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmln TnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBC aWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8p Lg0KPiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgQm5BIC8g Qm5CLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFs bG9jYXRpb24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3Ro ZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bURpdiAo DQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+ ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFM U0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4g KyAgTXVsdGlwbHkgdHdvIEJpZyBOdW1iZXJzIG1vZHVsbyBCbk0uDQo+ICsgIFBsZWFzZSBub3Rl LCBhbGwgIm91dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IA0KPiAr aW5pdGlhbGl6ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJv bUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVt YmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5CICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1b aW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1bb3V0XSAgQm5S ZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSAqIEJuQikgJSBCbk0uDQo+ICsNCj4gKyAg QHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJl cy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtTXVsTW9kICgNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkJuQSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkJuTSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4g KyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ ICsNCj4gKy8qKg0KPiArICBDb21wYXJlIHR3byBCaWcgTnVtYmVycy4NCj4gKw0KPiArICBAcGFy YW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5CICAgICBC aWcgbnVtYmVyLg0KPiArDQo+ICsgIEByZXR2YWwgMCAgICAgICAgICBCbkEgPT0gQm5CLg0KPiAr ICBAcmV0dmFsIDEgICAgICAgICAgQm5BID4gQm5CLg0KPiArICBAcmV0dmFsIC0xICAgICAgICAg Qm5BIDwgQm5CLg0KPiArKiovDQo+ICtJTlRODQo+ICtFRklBUEkNCj4gK0JpZ051bUNtcCAoDQo+ ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkINCj4gKyAg KQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBHZXQgbnVtYmVyIG9mIGJpdHMgaW4gQm4uDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgIEJuICAgICBCaWcgbnVtYmVyLg0KPiArDQo+ICsgIEByZXR2YWwgTnVtYmVyIG9mIGJp dHMuDQo+ICsqKi8NCj4gK1VJTlRODQo+ICtFRklBUEkNCj4gK0JpZ051bUJpdHMgKA0KPiArICBJ TiBDT05TVCBWT0lEICAqQm4NCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4g KyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgbnVtYmVyIG9mIGJ5dGVz IGluIEJuLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4gKw0K PiArICBAcmV0dmFsIE51bWJlciBvZiBieXRlcy4NCj4gKyoqLw0KPiArVUlOVE4NCj4gK0VGSUFQ SQ0KPiArQmlnTnVtQnl0ZXMgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm4NCj4gKyAgKQ0KPiAr ew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gKy8q Kg0KPiArICBDaGVja3MgaWYgQmlnIE51bWJlciBlcXVhbHMgdG8gdGhlIGdpdmVuIE51bS4NCj4g Kw0KPiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0g ICBOdW0gICAgTnVtYmVyLg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIGlmZiBCbiA9PSBOdW0u DQo+ICsgIEByZXR2YWwgRkFMU0UgIG90aGVyd2lzZS4NCj4gKyoqLw0KPiArQk9PTEVBTg0KPiAr RUZJQVBJDQo+ICtCaWdOdW1Jc1dvcmQgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm4sDQo+ICsg IElOIFVJTlROICAgICAgIE51bQ0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gRkFMU0U7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDaGVja3MgaWYgQmln IE51bWJlciBpcyBvZGQuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcgbnVtYmVy Lg0KPiArDQo+ICsgIEByZXR2YWwgVFJVRSAgIEJuIGlzIG9kZCAoQm4gJSAyID09IDEpLg0KPiAr ICBAcmV0dmFsIEZBTFNFICBvdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JPT0xFQU4NCj4gK0VGSUFQ SQ0KPiArQmlnTnVtSXNPZGQgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm4NCj4gKyAgKQ0KPiAr ew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ ICsvKioNCj4gKyAgQ29weSBCaWcgbnVtYmVyLg0KPiArDQo+ICsgIEBwYXJhbVtvdXRdICBCbkRz dCAgICAgRGVzdGluYXRpb24uDQo+ICsgIEBwYXJhbVtpbl0gICBCblNyYyAgICAgU291cmNlLg0K PiArDQo+ICsgIEByZXR2YWwgQm5Ec3Qgb24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBOVUxMIG90 aGVyd2lzZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0JpZ051bUNvcHkgKA0K PiArICBPVVQgVk9JRCAgICAgICAqQm5Ec3QsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCblNyYw0K PiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gTlVMTDsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIEdldCBjb25zdGFudCBCaWcgbnVtYmVyIHdpdGggdmFsdWUg b2YgIjEiLg0KPiArICBUaGlzIG1heSBiZSB1c2VkIHRvIHNhdmUgZXhwZW5zaXZlIGFsbG9jYXRp b25zLg0KPiArDQo+ICsgIEByZXR2YWwgQmlnIE51bWJlciB3aXRoIHZhbHVlIG9mIDEuDQo+ICsq Ki8NCj4gK0NPTlNUIFZPSUQgKg0KPiArRUZJQVBJDQo+ICtCaWdOdW1WYWx1ZU9uZSAoDQo+ICsg IFZPSUQNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIE5V TEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBTaGlmdCByaWdodCBCaWcgTnVtYmVyLg0KPiAr ICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBw cm9wZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgp IG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJu ICAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIG4gICAgICAgTnVtYmVyIG9mIGJp dHMgdG8gc2hpZnQuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQuDQo+ICsN Cj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBm YWlsdXJlcy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtUlNoaWZ0ICgNCj4gKyAg SU4gQ09OU1QgVk9JRCAgKkJuLA0KPiArICBJTiBVSU5UTiAgICAgICBuLA0KPiArICBPVVQgVk9J RCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAg cmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIE1hcmsgQmln IE51bWJlciBmb3IgY29uc3RhbnQgdGltZSBjb21wdXRhdGlvbnMuDQo+ICsgIFRoaXMgZnVuY3Rp b24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IGNvbnN0YW50IHRpbWUgDQo+ICtjb21wdXRh dGlvbnMgYXJlDQo+ICsgIHBlcmZvcm1lZCBvbiB0aGUgZ2l2ZW4gQmlnIG51bWJlci4NCj4gKw0K PiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIuDQo+ICsqKi8NCj4gK1ZPSUQNCj4g K0VGSUFQSQ0KPiArQmlnTnVtQ29uc3R0aW1lICgNCj4gKyAgSU4gVk9JRCAgKkJuDQo+ICsgICkN Cj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDYWxj dWxhdGUgc3F1YXJlIG1vZHVsby4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVt YmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkgDQo+ICtpbml0aWFsaXplZA0KPiArICBi eSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0K PiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtp bl0gICBCbk0gICAgIEJpZyBudW1iZXIgKG1vZHVsbykuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJl cyAgIFRoZSByZXN1bHQsIHN1Y2ggdGhhdCAoQm5BIF4gMikgJSBCbk0uDQo+ICsNCj4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9P VVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4N Cj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4g K0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtU3FyTW9kICgNCj4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkJuQSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuTSwNCj4gKyAgT1VUIFZPSUQgICAg ICAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDcmVhdGUgbmV3IEJp ZyBOdW1iZXIgY29tcHV0YXRpb24gY29udGV4dC4gVGhpcyBpcyBhbiBvcGFxdWUgDQo+ICtzdHJ1 Y3R1cmUNCj4gKyAgd2hpY2ggc2hvdWxkIGJlIHBhc3NlZCB0byBhbnkgZnVuY3Rpb24gdGhhdCBy ZXF1aXJlcyBpdC4gVGhlIEJOIA0KPiArY29udGV4dCBpcw0KPiArICBuZWVkZWQgdG8gb3B0aW1p emUgY2FsY3VsYXRpb25zIGFuZCBleHBlbnNpdmUgYWxsb2NhdGlvbnMuDQo+ICsNCj4gKyAgQHJl dHZhbCBCaWcgTnVtYmVyIGNvbnRleHQgc3RydWN0IG9yIE5VTEwgb24gZmFpbHVyZS4NCj4gKyoq Lw0KPiArVk9JRCAqDQo+ICtFRklBUEkNCj4gK0JpZ051bU5ld0NvbnRleHQgKA0KPiArICBWT0lE DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBOVUxMOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgRnJlZSBCaWcgTnVtYmVyIGNvbnRleHQgdGhhdCB3YXMg YWxsb2NhdGVkIHdpdGggQmlnTnVtTmV3Q29udGV4dCgpLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0g ICBCbkN0eCAgICAgQmlnIG51bWJlciBjb250ZXh0IHRvIGZyZWUuDQo+ICsqKi8NCj4gK1ZPSUQN Cj4gK0VGSUFQSQ0KPiArQmlnTnVtQ29udGV4dEZyZWUgKA0KPiArICBJTiBWT0lEICAqQm5DdHgN Cj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gK30NCj4gKw0KPiArLyoqDQo+ ICsgIFNldCBCaWcgTnVtYmVyIHRvIGEgZ2l2ZW4gdmFsdWUuDQo+ICsNCj4gKyAgQHBhcmFtW2lu XSAgIEJuICAgICBCaWcgbnVtYmVyIHRvIHNldC4NCj4gKyAgQHBhcmFtW2luXSAgIFZhbCAgICBW YWx1ZSB0byBzZXQuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVt U2V0VWludCAoDQo+ICsgIElOIFZPSUQgICAqQm4sDQo+ICsgIElOIFVJTlROICBWYWwNCj4gKyAg KQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRF RDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEFkZCB0d28gQmlnIE51bWJlcnMgbW9kdWxvIEJu TS4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBw YXJhbVtpbl0gICBCbkIgICAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuTSAg ICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICAgIFRo ZSByZXN1bHQsIHN1Y2ggdGhhdCAoQm5BICsgQm5CKSAlIEJuTS4NCj4gKw0KPiArICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9P Rl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiAr ICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJ X1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1BZGRNb2QgKA0KPiArICBJTiBDT05TVCBWT0lE ICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5CLA0KPiArICBJTiBDT05TVCBWT0lEICAq Qm5NLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NF UlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gZGlmZiAt LWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYi9QZWlDcnlwdExpYi5pbmYgDQo+ IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0KPiBpbmRl eCA3NWQ4N2FmYmRjMDMuLmQwODBlNjY1YzIxOCAxMDA2NDQNCj4gLS0tIGEvQ3J5cHRvUGtnL0xp YnJhcnkvQmFzZUNyeXB0TGliL1BlaUNyeXB0TGliLmluZg0KPiArKysgYi9DcnlwdG9Qa2cvTGli cmFyeS9CYXNlQ3J5cHRMaWIvUGVpQ3J5cHRMaWIuaW5mDQo+IEBAIC01OSw3ICs1OSw3IEBADQo+ ICAgUGsvQ3J5cHRSc2FQc3NTaWduTnVsbC5jDQo+ICAgUGVtL0NyeXB0UGVtTnVsbC5jDQo+ICAg UmFuZC9DcnlwdFJhbmROdWxsLmMNCj4gLSAgQm4vQ3J5cHRCbi5jDQo+ICsgIEJuL0NyeXB0Qm5O dWxsLmMNCj4gDQo+ICAgU3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gICBTeXNDYWxsL0NvbnN0YW50 VGltZUNsb2NrLmMNCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExp Yi9TbW1DcnlwdExpYi5pbmYgDQo+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1Nt bUNyeXB0TGliLmluZg0KPiBpbmRleCA0MjBjZWY4OGVmYjEuLjhhM2ZlYzliMDc2YyAxMDA2NDQN Cj4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliL1NtbUNyeXB0TGliLmluZg0K PiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWIvU21tQ3J5cHRMaWIuaW5mDQo+ IEBAIC01Niw3ICs1Niw3IEBADQo+ICAgUGsvQ3J5cHRSc2FQc3MuYw0KPiAgIFBrL0NyeXB0UnNh UHNzU2lnbk51bGwuYw0KPiAgIFBlbS9DcnlwdFBlbS5jDQo+IC0gIEJuL0NyeXB0Qm4uYw0KPiAr ICBCbi9DcnlwdEJuTnVsbC5jDQo+ICAgU3lzQ2FsbC9DcnRXcmFwcGVyLmMNCj4gICBTeXNDYWxs L0NvbnN0YW50VGltZUNsb2NrLmMNCj4gICBTeXNDYWxsL0Jhc2VNZW1BbGxvY2F0aW9uLmMNCj4g ZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlwdExpYk51bGwvQmFzZUNyeXB0 TGliTnVsbC5pbmYgDQo+IGIvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNl Q3J5cHRMaWJOdWxsLmluZg0KPiBpbmRleCBmYWY5NTk4MjdiOTAuLjFmYjRkNWM1NGQ0ZiAxMDA2 NDQNCj4gLS0tIGEvQ3J5cHRvUGtnL0xpYnJhcnkvQmFzZUNyeXB0TGliTnVsbC9CYXNlQ3J5cHRM aWJOdWxsLmluZg0KPiArKysgYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0Jh c2VDcnlwdExpYk51bGwuaW5mDQo+IEBAIC01Miw2ICs1Miw3IEBADQo+ICAgUmFuZC9DcnlwdFJh bmROdWxsLmMNCj4gICBQay9DcnlwdFJzYVBzc051bGwuYw0KPiAgIFBrL0NyeXB0UnNhUHNzU2ln bk51bGwuYw0KPiArICBCbi9DcnlwdEJuTnVsbC5jDQo+IA0KPiBbUGFja2FnZXNdDQo+ICAgTWRl UGtnL01kZVBrZy5kZWMNCj4gZGlmZiAtLWdpdCBhL0NyeXB0b1BrZy9MaWJyYXJ5L0Jhc2VDcnlw dExpYk51bGwvQm4vQ3J5cHRCbk51bGwuYyANCj4gYi9DcnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5 cHRMaWJOdWxsL0JuL0NyeXB0Qm5OdWxsLmMNCj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5k ZXggMDAwMDAwMDAwMDAwLi45ZjIyMGJhNDEwNTgNCj4gLS0tIC9kZXYvbnVsbA0KPiArKysgYi9D cnlwdG9Qa2cvTGlicmFyeS9CYXNlQ3J5cHRMaWJOdWxsL0JuL0NyeXB0Qm5OdWxsLmMNCj4gQEAg LTAsMCArMSw1MjUgQEANCj4gKy8qKiBAZmlsZQ0KPiArICBCaWcgbnVtYmVyIEFQSSBpbXBsZW1l bnRhdGlvbiBiYXNlZCBvbiBPcGVuU1NMDQo+ICsNCj4gKyAgQ29weXJpZ2h0IChjKSAyMDIyLCBJ bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC48QlI+DQo+ICsgIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ICsNCj4gKyoqLw0KPiArDQo+ ICsjaW5jbHVkZSA8TGlicmFyeS9CYXNlQ3J5cHRMaWIuaD4NCj4gKyNpbmNsdWRlIDxMaWJyYXJ5 L0RlYnVnTGliLmg+DQo+ICsNCj4gKy8qKg0KPiArICBBbGxvY2F0ZSBuZXcgQmlnIE51bWJlci4N Cj4gKw0KPiArICBAcmV0dmFsIE5ldyBCaWdOdW0gb3BhcXVlIHN0cnVjdHVyZSBvciBOVUxMIG9u IGZhaWx1cmUuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtCaWdOdW1Jbml0ICgN Cj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1 cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEFsbG9jYXRlIG5ldyBCaWcgTnVtYmVy IGFuZCBhc3NpZ24gdGhlIHByb3ZpZGVkIHZhbHVlIHRvIGl0Lg0KPiArDQo+ICsgIEBwYXJhbVtp bl0gICBCdWYgICAgQmlnIGVuZGlhbiBlbmNvZGVkIGJ1ZmZlci4NCj4gKyAgQHBhcmFtW2luXSAg IExlbiAgICBCdWZmZXIgbGVuZ3RoLg0KPiArDQo+ICsgIEByZXR2YWwgTmV3IEJpZ051bSBvcGFx dWUgc3RydWN0dXJlIG9yIE5VTEwgb24gZmFpbHVyZS4NCj4gKyoqLw0KPiArVk9JRCAqDQo+ICtF RklBUEkNCj4gK0JpZ051bUZyb21CaW4gKA0KPiArICBJTiBDT05TVCBVSU5UOCAgKkJ1ZiwNCj4g KyAgSU4gVUlOVE4gICAgICAgIExlbg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0Up Ow0KPiArICByZXR1cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIENvbnZlcnQgdGhl IGFic29sdXRlIHZhbHVlIG9mIEJuIGludG8gYmlnLWVuZGlhbiBmb3JtIGFuZCBzdG9yZSBpdCBh dCBCdWYuDQo+ICsgIFRoZSBCdWYgYXJyYXkgc2hvdWxkIGhhdmUgYXQgbGVhc3QgQmlnTnVtQnl0 ZXMoKSBpbiBpdC4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1iZXIgdG8g Y29udmVydC4NCj4gKyAgQHBhcmFtW291dF0gIEJ1ZiAgICBPdXRwdXQgYnVmZmVyLg0KPiArDQo+ ICsgIEByZXR2YWwgVGhlIGxlbmd0aCBvZiB0aGUgYmlnLWVuZGlhbiBudW1iZXIgcGxhY2VkIGF0 IEJ1ZiBvciAtMSBvbiBlcnJvci4NCj4gKyoqLw0KPiArSU5UTg0KPiArRUZJQVBJDQo+ICtCaWdO dW1Ub0JpbiAoDQo+ICsgIElOIFZPSUQgICAgKkJuLA0KPiArICBPVVQgVUlOVDggICpCdWYNCj4g KyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIC0xOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgRnJlZSB0aGUgQmlnIE51bWJlci4NCj4gKw0KPiArICBAcGFyYW1b aW5dICAgQm4gICAgICBCaWcgbnVtYmVyIHRvIGZyZWUuDQo+ICsgIEBwYXJhbVtpbl0gICBDbGVh ciAgIFRSVUUgaWYgdGhlIGJ1ZmZlciBzaG91bGQgYmUgY2xlYXJlZC4NCj4gKyoqLw0KPiArVk9J RA0KPiArRUZJQVBJDQo+ICtCaWdOdW1GcmVlICgNCj4gKyAgSU4gVk9JRCAgICAgKkJuLA0KPiAr ICBJTiBCT09MRUFOICBDbGVhcg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2FsY3VsYXRlIHRoZSBzdW0gb2YgdHdvIEJpZyBOdW1i ZXJzLg0KPiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNo b3VsZCBiZSBwcm9wZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmln TnVtSW5pdCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFt W2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAgQmln IG51bWJlci4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCBvZiBCbkEgKyBC bkIuDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0K PiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiAr RUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtCaWdOdW1BZGQgKA0KPiArICBJTiBDT05TVCBWT0lE ICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5CLA0KPiArICBPVVQgVk9JRCAgICAgICAq Qm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVG SV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIFN1YnRyYWN0IHR3byBCaWcg TnVtYmVycy4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50 cyBzaG91bGQgYmUgcHJvcGVybHkgDQo+ICtpbml0aWFsaXplZA0KPiArICBieSBjYWxsaW5nIHRv IEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsgIEBw YXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBCbkIgICAg IEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgQm5B IC0gQm5CLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vz cy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsqKi8N Cj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtU3ViICgNCj4gKyAgSU4gQ09OU1Qg Vk9JRCAgKkJuQSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4gKyAgT1VUIFZPSUQgICAg ICAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVy biBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBDYWxjdWxhdGUgcmVt YWluZGVyOiBCblJlcyA9IEJuQSAlIEJuQi4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBC aWcgbnVtYmVyIGFyZ3VtZW50cyBzaG91bGQgYmUgcHJvcGVybHkgDQo+ICtpbml0aWFsaXplZA0K PiArICBieSBjYWxsaW5nIHRvIEJpZ051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rp b25zLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbkEgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBw YXJhbVtpbl0gICBCbkIgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAg IFRoZSByZXN1bHQgb2YgQm5BICUgQm5CLg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1Mg ICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJ biBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRpb24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJ X1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtF RklBUEkNCj4gK0JpZ051bU1vZCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElO IENPTlNUIFZPSUQgICpCbkIsDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29tcHV0ZSBCbkEgdG8gdGhlIEJuUC10aCBwb3dlciBt b2R1bG8gQm5NLg0KPiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1l bnRzIHNob3VsZCBiZSBwcm9wZXJseSBpbml0aWFsaXplZC4NCj4gKyAgYnkgY2FsbGluZyB0byBC aWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1bmN0aW9ucy4NCj4gKw0KPiArICBAcGFy YW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiArICBAcGFyYW1baW5dICAgQm5QICAgICBC aWcgbnVtYmVyIChwb3dlcikuDQo+ICsgIEBwYXJhbVtpbl0gICBCbk0gICAgIEJpZyBudW1iZXIg KG1vZHVsbykuDQo+ICsgIEBwYXJhbVtvdXRdICBCblJlcyAgIFRoZSByZXN1bHQgb2YgKEJuQSBe IEJuUCkgJSBCbk0uDQo+ICsNCj4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBz dWNjZXNzLg0KPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50 ZXJuYWwgYWxsb2NhdGlvbiBmYWlsdXJlcy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJS T1IgICBPdGhlcndpc2UuDQo+ICsqKi8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmln TnVtRXhwTW9kICgNCj4gKyAgSU4gVk9JRCAgICpCbkEsDQo+ICsgIElOIFZPSUQgICAqQm5QLA0K PiArICBJTiBWT0lEICAgKkJuTSwNCj4gKyAgT1VUIFZPSUQgICpCblJlcw0KPiArICApDQo+ICt7 DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiAr fQ0KPiArDQo+ICsvKioNCj4gKyAgQ29tcHV0ZSBCbkEgaW52ZXJzZSBtb2R1bG8gQm5NLg0KPiAr ICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBw cm9wZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgp IG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJu QSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAo bW9kdWxvKS4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0 IChCbkEgKiBCblJlcykgJSBCbk0gPT0gMS4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNT ICAgICAgICAgIE9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg SW4gY2FzZSBvZiBpbnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVG SV9QUk9UT0NPTF9FUlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiAr RUZJQVBJDQo+ICtCaWdOdW1JbnZlcnNlTW9kICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQSwN Cj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuTSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQ T1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBEaXZpZGUgdHdvIEJpZyBOdW1iZXJzLg0K PiArICBQbGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBi ZSBwcm9wZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5p dCgpIG9yIEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAg IEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJl ciAobW9kdWxvKS4NCj4gKyAgQHBhcmFtW291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0 aGF0IEJuQSAvIEJuQi4NCj4gKw0KPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgIE9u IHN1Y2Nlc3MuDQo+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgSW4gY2FzZSBvZiBp bnRlcm5hbCBhbGxvY2F0aW9uIGZhaWx1cmVzLg0KPiArICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9F UlJPUiAgIE90aGVyd2lzZS4NCj4gKyoqLw0KPiArRUZJX1NUQVRVUw0KPiArRUZJQVBJDQo+ICtC aWdOdW1EaXYgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lE ICAqQm5NLA0KPiArICBPVVQgVk9JRCAgICAgICAqQm5SZXMNCj4gKyAgKQ0KPiArew0KPiArICBB U1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gK30NCj4gKw0K PiArLyoqDQo+ICsgIE11bHRpcGx5IHR3byBCaWcgTnVtYmVycyBtb2R1bG8gQm5NLg0KPiArICBQ bGVhc2Ugbm90ZSwgYWxsICJvdXQiIEJpZyBudW1iZXIgYXJndW1lbnRzIHNob3VsZCBiZSBwcm9w ZXJseSANCj4gK2luaXRpYWxpemVkDQo+ICsgIGJ5IGNhbGxpbmcgdG8gQmlnTnVtSW5pdCgpIG9y IEJpZ051bUZyb21CaW4oKSBmdW5jdGlvbnMuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAg ICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAgIEJuQiAgICAgQmlnIG51bWJlci4NCj4g KyAgQHBhcmFtW2luXSAgIEJuTSAgICAgQmlnIG51bWJlciAobW9kdWxvKS4NCj4gKyAgQHBhcmFt W291dF0gIEJuUmVzICAgVGhlIHJlc3VsdCwgc3VjaCB0aGF0IChCbkEgKiBCbkIpICUgQm5NLg0K PiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAg QHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRp b24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNl Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bU11bE1vZCAoDQo+ ICsgIElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbkIsDQo+ICsg IElOIENPTlNUIFZPSUQgICpCbk0sDQo+ICsgIE9VVCBWT0lEICAgICAgICpCblJlcw0KPiArICAp DQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVE Ow0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ29tcGFyZSB0d28gQmlnIE51bWJlcnMuDQo+ICsN Cj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgQmlnIG51bWJlci4NCj4gKyAgQHBhcmFtW2luXSAg IEJuQiAgICAgQmlnIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIDAgICAgICAgICAgQm5BID09 IEJuQi4NCj4gKyAgQHJldHZhbCAxICAgICAgICAgIEJuQSA+IEJuQi4NCj4gKyAgQHJldHZhbCAt MSAgICAgICAgIEJuQSA8IEJuQi4NCj4gKyoqLw0KPiArSU5UTg0KPiArRUZJQVBJDQo+ICtCaWdO dW1DbXAgKA0KPiArICBJTiBDT05TVCBWT0lEICAqQm5BLA0KPiArICBJTiBDT05TVCBWT0lEICAq Qm5CDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0K PiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IG51bWJlciBvZiBiaXRzIGluIEJuLg0KPiArDQo+ ICsgIEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIE51 bWJlciBvZiBiaXRzLg0KPiArKiovDQo+ICtVSU5UTg0KPiArRUZJQVBJDQo+ICtCaWdOdW1CaXRz ICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChG QUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgR2V0IG51bWJl ciBvZiBieXRlcyBpbiBCbi4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm4gICAgIEJpZyBudW1i ZXIuDQo+ICsNCj4gKyAgQHJldHZhbCBOdW1iZXIgb2YgYnl0ZXMuDQo+ICsqKi8NCj4gK1VJTlRO DQo+ICtFRklBUEkNCj4gK0JpZ051bUJ5dGVzICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuDQo+ ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiAwOw0KPiArfQ0K PiArDQo+ICsvKioNCj4gKyAgQ2hlY2tzIGlmIEJpZyBOdW1iZXIgZXF1YWxzIHRvIHRoZSBnaXZl biBOdW0uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcgbnVtYmVyLg0KPiArICBA cGFyYW1baW5dICAgTnVtICAgIE51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBpZmYg Qm4gPT0gTnVtLg0KPiArICBAcmV0dmFsIEZBTFNFICBvdGhlcndpc2UuDQo+ICsqKi8NCj4gK0JP T0xFQU4NCj4gK0VGSUFQSQ0KPiArQmlnTnVtSXNXb3JkICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAg KkJuLA0KPiArICBJTiBVSU5UTiAgICAgICBOdW0NCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQg KEZBTFNFKTsNCj4gKyAgcmV0dXJuIEZBTFNFOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ2hl Y2tzIGlmIEJpZyBOdW1iZXIgaXMgb2RkLg0KPiArDQo+ICsgIEBwYXJhbVtpbl0gICBCbiAgICAg QmlnIG51bWJlci4NCj4gKw0KPiArICBAcmV0dmFsIFRSVUUgICBCbiBpcyBvZGQgKEJuICUgMiA9 PSAxKS4NCj4gKyAgQHJldHZhbCBGQUxTRSAgb3RoZXJ3aXNlLg0KPiArKiovDQo+ICtCT09MRUFO DQo+ICtFRklBUEkNCj4gK0JpZ051bUlzT2RkICgNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuDQo+ ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBGQUxTRTsNCj4g K30NCj4gKw0KPiArLyoqDQo+ICsgIENvcHkgQmlnIG51bWJlci4NCj4gKw0KPiArICBAcGFyYW1b b3V0XSAgQm5Ec3QgICAgIERlc3RpbmF0aW9uLg0KPiArICBAcGFyYW1baW5dICAgQm5TcmMgICAg IFNvdXJjZS4NCj4gKw0KPiArICBAcmV0dmFsIEJuRHN0IG9uIHN1Y2Nlc3MuDQo+ICsgIEByZXR2 YWwgTlVMTCBvdGhlcndpc2UuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtCaWdO dW1Db3B5ICgNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuRHN0LA0KPiArICBJTiBDT05TVCBWT0lE ICAqQm5TcmMNCj4gKyAgKQ0KPiArew0KPiArICBBU1NFUlQgKEZBTFNFKTsNCj4gKyAgcmV0dXJu IE5VTEw7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBHZXQgY29uc3RhbnQgQmlnIG51bWJlciB3 aXRoIHZhbHVlIG9mICIxIi4NCj4gKyAgVGhpcyBtYXkgYmUgdXNlZCB0byBzYXZlIGV4cGVuc2l2 ZSBhbGxvY2F0aW9ucy4NCj4gKw0KPiArICBAcmV0dmFsIEJpZyBOdW1iZXIgd2l0aCB2YWx1ZSBv ZiAxLg0KPiArKiovDQo+ICtDT05TVCBWT0lEICoNCj4gK0VGSUFQSQ0KPiArQmlnTnVtVmFsdWVP bmUgKA0KPiArICBWT0lEDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsg IHJldHVybiBOVUxMOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgU2hpZnQgcmlnaHQgQmlnIE51 bWJlci4NCj4gKyAgUGxlYXNlIG5vdGUsIGFsbCAib3V0IiBCaWcgbnVtYmVyIGFyZ3VtZW50cyBz aG91bGQgYmUgcHJvcGVybHkgDQo+ICtpbml0aWFsaXplZA0KPiArICBieSBjYWxsaW5nIHRvIEJp Z051bUluaXQoKSBvciBCaWdOdW1Gcm9tQmluKCkgZnVuY3Rpb25zLg0KPiArDQo+ICsgIEBwYXJh bVtpbl0gICBCbiAgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtpbl0gICBuICAgICAgIE51 bWJlciBvZiBiaXRzIHRvIHNoaWZ0Lg0KPiArICBAcGFyYW1bb3V0XSAgQm5SZXMgICBUaGUgcmVz dWx0Lg0KPiArDQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4N Cj4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFs bG9jYXRpb24gZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3Ro ZXJ3aXNlLg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bVJTaGlm dCAoDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbiwNCj4gKyAgSU4gVUlOVE4gICAgICAgbiwNCj4g KyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxT RSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiAr ICBNYXJrIEJpZyBOdW1iZXIgZm9yIGNvbnN0YW50IHRpbWUgY29tcHV0YXRpb25zLg0KPiArICBU aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBjb25zdGFudCB0aW1lIA0K PiArY29tcHV0YXRpb25zIGFyZQ0KPiArICBwZXJmb3JtZWQgb24gdGhlIGdpdmVuIEJpZyBudW1i ZXIuDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuICAgICBCaWcgbnVtYmVyLg0KPiArKiovDQo+ ICtWT0lEDQo+ICtFRklBUEkNCj4gK0JpZ051bUNvbnN0dGltZSAoDQo+ICsgIElOIFZPSUQgICpC bg0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArfQ0KPiArDQo+ICsvKioN Cj4gKyAgQ2FsY3VsYXRlIHNxdWFyZSBtb2R1bG8uDQo+ICsgIFBsZWFzZSBub3RlLCBhbGwgIm91 dCIgQmlnIG51bWJlciBhcmd1bWVudHMgc2hvdWxkIGJlIHByb3Blcmx5IA0KPiAraW5pdGlhbGl6 ZWQNCj4gKyAgYnkgY2FsbGluZyB0byBCaWdOdW1Jbml0KCkgb3IgQmlnTnVtRnJvbUJpbigpIGZ1 bmN0aW9ucy4NCj4gKw0KPiArICBAcGFyYW1baW5dICAgQm5BICAgICBCaWcgbnVtYmVyLg0KPiAr ICBAcGFyYW1baW5dICAgQm5NICAgICBCaWcgbnVtYmVyIChtb2R1bG8pLg0KPiArICBAcGFyYW1b b3V0XSAgQm5SZXMgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSBeIDIpICUgQm5NLg0KPiAr DQo+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgT24gc3VjY2Vzcy4NCj4gKyAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBJbiBjYXNlIG9mIGludGVybmFsIGFsbG9jYXRpb24g ZmFpbHVyZXMuDQo+ICsgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgT3RoZXJ3aXNlLg0K PiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkNCj4gK0JpZ051bVNxck1vZCAoDQo+ICsg IElOIENPTlNUIFZPSUQgICpCbkEsDQo+ICsgIElOIENPTlNUIFZPSUQgICpCbk0sDQo+ICsgIE9V VCBWT0lEICAgICAgICpCblJlcw0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0K PiArICByZXR1cm4gRUZJX1VOU1VQUE9SVEVEOw0KPiArfQ0KPiArDQo+ICsvKioNCj4gKyAgQ3Jl YXRlIG5ldyBCaWcgTnVtYmVyIGNvbXB1dGF0aW9uIGNvbnRleHQuIFRoaXMgaXMgYW4gb3BhcXVl IA0KPiArc3RydWN0dXJlDQo+ICsgIHdoaWNoIHNob3VsZCBiZSBwYXNzZWQgdG8gYW55IGZ1bmN0 aW9uIHRoYXQgcmVxdWlyZXMgaXQuIFRoZSBCTiANCj4gK2NvbnRleHQgaXMNCj4gKyAgbmVlZGVk IHRvIG9wdGltaXplIGNhbGN1bGF0aW9ucyBhbmQgZXhwZW5zaXZlIGFsbG9jYXRpb25zLg0KPiAr DQo+ICsgIEByZXR2YWwgQmlnIE51bWJlciBjb250ZXh0IHN0cnVjdCBvciBOVUxMIG9uIGZhaWx1 cmUuDQo+ICsqKi8NCj4gK1ZPSUQgKg0KPiArRUZJQVBJDQo+ICtCaWdOdW1OZXdDb250ZXh0ICgN Cj4gKyAgVk9JRA0KPiArICApDQo+ICt7DQo+ICsgIEFTU0VSVCAoRkFMU0UpOw0KPiArICByZXR1 cm4gTlVMTDsNCj4gK30NCj4gKw0KPiArLyoqDQo+ICsgIEZyZWUgQmlnIE51bWJlciBjb250ZXh0 IHRoYXQgd2FzIGFsbG9jYXRlZCB3aXRoIEJpZ051bU5ld0NvbnRleHQoKS4NCj4gKw0KPiArICBA cGFyYW1baW5dICAgQm5DdHggICAgIEJpZyBudW1iZXIgY29udGV4dCB0byBmcmVlLg0KPiArKiov DQo+ICtWT0lEDQo+ICtFRklBUEkNCj4gK0JpZ051bUNvbnRleHRGcmVlICgNCj4gKyAgSU4gVk9J RCAgKkJuQ3R4DQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICt9DQo+ICsN Cj4gKy8qKg0KPiArICBTZXQgQmlnIE51bWJlciB0byBhIGdpdmVuIHZhbHVlLg0KPiArDQo+ICsg IEBwYXJhbVtpbl0gICBCbiAgICAgQmlnIG51bWJlciB0byBzZXQuDQo+ICsgIEBwYXJhbVtpbl0g ICBWYWwgICAgVmFsdWUgdG8gc2V0Lg0KPiArKiovDQo+ICtFRklfU1RBVFVTDQo+ICtFRklBUEkN Cj4gK0JpZ051bVNldFVpbnQgKA0KPiArICBJTiBWT0lEICAgKkJuLA0KPiArICBJTiBVSU5UTiAg VmFsDQo+ICsgICkNCj4gK3sNCj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklf VU5TVVBQT1JURUQ7DQo+ICt9DQo+ICsNCj4gKy8qKg0KPiArICBBZGQgdHdvIEJpZyBOdW1iZXJz IG1vZHVsbyBCbk0uDQo+ICsNCj4gKyAgQHBhcmFtW2luXSAgIEJuQSAgICAgICBCaWcgbnVtYmVy Lg0KPiArICBAcGFyYW1baW5dICAgQm5CICAgICAgIEJpZyBudW1iZXIuDQo+ICsgIEBwYXJhbVtp bl0gICBCbk0gICAgICAgQmlnIG51bWJlciAobW9kdWxvKS4NCj4gKyAgQHBhcmFtW291dF0gIEJu UmVzICAgICBUaGUgcmVzdWx0LCBzdWNoIHRoYXQgKEJuQSArIEJuQikgJSBCbk0uDQo+ICsNCj4g KyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBPbiBzdWNjZXNzLg0KPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTIEluIGNhc2Ugb2YgaW50ZXJuYWwgYWxsb2NhdGlvbiBmYWls dXJlcy4NCj4gKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBPdGhlcndpc2UuDQo+ICsq Ki8NCj4gK0VGSV9TVEFUVVMNCj4gK0VGSUFQSQ0KPiArQmlnTnVtQWRkTW9kICgNCj4gKyAgSU4g Q09OU1QgVk9JRCAgKkJuQSwNCj4gKyAgSU4gQ09OU1QgVk9JRCAgKkJuQiwNCj4gKyAgSU4gQ09O U1QgVk9JRCAgKkJuTSwNCj4gKyAgT1VUIFZPSUQgICAgICAgKkJuUmVzDQo+ICsgICkNCj4gK3sN Cj4gKyAgQVNTRVJUIChGQUxTRSk7DQo+ICsgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+ICt9 DQo+IC0tDQo+IDIuMzMuMC53aW5kb3dzLjINCj4gDQo=