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.web12.9486.1603981507779564345 for ; Thu, 29 Oct 2020 07:25:07 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@hpe.com header.s=pps0720 header.b=cUAHkpij; spf=pass (domain: hpe.com, ip: 148.163.147.86, mailfrom: prvs=05714af0d0=abner.chang@hpe.com) Received: from pps.filterd (m0134422.ppops.net [127.0.0.1]) by mx0b-002e3701.pphosted.com (8.16.0.42/8.16.0.42) with SMTP id 09TEFqgM017197; Thu, 29 Oct 2020 14:25:07 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=8ehkPnqHUudLpsQtoUDhNT2oOyH2eZMq5Aydk8b+4Us=; b=cUAHkpijJs9Kb0Z6x3ecwt8XgIb/6pQL1lHwp8So8CTfOYFeAQW17vM/8fgsBqdvW8M5 QuF/hFZAYW6vkU8kb62vDQqzRKTS3vxV4R5geyqbyOcDPe8LWC7NSy18hKOtcV9yZobp TdZbUaMXQ6SRrNFCIGxywCtE37i0j+7uGhaIU0frPvX5P6qbiWaP0iyusf7VOp1xgH4o Oxnzqd7BlJLMTa4Aorvwz6ZLgTIW+QzUuCiD0JKpjfhUgVzhIXOX8CRGWeeY3f10u7/3 LBrJt0FnRbGDKnfGTU/41NTB7IWodR4tjHPSGmk1INASM8RXq6cif+kqBmk0wXbya/Dz iQ== Received: from g4t3427.houston.hpe.com (g4t3427.houston.hpe.com [15.241.140.73]) by mx0b-002e3701.pphosted.com with ESMTP id 34fan1sm7n-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Thu, 29 Oct 2020 14:25:06 +0000 Received: from G2W6311.americas.hpqcorp.net (g2w6311.austin.hp.com [16.197.64.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3427.houston.hpe.com (Postfix) with ESMTPS id 1483485; Thu, 29 Oct 2020 14:25:06 +0000 (UTC) Received: from G9W8669.americas.hpqcorp.net (16.220.49.28) by G2W6311.americas.hpqcorp.net (16.197.64.53) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 29 Oct 2020 14:24:44 +0000 Received: from G2W6311.americas.hpqcorp.net (16.197.64.53) by G9W8669.americas.hpqcorp.net (16.220.49.28) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Thu, 29 Oct 2020 14:24:44 +0000 Received: from NAM11-DM6-obe.outbound.protection.outlook.com (15.241.52.13) by G2W6311.americas.hpqcorp.net (16.197.64.53) with Microsoft SMTP Server (TLS) id 15.0.1497.2 via Frontend Transport; Thu, 29 Oct 2020 14:24:44 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=JCdAJ54G9/I1KjkzIACzRfcaf1UrBFbi0SbFesht4TqxlIP4udxE/BK9THQvnaKrP/ZCu9bNVc623DdR/kOdVfDq42OcEDJOr8bAApD47inXIpZGEGUkO3akRxIArgqvjqc1ER/eafQF5czbYxDBzQo3PJnyxkmyImcyIbMI9/CKfQqBzJsseTqjMo63heZz8ahB+e1NNrhSp2glJdR9A9xOASD3gjL7TbbQwDjeQCxmdeUbwySl3q2ChOgtVF50egvtky0ajOMcYcdlA0Oe1V6Na8F4RdfZNJshPS8BM8x1rgSQ/VXN4RYxaX/X8yDzkBwmwHCIIwSXJ4KlhCZDZw== 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=8ehkPnqHUudLpsQtoUDhNT2oOyH2eZMq5Aydk8b+4Us=; b=oA1pKMF5An1UbD/gB1qNEJLdnU6kXxZ+XermFy+fJgLU/snz/YJnzpOJMGW7BQacJjqtWNYo2ma49ehMTT+olJCkQh+akDX4Fx2qmBYrYr0BPAO4IHGLp64qLcvU9uwxb+oigxYxIjW/PO/wPfZv/vMPRWopsxGr1/6ix/yW7JAgb/n7m3QTLaprzN9HJLNv2BPmEaE7DAYenpdFeHqnvOBbKFhuRH7oAwh6+s6MMbkL5ZHfJRWvm9jRlJVLB+zZury5xd30xvGgcHK+5lZE1U3qfolIc0SCyJPllittQE45NZFmSl6Xbs2WWdI/GZ+AhkkQEWDuu6Js9iFJDCKGlg== 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 CS1PR8401MB0662.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:750c::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3499.28; Thu, 29 Oct 2020 14:24:42 +0000 Received: from CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::f4a5:2722:be1c:7222]) by CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM ([fe80::f4a5:2722:be1c:7222%6]) with mapi id 15.20.3477.029; Thu, 29 Oct 2020 14:24:42 +0000 From: "Abner Chang" To: "Rabeda, Maciej" , "devel@edk2.groups.io" CC: Jiaxin Wu , Siyuan Fu , "Wang, Nickle (HPS SW)" Subject: Re: [DxeHttpIoLib PATCH V3 1/3] NetworkPkg/Library: Implementation of Http IO Helper Library Thread-Topic: [DxeHttpIoLib PATCH V3 1/3] NetworkPkg/Library: Implementation of Http IO Helper Library Thread-Index: AQHWrVxBYOTyB6JSEUy/iCtRJRrkhqmuGjcw Date: Thu, 29 Oct 2020 14:24:42 +0000 Message-ID: References: <20201026060537.31852-1-abner.chang@hpe.com> <20201026060537.31852-2-abner.chang@hpe.com> <6a4f6c0f-dadc-8aef-c56e-cb946b0640ca@linux.intel.com> In-Reply-To: <6a4f6c0f-dadc-8aef-c56e-cb946b0640ca@linux.intel.com> 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: 715c98c1-fac1-49f8-846b-08d87c16606c x-ms-traffictypediagnostic: CS1PR8401MB0662: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:8882; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: t+xzM71KiWzYqPqGrxlY+w57xJPIK4Dmw9ghmIS2uV7UFYr7U6QKTbgl/kp+XEdlobB5z8sOOKdXsaUveX3jPpsBzHBv037pKFs15I+Kq+Gyr0c7Or2ETR0Wy2T8O5/WWWiu4LwuX7dG6McrHE2k1xDO3Ten0qp5P+qdQYgEBen0F7XQO+QAkmvpqg9b9AR0YqnhPk3VJZqSnIlpGUjGnyj+0m7E4Y26mSJOEfrRkk08FvmxXDokiDV3m/A8TKIPSw6vhMxljg9dt8FtUsL+SptVHYgYdo1jQN1n03BrXvWeWJfUFnGSqakt6dcTxlZ+xneSoiKyYf8NznEbhKWEVA== 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:(6029001)(396003)(376002)(39860400002)(136003)(366004)(346002)(52536014)(55016002)(316002)(8936002)(76116006)(53546011)(66556008)(64756008)(66446008)(66476007)(66946007)(110136005)(9686003)(7696005)(54906003)(8676002)(5660300002)(2906002)(4326008)(71200400001)(30864003)(83380400001)(86362001)(19627235002)(6506007)(478600001)(186003)(33656002)(26005)(579004)(559001);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata: pbZq9EL979/nz47iwsBRmAQbc57WvZdrxkDhOTWdItI120u3JnyTJSwlPayaXqQKt7q4X3f2PLGirFFB3Q0AS0QDClsDrE9F3cxsR21ntqnM1eg21gyZPPIiPd3qkEqinZ6MluCIufCeYbUST3KnMQwgae01reZzDaPLhE60wDo/fsj6OPvHiCihwyRBXqRkK1lzPYyuYAxSIC7odco7Gx0xpVppxIae78nuqQC9LEVhuoGm5dyATzYvbWlik4ZVFS07zhhDjKW0ADzWUREV45KPZod81ZgyVbACSXIU2tEojGRvJ2Ak6FRUDca0ogOMHhBXEWNv2CuYBMFXW5MK9Wd7KDo6gwnIhsTnK8ORx9Nu7qcaXHBK9u5msp+YaoAfJqEwr/TDMl+S3bMw7GqQncTnf6zKLWTjUScA7LMLdhwggdrhSJf1qODTAAjCFtHUvceh5vJfdiwhJtq9w8Om12QLBMlrNDtT/SJc0AINwR8cLbFmrK9T9Jc62yHzqSxXfs5EyK1zsBDQk/gH0xOevrMUca01QK+8seKCjzeOZRxIRDTvhr3PE/1CJh4gWuGN/o+40zqqQ9JL1IGKd4FdrC8ixmsLDiRrB/lOEUJigezLlka+KYTJPzMlpI1CIJJkGk7WAGng4fDWsElXb1miXA== X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: CS1PR8401MB1144.NAMPRD84.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 715c98c1-fac1-49f8-846b-08d87c16606c X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Oct 2020 14:24:42.0894 (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: ktmu0HRR7Ct6By8fPTporIkQ9FkrTn3U1j9IDZxywSasA8IZknH4vtHcXLPfWhGkgv9bq4SzO7fPuloO7EXMuQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB0662 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.312,18.0.737 definitions=2020-10-29_06:2020-10-29,2020-10-29 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 lowpriorityscore=0 adultscore=0 phishscore=0 suspectscore=0 clxscore=1015 impostorscore=0 mlxscore=0 malwarescore=0 bulkscore=0 spamscore=0 mlxlogscore=999 priorityscore=1501 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2010290103 Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogUmFiZWRhLCBNYWNpZWog W21haWx0bzptYWNpZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbV0NCj4gU2VudDogVGh1cnNkYXks IE9jdG9iZXIgMjksIDIwMjAgMjo1OCBBTQ0KPiBUbzogQ2hhbmcsIEFibmVyIChIUFMgU1cvRlcg VGVjaG5vbG9naXN0KSA8YWJuZXIuY2hhbmdAaHBlLmNvbT47DQo+IGRldmVsQGVkazIuZ3JvdXBz LmlvDQo+IENjOiBKaWF4aW4gV3UgPGppYXhpbi53dUBpbnRlbC5jb20+OyBTaXl1YW4gRnUgPHNp eXVhbi5mdUBpbnRlbC5jb20+Ow0KPiBXYW5nLCBOaWNrbGUgKEhQUyBTVykgPG5pY2tsZS53YW5n QGhwZS5jb20+DQo+IFN1YmplY3Q6IFJlOiBbRHhlSHR0cElvTGliIFBBVENIIFYzIDEvM10gTmV0 d29ya1BrZy9MaWJyYXJ5Og0KPiBJbXBsZW1lbnRhdGlvbiBvZiBIdHRwIElPIEhlbHBlciBMaWJy YXJ5DQo+IA0KPiBIaSBBYm5lciwNCj4gDQo+IFJldmlldyBkb25lIC0gY29tbWVudHMgaW5saW5l LiBTb3JyeSB0byBiZSBwaWNreSBhdCB0aW1lcywgYnV0IHdlIGFsbCB3YW50DQo+IHF1YWxpdHkg Y29kZSBpbiBvdXIgVUVGSSBGV3MgOikNClRoYXQncyBubyBwcm9ibGVtIE1hY2llai4gIFY0IGlz IHNlbnQgYW5kIHNvbWUgZmVlZGJhY2tzIHRvIHlvdXIgY29tbWVudHMgaW4gbGluZS4NCg0KPiAN Cj4gVGhhbmtzLA0KPiBNYWNpZWoNCj4gDQo+IE9uIDI2LU9jdC0yMCAwNzowNSwgQWJuZXIgQ2hh bmcgd3JvdGU6DQo+ID4gQWRkIEhUVFAgSU8gaGVscGVyIGxpYnJhcnkgd2hpY2ggY291bGQgYmUg dXNlZCBieSBIVFRQIGFwcGxpY2F0aW9ucw0KPiA+IHN1Y2ggYXMgSFRUUCBCb290LCBSZWRmaXNo IEhUVFAgUkVTVCBFWCBkcml2ZXIgaW5zdGFuY2UgYW5kIGV0Yy4NCj4gPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IEFibmVyIENoYW5nIDxhYm5lci5jaGFuZ0BocGUuY29tPg0KPiA+DQo+ID4gQ2M6IE1h Y2llaiBSYWJlZGEgPG1hY2llai5yYWJlZGFAbGludXguaW50ZWwuY29tPg0KPiA+IENjOiBKaWF4 aW4gV3UgPGppYXhpbi53dUBpbnRlbC5jb20+DQo+ID4gQ2M6IFNpeXVhbiBGdSA8c2l5dWFuLmZ1 QGludGVsLmNvbT4NCj4gPiBDYzogTmlja2xlIFdhbmcgPG5pY2tsZS53YW5nQGhwZS5jb20+DQo+ ID4gLS0tDQo+ID4gICBOZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwSW9MaWIuaCAgICAg ICAgfCAzMjggKysrKysrKw0KPiA+ICAgLi4uL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJ b0xpYi5jICAgICAgIHwgODIzICsrKysrKysrKysrKysrKysrKw0KPiA+ICAgLi4uL0xpYnJhcnkv RHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5pbmYgICAgIHwgIDQzICsNCj4gPiAgIC4uLi9MaWJy YXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIudW5pICAgICB8ICAxMyArDQo+ID4gICA0IGZp bGVzIGNoYW5nZWQsIDEyMDcgaW5zZXJ0aW9ucygrKQ0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0 IE5ldHdvcmtQa2cvSW5jbHVkZS9MaWJyYXJ5L0h0dHBJb0xpYi5oDQo+ID4gICBjcmVhdGUgbW9k ZSAxMDA2NDQgTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIuYw0K PiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9MaWIv RHhlSHR0cElvTGliLmluZg0KPiA+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IE5ldHdvcmtQa2cvTGli cmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLnVuaQ0KPiA+DQo+ID4gZGlmZiAtLWdpdCBh L05ldHdvcmtQa2cvSW5jbHVkZS9MaWJyYXJ5L0h0dHBJb0xpYi5oDQo+ID4gYi9OZXR3b3JrUGtn L0luY2x1ZGUvTGlicmFyeS9IdHRwSW9MaWIuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ ID4gaW5kZXggMDAwMDAwMDAwMC4uOGYzODA0Y2E0Mg0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiAr KysgYi9OZXR3b3JrUGtnL0luY2x1ZGUvTGlicmFyeS9IdHRwSW9MaWIuaA0KPiA+IEBAIC0wLDAg KzEsMzI4IEBADQo+ID4gKy8qKiBAZmlsZQ0KPiA+ICsgIEh0dHBJb0xpYi5oLg0KPiA+ICsNCj4g PiArKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQtUGFja2FyZCBEZXZlbG9wbWVudCBDb21wYW55 LCBMLlAuPEJSPg0KPiA+ICtTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xhdXNlLVBh dGVudA0KPiA+ICsNCj4gPiArKiovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIEhUVFBfSU9fTElCX0hf DQo+ID4gKyNkZWZpbmUgSFRUUF9JT19MSUJfSF8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxJbmR1 c3RyeVN0YW5kYXJkL0h0dHAxMS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvRHBj TGliLmg+DQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0h0dHBMaWIuaD4NCj4gPiArI2luY2x1ZGUg PExpYnJhcnkvTmV0TGliLmg+DQo+ID4gKw0KPiA+ICsjZGVmaW5lIEhUVFBfSU9fTUFYX1NFTkRf UEFZTE9BRCAgICAgICAgICAgICAgICAgICAgMTAyNA0KPiA+ICsjZGVmaW5lIEhUVFBfSU9fQ0hV TktfU0laRV9TVFJJTkdfTEVOICAgICAgICAgICAgICAgNTANCj4gPiArI2RlZmluZSBIVFRQX0lP X0NIVU5LRURfVFJBTlNGRVJfQ09ESU5HX0RBVEFfTEVOR1RIIDI1Ng0KPiA+ICsNCj4gPiArLy8v DQo+ID4gKy8vLyBIVFRQX0lPX0NBTExCQUNLX0VWRU5UDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVm IGVudW0gew0KPiA+ICsgIEh0dHBJb1JlcXVlc3QsDQo+ID4gKyAgSHR0cElvUmVzcG9uc2UNCj4g PiArfSBIVFRQX0lPX0NBTExCQUNLX0VWRU5UOw0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAgSHR0 cElvIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgaW52b2tlZCB3aGVuIHNwZWNpZmll ZA0KPiBIVFRQX0lPX0NBTExCQUNLX0VWRU5UIGhhcHBlbmVkLg0KPiA+ICsNCj4gPiArICBAcGFy YW1baW5dICAgIEV2ZW50VHlwZSAgICAgIEluZGljYXRlIHRoZSBFdmVudCB0eXBlIHRoYXQgb2Nj dXJzIGluIHRoZQ0KPiBjdXJyZW50IGNhbGxiYWNrLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgTWVz c2FnZSAgICAgICAgSFRUUCBtZXNzYWdlIHdoaWNoIHdpbGwgYmUgc2VuZCB0bywgb3IganVzdA0K PiByZWNlaXZlZCBmcm9tIEhUVFAgc2VydmVyLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgQ29udGV4 dCAgICAgICAgVGhlIENhbGxiYWNrIENvbnRleHQgcG9pbnRlci4NCj4gPiArDQo+ID4gKyAgQHJl dHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBUZWxscyB0aGUgSHR0cElvIHRvIGNvbnRpbnVlIHRo ZSBIVFRQIHByb2Nlc3MuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICBUZWxs cyB0aGUgSHR0cElvIHRvIGFib3J0IHRoZSBjdXJyZW50IEhUVFAgcHJvY2Vzcy4NCj4gPiArKiov DQo+ID4gK3R5cGVkZWYNCj4gPiArRUZJX1NUQVRVUw0KPiA+ICsoRUZJQVBJICogSFRUUF9JT19D QUxMQkFDSykgKA0KPiA+ICsgIElOICBIVFRQX0lPX0NBTExCQUNLX0VWRU5UICAgIEV2ZW50VHlw ZSwNCj4gPiArICBJTiAgRUZJX0hUVFBfTUVTU0FHRSAgICAgICAgICAqTWVzc2FnZSwNCj4gPiAr ICBJTiAgVk9JRCAgICAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0KPiA+ICsgICk7DQo+ID4g Kw0KPiA+ICsvLy8NCj4gPiArLy8vIEEgd3JhcHBlciBzdHJ1Y3R1cmUgdG8gaG9sZCB0aGUgcmVj ZWl2ZWQgSFRUUCByZXNwb25zZSBkYXRhLg0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qg ew0KPiA+ICsgIEVGSV9IVFRQX1JFU1BPTlNFX0RBVEEgICAgICBSZXNwb25zZTsNCj4gPiArICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ291bnQ7DQo+ID4gKyAgRUZJX0hUVFBf SEVBREVSICAgICAgICAgICAgICpIZWFkZXJzOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAg ICAgICAgICBCb2R5TGVuZ3RoOw0KPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAq Qm9keTsNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICt9 IEhUVFBfSU9fUkVTUE9OU0VfREFUQTsNCj4gPiArDQo+ID4gKy8vLw0KPiA+ICsvLy8gSFRUUF9J TyBjb25maWd1cmF0aW9uIGRhdGEgZm9yIElQdjQgLy8vIHR5cGVkZWYgc3RydWN0IHsNCj4gPiAr ICBFRklfSFRUUF9WRVJTSU9OICAgICAgICAgIEh0dHBWZXJzaW9uOw0KPiA+ICsgIFVJTlQzMiAg ICAgICAgICAgICAgICAgICAgUmVxdWVzdFRpbWVPdXQ7ICAvLy88IEluIG1pbGxpc2Vjb25kcy4N Cj4gPiArICBVSU5UMzIgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlVGltZU91dDsgLy8vPCBJ biBtaWxsaXNlY29uZHMuDQo+ID4gKyAgQk9PTEVBTiAgICAgICAgICAgICAgICAgICBVc2VEZWZh dWx0QWRkcmVzczsNCj4gPiArICBFRklfSVB2NF9BRERSRVNTICAgICAgICAgIExvY2FsSXA7DQo+ ID4gKyAgRUZJX0lQdjRfQUREUkVTUyAgICAgICAgICBTdWJuZXRNYXNrOw0KPiA+ICsgIFVJTlQx NiAgICAgICAgICAgICAgICAgICAgTG9jYWxQb3J0Ow0KPiA+ICt9IEhUVFA0X0lPX0NPTkZJR19E QVRBOw0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBIVFRQX0lPIGNvbmZpZ3VyYXRpb24gZGF0 YSBmb3IgSVB2NiAvLy8gdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIEVGSV9IVFRQX1ZFUlNJT04g ICAgICAgICAgSHR0cFZlcnNpb247DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBS ZXF1ZXN0VGltZU91dDsgIC8vLzwgSW4gbWlsbGlzZWNvbmRzLg0KPiA+ICsgIEJPT0xFQU4gICAg ICAgICAgICAgICAgICAgVXNlRGVmYXVsdEFkZHJlc3M7DQo+ID4gKyAgRUZJX0lQdjZfQUREUkVT UyAgICAgICAgICBMb2NhbElwOw0KPiA+ICsgIFVJTlQxNiAgICAgICAgICAgICAgICAgICAgTG9j YWxQb3J0Ow0KPiA+ICt9IEhUVFA2X0lPX0NPTkZJR19EQVRBOw0KPiA+ICsNCj4gPiArLy8vDQo+ ID4gKy8vLyBIVFRQX0lPIGNvbmZpZ3VyYXRpb24NCj4gPiArLy8vDQo+ID4gK3R5cGVkZWYgdW5p b24gew0KPiA+ICsgIEhUVFA0X0lPX0NPTkZJR19EQVRBICAgICAgIENvbmZpZzQ7DQo+ID4gKyAg SFRUUDZfSU9fQ09ORklHX0RBVEEgICAgICAgQ29uZmlnNjsNCj4gPiArfSBIVFRQX0lPX0NPTkZJ R19EQVRBOw0KPiA+ICsNCj4gPiArLy8vDQo+ID4gKy8vLyBIVFRQX0lPIHdyYXBwZXIgb2YgdGhl IEVGSSBIVFRQIHNlcnZpY2UuDQo+ID4gKy8vLw0KPiA+ICt0eXBlZGVmIHN0cnVjdCB7DQo+ID4g KyAgVUlOVDggICAgICAgICAgICAgICAgICAgICBJcFZlcnNpb247DQo+ID4gKyAgRUZJX0hBTkRM RSAgICAgICAgICAgICAgICBJbWFnZTsNCj4gPiArICBFRklfSEFORExFICAgICAgICAgICAgICAg IENvbnRyb2xsZXI7DQo+ID4gKyAgRUZJX0hBTkRMRSAgICAgICAgICAgICAgICBIYW5kbGU7DQo+ ID4gKw0KPiA+ICsgIEVGSV9IVFRQX1BST1RPQ09MICAgICAgICAgKkh0dHA7DQo+ID4gKw0KPiA+ ICsgIEhUVFBfSU9fQ0FMTEJBQ0sgICAgICAgICAgQ2FsbGJhY2s7DQo+ID4gKyAgVk9JRCAgICAg ICAgICAgICAgICAgICAgICAqQ29udGV4dDsNCj4gPiArDQo+ID4gKyAgRUZJX0hUVFBfVE9LRU4g ICAgICAgICAgICBSZXFUb2tlbjsNCj4gPiArICBFRklfSFRUUF9NRVNTQUdFICAgICAgICAgIFJl cU1lc3NhZ2U7DQo+ID4gKyAgRUZJX0hUVFBfVE9LRU4gICAgICAgICAgICBSc3BUb2tlbjsNCj4g PiArICBFRklfSFRUUF9NRVNTQUdFICAgICAgICAgIFJzcE1lc3NhZ2U7DQo+ID4gKw0KPiA+ICsg IEJPT0xFQU4gICAgICAgICAgICAgICAgICAgSXNUeERvbmU7DQo+ID4gKyAgQk9PTEVBTiAgICAg ICAgICAgICAgICAgICBJc1J4RG9uZTsNCj4gPiArDQo+ID4gKyAgRUZJX0VWRU5UICAgICAgICAg ICAgICAgICBUaW1lb3V0RXZlbnQ7DQo+ID4gKyAgVUlOVDMyICAgICAgICAgICAgICAgICAgICBU aW1lb3V0Ow0KPiA+ICt9IEhUVFBfSU87DQo+ID4gKw0KPiA+ICsvLy8NCj4gPiArLy8vIFByb2Nl c3MgY29kZSBvZiBIVFRQIGNodW5rIHRyYW5zZmVyLg0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBl bnVtICB7DQo+ID4gKyAgSHR0cElvU2VuZENodW5rTm9uZSA9IDAsDQo+ID4gKyAgSHR0cElvU2Vu ZENodW5rSGVhZGVyWmVyb0NvbnRlbnQsDQo+ID4gKyAgSHR0cElvU2VuZENodW5rQ29udGVudCwN Cj4gPiArICBIdHRwSW9TZW5kQ2h1bmtFbmRDaHVuaywNCj4gPiArICBIdHRwSW9TZW5kQ2h1bmtG aW5pc2gNCj4gPiArfSBIVFRQX0lPX1NFTkRfQ0hVTktfUFJPQ0VTUzsNCj4gPiArDQo+ID4gKy8v Lw0KPiA+ICsvLy8gUHJvY2VzcyBjb2RlIG9mIEhUVFAgbm9uIGNodW5rIHRyYW5zZmVyLg0KPiA+ ICsvLy8NCj4gPiArdHlwZWRlZiBlbnVtICB7DQo+ID4gKyAgSHR0cElvU2VuZE5vbkNodW5rTm9u ZSA9IDAsDQo+ID4gKyAgSHR0cElvU2VuZE5vbkNodW5rSGVhZGVyWmVyb0NvbnRlbnQsDQo+ID4g KyAgSHR0cElvU2VuZE5vbkNodW5rQ29udGVudCwNCj4gPiArICBIdHRwSW9TZW5kTm9uQ2h1bmtG aW5pc2gNCj4gPiArfSBIVFRQX0lPX1NFTkRfTk9OX0NIVU5LX1BST0NFU1M7DQo+ID4gKw0KPiA+ ICsvLy8NCj4gPiArLy8vIENodW5rIGxpbmtzIGZvciBIVFRQIGNodW5rZWQgdHJhbnNmZXIgY29k aW5nLg0KPiA+ICsvLy8NCj4gPiArdHlwZWRlZiBzdHJ1Y3Qgew0KPiA+ICsgIExJU1RfRU5UUlkg IE5leHRDaHVuazsNCj4gPiArICBVSU5UTiAgICAgICBMZW5ndGg7DQo+ID4gKyAgQ0hBUjggICAg ICAgKkRhdGE7DQo+ID4gK30gSFRUUF9JT19DSFVOS1M7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiAr ICBOb3RpZnkgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIHdoZW4gYW4gZXZlbnQgaXMgdHJpZ2dlcmVk Lg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBDb250ZXh0ICAgICAgICAgVGhlIG9wYXF1ZSBw YXJhbWV0ZXIgdG8gdGhlIGZ1bmN0aW9uLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4g PiArRUZJQVBJDQo+ID4gK0h0dHBJb05vdGlmeURwYyAoDQo+ID4gKyAgSU4gVk9JRCAgICAgICAg ICAgICAgICAqQ29udGV4dA0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBSZXF1 ZXN0IEh0dHBJb05vdGlmeURwYyBhcyBhIERQQyBhdCBUUExfQ0FMTEJBQ0suDQo+ID4gKw0KPiA+ ICsgIEBwYXJhbVtpbl0gIEV2ZW50ICAgICAgICAgICAgICAgICBUaGUgZXZlbnQgc2lnbmFsZWQu DQo+ID4gKyAgQHBhcmFtW2luXSAgQ29udGV4dCAgICAgICAgICAgICAgIFRoZSBvcGFxdWUgcGFy YW1ldGVyIHRvIHRoZSBmdW5jdGlvbi4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4g K0VGSUFQSQ0KPiA+ICtIdHRwSW9Ob3RpZnkgKA0KPiA+ICsgIElOIEVGSV9FVkVOVCAgICAgICAg ICAgICAgRXZlbnQsDQo+ID4gKyAgSU4gVk9JRCAgICAgICAgICAgICAgICAgICAqQ29udGV4dA0K PiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBEZXN0cm95IHRoZSBIVFRQX0lPIGFu ZCByZWxlYXNlIHRoZSByZXNvdXJjZXMuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gIEh0dHBJ byAgICAgICAgICBUaGUgSFRUUF9JTyB3aGljaCB3cmFwcyB0aGUgSFRUUCBzZXJ2aWNlIHRvIGJl DQo+IGRlc3Ryb3llZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtWT0lEDQo+ID4gK0h0dHBJb0Rl c3Ryb3lJbyAoDQo+ID4gKyAgSU4gSFRUUF9JTyAgICAgICAgICAgICAgICAqSHR0cElvDQo+ID4g KyAgKTsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENyZWF0ZSBhIEhUVFBfSU8gdG8gYWNjZXNz IHRoZSBIVFRQIHNlcnZpY2UuIEl0IHdpbGwgY3JlYXRlIGFuZA0KPiA+ICtjb25maWd1cmUNCj4g PiArICBhIEhUVFAgY2hpbGQgaGFuZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICBJbWFn ZSAgICAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBkcml2ZXIgaW1hZ2UuDQo+ID4gKyAgQHBhcmFt W2luXSAgQ29udHJvbGxlciAgICAgVGhlIGhhbmRsZSBvZiB0aGUgY29udHJvbGxlci4NCj4gPiAr ICBAcGFyYW1baW5dICBJcFZlcnNpb24gICAgICBJUF9WRVJTSU9OXzQgb3IgSVBfVkVSU0lPTl82 Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbmZpZ0RhdGEgICAgIFRoZSBIVFRQX0lPIGNvbmZpZ3Vy YXRpb24gZGF0YS4NCj4gPiArICBAcGFyYW1baW5dICBDYWxsYmFjayAgICAgICBDYWxsYmFjayBm dW5jdGlvbiB3aGljaCB3aWxsIGJlIGludm9rZWQgd2hlbg0KPiBzcGVjaWZpZWQNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBIVFRQX0lPX0NBTExCQUNLX0VWRU5UIGhhcHBlbmVk Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgIFRoZSBDb250ZXh0IGRhdGEgd2hp Y2ggd2lsbCBiZSBwYXNzZWQgdG8gdGhlDQo+IENhbGxiYWNrIGZ1bmN0aW9uLg0KPiA+ICsgIEBw YXJhbVtvdXRdIEh0dHBJbyAgICAgICAgIFRoZSBIVFRQX0lPLg0KPiA+ICsNCj4gPiArICBAcmV0 dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIEhUVFBfSU8gaXMgY3JlYXRlZCBhbmQgY29u ZmlndXJlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9yIG1v cmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gPiArICBAcmV0dmFsIEVGSV9VTlNVUFBPUlRF RCAgICAgICAgT25lIG9yIG1vcmUgb2YgdGhlIGNvbnRyb2wgb3B0aW9ucyBhcmUNCj4gbm90DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnRlZCBpbiB0aGUgaW1w bGVtZW50YXRpb24uDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgIEZhaWxl ZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAg ICAgIEZhaWxlZCB0byBjcmVhdGUgdGhlIEhUVFBfSU8gb3IgY29uZmlndXJlIGl0Lg0KPiA+ICsN Cj4gPiArKiovDQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSHR0cElvQ3JlYXRlSW8gKA0KPiA+ICsg IElOIEVGSV9IQU5ETEUgICAgICAgICAgICAgSW1hZ2UsDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAg ICAgICAgICAgICBDb250cm9sbGVyLA0KPiA+ICsgIElOIFVJTlQ4ICAgICAgICAgICAgICAgICAg SXBWZXJzaW9uLA0KPiA+ICsgIElOIEhUVFBfSU9fQ09ORklHX0RBVEEgICAgKkNvbmZpZ0RhdGEs DQo+ID4gKyAgSU4gSFRUUF9JT19DQUxMQkFDSyAgICAgICBDYWxsYmFjaywNCj4gPiArICBJTiBW T0lEICAgICAgICAgICAgICAgICAgICpDb250ZXh0LA0KPiA+ICsgIE9VVCBIVFRQX0lPICAgICAg ICAgICAgICAgKkh0dHBJbw0KPiA+ICsgICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTeW5j aHJvbm91c2x5IHNlbmQgYSBIVFRQIFJFUVVFU1QgbWVzc2FnZSB0byB0aGUgc2VydmVyLg0KPiA+ ICsNCj4gPiArICBAcGFyYW1baW5dICAgSHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBw aW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIFJlcXVlc3QgICAgICAg ICAgQSBwb2ludGVyIHRvIHN0b3JhZ2Ugc3VjaCBkYXRhIGFzIFVSTCBhbmQNCj4gSFRUUCBtZXRo b2QuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAgICAgTnVtYmVyIG9mIEhUVFAg aGVhZGVyIHN0cnVjdHVyZXMgaW4NCj4gSGVhZGVycyBsaXN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0g ICBIZWFkZXJzICAgICAgICAgIEFycmF5IGNvbnRhaW5pbmcgbGlzdCBvZiBIVFRQIGhlYWRlcnMu DQo+ID4gKyAgQHBhcmFtW2luXSAgIEJvZHlMZW5ndGggICAgICAgTGVuZ3RoIGluIGJ5dGVzIG9m IHRoZSBIVFRQIGJvZHkuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEJvZHkgICAgICAgICAgICAgQm9k eSBhc3NvY2lhdGVkIHdpdGggdGhlIEhUVFAgcmVxdWVzdC4NCj4gPiArDQo+ID4gKyAgQHJldHZh bCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBIVFRQIHJlcXVlc3QgaXMgdHJhbnNtaXR0ZWQu DQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIE9uZSBvciBtb3JlIHBhcmFt ZXRlcnMgYXJlIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAg IEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJldHZhbCBFRklfREVWSUNFX0VS Uk9SICAgICAgIEFuIHVuZXhwZWN0ZWQgbmV0d29yayBvciBzeXN0ZW0gZXJyb3INCj4gb2NjdXJy ZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBh cyBpbmRpY2F0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRw SW9TZW5kUmVxdWVzdCAoDQo+ID4gKyAgSU4gIEhUVFBfSU8gICAgICAgICAgICAgICAgKkh0dHBJ bywNCj4gPiArICBJTiAgRUZJX0hUVFBfUkVRVUVTVF9EQVRBICAqUmVxdWVzdCwgICAgICBPUFRJ T05BTA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgIEhlYWRlckNvdW50LA0KPiA+ ICsgIElOICBFRklfSFRUUF9IRUFERVIgICAgICAgICpIZWFkZXJzLCAgICAgIE9QVElPTkFMDQo+ ID4gKyAgSU4gIFVJTlROICAgICAgICAgICAgICAgICAgQm9keUxlbmd0aCwNCj4gPiArICBJTiAg Vk9JRCAgICAgICAgICAgICAgICAgICAqQm9keSAgICAgICAgICBPUFRJT05BTA0KPiA+ICsgICk7 DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHJlY2VpdmUgYSBIVFRQIFJF U1BPTlNFIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5d ICAgSHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZpY2Uu DQo+ID4gKyAgQHBhcmFtW2luXSAgIFJlY3ZNc2dIZWFkZXIgICAgVFJVRSB0byByZWNlaXZlIGEg bmV3IEhUVFAgcmVzcG9uc2UNCj4gKGZyb20gbWVzc2FnZSBoZWFkZXIpLg0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEZBTFNFIHRvIGNvbnRpbnVlIHJlY2VpdmUgdGhlIHBy ZXZpb3VzIHJlc3BvbnNlIG1lc3NhZ2UuDQo+ID4gKyAgQHBhcmFtW291dF0gIFJlc3BvbnNlRGF0 YSAgICAgUG9pbnQgdG8gYSB3cmFwcGVyIG9mIHRoZSByZWNlaXZlZA0KPiByZXNwb25zZSBkYXRh Lg0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICAgVGhlIEhUVFAg cmVzcG9uc2UgaXMgcmVjZWl2ZWQuDQo+ID4gKyAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVU RVIgIE9uZSBvciBtb3JlIHBhcmFtZXRlcnMgYXJlIGludmFsaWQuDQo+ID4gKyAgQHJldHZhbCBF RklfT1VUX09GX1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAg QHJldHZhbCBFRklfREVWSUNFX0VSUk9SICAgICAgIEFuIHVuZXhwZWN0ZWQgbmV0d29yayBvciBz eXN0ZW0gZXJyb3INCj4gb2NjdXJyZWQuDQo+ID4gKyAgQHJldHZhbCBPdGhlcnMgICAgICAgICAg ICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiAr RUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9SZWN2UmVzcG9uc2UgKA0KPiA+ICsgIElOICAgICAgSFRU UF9JTyAgICAgICAgICAgICAgICAgICpIdHRwSW8sDQo+ID4gKyAgSU4gICAgICBCT09MRUFOICAg ICAgICAgICAgICAgICAgUmVjdk1zZ0hlYWRlciwNCj4gPiArICBPVVQgICAgIEhUVFBfSU9fUkVT UE9OU0VfREFUQSAgICAqUmVzcG9uc2VEYXRhDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4gKy8qKg0K PiA+ICsgIEdldCB0aGUgdmFsdWUgb2YgdGhlIGNvbnRlbnQgbGVuZ3RoIGlmIHRoZXJlIGlzIGEg IkNvbnRlbnQtTGVuZ3RoIiBoZWFkZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICAgSGVh ZGVyQ291bnQgICAgICAgIE51bWJlciBvZiBIVFRQIGhlYWRlciBzdHJ1Y3R1cmVzIGluDQo+IEhl YWRlcnMuDQo+ID4gKyAgQHBhcmFtW2luXSAgICBIZWFkZXJzICAgICAgICAgICAgQXJyYXkgY29u dGFpbmluZyBsaXN0IG9mIEhUVFAgaGVhZGVycy4NCj4gPiArICBAcGFyYW1bb3V0XSAgIENvbnRl bnRMZW5ndGggICAgICBQb2ludGVyIHRvIHNhdmUgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50DQo+ IGxlbmd0aC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAg U3VjY2Vzc2Z1bGx5IGdldCB0aGUgY29udGVudCBsZW5ndGguDQo+ID4gKyAgQHJldHZhbCBFRklf Tk9UX0ZPVU5EICAgICAgICAgICAgTm8gIkNvbnRlbnQtTGVuZ3RoIiBoZWFkZXIgaW4gdGhlDQo+ IEhlYWRlcnMuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9H ZXRDb250ZW50TGVuZ3RoICgNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgSGVh ZGVyQ291bnQsDQo+ID4gKyAgSU4gICAgIEVGSV9IVFRQX0hFQURFUiAgICAgICpIZWFkZXJzLA0K PiA+ICsgIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAgICAqQ29udGVudExlbmd0aA0KPiA+ICsg ICk7DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHJlY2VpdmUgYSBIVFRQ IFJFU1BPTlNFIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICAgSHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZp Y2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAgICAgTnVtYmVyIG9mIGhlYWRl cnMgaW4gSGVhZGVycy4NCj4gPiArICBAcGFyYW1baW5dICAgSGVhZGVycyAgICAgICAgICBBcnJh eSBjb250YWluaW5nIGxpc3Qgb2YgSFRUUCBoZWFkZXJzLg0KPiA+ICsgIEBwYXJhbVtvdXRdICBD aHVua0xpc3RIZWFkICAgIEEgcG9pbnRlciB0byByZWNlaXZjZSBsaXN0IGhlYWQgb2YgY2h1bmtl ZA0KPiBkYXRhLg0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENhbGxlciBo YXMgdG8gcmVsZWFzZSBtZW1vcnkgb2YgQ2h1bmtMaXN0SGVhZA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGFuZCBhbGwgbGlzdCBlbnRyaWVzLg0KPiA+ICsgIEBwYXJhbVtv dXRdICBDb250ZW50TGVuZ3RoICAgIFRvdGFsIGNvbnRlbnQgbGVuZ3RoDQo+ID4gKw0KPiA+ICsg IEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCBjaHVua2VkIHRyYW5zZmVy IGlzIHJlY2VpdmVkLg0KPiA+ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICBObyBj aHVua2VkIHRyYW5zZmVyIGNvZGluZyBoZWFkZXIgZm91bmQuDQo+ID4gKyAgQHJldHZhbCBFRklf T1VUX09GX1JFU09VUkNFUyAgIEZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnkuDQo+ID4gKyAgQHJl dHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIEltcHJvcGVyIHBhcmFtZXRlcnMuDQo+ID4gKyAg QHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQu DQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRVUw0KPiA+ICtIdHRwSW9HZXRDaHVua2Vk VHJhbnNmZXJDb250ZW50ICgNCj4gPiArICBJTiAgICAgSFRUUF9JTyAgICAgICAgICAgICAgKkh0 dHBJbywNCj4gPiArICBJTiAgICAgVUlOVE4gICAgICAgICAgICAgICAgSGVhZGVyQ291bnQsDQo+ ID4gKyAgSU4gICAgIEVGSV9IVFRQX0hFQURFUiAgICAgICpIZWFkZXJzLA0KPiA+ICsgIE9VVCAg ICBMSVNUX0VOVFJZICAgICAgICAgICAqKkNodW5rTGlzdEhlYWQsDQo+ID4gKyAgT1VUICAgIFVJ TlROICAgICAgICAgICAgICAgICpDb250ZW50TGVuZ3RoDQo+ID4gKyAgKTsNCj4gPiArDQo+ID4g Ky8qKg0KPiA+ICsgIFNlbmQgSFRUUCByZXF1ZXN0IGluIGNodW5rcy4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBI VFRQIHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIFNlbmRDaHVua1Byb2Nlc3MgICBQb2lu dGVyIHRvIGN1cnJlbnQgY2h1bmsgcHJvY2Vzcw0KPiBzdGF0dXMuDQo+ID4gKyAgQHBhcmFtW291 dF0gIFJlcXVlc3RNZXNzYWdlICAgICBSZXF1ZXN0IHRvIHNlbmQuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRvIHNlbmQgY2h1bmsg ZGF0YSBhY2NvcmRpbmcgdG8NCj4gU2VuZENodW5rUHJvY2Vzcy4NCj4gPiArICBAcmV0dmFsIE90 aGVyICAgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0h0dHBJb1NlbmRDaHVua2VkVHJhbnNmZXIgKA0KPiA+ICsgIElO ICBIVFRQX0lPICAgICAgICAgICAgICAgICAgICAqSHR0cElvLA0KPiA+ICsgIElOICBIVFRQX0lP X1NFTkRfQ0hVTktfUFJPQ0VTUyAqU2VuZENodW5rUHJvY2VzcywNCj4gPiArICBJTiAgRUZJX0hU VFBfTUVTU0FHRSAgICAgICAgICAgKlJlcXVlc3RNZXNzYWdlDQo+ID4gKyk7DQo+ID4gKyNlbmRp Zg0KPiA+IGRpZmYgLS1naXQgYS9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0 dHBJb0xpYi5jDQo+ID4gYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJ b0xpYi5jDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwLi44 OGQ2NDdlNDJkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL05ldHdvcmtQa2cvTGlicmFy eS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLmMNCj4gPiBAQCAtMCwwICsxLDgyMyBAQA0KPiA+ ICsvKiogQGZpbGUNCj4gPiArICBIdHRwIElPIEhlbHBlciBMaWJyYXJ5Lg0KPiA+ICsNCj4gPiAr ICAoQykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dC1QYWNrYXJkIERldmVsb3BtZW50IENvbXBhbnks IEwuUC48QlI+DQo+ID4gKyAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1Q YXRlbnQgKiovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8VWVmaS5oPg0KPiA+ICsNCj4gPiArI2lu Y2x1ZGUgPFByb3RvY29sL0h0dHAuaD4NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxMaWJyYXJ5L0Jh c2VMaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPg0KPiA+ICsj aW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KPiA+ICsjaW5jbHVkZSA8TGlicmFyeS9IdHRw SW9MaWIuaD4NCj4gPiArI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPiAj aW5jbHVkZQ0KPiA+ICs8TGlicmFyeS9QcmludExpYi5oPiAjaW5jbHVkZSA8TGlicmFyeS9VZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWIuaD4NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIE5vdGlmeSB0 aGUgY2FsbGJhY2sgZnVuY3Rpb24gd2hlbiBhbiBldmVudCBpcyB0cmlnZ2VyZWQuDQo+ID4gKw0K PiA+ICsgIEBwYXJhbVtpbl0gIENvbnRleHQgICAgICAgICBUaGUgb3BhcXVlIHBhcmFtZXRlciB0 byB0aGUgZnVuY3Rpb24uDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArVk9JRA0KPiA+ICtFRklBUEkN Cj4gPiArSHR0cElvTm90aWZ5RHBjICgNCj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICpD b250ZXh0DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgKigoQk9PTEVBTiAqKSBDb250ZXh0KSA9 IFRSVUU7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIFJlcXVlc3QgSHR0cElvTm90 aWZ5RHBjIGFzIGEgRFBDIGF0IFRQTF9DQUxMQkFDSy4NCj4gPiArDQo+ID4gKyAgQHBhcmFtW2lu XSAgRXZlbnQgICAgICAgICAgICAgICAgIFRoZSBldmVudCBzaWduYWxlZC4NCj4gPiArICBAcGFy YW1baW5dICBDb250ZXh0ICAgICAgICAgICAgICAgVGhlIG9wYXF1ZSBwYXJhbWV0ZXIgdG8gdGhl IGZ1bmN0aW9uLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK1ZPSUQNCj4gPiArRUZJQVBJDQo+ID4g K0h0dHBJb05vdGlmeSAoDQo+ID4gKyAgSU4gRUZJX0VWRU5UICAgICAgICAgICAgICBFdmVudCwN Cj4gPiArICBJTiBWT0lEICAgICAgICAgICAgICAgICAgICpDb250ZXh0DQo+ID4gKyAgKQ0KPiA+ ICt7DQo+ID4gKyAgLy8NCj4gPiArICAvLyBSZXF1ZXN0IEh0dHBJb05vdGlmeURwYyBhcyBhIERQ QyBhdCBUUExfQ0FMTEJBQ0sNCj4gPiArICAvLw0KPiA+ICsgIFF1ZXVlRHBjIChUUExfQ0FMTEJB Q0ssIEh0dHBJb05vdGlmeURwYywgQ29udGV4dCk7IH0NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsg IERlc3Ryb3kgdGhlIEhUVFBfSU8gYW5kIHJlbGVhc2UgdGhlIHJlc291cmNlcy4NCj4gPiArDQo+ ID4gKyAgQHBhcmFtW2luXSAgSHR0cElvICAgICAgICAgIFRoZSBIVFRQX0lPIHdoaWNoIHdyYXBz IHRoZSBIVFRQIHNlcnZpY2UgdG8gYmUNCj4gZGVzdHJveWVkLg0KPiA+ICsNCj4gPiArKiovDQo+ ID4gK1ZPSUQNCj4gPiArSHR0cElvRGVzdHJveUlvICgNCj4gPiArICBJTiBIVFRQX0lPICAgICAg ICAgICAgICAgICpIdHRwSW8NCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfSFRUUF9QUk9U T0NPTCAgICAgICAgICpIdHRwOw0KPiA+ICsgIEVGSV9FVkVOVCAgICAgICAgICAgICAgICAgRXZl bnQ7DQo+ID4gKw0KPiA+ICsgIGlmIChIdHRwSW8gPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJu Ow0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgRXZlbnQgPSBIdHRwSW8tPlJlcVRva2VuLkV2ZW50 Ow0KPiA+ICsgIGlmIChFdmVudCAhPSBOVUxMKSB7DQo+ID4gKyAgICBnQlMtPkNsb3NlRXZlbnQg KEV2ZW50KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEV2ZW50ID0gSHR0cElvLT5Sc3BUb2tl bi5FdmVudDsNCj4gPiArICBpZiAoRXZlbnQgIT0gTlVMTCkgew0KPiA+ICsgICAgZ0JTLT5DbG9z ZUV2ZW50IChFdmVudCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICBFdmVudCA9IEh0dHBJby0+ VGltZW91dEV2ZW50Ow0KPiA+ICsgIGlmIChFdmVudCAhPSBOVUxMKSB7DQo+ID4gKyAgICBnQlMt PkNsb3NlRXZlbnQgKEV2ZW50KTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEh0dHAgPSBIdHRw SW8tPkh0dHA7DQo+ID4gKyAgaWYgKEh0dHAgIT0gTlVMTCkgew0KPiA+ICsgICAgSHR0cC0+Q29u ZmlndXJlIChIdHRwLCBOVUxMKTsNCj4gPiArICAgIGdCUy0+Q2xvc2VQcm90b2NvbCAoDQo+ID4g KyAgICAgICAgICAgSHR0cElvLT5IYW5kbGUsDQo+ID4gKyAgICAgICAgICAgJmdFZmlIdHRwUHJv dG9jb2xHdWlkLA0KPiA+ICsgICAgICAgICAgIEh0dHBJby0+SW1hZ2UsDQo+ID4gKyAgICAgICAg ICAgSHR0cElvLT5Db250cm9sbGVyDQo+ID4gKyAgICAgICAgICAgKTsNCj4gPiArICB9DQo+ID4g Kw0KPiA+ICsgIE5ldExpYkRlc3Ryb3lTZXJ2aWNlQ2hpbGQgKA0KPiA+ICsgICAgSHR0cElvLT5D b250cm9sbGVyLA0KPiA+ICsgICAgSHR0cElvLT5JbWFnZSwNCj4gPiArICAgICZnRWZpSHR0cFNl cnZpY2VCaW5kaW5nUHJvdG9jb2xHdWlkLA0KPiA+ICsgICAgSHR0cElvLT5IYW5kbGUNCj4gPiAr ICAgICk7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ICsgIENyZWF0ZSBhIEhUVFBfSU8g dG8gYWNjZXNzIHRoZSBIVFRQIHNlcnZpY2UuIEl0IHdpbGwgY3JlYXRlIGFuZA0KPiA+ICtjb25m aWd1cmUNCj4gPiArICBhIEhUVFAgY2hpbGQgaGFuZGxlLg0KPiA+ICsNCj4gPiArICBAcGFyYW1b aW5dICBJbWFnZSAgICAgICAgICBUaGUgaGFuZGxlIG9mIHRoZSBkcml2ZXIgaW1hZ2UuDQo+ID4g KyAgQHBhcmFtW2luXSAgQ29udHJvbGxlciAgICAgVGhlIGhhbmRsZSBvZiB0aGUgY29udHJvbGxl ci4NCj4gPiArICBAcGFyYW1baW5dICBJcFZlcnNpb24gICAgICBJUF9WRVJTSU9OXzQgb3IgSVBf VkVSU0lPTl82Lg0KPiA+ICsgIEBwYXJhbVtpbl0gIENvbmZpZ0RhdGEgICAgIFRoZSBIVFRQX0lP IGNvbmZpZ3VyYXRpb24gZGF0YSAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg TlVMTCBtZWFucyBub3QgdG8gY29uZmlndXJlIHRoZSBIVFRQIGNoaWxkLg0KPiA+ICsgIEBwYXJh bVtpbl0gIENhbGxiYWNrICAgICAgIENhbGxiYWNrIGZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgaW52 b2tlZCB3aGVuDQo+IHNwZWNpZmllZA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEhUVFBfSU9fQ0FMTEJBQ0tfRVZFTlQgaGFwcGVuZWQuDQo+ID4gKyAgQHBhcmFtW2luXSAgQ29u dGV4dCAgICAgICAgVGhlIENvbnRleHQgZGF0YSB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUN Cj4gQ2FsbGJhY2sgZnVuY3Rpb24uDQo+ID4gKyAgQHBhcmFtW291dF0gSHR0cElvICAgICAgICAg VGhlIEhUVFBfSU8uDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAg ICBUaGUgSFRUUF9JTyBpcyBjcmVhdGVkIGFuZCBjb25maWd1cmVkLg0KPiA+ICsgIEByZXR2YWwg RUZJX0lOVkFMSURfUEFSQU1FVEVSICBPbmUgb3IgbW9yZSBwYXJhbWV0ZXJzIGFyZSBpbnZhbGlk Lg0KPiA+ICsgIEByZXR2YWwgRUZJX1VOU1VQUE9SVEVEICAgICAgICBPbmUgb3IgbW9yZSBvZiB0 aGUgY29udHJvbCBvcHRpb25zIGFyZQ0KPiBub3QNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3VwcG9ydGVkIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4NCj4gPiArICBAcmV0 dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4g PiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgRmFpbGVkIHRvIGNyZWF0ZSB0aGUg SFRUUF9JTyBvciBjb25maWd1cmUgaXQuDQo+ID4gKw0KPiA+ICsqKi8NCj4gPiArRUZJX1NUQVRV Uw0KPiA+ICtIdHRwSW9DcmVhdGVJbyAoDQo+ID4gKyAgSU4gRUZJX0hBTkRMRSAgICAgICAgICAg ICBJbWFnZSwNCj4gPiArICBJTiBFRklfSEFORExFICAgICAgICAgICAgIENvbnRyb2xsZXIsDQo+ ID4gKyAgSU4gVUlOVDggICAgICAgICAgICAgICAgICBJcFZlcnNpb24sDQo+ID4gKyAgSU4gSFRU UF9JT19DT05GSUdfREFUQSAgICAqQ29uZmlnRGF0YSwgT1BUSU9OQUwNCj4gPiArICBJTiBIVFRQ X0lPX0NBTExCQUNLICAgICAgIENhbGxiYWNrLA0KPiA+ICsgIElOIFZPSUQgICAgICAgICAgICAg ICAgICAgKkNvbnRleHQsDQo+ID4gKyAgT1VUIEhUVFBfSU8gICAgICAgICAgICAgICAqSHR0cElv DQo+ID4gKyAgKQ0KPiA+ICt7DQo+ID4gKyAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICBTdGF0 dXM7DQo+ID4gKyAgRUZJX0hUVFBfQ09ORklHX0RBVEEgICAgICBIdHRwQ29uZmlnRGF0YTsNCj4g PiArICBFRklfSFRUUHY0X0FDQ0VTU19QT0lOVCAgIEh0dHA0QWNjZXNzUG9pbnQ7DQo+ID4gKyAg RUZJX0hUVFB2Nl9BQ0NFU1NfUE9JTlQgICBIdHRwNkFjY2Vzc1BvaW50Ow0KPiA+ICsgIEVGSV9I VFRQX1BST1RPQ09MICAgICAgICAgKkh0dHA7DQo+ID4gKyAgRUZJX0VWRU5UICAgICAgICAgICAg ICAgICBFdmVudDsNCj4gPiArDQo+ID4gKyAgaWYgKChJbWFnZSA9PSBOVUxMKSB8fCAoQ29udHJv bGxlciA9PSBOVUxMKSB8fCAoSHR0cElvID09IE5VTEwpKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJ X0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgaWYgKElwVmVyc2lv biAhPSBJUF9WRVJTSU9OXzQgJiYgSXBWZXJzaW9uICE9IElQX1ZFUlNJT05fNikgew0KPiA+ICsg ICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFplcm9N ZW0gKEh0dHBJbywgc2l6ZW9mIChIVFRQX0lPKSk7ICBaZXJvTWVtICgmSHR0cENvbmZpZ0RhdGEs DQo+ID4gKyBzaXplb2YgKEVGSV9IVFRQX0NPTkZJR19EQVRBKSk7DQo+ID4gKw0KPiA+ICsgIC8v DQo+ID4gKyAgLy8gQ3JlYXRlIHRoZSBIVFRQIGNoaWxkIGluc3RhbmNlIGFuZCBnZXQgdGhlIEhU VFAgcHJvdG9jb2wuDQo+ID4gKyAgLy8NCj4gPiArICBTdGF0dXMgPSBOZXRMaWJDcmVhdGVTZXJ2 aWNlQ2hpbGQgKA0KPiA+ICsgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAg ICAgIEltYWdlLA0KPiA+ICsgICAgICAgICAgICAgJmdFZmlIdHRwU2VydmljZUJpbmRpbmdQcm90 b2NvbEd1aWQsDQo+ID4gKyAgICAgICAgICAgICAmSHR0cElvLT5IYW5kbGUNCj4gPiArICAgICAg ICAgICAgICk7DQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgcmV0 dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IGdCUy0+T3BlblBy b3RvY29sICgNCj4gPiArICAgICAgICAgICAgICAgICAgSHR0cElvLT5IYW5kbGUsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICZnRWZpSHR0cFByb3RvY29sR3VpZCwNCj4gPiArICAgICAgICAgICAg ICAgICAgKFZPSUQgKiopICZIdHRwLA0KPiA+ICsgICAgICAgICAgICAgICAgICBJbWFnZSwNCj4g PiArICAgICAgICAgICAgICAgICAgQ29udHJvbGxlciwNCj4gPiArICAgICAgICAgICAgICAgICAg RUZJX09QRU5fUFJPVE9DT0xfQllfRFJJVkVSDQo+ID4gKyAgICAgICAgICAgICAgICAgICk7DQo+ ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCAoSHR0cCA9PSBOVUxMKSkgew0KPiA+ICsg ICAgZ290byBPTl9FUlJPUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8g SW5pdCB0aGUgY29uZmlndXJhdGlvbiBkYXRhIGFuZCBjb25maWd1cmUgdGhlIEhUVFAgY2hpbGQu DQo+ID4gKyAgLy8NCj4gPiArICBIdHRwSW8tPkltYWdlICAgICAgID0gSW1hZ2U7DQo+ID4gKyAg SHR0cElvLT5Db250cm9sbGVyICA9IENvbnRyb2xsZXI7DQo+ID4gKyAgSHR0cElvLT5JcFZlcnNp b24gICA9IElwVmVyc2lvbjsNCj4gPiArICBIdHRwSW8tPkh0dHAgICAgICAgID0gSHR0cDsNCj4g PiArICBIdHRwSW8tPkNhbGxiYWNrICAgID0gQ2FsbGJhY2s7DQo+ID4gKyAgSHR0cElvLT5Db250 ZXh0ICAgICA9IENvbnRleHQ7DQo+ID4gKw0KPiA+ICsgIGlmIChDb25maWdEYXRhICE9IE5VTEwp IHsNCj4gPiArICAgIGlmIChIdHRwSW8tPklwVmVyc2lvbiA9PSBJUF9WRVJTSU9OXzQpIHsNCj4g PiArICAgICAgSHR0cENvbmZpZ0RhdGEuTG9jYWxBZGRyZXNzSXNJUHY2ICA9IEZBTFNFOw0KPiA+ ICsgICAgICBIdHRwQ29uZmlnRGF0YS5IdHRwVmVyc2lvbiAgICAgICAgID0gQ29uZmlnRGF0YS0+ Q29uZmlnNC5IdHRwVmVyc2lvbjsNCj4gPiArICAgICAgSHR0cENvbmZpZ0RhdGEuVGltZU91dE1p bGxpc2VjICAgICA9IENvbmZpZ0RhdGEtDQo+ID5Db25maWc0LlJlcXVlc3RUaW1lT3V0Ow0KPiA+ ICsNCj4gPiArICAgICAgSHR0cDRBY2Nlc3NQb2ludC5Vc2VEZWZhdWx0QWRkcmVzcyA9IENvbmZp Z0RhdGEtDQo+ID5Db25maWc0LlVzZURlZmF1bHRBZGRyZXNzOw0KPiA+ICsgICAgICBIdHRwNEFj Y2Vzc1BvaW50LkxvY2FsUG9ydCAgICAgICAgID0gQ29uZmlnRGF0YS0+Q29uZmlnNC5Mb2NhbFBv cnQ7DQo+ID4gKyAgICAgIElQNF9DT1BZX0FERFJFU1MgKCZIdHRwNEFjY2Vzc1BvaW50LkxvY2Fs QWRkcmVzcywgJkNvbmZpZ0RhdGEtDQo+ID5Db25maWc0LkxvY2FsSXApOw0KPiA+ICsgICAgICBJ UDRfQ09QWV9BRERSRVNTICgmSHR0cDRBY2Nlc3NQb2ludC5Mb2NhbFN1Ym5ldCwgJkNvbmZpZ0Rh dGEtDQo+ID5Db25maWc0LlN1Ym5ldE1hc2spOw0KPiA+ICsgICAgICBIdHRwQ29uZmlnRGF0YS5B Y2Nlc3NQb2ludC5JUHY0Tm9kZSA9ICZIdHRwNEFjY2Vzc1BvaW50Ow0KPiA+ICsgICAgfSBlbHNl IHsNCj4gPiArICAgICAgSHR0cENvbmZpZ0RhdGEuTG9jYWxBZGRyZXNzSXNJUHY2ID0gVFJVRTsN Cj4gPiArICAgICAgSHR0cENvbmZpZ0RhdGEuSHR0cFZlcnNpb24gICAgICAgICA9IENvbmZpZ0Rh dGEtPkNvbmZpZzYuSHR0cFZlcnNpb247DQo+ID4gKyAgICAgIEh0dHBDb25maWdEYXRhLlRpbWVP dXRNaWxsaXNlYyAgICAgPSBDb25maWdEYXRhLQ0KPiA+Q29uZmlnNi5SZXF1ZXN0VGltZU91dDsN Cj4gPiArDQo+ID4gKyAgICAgIEh0dHA2QWNjZXNzUG9pbnQuTG9jYWxQb3J0ICAgICAgICAgPSBD b25maWdEYXRhLT5Db25maWc2LkxvY2FsUG9ydDsNCj4gPiArICAgICAgSVA2X0NPUFlfQUREUkVT UyAoJkh0dHA2QWNjZXNzUG9pbnQuTG9jYWxBZGRyZXNzLCAmQ29uZmlnRGF0YS0NCj4gPkNvbmZp ZzYuTG9jYWxJcCk7DQo+ID4gKyAgICAgIEh0dHBDb25maWdEYXRhLkFjY2Vzc1BvaW50LklQdjZO b2RlID0gJkh0dHA2QWNjZXNzUG9pbnQ7DQo+ID4gKyAgICB9DQo+ID4gKw0KPiA+ICsgICAgU3Rh dHVzID0gSHR0cC0+Q29uZmlndXJlIChIdHRwLCAmSHR0cENvbmZpZ0RhdGEpOw0KPiA+ICsgICAg aWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBDcmVhdGUgZXZl bnRzIGZvciB2YXJpdW9zIGFzeW5jaHJvbm91cyBvcGVyYXRpb25zLg0KPiA+ICsgIC8vDQo+ID4g KyAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAoDQo+ID4gKyAgICAgICAgICAgICAgICAgIEVW VF9OT1RJRllfU0lHTkFMLA0KPiA+ICsgICAgICAgICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ ICsgICAgICAgICAgICAgICAgICBIdHRwSW9Ob3RpZnksDQo+ID4gKyAgICAgICAgICAgICAgICAg ICZIdHRwSW8tPklzVHhEb25lLA0KPiA+ICsgICAgICAgICAgICAgICAgICAmRXZlbnQNCj4gPiAr ICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsgIH0NCj4gPiArICBIdHRwSW8tPlJlcVRva2Vu LkV2ZW50ID0gRXZlbnQ7DQo+ID4gKyAgSHR0cElvLT5SZXFUb2tlbi5NZXNzYWdlID0gJkh0dHBJ by0+UmVxTWVzc2FnZTsNCj4gPiArDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5DcmVhdGVFdmVudCAo DQo+ID4gKyAgICAgICAgICAgICAgICAgIEVWVF9OT1RJRllfU0lHTkFMLA0KPiA+ICsgICAgICAg ICAgICAgICAgICBUUExfTk9USUZZLA0KPiA+ICsgICAgICAgICAgICAgICAgICBIdHRwSW9Ob3Rp ZnksDQo+ID4gKyAgICAgICAgICAgICAgICAgICZIdHRwSW8tPklzUnhEb25lLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAmRXZlbnQNCj4gPiArICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBp ZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICBnb3RvIE9OX0VSUk9SOw0KPiA+ICsg IH0NCj4gPiArICBIdHRwSW8tPlJzcFRva2VuLkV2ZW50ID0gRXZlbnQ7DQo+ID4gKyAgSHR0cElv LT5Sc3BUb2tlbi5NZXNzYWdlID0gJkh0dHBJby0+UnNwTWVzc2FnZTsNCj4gPiArDQo+ID4gKyAg Ly8NCj4gPiArICAvLyBDcmVhdGUgVGltZW91dEV2ZW50IGZvciByZXNwb25zZSAgLy8gIFN0YXR1 cyA9IGdCUy0+Q3JlYXRlRXZlbnQNCj4gPiArICgNCj4gPiArICAgICAgICAgICAgICAgICAgRVZU X1RJTUVSLA0KPiA+ICsgICAgICAgICAgICAgICAgICBUUExfQ0FMTEJBQ0ssDQo+ID4gKyAgICAg ICAgICAgICAgICAgIE5VTEwsDQo+ID4gKyAgICAgICAgICAgICAgICAgIE5VTEwsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICZFdmVudA0KPiA+ICsgICAgICAgICAgICAgICAgICApOw0KPiA+ICsg IGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4gPiArICAgIGdvdG8gT05fRVJST1I7DQo+ID4g KyAgfQ0KPiA+ICsgIEh0dHBJby0+VGltZW91dEV2ZW50ID0gRXZlbnQ7DQo+ID4gKyAgcmV0dXJu IEVGSV9TVUNDRVNTOw0KPiA+ICsNCj4gPiArT05fRVJST1I6DQo+ID4gKyAgSHR0cElvRGVzdHJv eUlvIChIdHRwSW8pOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHNlbmQgYSBIVFRQIFJFUVVFU1QgbWVz c2FnZSB0byB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBAcGFyYW1baW5dICAgSHR0cElvICAg ICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQIHNlcnZpY2UuDQo+ID4gKyAgQHBh cmFtW2luXSAgIFJlcXVlc3QgICAgICAgICAgQSBwb2ludGVyIHRvIHN0b3JhZ2Ugc3VjaCBkYXRh IGFzIFVSTCBhbmQNCj4gSFRUUCBtZXRob2QuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNv dW50ICAgICAgTnVtYmVyIG9mIEhUVFAgaGVhZGVyIHN0cnVjdHVyZXMgaW4NCj4gSGVhZGVycyBs aXN0Lg0KPiA+ICsgIEBwYXJhbVtpbl0gICBIZWFkZXJzICAgICAgICAgIEFycmF5IGNvbnRhaW5p bmcgbGlzdCBvZiBIVFRQIGhlYWRlcnMuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEJvZHlMZW5ndGgg ICAgICAgTGVuZ3RoIGluIGJ5dGVzIG9mIHRoZSBIVFRQIGJvZHkuDQo+ID4gKyAgQHBhcmFtW2lu XSAgIEJvZHkgICAgICAgICAgICAgQm9keSBhc3NvY2lhdGVkIHdpdGggdGhlIEhUVFAgcmVxdWVz dC4NCj4gPiArDQo+ID4gKyAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIFRoZSBIVFRQ IHJlcXVlc3QgaXMgdHJhc21pdHRlZC4NCj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFN RVRFUiAgT25lIG9yIG1vcmUgcGFyYW1ldGVycyBhcmUgaW52YWxpZC4NCj4gPiArICBAcmV0dmFs IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgRmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gPiAr ICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJST1IgICAgICAgQW4gdW5leHBlY3RlZCBuZXR3b3JrIG9y IHN5c3RlbSBlcnJvcg0KPiBvY2N1cnJlZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAgICAg ICAgICAgICAgT3RoZXIgZXJyb3JzIGFzIGluZGljYXRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0h0dHBJb1NlbmRSZXF1ZXN0ICgNCj4gPiArICBJTiAgSFRUUF9J TyAgICAgICAgICAgICAgICAqSHR0cElvLA0KPiA+ICsgIElOICBFRklfSFRUUF9SRVFVRVNUX0RB VEEgICpSZXF1ZXN0LA0KPiA+ICsgIElOICBVSU5UTiAgICAgICAgICAgICAgICAgIEhlYWRlckNv dW50LA0KPiA+ICsgIElOICBFRklfSFRUUF9IRUFERVIgICAgICAgICpIZWFkZXJzLA0KPiA+ICsg IElOICBVSU5UTiAgICAgICAgICAgICAgICAgIEJvZHlMZW5ndGgsDQo+ID4gKyAgSU4gIFZPSUQg ICAgICAgICAgICAgICAgICAgKkJvZHkNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RB VFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX0hUVFBfUFJPVE9DT0wgICAg ICAgICAgKkh0dHA7DQo+ID4gKw0KPiA+ICsgIGlmIChIdHRwSW8gPT0gTlVMTCB8fCBIdHRwSW8t Pkh0dHAgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFNRVRFUjsN Cj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIEh0dHBJby0+UmVxVG9rZW4uU3RhdHVzICA9IEVGSV9O T1RfUkVBRFk7DQo+ID4gKyBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkRhdGEuUmVxdWVzdCA9 IFJlcXVlc3Q7DQo+ID4gKyBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkhlYWRlckNvdW50ICA9 IEhlYWRlckNvdW50Ow0KPiA+ICsgIEh0dHBJby0+UmVxVG9rZW4uTWVzc2FnZS0+SGVhZGVycyAg ICAgID0gSGVhZGVyczsNCj4gPiArICBIdHRwSW8tPlJlcVRva2VuLk1lc3NhZ2UtPkJvZHlMZW5n dGggICA9IEJvZHlMZW5ndGg7DQo+ID4gKyAgSHR0cElvLT5SZXFUb2tlbi5NZXNzYWdlLT5Cb2R5 ICAgICAgICAgPSBCb2R5Ow0KPiA+ICsNCj4gPiArICBpZiAoSHR0cElvLT5DYWxsYmFjayAhPSBO VUxMKSB7DQo+ID4gKyAgICBTdGF0dXMgPSBIdHRwSW8tPkNhbGxiYWNrICgNCj4gPiArICAgICAg ICAgICAgICAgSHR0cElvUmVxdWVzdCwNCj4gPiArICAgICAgICAgICAgICAgSHR0cElvLT5SZXFU b2tlbi5NZXNzYWdlLA0KPiA+ICsgICAgICAgICAgICAgICBIdHRwSW8tPkNvbnRleHQNCj4gPiAr ICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICAgIH0NCj4gPiArICB9DQo+ID4gKw0KPiA+ ICsgIC8vDQo+ID4gKyAgLy8gUXVldWUgdGhlIHJlcXVlc3QgdG9rZW4gdG8gSFRUUCBpbnN0YW5j ZXMuDQo+ID4gKyAgLy8NCj4gPiArICBIdHRwID0gSHR0cElvLT5IdHRwOw0KPiA+ICsgIEh0dHBJ by0+SXNUeERvbmUgPSBGQUxTRTsNCj4gPiArICBTdGF0dXMgPSBIdHRwLT5SZXF1ZXN0ICgNCj4g PiArICAgICAgICAgICAgICAgICAgIEh0dHAsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAmSHR0 cElvLT5SZXFUb2tlbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgKTsNCj4gPiArICBpZiAoRUZJ X0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgIH0NCj4g PiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBQb2xsIHRoZSBuZXR3b3JrIHVudGlsIHRyYW5zbWl0 IGZpbmlzaC4NCj4gPiArICAvLw0KPiA+ICsgIHdoaWxlICghSHR0cElvLT5Jc1R4RG9uZSkgew0K PiA+ICsgICAgSHR0cC0+UG9sbCAoSHR0cCk7DQo+ID4gKyAgfQ0KPiA+ICsNCj4gPiArICByZXR1 cm4gSHR0cElvLT5SZXFUb2tlbi5TdGF0dXM7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgIFN5bmNocm9ub3VzbHkgcmVjZWl2ZSBhIEhUVFAgUkVTUE9OU0UgbWVzc2FnZSBmcm9tIHRo ZSBzZXJ2ZXIuDQo+ID4gKw0KPiA+ICsgIEBwYXJhbVtpbl0gICBIdHRwSW8gICAgICAgICAgIFRo ZSBIdHRwSW8gd3JhcHBpbmcgdGhlIEhUVFAgc2VydmljZS4NCj4gPiArICBAcGFyYW1baW5dICAg UmVjdk1zZ0hlYWRlciAgICBUUlVFIHRvIHJlY2VpdmUgYSBuZXcgSFRUUCByZXNwb25zZQ0KPiAo ZnJvbSBtZXNzYWdlIGhlYWRlcikuDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRkFMU0UgdG8gY29udGludWUgcmVjZWl2ZSB0aGUgcHJldmlvdXMgcmVzcG9uc2UgbWVzc2Fn ZS4NCj4gPiArICBAcGFyYW1bb3V0XSAgUmVzcG9uc2VEYXRhICAgICBQb2ludCB0byBhIHdyYXBw ZXIgb2YgdGhlIHJlY2VpdmVkDQo+IHJlc3BvbnNlIGRhdGEuDQo+ID4gKw0KPiA+ICsgIEByZXR2 YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgSFRUUCByZXNwb25zZSBpcyByZWNlaXZlZC4N Cj4gPiArICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgT25lIG9yIG1vcmUgcGFyYW1l dGVycyBhcmUgaW52YWxpZC4NCj4gPiArICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAg RmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeS4NCj4gPiArICBAcmV0dmFsIEVGSV9ERVZJQ0VfRVJS T1IgICAgICAgQW4gdW5leHBlY3RlZCBuZXR3b3JrIG9yIHN5c3RlbSBlcnJvcg0KPiBvY2N1cnJl ZC4NCj4gPiArICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICAgT3RoZXIgZXJyb3JzIGFz IGluZGljYXRlZC4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ICtFRklfU1RBVFVTDQo+ID4gK0h0dHBJ b1JlY3ZSZXNwb25zZSAoDQo+ID4gKyAgSU4gICAgICBIVFRQX0lPICAgICAgICAgICAgICAgICAg Kkh0dHBJbywNCj4gPiArICBJTiAgICAgIEJPT0xFQU4gICAgICAgICAgICAgICAgICBSZWN2TXNn SGVhZGVyLA0KPiA+ICsgIE9VVCAgICAgSFRUUF9JT19SRVNQT05TRV9EQVRBICAgICpSZXNwb25z ZURhdGENCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgICAg ICBTdGF0dXM7DQo+ID4gKyAgRUZJX0hUVFBfUFJPVE9DT0wgICAgICAgICAgKkh0dHA7DQo+ID4g Kw0KPiA+ICsgIGlmIChIdHRwSW8gPT0gTlVMTCB8fCBIdHRwSW8tPkh0dHAgPT0gTlVMTCB8fCBS ZXNwb25zZURhdGEgPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZBTElEX1BBUkFN RVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gUXVldWUgdGhlIHJl c3BvbnNlIHRva2VuIHRvIEhUVFAgaW5zdGFuY2VzLg0KPiA+ICsgIC8vDQo+ID4gKyAgSHR0cElv LT5Sc3BUb2tlbi5TdGF0dXMgID0gRUZJX05PVF9SRUFEWTsgIGlmIChSZWN2TXNnSGVhZGVyKSB7 DQo+ID4gKyAgICBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtPkRhdGEuUmVzcG9uc2UgPQ0KPiA+ ICsgJlJlc3BvbnNlRGF0YS0+UmVzcG9uc2U7ICB9IGVsc2Ugew0KPiA+ICsgICAgSHR0cElvLT5S c3BUb2tlbi5NZXNzYWdlLT5EYXRhLlJlc3BvbnNlID0gTlVMTDsgIH0NCj4gPiArICBIdHRwSW8t PlJzcFRva2VuLk1lc3NhZ2UtPkhlYWRlckNvdW50ICAgPSAwOw0KPiA+ICsgIEh0dHBJby0+UnNw VG9rZW4uTWVzc2FnZS0+SGVhZGVycyAgICAgICA9IE5VTEw7DQo+ID4gKyAgSHR0cElvLT5Sc3BU b2tlbi5NZXNzYWdlLT5Cb2R5TGVuZ3RoICAgID0gUmVzcG9uc2VEYXRhLQ0KPiA+Qm9keUxlbmd0 aDsNCj4gPiArICBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2UtPkJvZHkgICAgICAgICAgPSBSZXNw b25zZURhdGEtPkJvZHk7DQo+IFJlc3BvbnNlRGF0YSBpbiBmdW5jdGlvbiBoZWFkZXIgaXMgc2V0 IGFzIE9VVC4gU2luY2Ugd2UgYXJlIGFjdHVhbGx5IHVzaW5nDQo+IGRhdGEgaW5zaWRlIGl0LCBp dCBzaG91bGQgYmUgSU4gT1VULg0KPiBQbGVhc2UgZml4IHRoYXQgaW4gY29kZSBhbmQgcGFyYW1l dGVyIGNvbW1lbnRzLg0KPiA+ICsNCj4gPiArICBIdHRwID0gSHR0cElvLT5IdHRwOw0KPiA+ICsg IEh0dHBJby0+SXNSeERvbmUgPSBGQUxTRTsNCj4gPiArDQo+ID4gKyAgLy8NCj4gPiArICAvLyBT dGFydCB0aGUgdGltZXIsIGFuZCB3YWl0IFRpbWVvdXQgc2Vjb25kcyB0byByZWNlaXZlIHRoZSBo ZWFkZXINCj4gcGFja2V0Lg0KPiA+ICsgIC8vDQo+ID4gKyAgU3RhdHVzID0gZ0JTLT5TZXRUaW1l ciAoSHR0cElvLT5UaW1lb3V0RXZlbnQsIFRpbWVyUmVsYXRpdmUsDQo+ID4gKyBIdHRwSW8tPlRp bWVvdXQgKiBUSUNLU19QRVJfTVMpOyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsg ICAgcmV0dXJuIFN0YXR1czsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIFN0YXR1cyA9IEh0dHAt PlJlc3BvbnNlICgNCj4gPiArICAgICAgICAgICAgICAgICAgIEh0dHAsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAmSHR0cElvLT5Sc3BUb2tlbg0KPiA+ICsgICAgICAgICAgICAgICAgICAgKTsN Cj4gPiArDQo+ID4gKyAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KPiA+ICsgICAgLy8NCj4g PiArICAgIC8vIFJlbW92ZSB0aW1lb3V0IHRpbWVyIGZyb20gdGhlIGV2ZW50IGxpc3QuDQo+ID4g KyAgICAvLw0KPiA+ICsgICAgZ0JTLT5TZXRUaW1lciAoSHR0cElvLT5UaW1lb3V0RXZlbnQsIFRp bWVyQ2FuY2VsLCAwKTsNCj4gPiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfQ0KPiA+ICsN Cj4gPiArICAvLw0KPiA+ICsgIC8vIFBvbGwgdGhlIG5ldHdvcmsgdW50aWwgcmVjZWl2ZSBmaW5p c2guDQo+ID4gKyAgLy8NCj4gPiArICB3aGlsZSAoIUh0dHBJby0+SXNSeERvbmUgJiYgRUZJX0VS Uk9SIChnQlMtPkNoZWNrRXZlbnQgKEh0dHBJby0NCj4gPlRpbWVvdXRFdmVudCkpKSB7DQo+ID4g KyAgICBIdHRwLT5Qb2xsIChIdHRwKTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIC8vDQo+ID4g KyAgLy8gUmVtb3ZlIHRpbWVvdXQgdGltZXIgZnJvbSB0aGUgZXZlbnQgbGlzdC4NCj4gPiArICAv Lw0KPiA+ICsgIGdCUy0+U2V0VGltZXIgKEh0dHBJby0+VGltZW91dEV2ZW50LCBUaW1lckNhbmNl bCwgMCk7DQo+ID4gKw0KPiA+ICsgIGlmICghSHR0cElvLT5Jc1J4RG9uZSkgew0KPiA+ICsgICAg Ly8NCj4gPiArICAgIC8vIFRpbWVvdXQgb2NjdXJzLCBjYW5jZWwgdGhlIHJlc3BvbnNlIHRva2Vu Lg0KPiA+ICsgICAgLy8NCj4gPiArICAgIEh0dHAtPkNhbmNlbCAoSHR0cCwgJkh0dHBJby0+UnNw VG9rZW4pOw0KPiA+ICsNCj4gPiArICAgIFN0YXR1cyA9IEVGSV9USU1FT1VUOw0KPiA+ICsNCj4g PiArICAgIHJldHVybiBTdGF0dXM7DQo+ID4gKyAgfSBlbHNlIHsNCj4gPiArICAgIEh0dHBJby0+ SXNSeERvbmUgPSBGQUxTRTsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgIGlmICgoSHR0cElvLT5D YWxsYmFjayAhPSBOVUxMKSAmJg0KPiA+ICsgICAgICAoSHR0cElvLT5Sc3BUb2tlbi5TdGF0dXMg PT0gRUZJX1NVQ0NFU1MgfHwgSHR0cElvLQ0KPiA+UnNwVG9rZW4uU3RhdHVzID09IEVGSV9IVFRQ X0VSUk9SKSkgew0KPiA+ICsgICAgU3RhdHVzID0gSHR0cElvLT5DYWxsYmFjayAoDQo+ID4gKyAg ICAgICAgICAgICAgIEh0dHBJb1Jlc3BvbnNlLA0KPiA+ICsgICAgICAgICAgICAgICBIdHRwSW8t PlJzcFRva2VuLk1lc3NhZ2UsDQo+ID4gKyAgICAgICAgICAgICAgIEh0dHBJby0+Q29udGV4dA0K PiA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkg ew0KPiA+ICsgICAgICByZXR1cm4gU3RhdHVzOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr DQo+ID4gKyAgLy8NCj4gPiArICAvLyBTdG9yZSB0aGUgcmVjZWl2ZWQgZGF0YSBpbnRvIHRoZSB3 cmFwcGVyLg0KPiA+ICsgIC8vDQo+ID4gKyAgUmVzcG9uc2VEYXRhLT5TdGF0dXMgPSBIdHRwSW8t PlJzcFRva2VuLlN0YXR1czsNCj4gPiArIFJlc3BvbnNlRGF0YS0+SGVhZGVyQ291bnQgPSBIdHRw SW8tPlJzcFRva2VuLk1lc3NhZ2UtDQo+ID5IZWFkZXJDb3VudDsNCj4gPiArICBSZXNwb25zZURh dGEtPkhlYWRlcnMgICAgID0gSHR0cElvLT5Sc3BUb2tlbi5NZXNzYWdlLT5IZWFkZXJzOw0KPiA+ ICsgIFJlc3BvbnNlRGF0YS0+Qm9keUxlbmd0aCAgPSBIdHRwSW8tPlJzcFRva2VuLk1lc3NhZ2Ut DQo+ID5Cb2R5TGVuZ3RoOw0KPiA+ICsNCj4gPiArICByZXR1cm4gU3RhdHVzOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICsvKioNCj4gPiArICBHZXQgdGhlIHZhbHVlIG9mIHRoZSBjb250ZW50IGxlbmd0 aCBpZiB0aGVyZSBpcyBhICJDb250ZW50LUxlbmd0aCIgaGVhZGVyLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICAgIEhlYWRlckNvdW50ICAgICAgICBOdW1iZXIgb2YgSFRUUCBoZWFkZXIgc3Ry dWN0dXJlcyBpbg0KPiBIZWFkZXJzLg0KPiA+ICsgIEBwYXJhbVtpbl0gICAgSGVhZGVycyAgICAg ICAgICAgIEFycmF5IGNvbnRhaW5pbmcgbGlzdCBvZiBIVFRQIGhlYWRlcnMuDQo+ID4gKyAgQHBh cmFtW291dF0gICBDb250ZW50TGVuZ3RoICAgICAgUG9pbnRlciB0byBzYXZlIHRoZSB2YWx1ZSBv ZiB0aGUgY29udGVudA0KPiBsZW5ndGguDQo+ID4gKw0KPiA+ICsgIEByZXR2YWwgRUZJX1NVQ0NF U1MgICAgICAgICAgICAgIFN1Y2Nlc3NmdWxseSBnZXQgdGhlIGNvbnRlbnQgbGVuZ3RoLg0KPiA+ ICsgIEByZXR2YWwgRUZJX05PVF9GT1VORCAgICAgICAgICAgIE5vICJDb250ZW50LUxlbmd0aCIg aGVhZGVyIGluIHRoZQ0KPiBIZWFkZXJzLg0KPiA+ICsNCj4gPiArKiovDQo+ID4gK0VGSV9TVEFU VVMNCj4gPiArSHR0cElvR2V0Q29udGVudExlbmd0aCAoDQo+ID4gKyAgSU4gICAgIFVJTlROICAg ICAgICAgICAgICAgIEhlYWRlckNvdW50LA0KPiA+ICsgIElOICAgICBFRklfSFRUUF9IRUFERVIg ICAgICAqSGVhZGVycywNCj4gPiArICBPVVQgICAgVUlOVE4gICAgICAgICAgICAgICAgKkNvbnRl bnRMZW5ndGgNCj4gPiArICApDQo+ID4gK3sNCj4gPiArICBFRklfSFRUUF9IRUFERVIgICAgICAg KkhlYWRlcjsNCj4gPiArDQo+ID4gKyAgSGVhZGVyID0gSHR0cEZpbmRIZWFkZXIgKEhlYWRlckNv dW50LCBIZWFkZXJzLA0KPiA+ICsgSFRUUF9IRUFERVJfQ09OVEVOVF9MRU5HVEgpOyAgaWYgKEhl YWRlciA9PSBOVUxMKSB7DQo+ID4gKyAgICByZXR1cm4gRUZJX05PVF9GT1VORDsNCj4gPiArICB9 DQo+ID4gKw0KPiA+ICsgIHJldHVybiBBc2NpaVN0ckRlY2ltYWxUb1VpbnRuUyAoSGVhZGVyLT5G aWVsZFZhbHVlLCAoQ0hBUjggKiopDQo+ID4gK05VTEwsIENvbnRlbnRMZW5ndGgpOyB9DQo+ID4g Ky8qKg0KPiA+ICsgIFNlbmQgSFRUUCByZXF1ZXN0IGluIGNodW5rcy4NCj4gPiArDQo+ID4gKyAg QHBhcmFtW2luXSAgIEh0dHBJbyAgICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBI VFRQIHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIFNlbmRDaHVua1Byb2Nlc3MgICBQb2lu dGVyIHRvIGN1cnJlbnQgY2h1bmsgcHJvY2Vzcw0KPiBzdGF0dXMuDQo+ID4gKyAgQHBhcmFtW2lu XSAgIFJlcXVlc3RNZXNzYWdlICAgICBSZXF1ZXN0IHRvIHNlbmQuDQo+ID4gKw0KPiA+ICsgIEBy ZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgU3VjY2Vzc2Z1bGx5IHRvIHNlbmQgY2h1bmsg ZGF0YSBhY2NvcmRpbmcgdG8NCj4gU2VuZENodW5rUHJvY2Vzcy4NCj4gPiArICBAcmV0dmFsIE90 aGVyICAgICAgICAgICAgICAgICAgIE90aGVyIGVycm9ycy4NCj4gPiArDQo+ID4gKyoqLw0KPiA+ ICtFRklfU1RBVFVTDQo+ID4gK0h0dHBJb1NlbmRDaHVua2VkVHJhbnNmZXIgKA0KPiA+ICsgIElO ICBIVFRQX0lPICAgICAgICAgICAgICAgICAgICAqSHR0cElvLA0KPiA+ICsgIElOICBIVFRQX0lP X1NFTkRfQ0hVTktfUFJPQ0VTUyAqU2VuZENodW5rUHJvY2VzcywNCj4gPiArICBJTiAgRUZJX0hU VFBfTUVTU0FHRSAgICAgICAgICAgKlJlcXVlc3RNZXNzYWdlDQo+ID4gKykNCj4gPiArew0KPiA+ ICsgIEVGSV9TVEFUVVMgICAgICAgICAgICBTdGF0dXM7DQo+ID4gKyAgRUZJX0hUVFBfSEVBREVS ICAgICAgICpOZXdIZWFkZXJzOw0KPiA+ICsgIEVGSV9IVFRQX0hFQURFUiAgICAgICAqQ29udGVu dExlbmd0aEhlYWRlcjsNCj4gPiArICBVSU5UTiAgICAgICAgICAgICAgICAgQWRkTmV3SGVhZGVy Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBIZWFkZXJDb3VudDsNCj4gPiArICBDSEFS OCAgICAgICAgICAgICAgICAgKk1lc3NhZ2VCb2R5Ow0KPiA+ICsgIFVJTlROICAgICAgICAgICAg ICAgICBNZXNzYWdlQm9keUxlbmd0aDsNCj4gPiArICBDSEFSOCAgICAgICAgICAgICAgICAgQ2h1 bmtMZW5ndGhTdHIgW0hUVFBfSU9fQ0hVTktfU0laRV9TVFJJTkdfTEVOXTsNCj4gPiArICBFRklf SFRUUF9SRVFVRVNUX0RBVEEgKlNlbnRSZXF1ZXN0RGF0YTsNCj4gPiArDQo+ID4gKyAgQWRkTmV3 SGVhZGVyICAgICAgICA9IDA7DQo+ID4gKyAgTmV3SGVhZGVycyAgICAgICAgICA9IE5VTEw7DQo+ ID4gKyAgTWVzc2FnZUJvZHkgICAgICAgICA9IE5VTEw7DQo+ID4gKyAgQ29udGVudExlbmd0aEhl YWRlciA9IE5VTEw7DQo+ID4gKyAgTWVzc2FnZUJvZHlMZW5ndGggICA9IDA7DQo+ID4gKw0KPiA+ ICsgIHN3aXRjaCAoKlNlbmRDaHVua1Byb2Nlc3MpIHsNCj4gPiArICBjYXNlIEh0dHBJb1NlbmRD aHVua0hlYWRlclplcm9Db250ZW50Og0KPiA+ICsgICAgICBDb250ZW50TGVuZ3RoSGVhZGVyID0g SHR0cEZpbmRIZWFkZXIgKFJlcXVlc3RNZXNzYWdlLQ0KPiA+SGVhZGVyQ291bnQsIFJlcXVlc3RN ZXNzYWdlLT5IZWFkZXJzLA0KPiBIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCk7DQo+ID4gKyAg ICAgIGlmIChDb250ZW50TGVuZ3RoSGVhZGVyID09IE5VTEwpIHsNCj4gPiArICAgICAgICBBZGRO ZXdIZWFkZXIgPSAxOw0KPiA+ICsgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICBOZXdIZWFkZXJz ID0gQWxsb2NhdGVaZXJvUG9vbCAoKFJlcXVlc3RNZXNzYWdlLT5IZWFkZXJDb3VudCArDQo+IEFk ZE5ld0hlYWRlcikgKiBzaXplb2YoRUZJX0hUVFBfSEVBREVSKSk7DQo+ID4gKyAgICAgIENvcHlN ZW0gKChWT0lEKilOZXdIZWFkZXJzLCAoVk9JRCAqKVJlcXVlc3RNZXNzYWdlLT5IZWFkZXJzLA0K PiBSZXF1ZXN0TWVzc2FnZS0+SGVhZGVyQ291bnQgKiBzaXplb2YgKEVGSV9IVFRQX0hFQURFUikp Ow0KPiA+ICsgICAgICBpZiAoQWRkTmV3SGVhZGVyID09IDApIHsNCj4gPiArICAgICAgICAvLw0K PiA+ICsgICAgICAgIC8vIE92ZXJyaWRlIGNvbnRlbnQtbGVuZ3RoIHRvIFRyYW5zZmVyLUVuY29k aW5nLg0KPiA+ICsgICAgICAgIC8vDQo+ID4gKyAgICAgICAgQ29udGVudExlbmd0aEhlYWRlciA9 IEh0dHBGaW5kSGVhZGVyIChSZXF1ZXN0TWVzc2FnZS0NCj4gPkhlYWRlckNvdW50LCBOZXdIZWFk ZXJzLCBIVFRQX0hFQURFUl9DT05URU5UX0xFTkdUSCk7DQo+ID4gKyAgICAgICAgQ29udGVudExl bmd0aEhlYWRlci0+RmllbGROYW1lID0gTlVMTDsNCj4gPiArICAgICAgICBDb250ZW50TGVuZ3Ro SGVhZGVyLT5GaWVsZFZhbHVlID0gTlVMTDsNCj4gPiArICAgICAgfSBlbHNlIHsNCj4gPiArICAg ICAgICBDb250ZW50TGVuZ3RoSGVhZGVyID0gTmV3SGVhZGVycyArIFJlcXVlc3RNZXNzYWdlLQ0K PiA+SGVhZGVyQ291bnQ7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgSHR0cFNldEZpZWxkTmFt ZUFuZFZhbHVlIChDb250ZW50TGVuZ3RoSGVhZGVyLA0KPiBIVFRQX0hFQURFUl9UUkFOU0ZFUl9F TkNPRElORywNCj4gSFRUUF9IRUFERVJfVFJBTlNGRVJfRU5DT0RJTkdfQ0hVTktFRCk7DQo+ID4g KyAgICAgIEhlYWRlckNvdW50ID0gUmVxdWVzdE1lc3NhZ2UtPkhlYWRlckNvdW50ICsgQWRkTmV3 SGVhZGVyOw0KPiA+ICsgICAgICBNZXNzYWdlQm9keUxlbmd0aCA9IDA7DQo+ID4gKyAgICAgIE1l c3NhZ2VCb2R5ID0gTlVMTDsNCj4gPiArICAgICAgU2VudFJlcXVlc3REYXRhID0gUmVxdWVzdE1l c3NhZ2UtPkRhdGEuUmVxdWVzdDsNCj4gPiArICAgICAgYnJlYWs7DQo+ID4gKw0KPiA+ICsgIGNh c2UgSHR0cElvU2VuZENodW5rQ29udGVudDoNCj4gPiArICAgICAgSGVhZGVyQ291bnQgPSAwOw0K PiA+ICsgICAgICBOZXdIZWFkZXJzID0gTlVMTDsNCj4gPiArICAgICAgU2VudFJlcXVlc3REYXRh ID0gTlVMTDsNCj4gPiArICAgICAgaWYgKFJlcXVlc3RNZXNzYWdlLT5Cb2R5TGVuZ3RoID4gSFRU UF9JT19NQVhfU0VORF9QQVlMT0FEKSB7DQo+ID4gKyAgICAgICAgTWVzc2FnZUJvZHlMZW5ndGgg PSBIVFRQX0lPX01BWF9TRU5EX1BBWUxPQUQ7DQo+ID4gKyAgICAgIH0gZWxzZSB7DQo+ID4gKyAg ICAgICAgTWVzc2FnZUJvZHlMZW5ndGggPSBSZXF1ZXN0TWVzc2FnZS0+Qm9keUxlbmd0aDsNCj4g PiArICAgICAgfQ0KPiA+ICsgICAgICBBc2NpaVNQcmludCAoDQo+ID4gKyAgICAgICAgICBDaHVu a0xlbmd0aFN0ciwNCj4gPiArICAgICAgICAgIEhUVFBfSU9fQ0hVTktfU0laRV9TVFJJTkdfTEVO LA0KPiA+ICsgICAgICAgICAgIiV4JWMlYyIsDQo+ID4gKyAgICAgICAgICBNZXNzYWdlQm9keUxl bmd0aCwNCj4gPiArICAgICAgICAgIENIVU5LRURfVFJBTlNGRVJfQ09ESU5HX0NSLA0KPiA+ICsg ICAgICAgICAgQ0hVTktFRF9UUkFOU0ZFUl9DT0RJTkdfTEYNCj4gPiArICAgICAgICAgICk7DQo+ IEZ1bmN0aW9uIGJyZWFrcyBzaG91bGQgYmUgb2ZmIGJ5IDIgc3BhY2VzLCBub3QgNCA6KSBUaGlz IGFwcGxpZXMgdG8gb3RoZXINCj4gYnJva2VuLWRvd24gY2FsbHMgaW4gY2h1bmtlZCBzZW5kL3Jl Y2VpdmUgZnVuY3Rpb25zLg0KRG9uZS4NCg0KPiA+ICsgICAgICBNZXNzYWdlQm9keSA9IEFsbG9j YXRlUG9vbCAoQXNjaWlTdHJMZW4gKENodW5rTGVuZ3RoU3RyKSArDQo+IE1lc3NhZ2VCb2R5TGVu Z3RoICsgMik7DQo+ID4gKyAgICAgIGlmIChNZXNzYWdlQm9keSA9PSBOVUxMKSB7DQo+ID4gKyAg ICAgICAgREVCVUcoKERFQlVHX0VSUk9SLCAiTm90IGVub3VnaCBtZW1vcnkgZm9yIGNodW5rDQo+ IHRyYW5zZmVyXG4iKSk7DQo+ID4gKyAgICAgICAgcmV0dXJuIEVGSV9PVVRfT0ZfUkVTT1VSQ0VT Ow0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIC8vDQo+ID4gKyAgICAgIC8vIEJ1aWxkIHVwIHRo ZSBjaHVuayB0cmFuc2ZlciBwYXlsYW9kLg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBDb3B5 TWVtIChNZXNzYWdlQm9keSwgQ2h1bmtMZW5ndGhTdHIsIEFzY2lpU3RyTGVuDQo+ID4gKyAoQ2h1 bmtMZW5ndGhTdHIpKTsNCj4gQXNjaWlTdHJMZW4gaXMgdXNlZCBhIGxvdCBoZXJlLiBJdCBjb3Vs ZCBiZSBjYWxsZWQgb25jZSBhbmQgc3RvcmVkIGluIHZhcmlhYmxlLg0KRG9uZQ0KDQo+ID4gKyAg ICAgIENvcHlNZW0gKE1lc3NhZ2VCb2R5ICsgQXNjaWlTdHJMZW4gKENodW5rTGVuZ3RoU3RyKSwN Cj4gUmVxdWVzdE1lc3NhZ2UtPkJvZHksIE1lc3NhZ2VCb2R5TGVuZ3RoKTsNCj4gPiArICAgICAg KihNZXNzYWdlQm9keSArIEFzY2lpU3RyTGVuIChDaHVua0xlbmd0aFN0cikgKyBNZXNzYWdlQm9k eUxlbmd0aCkNCj4gPSBDSFVOS0VEX1RSQU5TRkVSX0NPRElOR19DUjsNCj4gPiArICAgICAgKihN ZXNzYWdlQm9keSArIEFzY2lpU3RyTGVuIChDaHVua0xlbmd0aFN0cikgKyBNZXNzYWdlQm9keUxl bmd0aA0KPiArIDEpID0gQ0hVTktFRF9UUkFOU0ZFUl9DT0RJTkdfTEY7DQo+ID4gKyAgICAgIC8v DQo+ID4gKyAgICAgIC8vIENoYW5nZSB2YXJpYWJsZXMgZm9yIHRoZSBuZXh0IGNodW5rIHRyYXNu ZmVyLg0KPiA+ICsgICAgICAvLw0KPiA+ICsgICAgICBSZXF1ZXN0TWVzc2FnZS0+Qm9keUxlbmd0 aCAtPSBNZXNzYWdlQm9keUxlbmd0aDsNCj4gPiArICAgICAgUmVxdWVzdE1lc3NhZ2UtPkJvZHkg PSAoVk9JRCAqKSgoQ0hBUjggKilSZXF1ZXN0TWVzc2FnZS0NCj4gPkJvZHkgKyBNZXNzYWdlQm9k eUxlbmd0aCk7DQo+ID4gKyAgICAgIE1lc3NhZ2VCb2R5TGVuZ3RoICs9IChBc2NpaVN0ckxlbiAo Q2h1bmtMZW5ndGhTdHIpICsgMik7DQo+ID4gKyAgICAgIGlmIChSZXF1ZXN0TWVzc2FnZS0+Qm9k eUxlbmd0aCA9PSAwKSB7DQo+ID4gKyAgICAgICAgKlNlbmRDaHVua1Byb2Nlc3MgPSBIdHRwSW9T ZW5kQ2h1bmtFbmRDaHVuazsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBicmVhazsNCj4gPiAr DQo+ID4gKyAgY2FzZSBIdHRwSW9TZW5kQ2h1bmtFbmRDaHVuazoNCj4gPiArICAgICAgSGVhZGVy Q291bnQgPSAwOw0KPiA+ICsgICAgICBOZXdIZWFkZXJzID0gTlVMTDsNCj4gPiArICAgICAgU2Vu dFJlcXVlc3REYXRhID0gTlVMTDsNCj4gPiArICAgICAgQXNjaWlTUHJpbnQgKA0KPiA+ICsgICAg ICAgICAgQ2h1bmtMZW5ndGhTdHIsDQo+ID4gKyAgICAgICAgICBIVFRQX0lPX0NIVU5LX1NJWkVf U1RSSU5HX0xFTiwNCj4gPiArICAgICAgICAgICIwJWMlYyVjJWMiLA0KPiA+ICsgICAgICAgICAg Q0hVTktFRF9UUkFOU0ZFUl9DT0RJTkdfQ1IsDQo+ID4gKyAgICAgICAgICBDSFVOS0VEX1RSQU5T RkVSX0NPRElOR19MRiwNCj4gPiArICAgICAgICAgIENIVU5LRURfVFJBTlNGRVJfQ09ESU5HX0NS LA0KPiA+ICsgICAgICAgICAgQ0hVTktFRF9UUkFOU0ZFUl9DT0RJTkdfTEYNCj4gPiArICAgICAg ICAgICk7DQo+ID4gKyAgICAgIE1lc3NhZ2VCb2R5ID0gQWxsb2NhdGVQb29sIChBc2NpaVN0ckxl bihDaHVua0xlbmd0aFN0cikpOw0KPiA+ICsgICAgICBpZiAoTWVzc2FnZUJvZHkgPT0gTlVMTCkg ew0KPiA+ICsgICAgICAgIERFQlVHKChERUJVR19FUlJPUiwgIk5vdCBlbm91Z2ggbWVtb3J5IGZv ciB0aGUgZW5kIGNodW5rDQo+IHRyYW5zZmVyXG4iKSk7DQo+ID4gKyAgICAgICAgcmV0dXJuIEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgICB9DQo+ID4gKyAgICAgIENvcHlNZW0gKE1l c3NhZ2VCb2R5LCBDaHVua0xlbmd0aFN0ciwgQXNjaWlTdHJMZW4NCj4gKENodW5rTGVuZ3RoU3Ry KSk7DQo+ID4gKyAgICAgIE1lc3NhZ2VCb2R5TGVuZ3RoID0gQXNjaWlTdHJMZW4gKENodW5rTGVu Z3RoU3RyKTsNCj4gPiArICAgICAgKlNlbmRDaHVua1Byb2Nlc3MgPSBIdHRwSW9TZW5kQ2h1bmtG aW5pc2g7DQo+ID4gKyAgICAgIGJyZWFrOw0KPiA+ICsNCj4gPiArICBkZWZhdWx0Og0KPiA+ICsg ICAgICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KPiA+ICsgIH0NCj4gPiArDQo+ID4g KyAgU3RhdHVzID0gSHR0cElvU2VuZFJlcXVlc3QgKA0KPiA+ICsgICAgICAgICAgICAgICBIdHRw SW8sDQo+ID4gKyAgICAgICAgICAgICAgIFNlbnRSZXF1ZXN0RGF0YSwNCj4gPiArICAgICAgICAg ICAgICAgSGVhZGVyQ291bnQsDQo+ID4gKyAgICAgICAgICAgICAgIE5ld0hlYWRlcnMsDQo+ID4g KyAgICAgICAgICAgICAgIE1lc3NhZ2VCb2R5TGVuZ3RoLA0KPiA+ICsgICAgICAgICAgICAgICBN ZXNzYWdlQm9keQ0KPiA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICsgIGlmIChDb250ZW50TGVu Z3RoSGVhZGVyICE9IE5VTEwpIHsNCj4gPiArICAgIGlmIChDb250ZW50TGVuZ3RoSGVhZGVyLT5G aWVsZE5hbWUgIT0gTlVMTCkgew0KPiA+ICsgICAgICBGcmVlUG9vbCAoQ29udGVudExlbmd0aEhl YWRlci0+RmllbGROYW1lKTsNCj4gPiArICAgIH0NCj4gPiArICAgIGlmIChDb250ZW50TGVuZ3Ro SGVhZGVyLT5GaWVsZFZhbHVlICE9IE5VTEwpIHsNCj4gPiArICAgICAgRnJlZVBvb2wgKENvbnRl bnRMZW5ndGhIZWFkZXItPkZpZWxkVmFsdWUpOw0KPiA+ICsgICAgfQ0KPiA+ICsgIH0NCj4gPiAr ICBpZiAoTmV3SGVhZGVycyAhPSBOVUxMKSB7DQo+ID4gKyAgICBGcmVlUG9vbCAoTmV3SGVhZGVy cyk7DQo+ID4gKyAgfQ0KPiA+ICsgIGlmIChNZXNzYWdlQm9keSAhPSBOVUxMKSB7DQo+ID4gKyAg ICBGcmVlUG9vbCAoTWVzc2FnZUJvZHkpOw0KPiA+ICsgIH0NCj4gPiArICByZXR1cm4gU3RhdHVz Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICBTeW5jaHJvbm91c2x5IHJlY2VpdmUg YSBIVFRQIFJFU1BPTlNFIG1lc3NhZ2UgZnJvbSB0aGUgc2VydmVyLg0KPiA+ICsNCj4gPiArICBA cGFyYW1baW5dICAgSHR0cElvICAgICAgICAgICBUaGUgSHR0cElvIHdyYXBwaW5nIHRoZSBIVFRQ IHNlcnZpY2UuDQo+ID4gKyAgQHBhcmFtW2luXSAgIEhlYWRlckNvdW50ICAgICAgTnVtYmVyIG9m IGhlYWRlcnMgaW4gSGVhZGVycy4NCj4gPiArICBAcGFyYW1baW5dICAgSGVhZGVycyAgICAgICAg ICBBcnJheSBjb250YWluaW5nIGxpc3Qgb2YgSFRUUCBoZWFkZXJzLg0KPiA+ICsgIEBwYXJhbVtv dXRdICBDaHVua0xpc3RIZWFkICAgIEEgcG9pbnRlciB0byByZWNlaXZlIGxpc3QgaGVhZA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIGNodW5rZWQgZGF0YS4gQ2FsbGVy IGhhcyB0bw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2UgbWVt b3J5IG9mIENodW5rTGlzdEhlYWQNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhbmQgYWxsIGxpc3QgZW50cmllcy4NCj4gPiArICBAcGFyYW1bb3V0XSAgQ29udGVudExlbmd0 aCAgICBUb3RhbCBjb250ZW50IGxlbmd0aA0KPiA+ICsNCj4gPiArICBAcmV0dmFsIEVGSV9TVUND RVNTICAgICAgICAgICAgVGhlIEhUVFAgY2h1bmtlZCB0cmFuc2ZlciBpcyByZWNlaXZlZC4NCj4g PiArICBAcmV0dmFsIEVGSV9OT1RfRk9VTkQgICAgICAgICAgTm8gY2h1bmtlZCB0cmFuc2ZlciBj b2RpbmcgaGVhZGVyIGZvdW5kLg0KPiA+ICsgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMg ICBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Lg0KPiA+ICsgIEByZXR2YWwgRUZJX0lOVkFMSURf UEFSQU1FVEVSICBJbXByb3BlciBwYXJhbWV0ZXJzLg0KPiA+ICsgIEByZXR2YWwgT3RoZXJzICAg ICAgICAgICAgICAgICBPdGhlciBlcnJvcnMgYXMgaW5kaWNhdGVkLg0KPiA+ICsNCj4gPiArKiov DQo+ID4gK0VGSV9TVEFUVVMNCj4gPiArSHR0cElvR2V0Q2h1bmtlZFRyYW5zZmVyQ29udGVudCAo DQo+ID4gKyAgSU4gICAgIEhUVFBfSU8gICAgICAgICAgICAgICpIdHRwSW8sDQo+ID4gKyAgSU4g ICAgIFVJTlROICAgICAgICAgICAgICAgIEhlYWRlckNvdW50LA0KPiA+ICsgIElOICAgICBFRklf SFRUUF9IRUFERVIgICAgICAqSGVhZGVycywNCj4gPiArICBPVVQgICAgTElTVF9FTlRSWSAgICAg ICAgICAgKipDaHVua0xpc3RIZWFkLA0KPiA+ICsgIE9VVCAgICBVSU5UTiAgICAgICAgICAgICAg ICAqQ29udGVudExlbmd0aA0KPiA+ICsgICkNCj4gPiArew0KPiA+ICsgIEVGSV9IVFRQX0hFQURF UiAgICAgICAqSGVhZGVyOw0KPiA+ICsgIENIQVI4ICAgICAgICAgICAgICAgICBDaHVua1NpemVB c2NpaSBbMjU2XTsNCj4gPiArICBFRklfU1RBVFVTICAgICAgICAgICAgU3RhdHVzOw0KPiA+ICsg IFVJTlROICAgICAgICAgICAgICAgICBJbmRleDsNCj4gPiArICBIVFRQX0lPX1JFU1BPTlNFX0RB VEEgUmVzcG9uc2VEYXRhOw0KPiA+ICsgIFVJTlROICAgICAgICAgICAgICAgICBUb3RhbExlbmd0 aDsNCj4gPiArICBMSVNUX0VOVFJZICAgICAgICAgICAgKkh0dHBDaHVua3M7DQo+ID4gKyAgSFRU UF9JT19DSFVOS1MgICAgICAgICpUaGlzQ2h1bms7DQo+ID4gKyAgTElTVF9FTlRSWSAgICAgICAg ICAgICpUaGlzTGlzdEVudHJ5Ow0KPiA+ICsNCj4gPiArICBpZiAoQ2h1bmtMaXN0SGVhZCA9PSBO VUxMIHx8IENvbnRlbnRMZW5ndGggPT0gTlVMTCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9JTlZB TElEX1BBUkFNRVRFUjsNCj4gPiArICB9DQo+ID4gKw0KPiA+ICsgICpDb250ZW50TGVuZ3RoID0g MDsNCj4gPiArICBIZWFkZXIgPSBIdHRwRmluZEhlYWRlciAoSGVhZGVyQ291bnQsIEhlYWRlcnMs DQo+ID4gKyBIVFRQX0hFQURFUl9UUkFOU0ZFUl9FTkNPRElORyk7ICBpZiAoSGVhZGVyID09IE5V TEwpIHsNCj4gPiArICAgIHJldHVybiBFRklfTk9UX0ZPVU5EOw0KPiA+ICsgIH0NCj4gPiArICBp ZiAoQXNjaWlTdHJDbXAgKEhlYWRlci0+RmllbGRWYWx1ZSwNCj4gSFRUUF9IRUFERVJfVFJBTlNG RVJfRU5DT0RJTkdfQ0hVTktFRCkgIT0gMCkgew0KPiA+ICsgICAgcmV0dXJuIEVGSV9OT1RfRk9V TkQ7DQo+ID4gKyAgfQ0KPiBQbGVhc2UgYWRkIGEgYml0IG9mIHZlcnRpY2FsIHNwYWNpbmcgYmV0 d2VlbiAiYmxvY2tzIiBvZiBjb2RlIHRoYXQgcGVyZm9ybSBhDQo+IGxvZ2ljYWwgc3Vicm91dGlu ZSBpbnNpZGUgdGhpcyBmdW5jdGlvbiAocGFyYW1ldGVyIHByZXAsIGZ1bmN0aW9uIGNhbGwsIHJl c3VsdCwNCj4gc3BhY2luZykuDQo+IEl0IHJlYWxseSBpcyBlYXNpZXIgdG8gcmVhZCENCkZpeGVk Lg0KPiA+ICsgIC8vDQo+ID4gKyAgLy8gTG9vcCB0byBnZXQgYWxsIGNodW5rcy4NCj4gPiArICAv Lw0KPiA+ICsgIFRvdGFsTGVuZ3RoID0gMDsNCj4gPiArICBIdHRwQ2h1bmtzID0gKExJU1RfRU5U UlkgKilBbGxvY2F0ZVplcm9Qb29sIChzaXplb2YgKExJU1RfRU5UUlkpKTsNCj4gPiArIGlmIChI dHRwQ2h1bmtzID09IE5VTEwpIHsNCj4gPiArICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICsgICAgZ290byBFeGl0RGVsZXRlQ2h1bmtzOw0KPiA+ICsgIH0NCj4gPiArICBJ bml0aWFsaXplTGlzdEhlYWQgKEh0dHBDaHVua3MpOw0KPiA+ICsgIERFQlVHICgoREVCVUdfSU5G TywgIiAgICAgQ2h1bmtlZCB0cmFuc2ZlclxuIikpOw0KPiA+ICsgIHdoaWxlIChUUlVFKSB7DQo+ ID4gKyAgICBaZXJvTWVtKChWT0lEICopJlJlc3BvbnNlRGF0YSwNCj4gc2l6ZW9mKEhUVFBfSU9f UkVTUE9OU0VfREFUQSkpOw0KPiA+ICsgICAgUmVzcG9uc2VEYXRhLkJvZHlMZW5ndGggPQ0KPiBI VFRQX0lPX0NIVU5LRURfVFJBTlNGRVJfQ09ESU5HX0RBVEFfTEVOR1RIOw0KPiA+ICsgICAgUmVz cG9uc2VEYXRhLkJvZHkgPSBDaHVua1NpemVBc2NpaTsNCj4gPiArICAgIFN0YXR1cyA9IEh0dHBJ b1JlY3ZSZXNwb25zZSAoDQo+ID4gKyAgICAgICAgICAgICAgIEh0dHBJbywNCj4gPiArICAgICAg ICAgICAgICAgRkFMU0UsDQo+ID4gKyAgICAgICAgICAgICAgICZSZXNwb25zZURhdGENCj4gPiAr ICAgICAgICAgICAgICAgKTsNCj4gPiArICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCj4g PiArICAgICAgZ290byBFeGl0RGVsZXRlQ2h1bmtzOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgLy8N Cj4gPiArICAgIC8vIERlY29kaW5nIENodW5rZWQgVHJhbnNmZXIgQ29kaW5nLg0KPiA+ICsgICAg Ly8gT25seSBkZWNvZGUgY2h1bmstc2l6ZSBhbmQgbGFzdCBjaHVuay4NCj4gPiArICAgIC8vDQo+ ID4gKyAgICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgIENodW5rIEhUVFAgUmVzcG9uc2UgU3Rh dHVzQ29kZSAtICVkXG4iLA0KPiBSZXNwb25zZURhdGEuUmVzcG9uc2UuU3RhdHVzQ29kZSkpOw0K PiA+ICsgICAgLy8NCj4gPiArICAgIC8vIEJyZWFrIGlmIHRoaXMgaXMgbGFzdCBjaHVuay4NCj4g PiArICAgIC8vDQo+ID4gKyAgICBpZiAoQ2h1bmtTaXplQXNjaWkgWzBdID09IENIVU5LRURfVFJB TlNGRVJfQ09ESU5HX0xBU1RfQ0hVTkspDQo+IHsNCj4gPiArICAgICAgU3RhdHVzID0gRUZJX1NV Q0NFU1M7DQo+ID4gKyAgICAgIERFQlVHICgoREVCVUdfSU5GTywgIiAgICAgTGFzdCBjaHVua1xu IikpOw0KPiA+ICsgICAgICBUaGlzQ2h1bmsgPSAoSFRUUF9JT19DSFVOS1MgKilBbGxvY2F0ZVpl cm9Qb29sIChzaXplb2YNCj4gKEhUVFBfSU9fQ0hVTktTKSk7DQo+ID4gKyAgICAgIGlmIChUaGlz Q2h1bmsgPT0gTlVMTCkgew0KPiA+ICsgICAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VS Q0VTOw0KPiA+ICsgICAgICAgIGdvdG8gRXhpdERlbGV0ZUNodW5rczsNCj4gPiArICAgICAgfQ0K PiA+ICsgICAgICBJbml0aWFsaXplTGlzdEhlYWQgKCZUaGlzQ2h1bmstPk5leHRDaHVuayk7DQo+ ID4gKyAgICAgIFRoaXNDaHVuay0+TGVuZ3RoID0gUmVzcG9uc2VEYXRhLkJvZHlMZW5ndGggLSAx IC0gMjsgLy8gTWludXMgc2l6ZW9mDQo+ICcwJyBhbmQgQ1JMRi4NCj4gSG93IGRvIHdlIGtub3cg dGhhdCB0aGUgY2h1bmsgd2UgaGF2ZSByZWNlaXZlZCBldmVuIGNvbnRhaW5zIDAgYW5kIENSTEY/ DQo+IEkgd291bGQgc3VnZ2VzdCBhZGRpbmcgbWluaW1hbCBjaHVuayBsZW5ndGggdmFsaWRhdGlv biBvciBlbHNlDQo+IFRoaXNDaHVuay0+TGVuZ3RoIG1pZ2h0IHVuZGVyZmxvdy4NClN1cmUuIGFk ZGl0aW9uYWwgY2hlY2tpbmcgaXMgYWRkZWQuIFRoYW5rcyBmb3IgdGhpcyBmZWVkYmFjay4NCg0K DQo+ID4gKyAgICAgIFRoaXNDaHVuay0+RGF0YSA9IChDSEFSOCAqKUFsbG9jYXRlUG9vbCAoVGhp c0NodW5rLT5MZW5ndGgpOw0KPiA+ICsgICAgICBpZiAoVGhpc0NodW5rLT5EYXRhID09IE5VTEwp IHsNCj4gPiArICAgICAgICBGcmVlUG9vbCAoKFVJTlQ4ICopVGhpc0NodW5rKTsNCj4gPiArICAg ICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgICAgICBnb3RvIEV4 aXREZWxldGVDaHVua3M7DQo+ID4gKyAgICAgIH0NCj4gPiArICAgICAgQ29weU1lbSAoKFVJTlQ4 ICopVGhpc0NodW5rLT5EYXRhLCAoVUlOVDggKilSZXNwb25zZURhdGEuQm9keQ0KPiArIDEsIFRo aXNDaHVuay0+TGVuZ3RoKTsNCj4gPiArICAgICAgVG90YWxMZW5ndGggKz0gVGhpc0NodW5rLT5M ZW5ndGg7DQo+ID4gKyAgICAgIEluc2VydFRhaWxMaXN0IChIdHRwQ2h1bmtzLCAmVGhpc0NodW5r LT5OZXh0Q2h1bmspOw0KPiA+ICsgICAgICBicmVhazsNCj4gPiArICAgIH0NCj4gPiArDQo+ID4g KyAgICAvLw0KPiA+ICsgICAgLy8gR2V0IHRoZSBjaHVuayBsZW5ndGgNCj4gPiArICAgIC8vDQo+ ID4gKyAgICBJbmRleCA9IDA7DQo+ID4gKyAgICB3aGlsZSAoKENodW5rU2l6ZUFzY2lpIFtJbmRl eF0gIT0NCj4gQ0hVTktFRF9UUkFOU0ZFUl9DT0RJTkdfRVhURU5TSU9OX1NFUEFSQVRPUikgJiYN Cj4gPiArICAgICAgICAgICAoQ2h1bmtTaXplQXNjaWkgW0luZGV4XSAhPQ0KPiAoQ0hBUjgpQ0hV TktFRF9UUkFOU0ZFUl9DT0RJTkdfQ1IpICYmDQo+ID4gKyAgICAgICAgICAgKEluZGV4ICE9IEhU VFBfSU9fQ0hVTktFRF9UUkFOU0ZFUl9DT0RJTkdfREFUQV9MRU5HVEgpKQ0KPiB7DQo+ID4gKyAg ICAgIEluZGV4ICsrOw0KPiA+ICsgICAgfTsNCj4gQ29tbWEgYWZ0ZXIgd2hpbGUgYmxvY2sgLSBw bGVhc2UgcmVtb3ZlLg0KPiA+ICsgICAgaWYgKEluZGV4ID09IEhUVFBfSU9fQ0hVTktFRF9UUkFO U0ZFUl9DT0RJTkdfREFUQV9MRU5HVEgpIHsNCj4gPiArICAgICAgU3RhdHVzID0gRUZJX05PVF9G T1VORDsNCj4gPiArICAgICAgZ290byBFeGl0RGVsZXRlQ2h1bmtzOw0KPiA+ICsgICAgfQ0KPiA+ ICsgICAgQ2h1bmtTaXplQXNjaWlbSW5kZXhdID0gMDsNCj4gPiArICAgIEFzY2lpU3RySGV4VG9V aW50blMgKENodW5rU2l6ZUFzY2lpLCBOVUxMLCBDb250ZW50TGVuZ3RoKTsNCj4gPiArICAgIERF QlVHICgoREVCVUdfSU5GTywgIiAgICAgTGVuZ3RoIG9mIHRoaXMgY2h1bmsgJWRcbiIsDQo+ICpD b250ZW50TGVuZ3RoKSk7DQo+IEkgZG8gbm90IHRydXN0IGNodW5rIGlucHV0LiBJZiAqQ29udGVu dExlbmd0aCBpcyBzb21ldGhpbmcgaHVnZSwgd2UgbWlnaHQNCj4gb3ZlcmZsb3cgVG90YWxMZW5n dGguDQo+IEtub3dpbmcgdGhlIG1lc3NhZ2UgbGVuZ3RoIChSZXNwb25zZURhdGEuQm9keUxlbmd0 aCksIHdlIGNvdWxkIG9idGFpbg0KPiBob3cgbXVjaCBzcGFjZSB0aGUgYWN0dWFsIGNodW5rIGNh biBvY2N1cHkuDQo+IEl0IHdvdWxkIGJlIGdvb2QgdG8gdmVyaWZ5ICpDb250ZW50TGVuZ3RoIGFn YWluc3QgdGhlIHNpemUgb2YgdGhhdCBzcGFjZSwgc28NCj4gdGhhdCB3ZSBkbyBub3QgYWxsb2Nh dGUgc29tZSBodWdlIGJsb2NrIGxhdGVyLg0KIFJlc3BvbnNlRGF0YS5Cb2R5TGVuZ3RoIGlzIGdp dmVuIGJ5ICpDb250ZW50TGVuZ3RoIGFuZCBIdHRwSW9SZWN2UmVzcG9uc2Ugb25seSBjb3BpZXMg ZGF0YSByZWFkIGZyb20gVENQIGluIFJlc3BvbnNlRGF0YS5Cb2R5TGVuZ3RoIHRvIFJlc3BvbnNl RGF0YS5Cb2R5Lg0KRnVydGhlcm1vcmUsIA0KSWYgKkNvbnRlbnRMZW5ndGggaXMgaHVnZSBidXQg dGhlIHJlc3BvbnNlIHBheWxvYWQgaXMgcmV0dXJuZWQgaW4gdGhlIHNhbWUgbGVuZ3RoLCB0aGVu IHdlIGNhbiBqdXN0IHRydXN0IGl0IHdpdGggdGhlIGNoZWNraW5nIHRoZSBlbmQgIlxyXG4iIG9m IGNodW5rIHBheWxvYWQuDQpJZiAqQ29udGVudExlbmd0aCBpcyBsYXJnZXIgdGhhbiB0aGUgcmVz cG9uc2UgcGF5bG9hZCBjYW4gYmUgcmV0dXJuZWQgYnkgSFRUUCBzZXJ2aWNlIHRoZW4gSHR0cElv UmVjdlJlc3BvbnNlIHN1cHBvc2UgcmV0dXJucyB0aW1lb3V0IG9yIHNvbWUgb3RoZXIgRUZJIGVy cm9ycy4gVGhlbiB3ZSBleGl0IGNodW5rIGZ1bmN0aW9uIHdpdGggZXJyb3IgY29kZS4NCklmICpD b250ZW50TGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgcmVzcG9uc2UgcGF5bG9hZCByZXR1cm5l ZCBieSBIVFRQIHNlcnZpY2UsIHRoZSBjaGVja2luZyBvZiBlbmQgIlxyXG4iIG9mIGNodW5rIHBh eWxvYWQgd2lsbCBiZSBmYWlsZWQuIEJ1dCB0aGlzIGNhc2Ugc2hvdWxkbid0IGhhcHBlbiBpbiBI dHRwSW9SZWN2UmVzcG9uc2UgZnVuY3Rpb24uDQpDdXJyZW50bHkgd2UgcmVhZCB0aGUgZW5kICJc clxuIiBvZiBjaHVuayBwYXlsb2FkIGhvd2V2ZXIgd2UgZG9u4oCZdCB2ZXJpZnkgaXQuIFRvIGFk ZCBhZGRpdGlvbmFsIGNoZWNrIG9uIGVuZCAiXHJcbiIgb2YgY2h1bmsgYXQgbGVhc3QgY2FuIG1h a2Ugc3VyZSB0aGUgY2h1bmsgaXMgY29ycmVjdC4NCk1ha2Ugc2Vuc2U/DQpZb3UgY2FuIGNoZWNr IHY0IHBhdGNoIHNldCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcy4NCg0KPiA+ICsgICAg Ly8NCj4gPiArICAgIC8vIFJlY2VpdmUgdGhlIGRhdGE7DQo+ID4gKyAgICAvLw0KPiA+ICsgICAg VGhpc0NodW5rID0gKEhUVFBfSU9fQ0hVTktTICopQWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mDQo+ IChIVFRQX0lPX0NIVU5LUykpOw0KPiA+ICsgICAgaWYgKFRoaXNDaHVuayA9PSBOVUxMKSB7DQo+ ID4gKyAgICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KPiA+ICsgICAgICBnb3Rv IEV4aXREZWxldGVDaHVua3M7DQo+ID4gKyAgICB9DQo+ID4gKyAgICBSZXNwb25zZURhdGEuQm9k eUxlbmd0aCA9ICpDb250ZW50TGVuZ3RoOw0KPiA+ICsgICAgUmVzcG9uc2VEYXRhLkJvZHkgPSAo Q0hBUjggKilBbGxvY2F0ZVBvb2wgKCpDb250ZW50TGVuZ3RoKTsNCj4gPiArICAgIGlmIChSZXNw b25zZURhdGEuQm9keSA9PSBOVUxMKSB7DQo+ID4gKyAgICAgIEZyZWVQb29sIChUaGlzQ2h1bmsp Ow0KPiA+ICsgICAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCj4gPiArICAgICAg Z290byBFeGl0RGVsZXRlQ2h1bmtzOw0KPiA+ICsgICAgfQ0KPiA+ICsgICAgSW5pdGlhbGl6ZUxp c3RIZWFkICgmVGhpc0NodW5rLT5OZXh0Q2h1bmspOw0KPiA+ICsgICAgVGhpc0NodW5rLT5MZW5n dGggPSAqQ29udGVudExlbmd0aDsNCj4gPiArICAgIFRoaXNDaHVuay0+RGF0YSA9IFJlc3BvbnNl RGF0YS5Cb2R5Ow0KPiA+ICsgICAgSW5zZXJ0VGFpbExpc3QgKEh0dHBDaHVua3MsICZUaGlzQ2h1 bmstPk5leHRDaHVuayk7DQo+ID4gKyAgICBTdGF0dXMgPSBIdHRwSW9SZWN2UmVzcG9uc2UgKA0K PiA+ICsgICAgICAgICAgICAgICBIdHRwSW8sDQo+ID4gKyAgICAgICAgICAgICAgIEZBTFNFLA0K PiA+ICsgICAgICAgICAgICAgICAmUmVzcG9uc2VEYXRhDQo+ID4gKyAgICAgICAgICAgICAgICk7 DQo+ID4gKyAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQo+ID4gKyAgICAgIGdvdG8gRXhp dERlbGV0ZUNodW5rczsNCj4gPiArICAgIH0NCj4gPiArICAgIC8vDQo+ID4gKyAgICAvLyBSZWFk IENSTEYNCj4gPiArICAgIC8vDQo+ID4gKyAgICBaZXJvTWVtKChWT0lEICopJlJlc3BvbnNlRGF0 YSwNCj4gc2l6ZW9mKEhUVFBfSU9fUkVTUE9OU0VfREFUQSkpOw0KPiBTcGFjaW5nIGFmdGVyIGZ1 bmN0aW9uIG5hbWUuDQo+ID4gKyAgICBSZXNwb25zZURhdGEuQm9keUxlbmd0aCA9IDI7DQo+ID4g KyAgICBSZXNwb25zZURhdGEuQm9keSA9IENodW5rU2l6ZUFzY2lpOw0KPiA+ICsgICAgU3RhdHVz ID0gSHR0cElvUmVjdlJlc3BvbnNlICgNCj4gPiArICAgICAgICAgICAgICAgSHR0cElvLA0KPiA+ ICsgICAgICAgICAgICAgICBGQUxTRSwNCj4gPiArICAgICAgICAgICAgICAgJlJlc3BvbnNlRGF0 YQ0KPiA+ICsgICAgICAgICAgICAgICApOw0KPiA+ICsgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVz KSkgew0KPiA+ICsgICAgICBnb3RvIEV4aXREZWxldGVDaHVua3M7DQo+ID4gKyAgICB9DQo+ID4g Kw0KPiA+ICsgICAgVG90YWxMZW5ndGggKz0gKkNvbnRlbnRMZW5ndGg7DQo+ID4gKyAgfTsNCj4g Q29tbWEgYWZ0ZXIgd2hpbGUgYmxvY2suIFBsZWFzZSByZW1vdmUuDQpEb25lDQoNCg0KPiA+ICsN Cj4gPiArICAqQ29udGVudExlbmd0aCA9IFRvdGFsTGVuZ3RoOw0KPiA+ICsgICpDaHVua0xpc3RI ZWFkID0gSHR0cENodW5rczsNCj4gPiArICBERUJVRyAoKERFQlVHX0lORk8sICIgICAgIFRvdGFs IG9mIGxlbmdoIG9mIGNodW5rcyA6JWRcbiIsDQo+IFRvdGFsTGVuZ3RoKSk7DQo+ID4gKyAgcmV0 dXJuIEVGSV9TVUNDRVNTOw0KPiA+ICsNCj4gPiArRXhpdERlbGV0ZUNodW5rczoNCj4gPiArICBp ZiAoSHR0cENodW5rcyAhPSBOVUxMKSB7DQo+ID4gKyAgICB3aGlsZSAoIUlzTGlzdEVtcHR5KEh0 dHBDaHVua3MpKSB7DQo+ID4gKyAgICAgIFRoaXNMaXN0RW50cnkgPSBHZXRGaXJzdE5vZGUgKEh0 dHBDaHVua3MpOw0KPiA+ICsgICAgICBSZW1vdmVFbnRyeUxpc3QgKFRoaXNMaXN0RW50cnkpOw0K PiA+ICsgICAgICBUaGlzQ2h1bmsgPSAoSFRUUF9JT19DSFVOS1MgKilUaGlzTGlzdEVudHJ5Ow0K PiA+ICsgICAgICBpZiAoVGhpc0NodW5rLT5EYXRhICE9IE5VTEwpIHsNCj4gPiArICAgICAgICBG cmVlUG9vbCAoVGhpc0NodW5rLT5EYXRhKTsNCj4gPiArICAgICAgfQ0KPiA+ICsgICAgICBGcmVl UG9vbChUaGlzTGlzdEVudHJ5KTsNCj4gPiArICAgIH07DQo+IENvbW1hIGFmdGVyIHdoaWxlIGJs b2NrLiBQbGVhc2UgcmVtb3ZlLg0KDQpEb25lDQoNCj4gPiArICAgIEZyZWVQb29sIChIdHRwQ2h1 bmtzKTsNCj4gPiArICB9DQo+ID4gKyAgcmV0dXJuIFN0YXR1czsNCj4gPiArfQ0KPiA+IGRpZmYg LS1naXQgYS9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElvTGliL0R4ZUh0dHBJb0xpYi5pbmYN Cj4gPiBiL05ldHdvcmtQa2cvTGlicmFyeS9EeGVIdHRwSW9MaWIvRHhlSHR0cElvTGliLmluZg0K PiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMC4uYTAyYjQwOTU0 Nw0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0 cElvTGliL0R4ZUh0dHBJb0xpYi5pbmYNCj4gPiBAQCAtMCwwICsxLDQzIEBADQo+ID4gKyMjIEBm aWxlDQo+ID4gKyMgIFRoaXMgbGlicmFyeSBpbnN0YW5jZSBwcm92aWRlcyBIVFRQIElPIGhlbHBl ciBmdW5jdGlvbnMuDQo+ID4gKyMNCj4gPiArIyAgKEMpIENvcHlyaWdodCAyMDIwIEhld2xldHQg UGFja2FyZCBFbnRlcnByaXNlIERldmVsb3BtZW50IExQPEJSPiAjDQo+ID4gK1NQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50ICMgIyMNCj4gPiArDQo+ID4gK1tEZWZp bmVzXQ0KPiA+ICsgIElORl9WRVJTSU9OICAgICAgICAgICAgICAgICAgICA9IDB4MDAwMTAwMWIN Cj4gPiArICBCQVNFX05BTUUgICAgICAgICAgICAgICAgICAgICAgPSBEeGVIdHRwSW9MaWINCj4g PiArICBNT0RVTEVfVU5JX0ZJTEUgICAgICAgICAgICAgICAgPSBEeGVIdHRwSW9MaWIudW5pDQo+ ID4gKyAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gNTBCMTk4RjgtNzk4Ni00RjUx LUE4NTctQ0ZFNDY0M0Q1OUYzDQo+ID4gKyAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgICAg ID0gRFhFX0RSSVZFUg0KPiA+ICsgIFZFUlNJT05fU1RSSU5HICAgICAgICAgICAgICAgICA9IDEu MA0KPiA+ICsgIExJQlJBUllfQ0xBU1MgICAgICAgICAgICAgICAgICA9IEh0dHBJb0xpYnwgRFhF X0NPUkUgRFhFX0RSSVZFUg0KPiBEWEVfUlVOVElNRV9EUklWRVIgRFhFX1NNTV9EUklWRVIgVUVG SV9BUFBMSUNBVElPTg0KPiBVRUZJX0RSSVZFUg0KPiA+ICsNCj4gPiArIw0KPiA+ICsjIFRoZSBm b2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBvbmx5IGFuZCBub3QgcmVxdWly ZWQgYnkgdGhlDQo+IGJ1aWxkIHRvb2xzLg0KPiA+ICsjDQo+ID4gKyMgIFZBTElEX0FSQ0hJVEVD VFVSRVMgICAgICAgICAgID0gSUEzMiBYNjQgRUJDIEFSTSBBQVJNNjQgUklTQ1Y2NA0KPiA+ICsj DQo+ID4gKw0KPiA+ICtbU291cmNlc10NCj4gPiArICBEeGVIdHRwSW9MaWIuYw0KPiA+ICsNCj4g PiArW1BhY2thZ2VzXQ0KPiA+ICsgIE1kZVBrZy9NZGVQa2cuZGVjDQo+ID4gKyAgTmV0d29ya1Br Zy9OZXR3b3JrUGtnLmRlYw0KPiA+ICsNCj4gPiArDQo+ID4gK1tMaWJyYXJ5Q2xhc3Nlc10NCj4g PiArICBCYXNlTGliDQo+ID4gKyAgQmFzZU1lbW9yeUxpYg0KPiA+ICsgIERlYnVnTGliDQo+ID4g KyAgRHBjTGliDQo+ID4gKyAgTWVtb3J5QWxsb2NhdGlvbkxpYg0KPiA+ICsgIFByaW50TGliDQo+ ID4gKyAgVWVmaUJvb3RTZXJ2aWNlc1RhYmxlTGliDQo+ID4gKw0KPiA+ICtbUHJvdG9jb2xzXQ0K PiA+ICsgIGdFZmlIdHRwUHJvdG9jb2xHdWlkICAgICAgICAgICAgICMjIFNPTUVUSU1FU19DT05T VU1FUw0KPiA+ICsNCj4gPiBkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJ b0xpYi9EeGVIdHRwSW9MaWIudW5pDQo+ID4gYi9OZXR3b3JrUGtnL0xpYnJhcnkvRHhlSHR0cElv TGliL0R4ZUh0dHBJb0xpYi51bmkNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4 IDAwMDAwMDAwMDAuLmQ0MTliMWE0OWQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvTmV0 d29ya1BrZy9MaWJyYXJ5L0R4ZUh0dHBJb0xpYi9EeGVIdHRwSW9MaWIudW5pDQo+ID4gQEAgLTAs MCArMSwxMyBAQA0KPiA+ICsvLyAvKiogQGZpbGUNCj4gPiArLy8gVGhlIGxpYnJhcnkgaW5zdGFu Y2UgcHJvdmlkZXMgSFRUUCBJTyBoZWxwZXIgZnVuY3Rpb25zLg0KPiA+ICsvLw0KPiA+ICsvLyAo QykgQ29weXJpZ2h0IDIwMjAgSGV3bGV0dCBQYWNrYXJkIEVudGVycHJpc2UgRGV2ZWxvcG1lbnQg TFA8QlI+DQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0 ZW50IC8vIC8vICoqLw0KPiA+ICsNCj4gPiArDQo+ID4gKyNzdHJpbmcgU1RSX01PRFVMRV9BQlNU UkFDVCAgICAgICAgICAgICAjbGFuZ3VhZ2UgZW4tVVMgIkhUVFAgSU8gSGVscGVyDQo+IExpYnJh cnkiDQo+ID4gKw0KPiA+ICsjc3RyaW5nIFNUUl9NT0RVTEVfREVTQ1JJUFRJT04gICAgICAgICAg I2xhbmd1YWdlIGVuLVVTICJUaGUgbGlicmFyeQ0KPiBpbnN0YW5jZSBwcm92aWRlcyBIVFRQIElP IGhlbHBlciBmdW5jdGlvbnMuIg0KPiA+ICsNCg0K