From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mx0a-002e3701.pphosted.com (mx0a-002e3701.pphosted.com [148.163.147.86]) by mx.groups.io with SMTP id smtpd.web08.5335.1610005579801863278 for ; Wed, 06 Jan 2021 23:46:19 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=A7r9gHWf; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=0641e5b729=abner.chang@hpe.com) Received: from pps.filterd (m0150241.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 1077hWxs029850; Thu, 7 Jan 2021 07:46:19 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hpe.com; h=from : to : cc : subject : date : message-id : references : in-reply-to : content-type : content-transfer-encoding : mime-version; s=pps0720; bh=YL3U9a7g5x7fOw4D++ozwXUoiGTDxWSM6M1Khx9KU5U=; b=A7r9gHWfZLmzayeqXolzuM6SDC1SizrqDE6H989Ls+p9Q6Jn9flLizoI6I4gR0kpCQ9a HGIWuwAyJf1e6bNwzhS6z745yTrRHsUXL0a/2K8b0fUY6NwscUR+3HzmIdW7eUW5o84M V92Tv+RB47rCGMTEqKJCZ6p0VWsYsBaraSchbdTCL7gb4EqlDLeio5ljXYzbNUXA8Zuz K94zeFk1wleCsDwHUdSuhaiL3BQcCsSm7bOBSdjZE2/RnSCTl+cv8oF3debpF8h7I1J/ b99Kws3NZ6oyutrk284g9pi4p1oI8tmyF6eRfQM+nwnSy5trgsUkJRhnKFA1eiYbIYng UA== Received: from g2t2353.austin.hpe.com (g2t2353.austin.hpe.com [15.233.44.26]) by mx0a-002e3701.pphosted.com with ESMTP id 35wpdraesy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 07 Jan 2021 07:46:19 +0000 Received: from G4W9119.americas.hpqcorp.net (g4w9119.houston.hp.com [16.210.20.214]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g2t2353.austin.hpe.com (Postfix) with ESMTPS id 614AE6D; Thu, 7 Jan 2021 07:46:18 +0000 (UTC) Received: from G9W8455.americas.hpqcorp.net (2002:10d8:a15e::10d8:a15e) by G4W9119.americas.hpqcorp.net (2002:10d2:14d6::10d2:14d6) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 7 Jan 2021 07:46:18 +0000 Received: from NAM12-MW2-obe.outbound.protection.outlook.com (15.241.52.13) by G9W8455.americas.hpqcorp.net (16.216.161.94) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 7 Jan 2021 07:46:17 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=hxT3NqmWjcPt7CFv0VntEeinRjnNuwDEKyqB2hSpyyjWrrkleYlfsDeu0N91+MGIceP4+UhPtbfFeaqZ3ic+GieZcyayQDecDj9T7T//fcIyrKEhl03KtcI3DrURkGKvPx76w4OKkUpkk8JKfGILgRqB0IUKZgrtXmsPWvSWX0pWNgvQg4P9uEmtC9PvP83dpPyG0qFcoaK1nv4yRkwWk48NVbt/aT5HsvGELYVqoR1G9YVt2ZUMDWYSY8b+iubTc74Q5QZUA5NWFcD+qxdkN6TgDy7vvonuvqYl4914kJvDyWmDBF731Ycv71mgC/d24RRO41wGOuHx/hRU6IoK5Q== 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=YL3U9a7g5x7fOw4D++ozwXUoiGTDxWSM6M1Khx9KU5U=; b=LF6pxZ2a43kCfVt7FiNA3fuswDTRnJzy/MMyTgsqscMEowWwxaS53UoVMF6gfZLV6HHSRnwwPUMNtsQTxjn+fFbcEtW3Bu9u8tYmmGMJ0xeCoM4XC89gvuCD1vh4WKILJklrY/viWR0F1yHMp7brVT19iOoHEXspQ3af18RVKiGeJ6JJIeqQZ1si1AWxNCsiEjxiN46/b6LppaPE2OYwudTithfU0+rq0YTy4ejQJXFRdy3ACSTZLZwSRaW5rlcCyDNmHrLDsJ9KYQzEJXnQW4a43Ll4bqChseIhDuafKEpkbeN58qSup3yypAJmRrvi6b9dD41x0sZFXjIBpI7RoA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:7508::16) by CS1PR8401MB0949.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:750f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3721.21; Thu, 7 Jan 2021 07:46:14 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::a094:ed67:fb40:340e%10]) with mapi id 15.20.3742.006; Thu, 7 Jan 2021 07:46:14 +0000 From: "Abner Chang" To: "Rabeda, Maciej" , "devel@edk2.groups.io" CC: Jiaxin Wu , Siyuan Fu , Fan Wang , Jiewen Yao , "Wang, Nickle (HPS SW)" , "O'Hanley, Peter (EXL)" Subject: Re: [edk2-devel] [PATCH] NetworkPkg/DxeHttpLib: Migrate HTTP header manipulation APIs Thread-Topic: [edk2-devel] [PATCH] NetworkPkg/DxeHttpLib: Migrate HTTP header manipulation APIs Thread-Index: AQHW43Hnh3wG8Szk2Ui+gGq3/bdr5aoaERaggAG6D/A= Date: Thu, 7 Jan 2021 07:46:13 +0000 Message-ID: References: <20201218023931.20445-1-abner.chang@hpe.com> <34fdd782-b2b7-d64d-8852-9a792db3c023@linux.intel.com> In-Reply-To: Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: linux.intel.com; dkim=none (message not signed) header.d=none;linux.intel.com; dmarc=none action=none header.from=hpe.com; x-originating-ip: [16.242.247.131] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 841b1e55-8ee5-444d-dcf2-08d8b2e04f0c x-ms-traffictypediagnostic: CS1PR8401MB0949: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8273; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: F0ByG1dlhWDI2YmRMN/msZxVxL3PtlPGBAWmawejOkYG5FxjBaU8ptHaAdpvqlZAZg4+MKOSXBrIKcisQTEnACFfo5grQZY9eH9KvlRhlfvAFaAQvRay6Za5ywzlFkz7Xc4BEmm3r6F0l+8laR5b3bmWhfp5H49t9ni2qkku1wNjEvus7jucqpz+adrAf7uQqHUlQod4O2U9D9pGTdnN6rLJLmQFddFP0/HaJCEN0BaTQU7NdMnuNsbKxtLR5N8lm+DUHzuet/M9sv0xsCXNWZ7TOcLGVUcTV/gbL1TWpvUD7KfJgRjYN3xvqYQTkl8UuFd0cjz4BsOAFOoyhmkjgFhBVOwD0cxBew6ejTEVR0qtPwJ+PNB6DJ3auQSOraCm60vKXmGnfqec3IpPFbqiBA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(376002)(396003)(346002)(136003)(39860400002)(366004)(54906003)(6506007)(110136005)(53546011)(4326008)(186003)(478600001)(55016002)(26005)(52536014)(8936002)(2906002)(86362001)(8676002)(5660300002)(71200400001)(83380400001)(64756008)(66446008)(30864003)(66556008)(316002)(66946007)(9686003)(7696005)(76116006)(66476007)(33656002);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?d2NaWjhjVVZWazlzSjNwZEw0Rm5UMW9Bd1BqYVVzM1JZMzVZcHRzM256amJn?= =?utf-8?B?UkUybjZ1TS9LQnhZb0VIblRCK2J6L3lkWTNSaFd4ZjdaKzF6TlJvNURYMXpU?= =?utf-8?B?T3B1cnd6MW1HU1ZnbkdZOHhEcXFoQWtBS1NHTVhJWmFLd1RHN095MGNyMDRv?= =?utf-8?B?YjRRREU3dXV0QytaUlZ5RFgxRmhTR2pDZUxpNDJ4TWdnSDFDbGdSOUQ1dk1u?= =?utf-8?B?UWFLWUdWZVNKSWIyTWh5S2xjN21jZ0NlQU9pOXBteVpJdHNzRVNKR1VYTWxl?= =?utf-8?B?SVFzcWlTMlJkRmNleGZSNU94SE1YK3kzbGZLN2RDQ3JqRUN4TEhDNTZVaU02?= =?utf-8?B?RGtWbmJaLzFMSU5xZ3VBODNUYmowZFpSSS9BQlZsRS8yY1FWN01kSjl5R3NF?= =?utf-8?B?c3VDYTJwMThoVlpPOVJxcTRFa3c0N3dWK1kxWFlnNUJ4bWZWN1VUNzd5bzFN?= =?utf-8?B?LzFaMzVtSC95dlBicFFwRU1PdXZJMW8yak1tMGNoU0FITGVDdXJVNmg5SmNt?= =?utf-8?B?NFk0MkJFUUY0U1RyUXMrZXZMNjlaSENiMVErWjZESkFnR0dLTSs2OTZFdGtB?= =?utf-8?B?SUFKVTRWRkZqcjk0aFdoL1BISzVZUjhpVmd3MGVvMWk2ajh4dUo0NndhUE91?= =?utf-8?B?U1ZaOXdOS2dMSnhjWU00WHkvdUR5QUhhR25xMGtoK0l2VlNNL20rZEdob3Ba?= =?utf-8?B?MUxGVzA0TCtjNHFiVFJ3UUtxSGoyaTRVMENnRkJvdkRTd1N0KzhmTXFJc094?= =?utf-8?B?NXdCZDhzbUV4Q2JJTTJQMkRBbjYwNDBaSzVVOXVZaHhMSm5WNzQ0K1BSK3VM?= =?utf-8?B?QVVRNDRydENkMU4wbTJaQjNnYkdFR2NEM3hEUzNMeDl4L2RoWk5RK0pwcUt5?= =?utf-8?B?LzRZSXFWK3lZc1NjT2FBZERuZ3pGZkRaS2EyNzhMWlhNUmpEUkhhV3lRRnNu?= =?utf-8?B?TVpaMkV3ZWloM2VwdVEyMW1xNWxlWlkxUVpSZlNrR2kyTFlSN1pRMjZhRjc1?= =?utf-8?B?ZzQ5UHN2S0VmMXZRLzl1RE5uY3FMOERkOE1QeStXV29kdWJTMlpwMGo4OGRI?= =?utf-8?B?Y1BpV2lNSEEranNHbjkvRUNibTJTYkdkUW5CL0wwYnh1OCtQMUFNdG5FT2tF?= =?utf-8?B?WkFpWmxnSXUrUEg3L3p3YWJWWlM5U2xvTWw5dG91T2M5a1oyR3Y2d2dtdmlO?= =?utf-8?B?L2V0M0R4d04xWFJDZFM5dktzNVZuWHphMWc5L1JRN2JZcG43a1N4OG5pbld1?= =?utf-8?B?bitJckNzd3BGVmZjbk1CdkRxd2tkRlc2SjU0MkhiOFhRZG9LWHBXZ3Evc1hG?= =?utf-8?Q?f2oiadPxW8ZHo=3D?= X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 841b1e55-8ee5-444d-dcf2-08d8b2e04f0c X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Jan 2021 07:46:14.0287 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: +mgteK4uRJs9UkeyT3q6iQYCjP1MxcF6qaVQbwyc5BeRQmdHRfQQTUGt6L7YPm+2xeERsSz54gJ8cqbaR1ZRJw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0949 X-OriginatorOrg: hpe.com X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.343,18.0.737 definitions=2021-01-07_04:2021-01-06,2021-01-07 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 clxscore=1015 mlxlogscore=999 impostorscore=0 adultscore=0 mlxscore=0 malwarescore=0 phishscore=0 spamscore=0 suspectscore=0 priorityscore=1501 lowpriorityscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101070045 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 SGkgTWFjaWVqLA0KUGF0Y2ggdjIgc2VudC4NCg0KVGhhbmtzDQpBYm5lcg0KDQo+IC0tLS0tT3Jp Z2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IENoYW5nLCBBYm5lciAoSFBTIFNXL0ZXIFRlY2hu b2xvZ2lzdCkNCj4gU2VudDogV2VkbmVzZGF5LCBKYW51YXJ5IDYsIDIwMjEgMToyOCBQTQ0KPiBU bzogUmFiZWRhLCBNYWNpZWogPG1hY2llai5yYWJlZGFAbGludXguaW50ZWwuY29tPjsgZGV2ZWxA ZWRrMi5ncm91cHMuaW8NCj4gQ2M6IEppYXhpbiBXdSA8amlheGluLnd1QGludGVsLmNvbT47IFNp eXVhbiBGdSA8c2l5dWFuLmZ1QGludGVsLmNvbT47IEZhbg0KPiBXYW5nIDxmYW4ud2FuZ0BpbnRl bC5jb20+OyBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT47IFdhbmcsDQo+IE5pY2ts ZSAoSFBTIFNXKSA8bmlja2xlLndhbmdAaHBlLmNvbT47IE8nSGFubGV5LCBQZXRlciAoRVhMKQ0K PiA8cGV0ZXIub2hhbmxleUBocGUuY29tPg0KPiBTdWJqZWN0OiBSRTogW2VkazItZGV2ZWxdIFtQ QVRDSF0gTmV0d29ya1BrZy9EeGVIdHRwTGliOiBNaWdyYXRlIEhUVFANCj4gaGVhZGVyIG1hbmlw dWxhdGlvbiBBUElzDQo+IA0KPiANCj4gDQo+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0N Cj4gPiBGcm9tOiBSYWJlZGEsIE1hY2llaiBbbWFpbHRvOm1hY2llai5yYWJlZGFAbGludXguaW50 ZWwuY29tXQ0KPiA+IFNlbnQ6IFR1ZXNkYXksIEphbnVhcnkgNSwgMjAyMSAxMDo0OSBQTQ0KPiA+ IFRvOiBkZXZlbEBlZGsyLmdyb3Vwcy5pbzsgQ2hhbmcsIEFibmVyIChIUFMgU1cvRlcgVGVjaG5v bG9naXN0KQ0KPiA+IDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiA+IENjOiBKaWF4aW4gV3UgPGpp YXhpbi53dUBpbnRlbC5jb20+OyBTaXl1YW4gRnUgPHNpeXVhbi5mdUBpbnRlbC5jb20+Ow0KPiA+ IEZhbiBXYW5nIDxmYW4ud2FuZ0BpbnRlbC5jb20+OyBKaWV3ZW4gWWFvIDxqaWV3ZW4ueWFvQGlu dGVsLmNvbT47DQo+ID4gV2FuZywgTmlja2xlIChIUFMgU1cpIDxuaWNrbGUud2FuZ0BocGUuY29t PjsgTydIYW5sZXksIFBldGVyIChFWEwpDQo+ID4gPHBldGVyLm9oYW5sZXlAaHBlLmNvbT4NCj4g PiBTdWJqZWN0OiBSZTogW2VkazItZGV2ZWxdIFtQQVRDSF0gTmV0d29ya1BrZy9EeGVIdHRwTGli OiBNaWdyYXRlIEhUVFANCj4gPiBoZWFkZXIgbWFuaXB1bGF0aW9uIEFQSXMNCj4gPg0KPiA+IEhp IEFibmVyLA0KPiA+DQo+ID4gU29ycnkgZm9yIHRoZSBsYXRlIHJlc3BvbnNlLCBJIHdhcyBvbiB2 YWNhdGlvbi4NCj4gPiBPbmUgcXVpY2sgdGhpbmc6IEkgY2FuIHNlZSB0aGF0IHRoZSBmdW5jdGlv bnMgYXJlIHNpbXBseSBiZWluZyBtb3ZlZA0KPiA+IGZyb20gb25lIHBsYWNlIHRvIHRoZSBvdGhl ciBhbmQgcmVuYW1lZCB0byBIdHRwSW9fX18oKS4NCj4gPiBUaGUgb25seSBpc3N1ZSBJIGhhdmUg aXMgdGhhdCB0aGlzIHBhdGNoIGRvZXMgbm90IHJlbW92ZSBIdHRwQm9vdF9fXygpDQo+ID4gZnVu Y3Rpb25zIGZyb20gSHR0cER4ZS9IdHRwQm9vdFN1cHBvcnQuYyBVcG9uIHJlbW92aW5nIHRob3Nl LCBJIHdpbGwNCj4gPiBnaXZlIG15IGFwcHJvdmFsIDopDQo+IEkgd2FzIG9yaWdpbmFsbHkgdGhv dWdodCB0byBoYXZlIGEgQnVnemlsbGEgZm9yIEh0dHBCb290U3VwcG9ydCBhbmQgbGV0IG93bmVy DQo+IHRvIGRlYWwgd2l0aCB0aGF0LiA6LSkgV2lsbCBzZW5kIHRoZSBwYXRjaCBmb3IgdGhpcy4N Cj4gDQo+IFRoYW5rcw0KPiBBYm5lcg0KPiA+DQo+ID4gVGhhbmtzLA0KPiA+IE1hY2llag0KPiA+ DQo+ID4gT24gMTgtRGVjLTIwIDAzOjM5LCBBYm5lciBDaGFuZyB3cm90ZToNCj4gPiA+IE1vdmUg SFRUUCBoZWFkZXIgbWFuaXB1bGF0aW9uIGZ1bmN0aW9ucyB0byBEeGVIdHRwTGliIGZyb20NCj4g PiA+IEh0dHBCb290U3VwcG9ydC5jLiBUaGVzZSBnZW5lcmFsIGZ1bmN0aW9ucyBhcmUgdXNlZCBi eSBib3RoIEh0dHANCj4gPiA+IEJPT1QgYW5kIFJlZGZpc2hMaWIgKHBhdGNoZXMgd2lsbCBiZSBz ZW50IGxhdGVyKS4NCj4gPiA+DQo+ID4gPiBTaWduZWQtb2ZmLWJ5OiBBYm5lciBDaGFuZyA8YWJu ZXIuY2hhbmdAaHBlLmNvbT4NCj4gPiA+DQo+ID4gPiBDYzogTWFjaWVqIFJhYmVkYSA8bWFjaWVq LnJhYmVkYUBsaW51eC5pbnRlbC5jb20+DQo+ID4gPiBDYzogSmlheGluIFd1IDxqaWF4aW4ud3VA aW50ZWwuY29tPg0KPiA+ID4gQ2M6IFNpeXVhbiBGdSA8c2l5dWFuLmZ1QGludGVsLmNvbT4NCj4g PiA+IENjOiBGYW4gV2FuZyA8ZmFuLndhbmdAaW50ZWwuY29tPg0KPiA+ID4gQ2M6IEppZXdlbiBZ YW8gPGppZXdlbi55YW9AaW50ZWwuY29tPg0KPiA+ID4gQ2M6IE5pY2tsZSBXYW5nIDxuaWNrbGUu d2FuZ0BocGUuY29tPg0KPiA+ID4gQ2M6IFBldGVyIE8nSGFubGV5IDxwZXRlci5vaGFubGV5QGhw ZS5jb20+DQo+ID4gPiAtLS0NCj4gPiA+ICAgTmV0d29ya1BrZy9IdHRwQm9vdER4ZS9IdHRwQm9v dFN1cHBvcnQuaCAgIHwgIDUzIC0tLS0tLS0tDQo+ID4gPiAgIE5ldHdvcmtQa2cvSW5jbHVkZS9M aWJyYXJ5L0h0dHBMaWIuaCAgICAgICB8ICA1MyArKysrKysrKw0KPiA+ID4gICBOZXR3b3JrUGtn L0h0dHBCb290RHhlL0h0dHBCb290Q2xpZW50LmMgICAgfCAgMTAgKy0NCj4gPiA+ICAgTmV0d29y a1BrZy9MaWJyYXJ5L0R4ZUh0dHBMaWIvRHhlSHR0cExpYi5jIHwgMTM1DQo+ID4gKysrKysrKysr KysrKysrKysrKystDQo+ID4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgMTkyIGluc2VydGlvbnMoKyks IDU5IGRlbGV0aW9ucygtKQ0KPiA+ID4NCj4gPiA+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0h0 dHBCb290RHhlL0h0dHBCb290U3VwcG9ydC5oDQo+ID4gPiBiL05ldHdvcmtQa2cvSHR0cEJvb3RE eGUvSHR0cEJvb3RTdXBwb3J0LmgNCj4gPiA+IGluZGV4IDFhMmQzMmRkNWEuLmMyYWMxYjc4NWEg MTAwNjQ0DQo+ID4gPiAtLS0gYS9OZXR3b3JrUGtnL0h0dHBCb290RHhlL0h0dHBCb290U3VwcG9y dC5oDQo+ID4gPiArKysgYi9OZXR3b3JrUGtnL0h0dHBCb290RHhlL0h0dHBCb290U3VwcG9ydC5o DQo+ID4gPiBAQCAtODcsNTkgKzg3LDYgQEAgSHR0cEJvb3RQcmludEVycm9yTWVzc2FnZSAoDQo+ ID4gPiAgICAgRUZJX0hUVFBfU1RBVFVTX0NPREUgICAgICAgICAgICBTdGF0dXNDb2RlDQo+ID4g PiAgICAgKTsNCj4gPiA+DQo+ID4gPiAtLy8NCj4gPiA+IC0vLyBBIHdyYXBwZXIgc3RydWN0dXJl IHRvIGhvbGQgdGhlIEhUVFAgaGVhZGVycy4NCj4gPiA+IC0vLw0KPiA+ID4gLXR5cGVkZWYgc3Ry dWN0IHsNCj4gPiA+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBNYXhIZWFkZXJDb3Vu dDsNCj4gPiA+IC0gIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBIZWFkZXJDb3VudDsNCj4g PiA+IC0gIEVGSV9IVFRQX0hFQURFUiAgICAgICAgICAgICAqSGVhZGVyczsNCj4gPiA+IC19IEhU VFBfSU9fSEVBREVSOw0KPiA+ID4gLQ0KPiA+ID4gLS8qKg0KPiA+ID4gLSAgQ3JlYXRlIGEgSFRU UF9JT19IRUFERVIgdG8gaG9sZCB0aGUgSFRUUCBoZWFkZXIgaXRlbXMuDQo+ID4gPiAtDQo+ID4g PiAtICBAcGFyYW1baW5dICBNYXhIZWFkZXJDb3VudCAgICAgICAgIFRoZSBtYXhpbXVtIG51bWJl ciBvZiBIVFRQDQo+ID4gaGVhZGVyIGluIHRoaXMgaG9sZGVyLg0KPiA+ID4gLQ0KPiA+ID4gLSAg QHJldHVybiAgICBBIHBvaW50ZXIgb2YgdGhlIEhUVFAgaGVhZGVyIGhvbGRlciBvciBOVUxMIGlm IGZhaWxlZC4NCj4gPiA+IC0NCj4gPiA+IC0qKi8NCj4gPiA+IC1IVFRQX0lPX0hFQURFUiAqDQo+ ID4gPiAtSHR0cEJvb3RDcmVhdGVIZWFkZXIgKA0KPiA+ID4gLSAgSU4gIFVJTlROICAgICAgICAg ICAgICAgIE1heEhlYWRlckNvdW50DQo+ID4gPiAtICApOw0KPiA+ID4gLQ0KPiA+ID4gLS8qKg0K PiA+ID4gLSAgRGVzdHJveSB0aGUgSFRUUF9JT19IRUFERVIgYW5kIHJlbGVhc2UgdGhlIHJlc291 cmNlcy4NCj4gPiA+IC0NCj4gPiA+IC0gIEBwYXJhbVtpbl0gIEh0dHBJb0hlYWRlciAgICAgICBQ b2ludCB0byB0aGUgSFRUUCBoZWFkZXIgaG9sZGVyIHRvIGJlDQo+ID4gZGVzdHJveWVkLg0KPiA+ ID4gLQ0KPiA+ID4gLSoqLw0KPiA+ID4gLVZPSUQNCj4gPiA+IC1IdHRwQm9vdEZyZWVIZWFkZXIg KA0KPiA+ID4gLSAgSU4gIEhUVFBfSU9fSEVBREVSICAgICAgICpIdHRwSW9IZWFkZXINCj4gPiA+ IC0gICk7DQo+ID4gPiAtDQo+ID4gPiAtLyoqDQo+ID4gPiAtICBTZXQgb3IgdXBkYXRlIGEgSFRU UCBoZWFkZXIgd2l0aCB0aGUgZmllbGQgbmFtZSBhbmQgY29ycmVzcG9uZGluZw0KPiA+IHZhbHVl Lg0KPiA+ID4gLQ0KPiA+ID4gLSAgQHBhcmFtW2luXSAgSHR0cElvSGVhZGVyICAgICAgIFBvaW50 IHRvIHRoZSBIVFRQIGhlYWRlciBob2xkZXIuDQo+ID4gPiAtICBAcGFyYW1baW5dICBGaWVsZE5h bWUgICAgICAgICAgTnVsbCB0ZXJtaW5hdGVkIHN0cmluZyB3aGljaCBkZXNjcmliZXMgYQ0KPiBm aWVsZA0KPiA+IG5hbWUuDQo+ID4gPiAtICBAcGFyYW1baW5dICBGaWVsZFZhbHVlICAgICAgICAg TnVsbCB0ZXJtaW5hdGVkIHN0cmluZyB3aGljaCBkZXNjcmliZXMgdGhlDQo+ID4gY29ycmVzcG9u ZGluZyBmaWVsZCB2YWx1ZS4NCj4gPiA+IC0NCj4gPiA+IC0gIEByZXR2YWwgIEVGSV9TVUNDRVNT ICAgICAgICAgICBUaGUgSFRUUCBoZWFkZXIgaGFzIGJlZW4gc2V0IG9yIHVwZGF0ZWQuDQo+ID4g PiAtICBAcmV0dmFsICBFRklfSU5WQUxJRF9QQVJBTUVURVIgQW55IGlucHV0IHBhcmFtZXRlciBp cyBpbnZhbGlkLg0KPiA+ID4gLSAgQHJldHZhbCAgRUZJX09VVF9PRl9SRVNPVVJDRVMgIEluc3Vm ZmljaWVudCByZXNvdXJjZSB0byBjb21wbGV0ZQ0KPiA+ID4gdGhlDQo+ID4gb3BlcmF0aW9uLg0K PiA+ID4gLSAgQHJldHZhbCAgT3RoZXIgICAgICAgICAgICAgICAgIFVuZXhwZWN0ZWQgZXJyb3Ig aGFwcGVuZWQuDQo+ID4gPiAtDQo+ID4gPiAtKiovDQo+ID4gPiAtRUZJX1NUQVRVUw0KPiA+ID4g LUh0dHBCb290U2V0SGVhZGVyICgNCj4gPiA+IC0gIElOICBIVFRQX0lPX0hFQURFUiAgICAgICAq SHR0cElvSGVhZGVyLA0KPiA+ID4gLSAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICpGaWVsZE5h bWUsDQo+ID4gPiAtICBJTiAgQ0hBUjggICAgICAgICAgICAgICAgKkZpZWxkVmFsdWUNCj4gPiA+ IC0gICk7DQo+ID4gPiAtDQo+ID4gPiAgIC8qKg0KPiA+ID4gICAgIFJldHJpZXZlIHRoZSBob3N0 IGFkZHJlc3MgdXNpbmcgdGhlIEVGSV9ETlM2X1BST1RPQ09MLg0KPiA+ID4NCj4gPiA+IGRpZmYg LS1naXQgYS9OZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwTGliLmgNCj4gPiA+IGIvTmV0 d29ya1BrZy9JbmNsdWRlL0xpYnJhcnkvSHR0cExpYi5oDQo+ID4gPiBpbmRleCBhOTA2MTI2YjNk Li4yYzMzNjdmYjAxIDEwMDY0NA0KPiA+ID4gLS0tIGEvTmV0d29ya1BrZy9JbmNsdWRlL0xpYnJh cnkvSHR0cExpYi5oDQo+ID4gPiArKysgYi9OZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRw TGliLmgNCj4gPiA+IEBAIC00NzYsNiArNDc2LDU5IEBAIEh0dHBJc1ZhbGlkSHR0cEhlYWRlciAo DQo+ID4gPiAgICAgSU4gIENIQVI4ICAgICAgICAgICAgKkZpZWxkTmFtZQ0KPiA+ID4gICAgICk7 DQo+ID4gPg0KPiA+ID4gKy8vDQo+ID4gPiArLy8gQSB3cmFwcGVyIHN0cnVjdHVyZSB0byBob2xk IHRoZSBIVFRQIGhlYWRlcnMuDQo+ID4gPiArLy8NCj4gPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ ID4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgTWF4SGVhZGVyQ291bnQ7DQo+ID4g PiArICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ291bnQ7DQo+ID4gPiArICBF RklfSFRUUF9IRUFERVIgICAgICAgICAgICAgKkhlYWRlcnM7DQo+ID4gPiArfSBIVFRQX0lPX0hF QURFUjsNCj4gPiA+ICsNCj4gPiA+ICsNCj4gPiA+ICsvKioNCj4gPiA+ICsgIENyZWF0ZSBhIEhU VFBfSU9fSEVBREVSIHRvIGhvbGQgdGhlIEhUVFAgaGVhZGVyIGl0ZW1zLg0KPiA+ID4gKw0KPiA+ ID4gKyAgQHBhcmFtW2luXSAgTWF4SGVhZGVyQ291bnQgICAgICAgICBUaGUgbWF4aW11biBudW1i ZXIgb2YgSFRUUA0KPiA+IGhlYWRlciBpbiB0aGlzIGhvbGRlci4NCj4gPiA+ICsNCj4gPiA+ICsg IEByZXR1cm4gICAgQSBwb2ludGVyIG9mIHRoZSBIVFRQIGhlYWRlciBob2xkZXIgb3IgTlVMTCBp ZiBmYWlsZWQuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArSFRUUF9JT19IRUFERVIgKg0K PiA+ID4gK0h0dHBJb0NyZWF0ZUhlYWRlciAoDQo+ID4gPiArICBVSU5UTiAgICAgICAgICAgICAg ICAgICAgIE1heEhlYWRlckNvdW50DQo+ID4gPiArICApOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0K PiA+ID4gKyAgRGVzdHJveSB0aGUgSFRUUF9JT19IRUFERVIgYW5kIHJlbGVhc2UgdGhlIHJlc291 cmNlcy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEh0dHBJb0hlYWRlciAgICAgICBQ b2ludCB0byB0aGUgSFRUUCBoZWFkZXIgaG9sZGVyIHRvIGJlDQo+ID4gZGVzdHJveWVkLg0KPiA+ ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK1ZPSUQNCj4gPiA+ICtIdHRwSW9GcmVlSGVhZGVyICgN Cj4gPiA+ICsgIElOICBIVFRQX0lPX0hFQURFUiAgICAgICAqSHR0cElvSGVhZGVyDQo+ID4gPiAr ICApOw0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgU2V0IG9yIHVwZGF0ZSBhIEhUVFAg aGVhZGVyIHdpdGggdGhlIGZpZWxkIG5hbWUgYW5kIGNvcnJlc3BvbmRpbmcNCj4gPiB2YWx1ZS4N Cj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEh0dHBJb0hlYWRlciAgICAgICBQb2ludCB0 byB0aGUgSFRUUCBoZWFkZXIgaG9sZGVyLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgRmllbGROYW1l ICAgICAgICAgIE51bGwgdGVybWluYXRlZCBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIGENCj4gPiBm aWVsZCBuYW1lLg0KPiA+ID4gKyAgQHBhcmFtW2luXSAgRmllbGRWYWx1ZSAgICAgICAgIE51bGwg dGVybWluYXRlZCBzdHJpbmcgd2hpY2ggZGVzY3JpYmVzIHRoZQ0KPiA+IGNvcnJlc3BvbmRpbmcg ZmllbGQgdmFsdWUuDQo+ID4gPiArDQo+ID4gPiArICBAcmV0dmFsICBFRklfU1VDQ0VTUyAgICAg ICAgICAgVGhlIEhUVFAgaGVhZGVyIGhhcyBiZWVuIHNldCBvciB1cGRhdGVkLg0KPiA+ID4gKyAg QHJldHZhbCAgRUZJX0lOVkFMSURfUEFSQU1FVEVSIEFueSBpbnB1dCBwYXJhbWV0ZXIgaXMgaW52 YWxpZC4NCj4gPiA+ICsgIEByZXR2YWwgIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBJbnN1ZmZpY2ll bnQgcmVzb3VyY2UgdG8gY29tcGxldGUNCj4gPiA+ICsgdGhlDQo+ID4gb3BlcmF0aW9uLg0KPiA+ ID4gKyAgQHJldHZhbCAgT3RoZXIgICAgICAgICAgICAgICAgIFVuZXhwZWN0ZWQgZXJyb3IgaGFw cGVuZWQuDQo+ID4gPiArDQo+ID4gPiArKiovDQo+ID4gPiArRUZJX1NUQVRVUw0KPiA+ID4gK0h0 dHBJb1NldEhlYWRlciAoDQo+ID4gPiArICBJTiAgSFRUUF9JT19IRUFERVIgICAgICAgKkh0dHBJ b0hlYWRlciwNCj4gPiA+ICsgIElOICBDSEFSOCAgICAgICAgICAgICAgICAqRmllbGROYW1lLA0K PiA+ID4gKyAgSU4gIENIQVI4ICAgICAgICAgICAgICAgICpGaWVsZFZhbHVlDQo+ID4gPiArICAp Ow0KPiA+ID4NCj4gPiA+ICAgI2VuZGlmDQo+ID4gPg0KPiA+ID4gZGlmZiAtLWdpdCBhL05ldHdv cmtQa2cvSHR0cEJvb3REeGUvSHR0cEJvb3RDbGllbnQuYw0KPiA+ID4gYi9OZXR3b3JrUGtnL0h0 dHBCb290RHhlL0h0dHBCb290Q2xpZW50LmMNCj4gPiA+IGluZGV4IDMwYWMxNTg4OWIuLjhmMjFm Nzc2NmUgMTAwNjQ0DQo+ID4gPiAtLS0gYS9OZXR3b3JrUGtnL0h0dHBCb290RHhlL0h0dHBCb290 Q2xpZW50LmMNCj4gPiA+ICsrKyBiL05ldHdvcmtQa2cvSHR0cEJvb3REeGUvSHR0cEJvb3RDbGll bnQuYw0KPiA+ID4gQEAgLTk3Nyw3ICs5NzcsNyBAQCBIdHRwQm9vdEdldEJvb3RGaWxlICgNCj4g PiA+ICAgICAvLyAgICAgICBBY2NlcHQNCj4gPiA+ICAgICAvLyAgICAgICBVc2VyLUFnZW50DQo+ ID4gPiAgICAgLy8NCj4gPiA+IC0gIEh0dHBJb0hlYWRlciA9IEh0dHBCb290Q3JlYXRlSGVhZGVy ICgzKTsNCj4gPiA+ICsgIEh0dHBJb0hlYWRlciA9IEh0dHBJb0NyZWF0ZUhlYWRlciAoMyk7DQo+ ID4gPiAgICAgaWYgKEh0dHBJb0hlYWRlciA9PSBOVUxMKSB7DQo+ID4gPiAgICAgICBTdGF0dXMg PSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICAgICAgIGdvdG8gRVJST1JfMjsNCj4gPiA+ IEBAIC05OTUsNyArOTk1LDcgQEAgSHR0cEJvb3RHZXRCb290RmlsZSAoDQo+ID4gPiAgICAgaWYg KEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ID4gICAgICAgZ290byBFUlJPUl8zOw0KPiA+ID4g ICAgIH0NCj4gPiA+IC0gIFN0YXR1cyA9IEh0dHBCb290U2V0SGVhZGVyICgNCj4gPiA+ICsgIFN0 YXR1cyA9IEh0dHBJb1NldEhlYWRlciAoDQo+ID4gPiAgICAgICAgICAgICAgICBIdHRwSW9IZWFk ZXIsDQo+ID4gPiAgICAgICAgICAgICAgICBIVFRQX0hFQURFUl9IT1NULA0KPiA+ID4gICAgICAg ICAgICAgICAgSG9zdE5hbWUNCj4gPiA+IEBAIC0xMDA4LDcgKzEwMDgsNyBAQCBIdHRwQm9vdEdl dEJvb3RGaWxlICgNCj4gPiA+ICAgICAvLw0KPiA+ID4gICAgIC8vIEFkZCBIVFRQIGhlYWRlciBm aWVsZCAyOiBBY2NlcHQNCj4gPiA+ICAgICAvLw0KPiA+ID4gLSAgU3RhdHVzID0gSHR0cEJvb3RT ZXRIZWFkZXIgKA0KPiA+ID4gKyAgU3RhdHVzID0gSHR0cElvU2V0SGVhZGVyICgNCj4gPiA+ICAg ICAgICAgICAgICAgIEh0dHBJb0hlYWRlciwNCj4gPiA+ICAgICAgICAgICAgICAgIEhUVFBfSEVB REVSX0FDQ0VQVCwNCj4gPiA+ICAgICAgICAgICAgICAgICIqLyoiDQo+ID4gPiBAQCAtMTAyMCw3 ICsxMDIwLDcgQEAgSHR0cEJvb3RHZXRCb290RmlsZSAoDQo+ID4gPiAgICAgLy8NCj4gPiA+ICAg ICAvLyBBZGQgSFRUUCBoZWFkZXIgZmllbGQgMzogVXNlci1BZ2VudA0KPiA+ID4gICAgIC8vDQo+ ID4gPiAtICBTdGF0dXMgPSBIdHRwQm9vdFNldEhlYWRlciAoDQo+ID4gPiArICBTdGF0dXMgPSBI dHRwSW9TZXRIZWFkZXIgKA0KPiA+ID4gICAgICAgICAgICAgICAgSHR0cElvSGVhZGVyLA0KPiA+ ID4gICAgICAgICAgICAgICAgSFRUUF9IRUFERVJfVVNFUl9BR0VOVCwNCj4gPiA+ICAgICAgICAg ICAgICAgIEhUVFBfVVNFUl9BR0VOVF9FRklfSFRUUF9CT09UIEBAIC0xMjkxLDcgKzEyOTEsNyBA QA0KPiA+ID4gRVJST1JfNDoNCj4gPiA+ICAgICAgIEZyZWVQb29sIChSZXF1ZXN0RGF0YSk7DQo+ ID4gPiAgICAgfQ0KPiA+ID4gICBFUlJPUl8zOg0KPiA+ID4gLSAgSHR0cEJvb3RGcmVlSGVhZGVy IChIdHRwSW9IZWFkZXIpOw0KPiA+ID4gKyAgSHR0cElvRnJlZUhlYWRlciAoSHR0cElvSGVhZGVy KTsNCj4gPiA+ICAgRVJST1JfMjoNCj4gPiA+ICAgICBpZiAoQ2FjaGUgIT0gTlVMTCkgew0KPiA+ ID4gICAgICAgRnJlZVBvb2wgKENhY2hlKTsNCj4gPiA+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtn L0xpYnJhcnkvRHhlSHR0cExpYi9EeGVIdHRwTGliLmMNCj4gPiA+IGIvTmV0d29ya1BrZy9MaWJy YXJ5L0R4ZUh0dHBMaWIvRHhlSHR0cExpYi5jDQo+ID4gPiBpbmRleCBkYWVjMWUwMjI2Li43MzU0 ZTAxNzBmIDEwMDY0NA0KPiA+ID4gLS0tIGEvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBMaWIv RHhlSHR0cExpYi5jDQo+ID4gPiArKysgYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cExpYi9E eGVIdHRwTGliLmMNCj4gPiA+IEBAIC0zLDcgKzMsNyBAQA0KPiA+ID4gICAgIEl0IHByb3ZpZGVz IHRoZSBoZWxwZXIgcm91dGluZXMgdG8gcGFyc2UgdGhlIEhUVFAgbWVzc2FnZSBieXRlIHN0cmVh bS4NCj4gPiA+DQo+ID4gPiAgIENvcHlyaWdodCAoYykgMjAxNSAtIDIwMTksIEludGVsIENvcnBv cmF0aW9uLiBBbGwgcmlnaHRzDQo+ID4gPiByZXNlcnZlZC48QlI+DQo+ID4gPiAtKEMpIENvcHly aWdodCAyMDE2IEhld2xldHQgUGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPg0K PiA+ID4gKyhDKSBDb3B5cmlnaHQgMjAxNiAtIDIwMjAgIEhld2xldHQgUGFja2FyZCBFbnRlcnBy aXNlIERldmVsb3BtZW50DQo+ID4gPiArTFA8QlI+DQo+ID4gPiAgIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQo+ID4gPg0KPiA+ID4gICAqKi8NCj4gPiA+IEBA IC0yMDk1LDMgKzIwOTUsMTM2IEBAIEh0dHBJc1ZhbGlkSHR0cEhlYWRlciAoDQo+ID4gPiAgICAg cmV0dXJuIFRSVUU7DQo+ID4gPiAgIH0NCj4gPiA+DQo+ID4gPiArDQo+ID4gPiArLyoqDQo+ID4g PiArICBDcmVhdGUgYSBIVFRQX0lPX0hFQURFUiB0byBob2xkIHRoZSBIVFRQIGhlYWRlciBpdGVt cy4NCj4gPiA+ICsNCj4gPiA+ICsgIEBwYXJhbVtpbl0gIE1heEhlYWRlckNvdW50ICAgICAgICAg VGhlIG1heGltdW4gbnVtYmVyIG9mIEhUVFANCj4gPiBoZWFkZXIgaW4gdGhpcyBob2xkZXIuDQo+ ID4gPiArDQo+ID4gPiArICBAcmV0dXJuICAgIEEgcG9pbnRlciBvZiB0aGUgSFRUUCBoZWFkZXIg aG9sZGVyIG9yIE5VTEwgaWYgZmFpbGVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4gK0hU VFBfSU9fSEVBREVSICoNCj4gPiA+ICtIdHRwSW9DcmVhdGVIZWFkZXIgKA0KPiA+ID4gKyAgVUlO VE4gICAgICAgICAgICAgICAgICAgICBNYXhIZWFkZXJDb3VudA0KPiA+ID4gKyAgKQ0KPiA+ID4g K3sNCj4gPiA+ICsgIEhUVFBfSU9fSEVBREVSICAgICAgICAqSHR0cElvSGVhZGVyOw0KPiA+ID4g Kw0KPiA+ID4gKyAgaWYgKE1heEhlYWRlckNvdW50ID09IDApIHsNCj4gPiA+ICsgICAgcmV0dXJu IE5VTEw7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBIdHRwSW9IZWFkZXIgPSBBbGxv Y2F0ZVplcm9Qb29sIChzaXplb2YgKEhUVFBfSU9fSEVBREVSKSArDQo+ID4gPiArIE1heEhlYWRl ckNvdW50ICogc2l6ZW9mIChFRklfSFRUUF9IRUFERVIpKTsgIGlmIChIdHRwSW9IZWFkZXIgPT0N Cj4gPiBOVUxMKSB7DQo+ID4gPiArICAgIHJldHVybiBOVUxMOw0KPiA+ID4gKyAgfQ0KPiA+ID4g Kw0KPiA+ID4gKyAgSHR0cElvSGVhZGVyLT5NYXhIZWFkZXJDb3VudCA9IE1heEhlYWRlckNvdW50 Ow0KPiA+ID4gKyBIdHRwSW9IZWFkZXItPkhlYWRlcnMgPSAoRUZJX0hUVFBfSEVBREVSICopIChI dHRwSW9IZWFkZXIgKyAxKTsNCj4gPiA+ICsNCj4gPiA+ICsgIHJldHVybiBIdHRwSW9IZWFkZXI7 DQo+ID4gPiArfQ0KPiA+ID4gKw0KPiA+ID4gKy8qKg0KPiA+ID4gKyAgRGVzdHJveSB0aGUgSFRU UF9JT19IRUFERVIgYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4NCj4gPiA+ICsNCj4gPiA+ICsg IEBwYXJhbVtpbl0gIEh0dHBJb0hlYWRlciAgICAgICBQb2ludCB0byB0aGUgSFRUUCBoZWFkZXIg aG9sZGVyIHRvIGJlDQo+ID4gZGVzdHJveWVkLg0KPiA+ID4gKw0KPiA+ID4gKyoqLw0KPiA+ID4g K1ZPSUQNCj4gPiA+ICtIdHRwSW9GcmVlSGVhZGVyICgNCj4gPiA+ICsgIElOICBIVFRQX0lPX0hF QURFUiAgICAgICAqSHR0cElvSGVhZGVyDQo+ID4gPiArICApDQo+ID4gPiArew0KPiA+ID4gKyAg VUlOVE4gICAgICBJbmRleDsNCj4gPiA+ICsNCj4gPiA+ICsgIGlmIChIdHRwSW9IZWFkZXIgIT0g TlVMTCkgew0KPiA+ID4gKyAgICBpZiAoSHR0cElvSGVhZGVyLT5IZWFkZXJDb3VudCAhPSAwKSB7 DQo+ID4gPiArICAgICAgZm9yIChJbmRleCA9IDA7IEluZGV4IDwgSHR0cElvSGVhZGVyLT5IZWFk ZXJDb3VudDsgSW5kZXgrKykgew0KPiA+ID4gKyAgICAgICAgRnJlZVBvb2wgKEh0dHBJb0hlYWRl ci0+SGVhZGVyc1tJbmRleF0uRmllbGROYW1lKTsNCj4gPiA+ICsgICAgICAgIFplcm9NZW0gKEh0 dHBJb0hlYWRlci0+SGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSwNCj4gPiA+ICsgQXNjaWlTdHJT aXplDQo+ID4gKEh0dHBJb0hlYWRlci0+SGVhZGVyc1tJbmRleF0uRmllbGRWYWx1ZSkpOw0KPiA+ ID4gKyAgICAgICAgRnJlZVBvb2wgKEh0dHBJb0hlYWRlci0+SGVhZGVyc1tJbmRleF0uRmllbGRW YWx1ZSk7DQo+ID4gPiArICAgICAgfQ0KPiA+ID4gKyAgICB9DQo+ID4gPiArICAgIEZyZWVQb29s IChIdHRwSW9IZWFkZXIpOw0KPiA+ID4gKyAgfQ0KPiA+ID4gK30NCj4gPiA+ICsNCj4gPiA+ICsv KioNCj4gPiA+ICsgIFNldCBvciB1cGRhdGUgYSBIVFRQIGhlYWRlciB3aXRoIHRoZSBmaWVsZCBu YW1lIGFuZCBjb3JyZXNwb25kaW5nDQo+ID4gdmFsdWUuDQo+ID4gPiArDQo+ID4gPiArICBAcGFy YW1baW5dICBIdHRwSW9IZWFkZXIgICAgICAgUG9pbnQgdG8gdGhlIEhUVFAgaGVhZGVyIGhvbGRl ci4NCj4gPiA+ICsgIEBwYXJhbVtpbl0gIEZpZWxkTmFtZSAgICAgICAgICBOdWxsIHRlcm1pbmF0 ZWQgc3RyaW5nIHdoaWNoIGRlc2NyaWJlcyBhDQo+ID4gZmllbGQgbmFtZS4NCj4gPiA+ICsgIEBw YXJhbVtpbl0gIEZpZWxkVmFsdWUgICAgICAgICBOdWxsIHRlcm1pbmF0ZWQgc3RyaW5nIHdoaWNo IGRlc2NyaWJlcyB0aGUNCj4gPiBjb3JyZXNwb25kaW5nIGZpZWxkIHZhbHVlLg0KPiA+ID4gKw0K PiA+ID4gKyAgQHJldHZhbCAgRUZJX1NVQ0NFU1MgICAgICAgICAgIFRoZSBIVFRQIGhlYWRlciBo YXMgYmVlbiBzZXQgb3IgdXBkYXRlZC4NCj4gPiA+ICsgIEByZXR2YWwgIEVGSV9JTlZBTElEX1BB UkFNRVRFUiBBbnkgaW5wdXQgcGFyYW1ldGVyIGlzIGludmFsaWQuDQo+ID4gPiArICBAcmV0dmFs ICBFRklfT1VUX09GX1JFU09VUkNFUyAgSW5zdWZmaWNpZW50IHJlc291cmNlIHRvIGNvbXBsZXRl DQo+ID4gPiArIHRoZQ0KPiA+IG9wZXJhdGlvbi4NCj4gPiA+ICsgIEByZXR2YWwgIE90aGVyICAg ICAgICAgICAgICAgICBVbmV4cGVjdGVkIGVycm9yIGhhcHBlbmVkLg0KPiA+ID4gKw0KPiA+ID4g KyoqLw0KPiA+ID4gK0VGSV9TVEFUVVMNCj4gPiA+ICtIdHRwSW9TZXRIZWFkZXIgKA0KPiA+ID4g KyAgSU4gIEhUVFBfSU9fSEVBREVSICAgICAgICpIdHRwSW9IZWFkZXIsDQo+ID4gPiArICBJTiAg Q0hBUjggICAgICAgICAgICAgICAgKkZpZWxkTmFtZSwNCj4gPiA+ICsgIElOICBDSEFSOCAgICAg ICAgICAgICAgICAqRmllbGRWYWx1ZQ0KPiA+ID4gKyAgKQ0KPiA+ID4gK3sNCj4gPiA+ICsgIEVG SV9IVFRQX0hFQURFUiAgICAgICAqSGVhZGVyOw0KPiA+ID4gKyAgVUlOVE4gICAgICAgICAgICAg ICAgIFN0clNpemU7DQo+ID4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgKk5ld0ZpZWxkVmFs dWU7DQo+ID4gPiArDQo+ID4gPiArICBpZiAoSHR0cElvSGVhZGVyID09IE5VTEwgfHwgRmllbGRO YW1lID09IE5VTEwgfHwgRmllbGRWYWx1ZSA9PSBOVUxMKQ0KPiB7DQo+ID4gPiArICAgIHJldHVy biBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQo+ID4gPiArICB9DQo+ID4gPiArDQo+ID4gPiArICBI ZWFkZXIgPSBIdHRwRmluZEhlYWRlciAoSHR0cElvSGVhZGVyLT5IZWFkZXJDb3VudCwNCj4gPiA+ ICsgSHR0cElvSGVhZGVyLT5IZWFkZXJzLCBGaWVsZE5hbWUpOyAgaWYgKEhlYWRlciA9PSBOVUxM KSB7DQo+ID4gPiArICAgIC8vDQo+ID4gPiArICAgIC8vIEFkZCBhIG5ldyBoZWFkZXIuDQo+ID4g PiArICAgIC8vDQo+ID4gPiArICAgIGlmIChIdHRwSW9IZWFkZXItPkhlYWRlckNvdW50ID49IEh0 dHBJb0hlYWRlci0+TWF4SGVhZGVyQ291bnQpDQo+IHsNCj4gPiA+ICsgICAgICByZXR1cm4gRUZJ X09VVF9PRl9SRVNPVVJDRVM7DQo+ID4gPiArICAgIH0NCj4gPiA+ICsgICAgSGVhZGVyID0gJkh0 dHBJb0hlYWRlci0+SGVhZGVyc1tIdHRwSW9IZWFkZXItPkhlYWRlckNvdW50XTsNCj4gPiA+ICsN Cj4gPiA+ICsgICAgU3RyU2l6ZSA9IEFzY2lpU3RyU2l6ZSAoRmllbGROYW1lKTsNCj4gPiA+ICsg ICAgSGVhZGVyLT5GaWVsZE5hbWUgPSBBbGxvY2F0ZVBvb2wgKFN0clNpemUpOw0KPiA+ID4gKyAg ICBpZiAoSGVhZGVyLT5GaWVsZE5hbWUgPT0gTlVMTCkgew0KPiA+ID4gKyAgICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiA+ICsgICAgfQ0KPiA+ID4gKyAgICBDb3B5TWVtIChI ZWFkZXItPkZpZWxkTmFtZSwgRmllbGROYW1lLCBTdHJTaXplKTsNCj4gPiA+ICsgICAgSGVhZGVy LT5GaWVsZE5hbWVbU3RyU2l6ZSAtMV0gPSAnXDAnOw0KPiA+ID4gKw0KPiA+ID4gKyAgICBTdHJT aXplID0gQXNjaWlTdHJTaXplIChGaWVsZFZhbHVlKTsNCj4gPiA+ICsgICAgSGVhZGVyLT5GaWVs ZFZhbHVlID0gQWxsb2NhdGVQb29sIChTdHJTaXplKTsNCj4gPiA+ICsgICAgaWYgKEhlYWRlci0+ RmllbGRWYWx1ZSA9PSBOVUxMKSB7DQo+ID4gPiArICAgICAgRnJlZVBvb2wgKEhlYWRlci0+Rmll bGROYW1lKTsNCj4gPiA+ICsgICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQo+ID4g PiArICAgIH0NCj4gPiA+ICsgICAgQ29weU1lbSAoSGVhZGVyLT5GaWVsZFZhbHVlLCBGaWVsZFZh bHVlLCBTdHJTaXplKTsNCj4gPiA+ICsgICAgSGVhZGVyLT5GaWVsZFZhbHVlW1N0clNpemUgLTFd ID0gJ1wwJzsNCj4gPiA+ICsNCj4gPiA+ICsgICAgSHR0cElvSGVhZGVyLT5IZWFkZXJDb3VudCsr Ow0KPiA+ID4gKyAgfSBlbHNlIHsNCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgLy8gVXBkYXRl IGFuIGV4aXN0aW5nIG9uZS4NCj4gPiA+ICsgICAgLy8NCj4gPiA+ICsgICAgU3RyU2l6ZSA9IEFz Y2lpU3RyU2l6ZSAoRmllbGRWYWx1ZSk7DQo+ID4gPiArICAgIE5ld0ZpZWxkVmFsdWUgPSBBbGxv Y2F0ZVBvb2wgKFN0clNpemUpOw0KPiA+ID4gKyAgICBpZiAoTmV3RmllbGRWYWx1ZSA9PSBOVUxM KSB7DQo+ID4gPiArICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ID4gKyAg ICB9DQo+ID4gPiArICAgIENvcHlNZW0gKE5ld0ZpZWxkVmFsdWUsIEZpZWxkVmFsdWUsIFN0clNp emUpOw0KPiA+ID4gKyAgICBOZXdGaWVsZFZhbHVlW1N0clNpemUgLTFdID0gJ1wwJzsNCj4gPiA+ ICsNCj4gPiA+ICsgICAgaWYgKEhlYWRlci0+RmllbGRWYWx1ZSAhPSBOVUxMKSB7DQo+ID4gPiAr ICAgICAgRnJlZVBvb2wgKEhlYWRlci0+RmllbGRWYWx1ZSk7DQo+ID4gPiArICAgIH0NCj4gPiA+ ICsgICAgSGVhZGVyLT5GaWVsZFZhbHVlID0gTmV3RmllbGRWYWx1ZTsgIH0NCj4gPiA+ICsNCj4g PiA+ICsgIHJldHVybiBFRklfU1VDQ0VTUzsNCj4gPiA+ICt9DQo+ID4gPiArDQoNCg==