From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) by mx.groups.io with SMTP id smtpd.web09.12016.1623157625989993464 for ; Tue, 08 Jun 2021 06:07:06 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=itF5h1xK; spf=pass (domain: redhat.com, ip: 216.205.24.124, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1623157625; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Cd53CNOVCPIcq5+kM1yyaFB9lncnhTPLqqU6KtS8yIY=; b=itF5h1xKLX3BQtCiQygd2+VfKt+S/pdFhCqflTLVrXABGnsI2ea6a1K9Hi42l+j9qzn2Ln w92hKdMepYLkO7tLNgNjeGBbyTISWSQcR1HxBHPr/dJrfMj+B3cbxRCnIT5JjVmKQ6vGET K4mf45HxsQHQsHjrNDIGG38h82Yj7Jw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-473-G3TNCFnXM0eXlPiQOoyHPw-1; Tue, 08 Jun 2021 09:07:03 -0400 X-MC-Unique: G3TNCFnXM0eXlPiQOoyHPw-1 Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id E77691922965; Tue, 8 Jun 2021 13:07:01 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-113-27.ams2.redhat.com [10.36.113.27]) by smtp.corp.redhat.com (Postfix) with ESMTP id 76C5C610B0; Tue, 8 Jun 2021 13:07:00 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Jiaxin Wu , Maciej Rabeda , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Siyuan Fu Subject: [PATCH 4/6] NetworkPkg/IScsiDxe: support multiple hash algorithms for CHAP Date: Tue, 8 Jun 2021 15:06:50 +0200 Message-Id: <20210608130652.2434-5-lersek@redhat.com> In-Reply-To: <20210608130652.2434-1-lersek@redhat.com> References: <20210608130652.2434-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=lersek@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 SW50cm9kdWNlIHRoZSAibUNoYXBIYXNoIiB0YWJsZSwgY29udGFpbmluZyB0aGUgaGFzaCBhbGdv cml0aG1zIHN1cHBvcnRlZApmb3IgQ0hBUC4gSGFzaCBhbGdvcyBsaXN0ZWQgYXQgdGhlIGJlZ2lu bmluZyBvZiB0aGUgdGFibGUgYXJlIHByZWZlcnJlZCBieQp0aGUgaW5pdGlhdG9yLgoKSW4gSVND U0lfQ0hBUF9TVEVQX09ORSwgc2VuZCBzdWNoIGEgQ0hBUF9BIHZhbHVlIHRoYXQgaXMgdGhlCmNv bW1hLXNlcGFyYXRlZCwgb3JkZXJlZCBsaXN0IG9mIGFsZ29yaXRobSBpZGVudGlmaWVycyBmcm9t ICJtQ2hhcEhhc2giLgpQcmUtZm9ybWF0IHRoaXMgdmFsdWUgc3RyaW5nIGF0IGRyaXZlciBzdGFy dHVwLCBpbiB0aGUgbmV3IGZ1bmN0aW9uCklTY3NpQ0hBUEluaXRIYXNoTGlzdCgpLgoKKEluIElT Y3NpQ0hBUEluaXRIYXNoTGlzdCgpLCBhbHNvIGVuZm9yY2UgdGhhdCBldmVyeSBoYXNoIGFsZ28n cyBkaWdlc3QKc2l6ZSBmaXQgaW50byBJU0NTSV9DSEFQX01BWF9ESUdFU1RfU0laRSwgYXMgdGhl IGxhdHRlciBjb250cm9scyB0aGUKZGlnZXN0LCBvdXRnb2luZyBjaGFsbGVuZ2UsIGFuZCBoZXgg KmFsbG9jYXRpb25zKi4pCgpJbiBJU0NTSV9DSEFQX1NURVBfVFdPLCBhbGxvdyB0aGUgdGFyZ2V0 IHRvIHNlbGVjdCBvbmUgb2YgdGhlIG9mZmVyZWQgaGFzaAphbGdvcml0aG1zLCBhbmQgcmVtZW1i ZXIgdGhlIHNlbGVjdGlvbiBmb3IgdGhlIGxhdGVyIHN0ZXBzLiBGb3IKSVNDU0lfQ0hBUF9TVEVQ X1RIUkVFLCBoYXNoIHRoZSBjaGFsbGVuZ2UgZnJvbSB0aGUgdGFyZ2V0IHdpdGggdGhlCnNlbGVj dGVkIGhhc2ggYWxnby4KCkluIElTQ1NJX0NIQVBfU1RFUF9USFJFRSwgc2VuZCB0aGUgY29ycmVj dGx5IHNpemVkIGRpZ2VzdCB0byB0aGUgdGFyZ2V0LgpJZiB0aGUgaW5pdGlhdG9yIHdhbnRzIG11 dHVhbCBhdXRoZW50aWNhdGlvbiwgdGhlbiBnZW5lcmF0ZSBhIGNoYWxsZW5nZQp3aXRoIGFzIG1h bnkgYnl0ZXMgYXMgdGhlIHRhcmdldCdzIGRpZ2VzdCB3aWxsIGhhdmUsIGluCklTQ1NJX0NIQVBf U1RFUF9GT1VSLgoKSW4gSVNDU0lfQ0hBUF9TVEVQX0ZPVVIgKGkuZS4sIHdoZW4gbXV0dWFsIGF1 dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkIGJ5CnRoZSBpbml0aWF0b3IpLCB2ZXJpZnkgdGhlIHRh cmdldCdzIHJlc3BvbnNlIChkaWdlc3QpIHdpdGggdGhlIHNlbGVjdGVkCmFsZ29yaXRobS4KCkNs ZWFyIHRoZSBzZWxlY3RlZCBoYXNoIGFsZ29yaXRobSBiZWZvcmUgZXZlcnkgbG9naW4gKHJlbWVt YmVyIHRoYXQgaW4KSVNjc2lEeGUsIGV2ZXJ5IGxvZ2luIGlzIGEgbGVhZGluZyBsb2dpbikuCgpU aGVyZSBpcyBubyBwZWVyLW9ic2VydmFibGUgY2hhbmdlIGZyb20gdGhpcyBwYXRjaCwgYXMgaXQg b25seSByZXdvcmtzIHRoZQpjdXJyZW50IE1ENSBzdXBwb3J0IGludG8gdGhlIG5ldyBpbnRlcm5h bCByZXByZXNlbnRhdGlvbi4KCkNjOiBKaWF4aW4gV3UgPGppYXhpbi53dUBpbnRlbC5jb20+CkNj OiBNYWNpZWogUmFiZWRhIDxtYWNpZWoucmFiZWRhQGxpbnV4LmludGVsLmNvbT4KQ2M6IFBoaWxp cHBlIE1hdGhpZXUtRGF1ZMOpIDxwaGlsbWRAcmVkaGF0LmNvbT4KQ2M6IFNpeXVhbiBGdSA8c2l5 dWFuLmZ1QGludGVsLmNvbT4KUmVmOiBodHRwczovL2J1Z3ppbGxhLnRpYW5vY29yZS5vcmcvc2hv d19idWcuY2dpP2lkPTMzNTUKU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2VrIDxsZXJzZWtAcmVk aGF0LmNvbT4KLS0tCiBOZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5oICAgfCAgNTUgKysr KysrKwogTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYyAgIHwgMTU4ICsrKysrKysrKysr KysrKysrLS0tCiBOZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpRHJpdmVyLmMgfCAgIDIgKwogTmV0 d29ya1BrZy9JU2NzaUR4ZS9JU2NzaVByb3RvLmMgIHwgICAzICsKIDQgZmlsZXMgY2hhbmdlZCwg MTk1IGluc2VydGlvbnMoKyksIDIzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL05ldHdvcmtQ a2cvSVNjc2lEeGUvSVNjc2lDSEFQLmggYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpQ0hBUC5o CmluZGV4IGI4ODExYjc1ODBmMC4uMWU1Y2MwYjI4N2VkIDEwMDY0NAotLS0gYS9OZXR3b3JrUGtn L0lTY3NpRHhlL0lTY3NpQ0hBUC5oCisrKyBiL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lDSEFQ LmgKQEAgLTMxLDQ3ICszMSw5MSBAQCBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudAogDQogI2RlZmluZSBJU0NTSV9DSEFQX1NURVBfT05FICAgICAgICAgICAgICAg ICAgICAgICAxDQogI2RlZmluZSBJU0NTSV9DSEFQX1NURVBfVFdPICAgICAgICAgICAgICAgICAg ICAgICAyDQogI2RlZmluZSBJU0NTSV9DSEFQX1NURVBfVEhSRUUgICAgICAgICAgICAgICAgICAg ICAzDQogI2RlZmluZSBJU0NTSV9DSEFQX1NURVBfRk9VUiAgICAgICAgICAgICAgICAgICAgICA0 DQogDQogDQogI3ByYWdtYSBwYWNrKDEpDQogDQogdHlwZWRlZiBzdHJ1Y3QgX0lTQ1NJX0NIQVBf QVVUSF9DT05GSUdfTlZEQVRBIHsNCiAgIFVJTlQ4IENIQVBUeXBlOw0KICAgQ0hBUjggQ0hBUE5h bWVbSVNDU0lfQ0hBUF9OQU1FX1NUT1JBR0VdOw0KICAgQ0hBUjggQ0hBUFNlY3JldFtJU0NTSV9D SEFQX1NFQ1JFVF9TVE9SQUdFXTsNCiAgIENIQVI4IFJldmVyc2VDSEFQTmFtZVtJU0NTSV9DSEFQ X05BTUVfU1RPUkFHRV07DQogICBDSEFSOCBSZXZlcnNlQ0hBUFNlY3JldFtJU0NTSV9DSEFQX1NF Q1JFVF9TVE9SQUdFXTsNCiB9IElTQ1NJX0NIQVBfQVVUSF9DT05GSUdfTlZEQVRBOw0KIA0KICNw cmFnbWEgcGFjaygpDQogDQorLy8NCisvLyBUeXBlZGVmcyBmb3IgY29sbGVjdGluZyBzZXRzIG9m IGhhc2ggQVBJcyBmcm9tIEJhc2VDcnlwdExpYi4NCisvLw0KK3R5cGVkZWYNCitVSU5UTg0KKyhF RklBUEkgKkNIQVBfSEFTSF9HRVRfQ09OVEVYVF9TSVpFKSAoDQorICBWT0lEDQorICApOw0KKw0K K3R5cGVkZWYNCitCT09MRUFODQorKEVGSUFQSSAqQ0hBUF9IQVNIX0lOSVQpICgNCisgIE9VVCBW T0lEICpDb250ZXh0DQorICApOw0KKw0KK3R5cGVkZWYNCitCT09MRUFODQorKEVGSUFQSSAqQ0hB UF9IQVNIX1VQREFURSkgKA0KKyAgSU4gT1VUIFZPSUQgICAgICAgKkNvbnRleHQsDQorICBJTiAg ICAgQ09OU1QgVk9JRCAqRGF0YSwNCisgIElOICAgICBVSU5UTiAgICAgIERhdGFTaXplDQorICAp Ow0KKw0KK3R5cGVkZWYNCitCT09MRUFODQorKEVGSUFQSSAqQ0hBUF9IQVNIX0ZJTkFMKSAoDQor ICBJTiBPVVQgVk9JRCAgKkNvbnRleHQsDQorICBPVVQgICAgVUlOVDggKkhhc2hWYWx1ZQ0KKyAg KTsNCisNCit0eXBlZGVmIHN0cnVjdCB7DQorICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICBB bGdvcml0aG07ICAgICAgLy8gSVNDU0lfQ0hBUF9BTEdPUklUSE1fKiwgQ0hBUF9BDQorICBVSU5U MzIgICAgICAgICAgICAgICAgICAgICBEaWdlc3RTaXplOw0KKyAgQ0hBUF9IQVNIX0dFVF9DT05U RVhUX1NJWkUgR2V0Q29udGV4dFNpemU7DQorICBDSEFQX0hBU0hfSU5JVCAgICAgICAgICAgICBJ bml0Ow0KKyAgQ0hBUF9IQVNIX1VQREFURSAgICAgICAgICAgVXBkYXRlOw0KKyAgQ0hBUF9IQVNI X0ZJTkFMICAgICAgICAgICAgRmluYWw7DQorfSBDSEFQX0hBU0g7DQorDQogLy8vDQogLy8vIElT Q1NJIENIQVAgQXV0aGVudGljYXRpb24gRGF0YQ0KIC8vLw0KIHR5cGVkZWYgc3RydWN0IF9JU0NT SV9DSEFQX0FVVEhfREFUQSB7DQogICBJU0NTSV9DSEFQX0FVVEhfQ09ORklHX05WREFUQSAqQXV0 aENvbmZpZzsNCiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICAgIEluSWRlbnRpZmllcjsN CiAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAgIEluQ2hhbGxlbmdlWzEwMjRdOw0KICAg VUlOVDMyICAgICAgICAgICAgICAgICAgICAgICAgSW5DaGFsbGVuZ2VMZW5ndGg7DQogICAvLw0K KyAgLy8gVGhlIGhhc2ggYWxnb3JpdGhtIChDSEFQX0EpIHRoYXQgdGhlIHRhcmdldCBzZWxlY3Rz IGluDQorICAvLyBJU0NTSV9DSEFQX1NURVBfVFdPLg0KKyAgLy8NCisgIENPTlNUIENIQVBfSEFT SCAgICAgICAgICAgICAgICpIYXNoOw0KKyAgLy8NCiAgIC8vIENhbGN1bGF0ZWQgQ0hBUCBSZXNw b25zZSAoQ0hBUF9SKSB2YWx1ZS4NCiAgIC8vDQogICBVSU5UOCAgICAgICAgICAgICAgICAgICAg ICAgICBDSEFQUmVzcG9uc2VbSVNDU0lfQ0hBUF9NQVhfRElHRVNUX1NJWkVdOw0KIA0KICAgLy8N CiAgIC8vIEF1dGgtZGF0YSB0byBiZSBzZW50IG91dCBmb3IgbXV0dWFsIGF1dGhlbnRpY2F0aW9u Lg0KICAgLy8NCiAgIC8vIFdoaWxlIHRoZSBjaGFsbGVuZ2Ugc2l6ZSBpcyB0ZWNobmljYWxseSBp bmRlcGVuZGVudCBvZiB0aGUgaGFzaGluZw0KICAgLy8gYWxnb3JpdGhtLCBpdCBpcyBnb29kIHBy YWN0aWNlIHRvIGF2b2lkIGhhc2hpbmcgKmZld2VyIGJ5dGVzKiB0aGFuIHRoZQ0KICAgLy8gZGln ZXN0IHNpemUuIEluIG90aGVyIHdvcmRzLCBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gZmVlZCAqYXQg bGVhc3QgYXMgbWFueQ0KICAgLy8gYnl0ZXMqIHRvIHRoZSBoYXNoaW5nIGFsZ29yaXRobSBhcyB0 aGUgaGFzaGluZyBhbGdvcml0aG0gd2lsbCBvdXRwdXQuDQogICAvLw0KICAgVUlOVDMyICAgICAg ICAgICAgICAgICAgICAgICAgT3V0SWRlbnRpZmllcjsNCiAgIFVJTlQ4ICAgICAgICAgICAgICAg ICAgICAgICAgIE91dENoYWxsZW5nZVtJU0NTSV9DSEFQX01BWF9ESUdFU1RfU0laRV07DQogfSBJ U0NTSV9DSEFQX0FVVEhfREFUQTsNCiANCiAvKioNCiAgIFRoaXMgZnVuY3Rpb24gY2hlY2tzIHRo ZSByZWNlaXZlZCBpU0NTSSBMb2dpbiBSZXNwb25zZSBkdXJpbmcgdGhlIHNlY3VyaXR5DQogICBu ZWdvdGlhdGlvbiBzdGFnZS4NCkBAIC05MiwyMCArMTM2LDMxIEBAIElTY3NpQ0hBUE9uUnNwUmVj ZWl2ZWQgKAogICBUaGlzIGZ1bmN0aW9uIGZpbGxzIHRoZSBDSEFQIGF1dGhlbnRpY2F0aW9uIGlu Zm9ybWF0aW9uIGludG8gdGhlIGxvZ2luIFBEVQ0KICAgZHVyaW5nIHRoZSBzZWN1cml0eSBuZWdv dGlhdGlvbiBzdGFnZSBpbiB0aGUgaVNDU0kgY29ubmVjdGlvbiBsb2dpbi4NCiANCiAgIEBwYXJh bVtpbl0gICAgICAgQ29ubiAgICAgICAgVGhlIGlTQ1NJIGNvbm5lY3Rpb24uDQogICBAcGFyYW1b aW4sIG91dF0gIFBkdSAgICAgICAgIFRoZSBQRFUgdG8gc2VuZCBvdXQuDQogDQogICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBBbGwgY2hlY2sgcGFzc2VkIGFuZCB0aGUgcGhhc2UtcmVs YXRlZCBDSEFQDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50aWNhdGlv biBpbmZvIGlzIGZpbGxlZCBpbnRvIHRoZSBpU0NTSQ0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUERVLg0KICAgQHJldHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyAgRmFpbGVkIHRv IGFsbG9jYXRlIG1lbW9yeS4NCiAgIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgIFNvbWUg a2luZCBvZiBwcm90b2NvbCBlcnJvciBvY2N1cnJlZC4NCiANCiAqKi8NCiBFRklfU1RBVFVTDQog SVNjc2lDSEFQVG9TZW5kUmVxICgNCiAgIElOICAgICAgSVNDU0lfQ09OTkVDVElPTiAgKkNvbm4s DQogICBJTiBPVVQgIE5FVF9CVUYgICAgICAgICAgICpQZHUNCiAgICk7DQogDQorLyoqDQorICBJ bml0aWFsaXplIHRoZSBDSEFQX0E9PEExLEEyLi4uPiAqdmFsdWUqIHN0cmluZyBmb3IgdGhlIGVu dGlyZSBkcml2ZXIsIHRvIGJlDQorICBzZW50IGJ5IHRoZSBpbml0aWF0b3IgaW4gSVNDU0lfQ0hB UF9TVEVQX09ORS4NCisNCisgIFRoaXMgZnVuY3Rpb24gc2FuaXR5LWNoZWNrcyB0aGUgaW50ZXJu YWwgdGFibGUgb2Ygc3VwcG9ydGVkIENIQVAgaGFzaGluZw0KKyAgYWxnb3JpdGhtcywgYXMgd2Vs bC4NCisqKi8NCitWT0lEDQorSVNjc2lDSEFQSW5pdEhhc2hMaXN0ICgNCisgIFZPSUQNCisgICk7 DQogI2VuZGlmDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYyBi L05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lDSEFQLmMKaW5kZXggNzQ0ODI0ZTYzZDIzLi5mMDJh ZGE2NDQ0Y2UgMTAwNjQ0Ci0tLSBhL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lDSEFQLmMKKysr IGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaUNIQVAuYwpAQCAtMSwxNDggKzEsMTk0IEBACiAv KiogQGZpbGUNCiAgIFRoaXMgZmlsZSBpcyBmb3IgQ2hhbGxlbmdlLUhhbmRzaGFrZSBBdXRoZW50 aWNhdGlvbiBQcm90b2NvbCAoQ0hBUCkNCiAgIENvbmZpZ3VyYXRpb24uDQogDQogQ29weXJpZ2h0 IChjKSAyMDA0IC0gMjAxOCwgSW50ZWwgQ29ycG9yYXRpb24uIEFsbCByaWdodHMgcmVzZXJ2ZWQu PEJSPg0KIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogDQog KiovDQogDQogI2luY2x1ZGUgIklTY3NpSW1wbC5oIg0KIA0KKy8vDQorLy8gU3VwcG9ydGVkIENI QVAgaGFzaCBhbGdvcml0aG1zLCBtYXBwZWQgdG8gc2V0cyBvZiBCYXNlQ3J5cHRMaWIgQVBJcyBh bmQNCisvLyBtYWNyb3MuIENIQVBfSEFTSCBzdHJ1Y3R1cmVzIGF0IGxvd2VyIHN1YnNjcmlwdHMg aW4gdGhlIGFycmF5IGFyZSBwcmVmZXJyZWQNCisvLyBieSB0aGUgaW5pdGlhdG9yLg0KKy8vDQor U1RBVElDIENPTlNUIENIQVBfSEFTSCBtQ2hhcEhhc2hbXSA9IHsNCisgIHsNCisgICAgSVNDU0lf Q0hBUF9BTEdPUklUSE1fTUQ1LA0KKyAgICBNRDVfRElHRVNUX1NJWkUsDQorICAgIE1kNUdldENv bnRleHRTaXplLA0KKyAgICBNZDVJbml0LA0KKyAgICBNZDVVcGRhdGUsDQorICAgIE1kNUZpbmFs DQorICB9LA0KK307DQorDQorLy8NCisvLyBPcmRlcmVkIGxpc3Qgb2YgbUNoYXBIYXNoWypdLkFs Z29yaXRobSB2YWx1ZXMuIEl0IGlzIGZvcm1hdHRlZCBmb3IgdGhlDQorLy8gQ0hBUF9BPTxBMSxB Mi4uLj4gdmFsdWUgc3RyaW5nLCBieSB0aGUgSVNjc2lDSEFQSW5pdEhhc2hMaXN0KCkgZnVuY3Rp b24uIEl0DQorLy8gaXMgc2VudCBieSB0aGUgaW5pdGlhdG9yIGluIElTQ1NJX0NIQVBfU1RFUF9P TkUuDQorLy8NCitTVEFUSUMgQ0hBUjggbUNoYXBIYXNoTGlzdFN0cmluZ1sNCisgICAgICAgICAg ICAgICAzICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVJTlQ4IGlk ZW50aWZpZXIgaW4NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIC8vICAgZGVjaW1hbA0KKyAgICAgICAgICAgICAgICgxICsgMykgKiAoQVJS QVlfU0laRSAobUNoYXBIYXNoKSAtIDEpICsgLy8gY29tbWEgcHJlcGVuZGVkIGZvcg0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICBl bnRyaWVzIGFmdGVyIHRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgLy8gICBmaXJzdA0KKyAgICAgICAgICAgICAgIDEgKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXh0cmEgY2hhcmFjdGVyIGZvcg0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g ICBBc2NpaVNQcmludCgpDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAvLyAgIHRydW5jYXRpb24gY2hlY2sNCisgICAgICAgICAgICAgICAx ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRlcm1pbmF0aW5nIE5V TA0KKyAgICAgICAgICAgICAgIF07DQorDQogLyoqDQogICBJbml0aWF0b3IgY2FsY3VsYXRlcyBp dHMgb3duIGV4cGVjdGVkIGhhc2ggdmFsdWUuDQogDQogICBAcGFyYW1baW5dICAgQ2hhcElkZW50 aWZpZXIgICAgIGlTQ1NJIENIQVAgaWRlbnRpZmllciBzZW50IGJ5IGF1dGhlbnRpY2F0b3IuDQog ICBAcGFyYW1baW5dICAgQ2hhcFNlY3JldCAgICAgICAgIGlTQ1NJIENIQVAgc2VjcmV0IG9mIHRo ZSBhdXRoZW50aWNhdG9yLg0KICAgQHBhcmFtW2luXSAgIFNlY3JldExlbmd0aCAgICAgICBUaGUg bGVuZ3RoIG9mIGlTQ1NJIENIQVAgc2VjcmV0Lg0KICAgQHBhcmFtW2luXSAgIENoYXBDaGFsbGVu Z2UgICAgICBUaGUgY2hhbGxlbmdlIG1lc3NhZ2Ugc2VudCBieSBhdXRoZW50aWNhdG9yLg0KICAg QHBhcmFtW2luXSAgIENoYWxsZW5nZUxlbmd0aCAgICBUaGUgbGVuZ3RoIG9mIGlTQ1NJIENIQVAg Y2hhbGxlbmdlIG1lc3NhZ2UuDQorICBAcGFyYW1baW5dICAgSGFzaCAgICAgICAgICAgICAgIFBv aW50ZXIgdG8gdGhlIENIQVBfSEFTSCBzdHJ1Y3R1cmUgdGhhdA0KKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXRlcm1pbmVzIHRoZSBoYXNoaW5nIGFsZ29yaXRobSB0byB1c2Uu IFRoZQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsZXIgaXMgcmVzcG9u c2libGUgZm9yIG1ha2luZyBIYXNoIHBvaW50DQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRvIGFuICJtQ2hhcEhhc2giIGVsZW1lbnQuDQogICBAcGFyYW1bb3V0XSAgQ2hhcFJl c3BvbnNlICAgICAgIFRoZSBjYWxjdWxhdGlvbiBvZiB0aGUgZXhwZWN0ZWQgaGFzaCB2YWx1ZS4N CiANCiAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICAgVGhlIGV4cGVjdGVkIGhhc2gg dmFsdWUgd2FzIGNhbGN1bGF0ZWRseQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdWNjZXNzZnVsbHkuDQogICBAcmV0dmFsIEVGSV9QUk9UT0NPTF9FUlJPUiAgICAgIFRoZSBs ZW5ndGggb2YgdGhlIHNlY3JldCBzaG91bGQgYmUgYXQgbGVhc3QNCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhlIGxlbmd0aCBvZiB0aGUgaGFzaCB2YWx1ZSBmb3IgdGhlIGhh c2hpbmcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxnb3JpdGhtIGNob3Nl bi4NCi0gIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgICAgTUQ1IGhhc2ggb3BlcmF0aW9u IGZhaWwuDQotICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgIEZhaWwgdG8gYWxsb2Nh dGUgcmVzb3VyY2UgdG8gY29tcGxldGUgTUQ1Lg0KKyAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJS T1IgICAgICBIYXNoIG9wZXJhdGlvbiBmYWlscy4NCisgIEByZXR2YWwgRUZJX09VVF9PRl9SRVNP VVJDRVMgICAgRmFpbHVyZSB0byBhbGxvY2F0ZSByZXNvdXJjZSB0byBjb21wbGV0ZQ0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNoaW5nLg0KIA0KICoqLw0KIEVGSV9TVEFU VVMNCiBJU2NzaUNIQVBDYWxjdWxhdGVSZXNwb25zZSAoDQogICBJTiAgVUlOVDMyICAgICAgICAg IENoYXBJZGVudGlmaWVyLA0KICAgSU4gIENIQVI4ICAgICAgICAgICAqQ2hhcFNlY3JldCwNCiAg IElOICBVSU5UMzIgICAgICAgICAgU2VjcmV0TGVuZ3RoLA0KICAgSU4gIFVJTlQ4ICAgICAgICAg ICAqQ2hhcENoYWxsZW5nZSwNCiAgIElOICBVSU5UMzIgICAgICAgICAgQ2hhbGxlbmdlTGVuZ3Ro LA0KKyAgSU4gIENPTlNUIENIQVBfSEFTSCAqSGFzaCwNCiAgIE9VVCBVSU5UOCAgICAgICAgICAg KkNoYXBSZXNwb25zZQ0KICAgKQ0KIHsNCi0gIFVJTlROICAgICAgIE1kNUNvbnRleHRTaXplOw0K LSAgVk9JRCAgICAgICAgKk1kNUN0eDsNCisgIFVJTlROICAgICAgIENvbnRleHRTaXplOw0KKyAg Vk9JRCAgICAgICAgKkN0eDsNCiAgIENIQVI4ICAgICAgIElkQnl0ZVsxXTsNCiAgIEVGSV9TVEFU VVMgIFN0YXR1czsNCiANCiAgIGlmIChTZWNyZXRMZW5ndGggPCBJU0NTSV9DSEFQX1NFQ1JFVF9N SU5fTEVOKSB7DQogICAgIHJldHVybiBFRklfUFJPVE9DT0xfRVJST1I7DQogICB9DQogDQotICBN ZDVDb250ZXh0U2l6ZSA9IE1kNUdldENvbnRleHRTaXplICgpOw0KLSAgTWQ1Q3R4ID0gQWxsb2Nh dGVQb29sIChNZDVDb250ZXh0U2l6ZSk7DQotICBpZiAoTWQ1Q3R4ID09IE5VTEwpIHsNCisgIEFT U0VSVCAoSGFzaCAhPSBOVUxMKTsNCisNCisgIENvbnRleHRTaXplID0gSGFzaC0+R2V0Q29udGV4 dFNpemUgKCk7DQorICBDdHggPSBBbGxvY2F0ZVBvb2wgKENvbnRleHRTaXplKTsNCisgIGlmIChD dHggPT0gTlVMTCkgew0KICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQogICB9DQog DQogICBTdGF0dXMgPSBFRklfUFJPVE9DT0xfRVJST1I7DQogDQotICBpZiAoIU1kNUluaXQgKE1k NUN0eCkpIHsNCisgIGlmICghSGFzaC0+SW5pdCAoQ3R4KSkgew0KICAgICBnb3RvIEV4aXQ7DQog ICB9DQogDQogICAvLw0KICAgLy8gSGFzaCBJZGVudGlmaWVyIC0gT25seSBjYWxjdWxhdGUgMSBi eXRlIGRhdGEgKFJGQzE5OTQpDQogICAvLw0KICAgSWRCeXRlWzBdID0gKENIQVI4KSBDaGFwSWRl bnRpZmllcjsNCi0gIGlmICghTWQ1VXBkYXRlIChNZDVDdHgsIElkQnl0ZSwgMSkpIHsNCisgIGlm ICghSGFzaC0+VXBkYXRlIChDdHgsIElkQnl0ZSwgMSkpIHsNCiAgICAgZ290byBFeGl0Ow0KICAg fQ0KIA0KICAgLy8NCiAgIC8vIEhhc2ggU2VjcmV0DQogICAvLw0KLSAgaWYgKCFNZDVVcGRhdGUg KE1kNUN0eCwgQ2hhcFNlY3JldCwgU2VjcmV0TGVuZ3RoKSkgew0KKyAgaWYgKCFIYXNoLT5VcGRh dGUgKEN0eCwgQ2hhcFNlY3JldCwgU2VjcmV0TGVuZ3RoKSkgew0KICAgICBnb3RvIEV4aXQ7DQog ICB9DQogDQogICAvLw0KICAgLy8gSGFzaCBDaGFsbGVuZ2UgcmVjZWl2ZWQgZnJvbSBUYXJnZXQN CiAgIC8vDQotICBpZiAoIU1kNVVwZGF0ZSAoTWQ1Q3R4LCBDaGFwQ2hhbGxlbmdlLCBDaGFsbGVu Z2VMZW5ndGgpKSB7DQorICBpZiAoIUhhc2gtPlVwZGF0ZSAoQ3R4LCBDaGFwQ2hhbGxlbmdlLCBD aGFsbGVuZ2VMZW5ndGgpKSB7DQogICAgIGdvdG8gRXhpdDsNCiAgIH0NCiANCi0gIGlmIChNZDVG aW5hbCAoTWQ1Q3R4LCBDaGFwUmVzcG9uc2UpKSB7DQorICBpZiAoSGFzaC0+RmluYWwgKEN0eCwg Q2hhcFJlc3BvbnNlKSkgew0KICAgICBTdGF0dXMgPSBFRklfU1VDQ0VTUzsNCiAgIH0NCiANCiBF eGl0Og0KLSAgRnJlZVBvb2wgKE1kNUN0eCk7DQorICBGcmVlUG9vbCAoQ3R4KTsNCiAgIHJldHVy biBTdGF0dXM7DQogfQ0KIA0KIC8qKg0KICAgVGhlIGluaXRpYXRvciBjaGVja3MgdGhlIENIQVAg cmVzcG9uc2UgcmVwbGllZCBieSB0YXJnZXQgYWdhaW5zdCBpdHMgb3duDQogICBjYWxjdWxhdGlv biBvZiB0aGUgZXhwZWN0ZWQgaGFzaCB2YWx1ZS4NCiANCiAgIEBwYXJhbVtpbl0gICBBdXRoRGF0 YSAgICAgICAgICAgICBpU0NTSSBDSEFQIGF1dGhlbnRpY2F0aW9uIGRhdGEuDQogICBAcGFyYW1b aW5dICAgVGFyZ2V0UmVzcG9uc2UgICAgICAgVGhlIHJlc3BvbnNlIGZyb20gdGFyZ2V0Lg0KIA0K ICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgICAgIFRoZSByZXNwb25zZSBmcm9tIHRh cmdldCBwYXNzZWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdXRoZW50 aWNhdGlvbi4NCiAgIEByZXR2YWwgRUZJX1NFQ1VSSVRZX1ZJT0xBVElPTiAgICBUaGUgcmVzcG9u c2UgZnJvbSB0YXJnZXQgd2FzIG5vdCBleHBlY3RlZA0KICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZhbHVlLg0KICAgQHJldHZhbCBPdGhlcnMgICAgICAgICAgICAgICAgICAg IE90aGVyIGVycm9ycyBhcyBpbmRpY2F0ZWQuDQogDQogKiovDQogRUZJX1NUQVRVUw0KIElTY3Np Q0hBUEF1dGhUYXJnZXQgKA0KICAgSU4gIElTQ1NJX0NIQVBfQVVUSF9EQVRBICAqQXV0aERhdGEs DQogICBJTiAgVUlOVDggICAgICAgICAgICAgICAgICpUYXJnZXRSZXNwb25zZQ0KICAgKQ0KIHsN CiAgIEVGSV9TVEFUVVMgIFN0YXR1czsNCiAgIFVJTlQzMiAgICAgIFNlY3JldFNpemU7DQogICBV SU5UOCAgICAgICBWZXJpZnlSc3BbSVNDU0lfQ0hBUF9NQVhfRElHRVNUX1NJWkVdOw0KIA0KICAg U3RhdHVzICAgICAgPSBFRklfU1VDQ0VTUzsNCiANCiAgIFNlY3JldFNpemUgID0gKFVJTlQzMikg QXNjaWlTdHJMZW4gKEF1dGhEYXRhLT5BdXRoQ29uZmlnLT5SZXZlcnNlQ0hBUFNlY3JldCk7DQor DQorICBBU1NFUlQgKEF1dGhEYXRhLT5IYXNoICE9IE5VTEwpOw0KKw0KICAgU3RhdHVzID0gSVNj c2lDSEFQQ2FsY3VsYXRlUmVzcG9uc2UgKA0KICAgICAgICAgICAgICBBdXRoRGF0YS0+T3V0SWRl bnRpZmllciwNCiAgICAgICAgICAgICAgQXV0aERhdGEtPkF1dGhDb25maWctPlJldmVyc2VDSEFQ U2VjcmV0LA0KICAgICAgICAgICAgICBTZWNyZXRTaXplLA0KICAgICAgICAgICAgICBBdXRoRGF0 YS0+T3V0Q2hhbGxlbmdlLA0KLSAgICAgICAgICAgICBNRDVfRElHRVNUX1NJWkUsICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIENoYWxsZW5nZUxlbmd0aA0KKyAgICAgICAgICAgICBBdXRoRGF0 YS0+SGFzaC0+RGlnZXN0U2l6ZSwgICAgICAgICAgICAgIC8vIENoYWxsZW5nZUxlbmd0aA0KKyAg ICAgICAgICAgICBBdXRoRGF0YS0+SGFzaCwNCiAgICAgICAgICAgICAgVmVyaWZ5UnNwDQogICAg ICAgICAgICAgICk7DQogDQotICBpZiAoQ29tcGFyZU1lbSAoVmVyaWZ5UnNwLCBUYXJnZXRSZXNw b25zZSwgTUQ1X0RJR0VTVF9TSVpFKSAhPSAwKSB7DQorICBpZiAoQ29tcGFyZU1lbSAoVmVyaWZ5 UnNwLCBUYXJnZXRSZXNwb25zZSwNCisgICAgICAgIEF1dGhEYXRhLT5IYXNoLT5EaWdlc3RTaXpl KSAhPSAwKSB7DQogICAgIFN0YXR1cyA9IEVGSV9TRUNVUklUWV9WSU9MQVRJT047DQogICB9DQog DQogICByZXR1cm4gU3RhdHVzOw0KIH0NCiANCiANCiAvKioNCiAgIFRoaXMgZnVuY3Rpb24gY2hl Y2tzIHRoZSByZWNlaXZlZCBpU0NTSSBMb2dpbiBSZXNwb25zZSBkdXJpbmcgdGhlIHNlY3VyaXR5 DQogICBuZWdvdGlhdGlvbiBzdGFnZS4NCiANCiAgIEBwYXJhbVtpbl0gQ29ubiAgICAgICAgICAg ICBUaGUgaVNDU0kgY29ubmVjdGlvbi4NCiANCiAgIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICAgVGhlIExvZ2luIFJlc3BvbnNlIHBhc3NlZCB0aGUgQ0hBUCB2YWxpZGF0aW9uLg0KICAgQHJl dHZhbCBFRklfT1VUX09GX1JFU09VUkNFUyBGYWlsZWQgdG8gYWxsb2NhdGUgbWVtb3J5Lg0KICAg QHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgICBTb21lIGtpbmQgb2YgcHJvdG9jb2wgZXJyb3Ig b2NjdXJyZWQuDQogICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgIE90aGVyIGVycm9ycyBh cyBpbmRpY2F0ZWQuDQogDQogKiovDQpAQCAtMTUwLDM4ICsxOTYsMzkgQEAgRUZJX1NUQVRVUwog SVNjc2lDSEFQT25Sc3BSZWNlaXZlZCAoDQogICBJTiBJU0NTSV9DT05ORUNUSU9OICAqQ29ubg0K ICAgKQ0KIHsNCiAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICBTdGF0dXM7DQogICBJU0NT SV9TRVNTSU9OICAgICAgICAgICAgICAgKlNlc3Npb247DQogICBJU0NTSV9DSEFQX0FVVEhfREFU QSAgICAgICAgKkF1dGhEYXRhOw0KICAgQ0hBUjggICAgICAgICAgICAgICAgICAgICAgICpWYWx1 ZTsNCiAgIFVJTlQ4ICAgICAgICAgICAgICAgICAgICAgICAqRGF0YTsNCiAgIFVJTlQzMiAgICAg ICAgICAgICAgICAgICAgICBMZW47DQogICBMSVNUX0VOVFJZICAgICAgICAgICAgICAgICAgKktl eVZhbHVlTGlzdDsNCiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAgICBBbGdvcml0aG07DQog ICBDSEFSOCAgICAgICAgICAgICAgICAgICAgICAgKklkZW50aWZpZXI7DQogICBDSEFSOCAgICAg ICAgICAgICAgICAgICAgICAgKkNoYWxsZW5nZTsNCiAgIENIQVI4ICAgICAgICAgICAgICAgICAg ICAgICAqTmFtZTsNCiAgIENIQVI4ICAgICAgICAgICAgICAgICAgICAgICAqUmVzcG9uc2U7DQog ICBVSU5UOCAgICAgICAgICAgICAgICAgICAgICAgVGFyZ2V0UnNwW0lTQ1NJX0NIQVBfTUFYX0RJ R0VTVF9TSVpFXTsNCiAgIFVJTlQzMiAgICAgICAgICAgICAgICAgICAgICBSc3BMZW47DQogICBV SU5UTiAgICAgICAgICAgICAgICAgICAgICAgUmVzdWx0Ow0KKyAgVUlOVE4gICAgICAgICAgICAg ICAgICAgICAgIEhhc2hJbmRleDsNCiANCiAgIEFTU0VSVCAoQ29ubi0+Q3VycmVudFN0YWdlID09 IElTQ1NJX1NFQ1VSSVRZX05FR09USUFUSU9OKTsNCiAgIEFTU0VSVCAoQ29ubi0+UnNwUXVlLkJ1 Zk51bSAhPSAwKTsNCiANCiAgIFNlc3Npb24gICAgID0gQ29ubi0+U2Vzc2lvbjsNCiAgIEF1dGhE YXRhICAgID0gJlNlc3Npb24tPkF1dGhEYXRhLkNIQVA7DQogICBMZW4gICAgICAgICA9IENvbm4t PlJzcFF1ZS5CdWZTaXplOw0KICAgRGF0YSAgICAgICAgPSBBbGxvY2F0ZVplcm9Qb29sIChMZW4p Ow0KICAgaWYgKERhdGEgPT0gTlVMTCkgew0KICAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQogICB9DQogICAvLw0KICAgLy8gQ29weSB0aGUgZGF0YSBpbiBjYXNlIHRoZSBkYXRhIHNw YW5zIG92ZXIgbXVsdGlwbGUgUERVcy4NCiAgIC8vDQogICBOZXRidWZRdWVDb3B5ICgmQ29ubi0+ UnNwUXVlLCAwLCBMZW4sIERhdGEpOw0KIA0KICAgLy8NCiAgIC8vIEJ1aWxkIHRoZSBrZXktdmFs dWUgbGlzdCBmcm9tIHRoZSBkYXRhIHNlZ21lbnQgb2YgdGhlIExvZ2luIFJlc3BvbnNlLg0KICAg Ly8NCkBAIC0yNDEsNDQgKzI4OCw1NCBAQCBJU2NzaUNIQVBPblJzcFJlY2VpdmVkICgKICAgICAv LyBUcmFuc2l0IHRvIENIQVAgc3RlcCBvbmUuDQogICAgIC8vDQogICAgIENvbm4tPkF1dGhTdGVw ICA9IElTQ1NJX0NIQVBfU1RFUF9PTkU7DQogICAgIFN0YXR1cyAgICAgICAgICA9IEVGSV9TVUND RVNTOw0KICAgICBicmVhazsNCiANCiAgIGNhc2UgSVNDU0lfQ0hBUF9TVEVQX1RXTzoNCiAgICAg Ly8NCiAgICAgLy8gVGhlIFRhcmdldCByZXBsaWVzIHdpdGggQ0hBUF9BPTxBPiBDSEFQX0k9PEk+ IENIQVBfQz08Qz4NCiAgICAgLy8NCiAgICAgVmFsdWUgPSBJU2NzaUdldFZhbHVlQnlLZXlGcm9t TGlzdCAoDQogICAgICAgICAgICAgICBLZXlWYWx1ZUxpc3QsDQogICAgICAgICAgICAgICBJU0NT SV9LRVlfQ0hBUF9BTEdPUklUSE0NCiAgICAgICAgICAgICAgICk7DQogICAgIGlmIChWYWx1ZSA9 PSBOVUxMKSB7DQogICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQogDQogICAgIEFsZ29yaXRo bSA9IElTY3NpTmV0TnRvaSAoVmFsdWUpOw0KLSAgICBpZiAoQWxnb3JpdGhtICE9IElTQ1NJX0NI QVBfQUxHT1JJVEhNX01ENSkgew0KKyAgICBmb3IgKEhhc2hJbmRleCA9IDA7IEhhc2hJbmRleCA8 IEFSUkFZX1NJWkUgKG1DaGFwSGFzaCk7IEhhc2hJbmRleCsrKSB7DQorICAgICAgaWYgKEFsZ29y aXRobSA9PSBtQ2hhcEhhc2hbSGFzaEluZGV4XS5BbGdvcml0aG0pIHsNCisgICAgICAgIGJyZWFr Ow0KKyAgICAgIH0NCisgICAgfQ0KKyAgICBpZiAoSGFzaEluZGV4ID09IEFSUkFZX1NJWkUgKG1D aGFwSGFzaCkpIHsNCiAgICAgICAvLw0KICAgICAgIC8vIFVuc3VwcG9ydGVkIGFsZ29yaXRobSBp cyBjaG9zZW4gYnkgdGFyZ2V0Lg0KICAgICAgIC8vDQogICAgICAgZ290byBPTl9FWElUOw0KICAg ICB9DQorICAgIC8vDQorICAgIC8vIFJlbWVtYmVyIHRoZSB0YXJnZXQncyBjaG9zZW4gaGFzaCBh bGdvcml0aG0uDQorICAgIC8vDQorICAgIEFTU0VSVCAoQXV0aERhdGEtPkhhc2ggPT0gTlVMTCk7 DQorICAgIEF1dGhEYXRhLT5IYXNoID0gJm1DaGFwSGFzaFtIYXNoSW5kZXhdOw0KIA0KICAgICBJ ZGVudGlmaWVyID0gSVNjc2lHZXRWYWx1ZUJ5S2V5RnJvbUxpc3QgKA0KICAgICAgICAgICAgICAg ICAgICBLZXlWYWx1ZUxpc3QsDQogICAgICAgICAgICAgICAgICAgIElTQ1NJX0tFWV9DSEFQX0lE RU5USUZJRVINCiAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAgaWYgKElkZW50aWZpZXIgPT0g TlVMTCkgew0KICAgICAgIGdvdG8gT05fRVhJVDsNCiAgICAgfQ0KIA0KICAgICBDaGFsbGVuZ2Ug PSBJU2NzaUdldFZhbHVlQnlLZXlGcm9tTGlzdCAoDQogICAgICAgICAgICAgICAgICAgS2V5VmFs dWVMaXN0LA0KICAgICAgICAgICAgICAgICAgIElTQ1NJX0tFWV9DSEFQX0NIQUxMRU5HRQ0KICAg ICAgICAgICAgICAgICAgICk7DQogICAgIGlmIChDaGFsbGVuZ2UgPT0gTlVMTCkgew0KICAgICAg IGdvdG8gT05fRVhJVDsNCiAgICAgfQ0KICAgICAvLw0KICAgICAvLyBQcm9jZXNzIHRoZSBDSEFQ IGlkZW50aWZpZXIgYW5kIENIQVAgQ2hhbGxlbmdlIGZyb20gVGFyZ2V0Lg0KICAgICAvLyBDYWxj dWxhdGUgUmVzcG9uc2UgdmFsdWUuDQpAQCAtMjg5LDc2ICszNDYsNzggQEAgSVNjc2lDSEFQT25S c3BSZWNlaXZlZCAoCiAgICAgfQ0KIA0KICAgICBBdXRoRGF0YS0+SW5JZGVudGlmaWVyICAgICAg PSAoVUlOVDMyKSBSZXN1bHQ7DQogICAgIEF1dGhEYXRhLT5JbkNoYWxsZW5nZUxlbmd0aCA9IChV SU5UMzIpIHNpemVvZiAoQXV0aERhdGEtPkluQ2hhbGxlbmdlKTsNCiAgICAgU3RhdHVzID0gSVNj c2lIZXhUb0JpbiAoDQogICAgICAgICAgICAgICAgKFVJTlQ4ICopIEF1dGhEYXRhLT5JbkNoYWxs ZW5nZSwNCiAgICAgICAgICAgICAgICAmQXV0aERhdGEtPkluQ2hhbGxlbmdlTGVuZ3RoLA0KICAg ICAgICAgICAgICAgIENoYWxsZW5nZQ0KICAgICAgICAgICAgICAgICk7DQogICAgIGlmIChFRklf RVJST1IgKFN0YXR1cykpIHsNCiAgICAgICBTdGF0dXMgPSBFRklfUFJPVE9DT0xfRVJST1I7DQog ICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQogICAgIFN0YXR1cyA9IElTY3NpQ0hBUENhbGN1 bGF0ZVJlc3BvbnNlICgNCiAgICAgICAgICAgICAgICBBdXRoRGF0YS0+SW5JZGVudGlmaWVyLA0K ICAgICAgICAgICAgICAgIEF1dGhEYXRhLT5BdXRoQ29uZmlnLT5DSEFQU2VjcmV0LA0KICAgICAg ICAgICAgICAgIChVSU5UMzIpIEFzY2lpU3RyTGVuIChBdXRoRGF0YS0+QXV0aENvbmZpZy0+Q0hB UFNlY3JldCksDQogICAgICAgICAgICAgICAgQXV0aERhdGEtPkluQ2hhbGxlbmdlLA0KICAgICAg ICAgICAgICAgIEF1dGhEYXRhLT5JbkNoYWxsZW5nZUxlbmd0aCwNCisgICAgICAgICAgICAgICBB dXRoRGF0YS0+SGFzaCwNCiAgICAgICAgICAgICAgICBBdXRoRGF0YS0+Q0hBUFJlc3BvbnNlDQog ICAgICAgICAgICAgICAgKTsNCiANCiAgICAgLy8NCiAgICAgLy8gVHJhbnNpdCB0byBuZXh0IHN0 ZXAuDQogICAgIC8vDQogICAgIENvbm4tPkF1dGhTdGVwID0gSVNDU0lfQ0hBUF9TVEVQX1RIUkVF Ow0KICAgICBicmVhazsNCiANCiAgIGNhc2UgSVNDU0lfQ0hBUF9TVEVQX1RIUkVFOg0KICAgICAv Lw0KICAgICAvLyBPbmUgd2F5IENIQVAgYXV0aGVudGljYXRpb24gYW5kIHRoZSB0YXJnZXQgd291 bGQgbGlrZSB0bw0KICAgICAvLyBhdXRoZW50aWNhdGUgdXMuDQogICAgIC8vDQogICAgIFN0YXR1 cyA9IEVGSV9TVUNDRVNTOw0KICAgICBicmVhazsNCiANCiAgIGNhc2UgSVNDU0lfQ0hBUF9TVEVQ X0ZPVVI6DQogICAgIEFTU0VSVCAoQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBUeXBlID09IElT Q1NJX0NIQVBfTVVUVUFMKTsNCiAgICAgLy8NCiAgICAgLy8gVGhlIGZvcnRoIHN0ZXAsIENIQVBf Tj08Tj4gQ0hBUF9SPTxSPiBpcyByZWNlaXZlZCBmcm9tIFRhcmdldC4NCiAgICAgLy8NCiAgICAg TmFtZSA9IElTY3NpR2V0VmFsdWVCeUtleUZyb21MaXN0IChLZXlWYWx1ZUxpc3QsIElTQ1NJX0tF WV9DSEFQX05BTUUpOw0KICAgICBpZiAoTmFtZSA9PSBOVUxMKSB7DQogICAgICAgZ290byBPTl9F WElUOw0KICAgICB9DQogDQogICAgIFJlc3BvbnNlID0gSVNjc2lHZXRWYWx1ZUJ5S2V5RnJvbUxp c3QgKA0KICAgICAgICAgICAgICAgICAgS2V5VmFsdWVMaXN0LA0KICAgICAgICAgICAgICAgICAg SVNDU0lfS0VZX0NIQVBfUkVTUE9OU0UNCiAgICAgICAgICAgICAgICAgICk7DQogICAgIGlmIChS ZXNwb25zZSA9PSBOVUxMKSB7DQogICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQogDQotICAg IFJzcExlbiA9IE1ENV9ESUdFU1RfU0laRTsNCisgICAgQVNTRVJUIChBdXRoRGF0YS0+SGFzaCAh PSBOVUxMKTsNCisgICAgUnNwTGVuID0gQXV0aERhdGEtPkhhc2gtPkRpZ2VzdFNpemU7DQogICAg IFN0YXR1cyA9IElTY3NpSGV4VG9CaW4gKFRhcmdldFJzcCwgJlJzcExlbiwgUmVzcG9uc2UpOw0K LSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpIHx8IFJzcExlbiAhPSBNRDVfRElHRVNUX1NJWkUp IHsNCisgICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSB8fCBSc3BMZW4gIT0gQXV0aERhdGEtPkhh c2gtPkRpZ2VzdFNpemUpIHsNCiAgICAgICBTdGF0dXMgPSBFRklfUFJPVE9DT0xfRVJST1I7DQog ICAgICAgZ290byBPTl9FWElUOw0KICAgICB9DQogDQogICAgIC8vDQogICAgIC8vIENoZWNrIHRo ZSBDSEFQIE5hbWUgYW5kIFJlc3BvbnNlIHJlcGxpZWQgYnkgVGFyZ2V0Lg0KICAgICAvLw0KICAg ICBTdGF0dXMgPSBJU2NzaUNIQVBBdXRoVGFyZ2V0IChBdXRoRGF0YSwgVGFyZ2V0UnNwKTsNCiAg ICAgYnJlYWs7DQogDQogICBkZWZhdWx0Og0KICAgICBicmVhazsNCiAgIH0NCiANCiBPTl9FWElU Og0KIA0KICAgaWYgKEtleVZhbHVlTGlzdCAhPSBOVUxMKSB7DQogICAgIElTY3NpRnJlZUtleVZh bHVlTGlzdCAoS2V5VmFsdWVMaXN0KTsNCiAgIH0NCkBAIC00NDIsODggKzUwMSwxNDEgQEAgSVNj c2lDSEFQVG9TZW5kUmVxICgKICAgICAgIFNlc3Npb24tPkNvbmZpZ0RhdGEtPlNlc3Npb25Db25m aWdEYXRhLlRhcmdldE5hbWUNCiAgICAgICApOw0KIA0KICAgICBpZiAoU2Vzc2lvbi0+QXV0aFR5 cGUgPT0gSVNDU0lfQVVUSF9UWVBFX05PTkUpIHsNCiAgICAgICBWYWx1ZSA9IElTQ1NJX0tFWV9W QUxVRV9OT05FOw0KICAgICAgIElTQ1NJX1NFVF9GTEFHIChMb2dpblJlcSwgSVNDU0lfTE9HSU5f UkVRX1BEVV9GTEFHX1RSQU5TSVQpOw0KICAgICB9IGVsc2Ugew0KICAgICAgIFZhbHVlID0gSVND U0lfQVVUSF9NRVRIT0RfQ0hBUDsNCiAgICAgfQ0KIA0KICAgICBJU2NzaUFkZEtleVZhbHVlUGFp ciAoUGR1LCBJU0NTSV9LRVlfQVVUSF9NRVRIT0QsIFZhbHVlKTsNCiANCiAgICAgYnJlYWs7DQog DQogICBjYXNlIElTQ1NJX0NIQVBfU1RFUF9PTkU6DQogICAgIC8vDQogICAgIC8vIEZpcnN0IHN0 ZXAsIHNlbmQgdGhlIExvZ2luIFJlcXVlc3Qgd2l0aCBDSEFQX0E9PEExLEEyLi4uPiBrZXktdmFs dWUNCiAgICAgLy8gcGFpci4NCiAgICAgLy8NCi0gICAgQXNjaWlTUHJpbnQgKFZhbHVlU3RyLCBz aXplb2YgKFZhbHVlU3RyKSwgIiVkIiwgSVNDU0lfQ0hBUF9BTEdPUklUSE1fTUQ1KTsNCi0gICAg SVNjc2lBZGRLZXlWYWx1ZVBhaXIgKFBkdSwgSVNDU0lfS0VZX0NIQVBfQUxHT1JJVEhNLCBWYWx1 ZVN0cik7DQorICAgIElTY3NpQWRkS2V5VmFsdWVQYWlyIChQZHUsIElTQ1NJX0tFWV9DSEFQX0FM R09SSVRITSwgbUNoYXBIYXNoTGlzdFN0cmluZyk7DQogDQogICAgIENvbm4tPkF1dGhTdGVwID0g SVNDU0lfQ0hBUF9TVEVQX1RXTzsNCiAgICAgYnJlYWs7DQogDQogICBjYXNlIElTQ1NJX0NIQVBf U1RFUF9USFJFRToNCiAgICAgLy8NCiAgICAgLy8gVGhpcmQgc3RlcCwgc2VuZCB0aGUgTG9naW4g UmVxdWVzdCB3aXRoIENIQVBfTj08Tj4gQ0hBUF9SPTxSPiBvcg0KICAgICAvLyBDSEFQX049PE4+ IENIQVBfUj08Uj4gQ0hBUF9JPTxJPiBDSEFQX0M9PEM+IGlmIHRhcmdldCBhdXRoZW50aWNhdGlv biBpcw0KICAgICAvLyByZXF1aXJlZCB0b28uDQogICAgIC8vDQogICAgIC8vIENIQVBfTj08Tj4N CiAgICAgLy8NCiAgICAgSVNjc2lBZGRLZXlWYWx1ZVBhaXIgKA0KICAgICAgIFBkdSwNCiAgICAg ICBJU0NTSV9LRVlfQ0hBUF9OQU1FLA0KICAgICAgIChDSEFSOCAqKSAmQXV0aERhdGEtPkF1dGhD b25maWctPkNIQVBOYW1lDQogICAgICAgKTsNCiAgICAgLy8NCiAgICAgLy8gQ0hBUF9SPTxSPg0K ICAgICAvLw0KKyAgICBBU1NFUlQgKEF1dGhEYXRhLT5IYXNoICE9IE5VTEwpOw0KICAgICBCaW5U b0hleFN0YXR1cyA9IElTY3NpQmluVG9IZXggKA0KICAgICAgICAgICAgICAgICAgICAgICAgKFVJ TlQ4ICopIEF1dGhEYXRhLT5DSEFQUmVzcG9uc2UsDQotICAgICAgICAgICAgICAgICAgICAgICBN RDVfRElHRVNUX1NJWkUsDQorICAgICAgICAgICAgICAgICAgICAgICBBdXRoRGF0YS0+SGFzaC0+ RGlnZXN0U2l6ZSwNCiAgICAgICAgICAgICAgICAgICAgICAgIFJlc3BvbnNlLA0KICAgICAgICAg ICAgICAgICAgICAgICAgJlJzcExlbg0KICAgICAgICAgICAgICAgICAgICAgICAgKTsNCiAgICAg QVNTRVJUX0VGSV9FUlJPUiAoQmluVG9IZXhTdGF0dXMpOw0KICAgICBJU2NzaUFkZEtleVZhbHVl UGFpciAoUGR1LCBJU0NTSV9LRVlfQ0hBUF9SRVNQT05TRSwgUmVzcG9uc2UpOw0KIA0KICAgICBp ZiAoQXV0aERhdGEtPkF1dGhDb25maWctPkNIQVBUeXBlID09IElTQ1NJX0NIQVBfTVVUVUFMKSB7 DQogICAgICAgLy8NCiAgICAgICAvLyBDSEFQX0k9PEk+DQogICAgICAgLy8NCiAgICAgICBJU2Nz aUdlblJhbmRvbSAoKFVJTlQ4ICopICZBdXRoRGF0YS0+T3V0SWRlbnRpZmllciwgMSk7DQogICAg ICAgQXNjaWlTUHJpbnQgKFZhbHVlU3RyLCBzaXplb2YgKFZhbHVlU3RyKSwgIiVkIiwgQXV0aERh dGEtPk91dElkZW50aWZpZXIpOw0KICAgICAgIElTY3NpQWRkS2V5VmFsdWVQYWlyIChQZHUsIElT Q1NJX0tFWV9DSEFQX0lERU5USUZJRVIsIFZhbHVlU3RyKTsNCiAgICAgICAvLw0KICAgICAgIC8v IENIQVBfQz08Qz4NCiAgICAgICAvLw0KLSAgICAgIElTY3NpR2VuUmFuZG9tICgoVUlOVDggKikg QXV0aERhdGEtPk91dENoYWxsZW5nZSwgTUQ1X0RJR0VTVF9TSVpFKTsNCisgICAgICBJU2NzaUdl blJhbmRvbSAoKFVJTlQ4ICopIEF1dGhEYXRhLT5PdXRDaGFsbGVuZ2UsDQorICAgICAgICBBdXRo RGF0YS0+SGFzaC0+RGlnZXN0U2l6ZSk7DQogICAgICAgQmluVG9IZXhTdGF0dXMgPSBJU2NzaUJp blRvSGV4ICgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgKFVJTlQ4ICopIEF1dGhEYXRhLT5P dXRDaGFsbGVuZ2UsDQotICAgICAgICAgICAgICAgICAgICAgICAgIE1ENV9ESUdFU1RfU0laRSwN CisgICAgICAgICAgICAgICAgICAgICAgICAgQXV0aERhdGEtPkhhc2gtPkRpZ2VzdFNpemUsDQog ICAgICAgICAgICAgICAgICAgICAgICAgIENoYWxsZW5nZSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICAgJkNoYWxsZW5nZUxlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAg IEFTU0VSVF9FRklfRVJST1IgKEJpblRvSGV4U3RhdHVzKTsNCiAgICAgICBJU2NzaUFkZEtleVZh bHVlUGFpciAoUGR1LCBJU0NTSV9LRVlfQ0hBUF9DSEFMTEVOR0UsIENoYWxsZW5nZSk7DQogDQog ICAgICAgQ29ubi0+QXV0aFN0ZXAgPSBJU0NTSV9DSEFQX1NURVBfRk9VUjsNCiAgICAgfQ0KICAg ICAvLw0KICAgICAvLyBTZXQgdGhlIHN0YWdlIHRyYW5zaXRpb24gZmxhZy4NCiAgICAgLy8NCiAg ICAgSVNDU0lfU0VUX0ZMQUcgKExvZ2luUmVxLCBJU0NTSV9MT0dJTl9SRVFfUERVX0ZMQUdfVFJB TlNJVCk7DQogICAgIGJyZWFrOw0KIA0KICAgZGVmYXVsdDoNCiAgICAgU3RhdHVzID0gRUZJX1BS T1RPQ09MX0VSUk9SOw0KICAgICBicmVhazsNCiAgIH0NCiANCiAgIEZyZWVQb29sIChSZXNwb25z ZSk7DQogICBGcmVlUG9vbCAoQ2hhbGxlbmdlKTsNCiANCiAgIHJldHVybiBTdGF0dXM7DQogfQ0K Kw0KKy8qKg0KKyAgSW5pdGlhbGl6ZSB0aGUgQ0hBUF9BPTxBMSxBMi4uLj4gKnZhbHVlKiBzdHJp bmcgZm9yIHRoZSBlbnRpcmUgZHJpdmVyLCB0byBiZQ0KKyAgc2VudCBieSB0aGUgaW5pdGlhdG9y IGluIElTQ1NJX0NIQVBfU1RFUF9PTkUuDQorDQorICBUaGlzIGZ1bmN0aW9uIHNhbml0eS1jaGVj a3MgdGhlIGludGVybmFsIHRhYmxlIG9mIHN1cHBvcnRlZCBDSEFQIGhhc2hpbmcNCisgIGFsZ29y aXRobXMsIGFzIHdlbGwuDQorKiovDQorVk9JRA0KK0lTY3NpQ0hBUEluaXRIYXNoTGlzdCAoDQor ICBWT0lEDQorICApDQorew0KKyAgQ0hBUjggICAgICAgICAgICpQb3NpdGlvbjsNCisgIFVJTlRO ICAgICAgICAgICBMZWZ0Ow0KKyAgVUlOVE4gICAgICAgICAgIEhhc2hJbmRleDsNCisgIENPTlNU IENIQVBfSEFTSCAqSGFzaDsNCisgIFVJTlROICAgICAgICAgICBQcmludGVkOw0KKw0KKyAgUG9z aXRpb24gPSBtQ2hhcEhhc2hMaXN0U3RyaW5nOw0KKyAgTGVmdCA9IHNpemVvZiAobUNoYXBIYXNo TGlzdFN0cmluZyk7DQorICBmb3IgKEhhc2hJbmRleCA9IDA7IEhhc2hJbmRleCA8IEFSUkFZX1NJ WkUgKG1DaGFwSGFzaCk7IEhhc2hJbmRleCsrKSB7DQorICAgIEhhc2ggPSAmbUNoYXBIYXNoW0hh c2hJbmRleF07DQorDQorICAgIC8vDQorICAgIC8vIEZvcm1hdCB0aGUgbmV4dCBoYXNoIGlkZW50 aWZpZXIuDQorICAgIC8vDQorICAgIC8vIEFzc2VydCB0aGF0IHdlIGNhbiBmb3JtYXQgYXQgbGVh c3Qgb25lIG5vbi1OVUwgY2hhcmFjdGVyLCBpLmUuIHRoYXQgd2UNCisgICAgLy8gY2FuIHByb2dy ZXNzLiBUcnVuY2F0aW9uIGlzIGNoZWNrZWQgYWZ0ZXIgcHJpbnRpbmcuDQorICAgIC8vDQorICAg IEFTU0VSVCAoTGVmdCA+PSAyKTsNCisgICAgUHJpbnRlZCA9IEFzY2lpU1ByaW50IChQb3NpdGlv biwgTGVmdCwgIiVhJWQiLCAoSGFzaEluZGV4ID09IDApID8gIiIgOiAiLCIsDQorICAgICAgICAg ICAgICAgIEhhc2gtPkFsZ29yaXRobSk7DQorICAgIC8vDQorICAgIC8vIFRoZXJlJ3Mgbm8gd2F5 IHRvIGRpZmZlcmVudGlhdGUgYmV0d2VlbiB0aGUgImJ1ZmZlciBmaWxsZWQgdG8gdGhlIGJyaW0s DQorICAgIC8vIGJ1dCBub3QgdHJ1bmNhdGVkIiByZXN1bHQgYW5kIHRoZSAidHJ1bmNhdGVkIiBy ZXN1bHQgb2YgQXNjaWlTUHJpbnQoKS4NCisgICAgLy8gVGhpcyBpcyB3aHkgIm1DaGFwSGFzaExp c3RTdHJpbmciIGhhcyBhbiBleHRyYSBieXRlIGFsbG9jYXRlZCwgYW5kIHRoZQ0KKyAgICAvLyBy ZWFzb24gd2h5IHdlIHVzZSB0aGUgbGVzcy10aGFuIChyYXRoZXIgdGhhbiB0aGUgbGVzcy10aGFu LW9yLWVxdWFsLXRvKQ0KKyAgICAvLyByZWxhdGlvbmFsIG9wZXJhdG9yIGluIHRoZSBhc3NlcnRp b24gYmVsb3cgLS0gd2UgZW5mb3JjZSAibm8gdHJ1bmNhdGlvbiINCisgICAgLy8gYnkgZXhjbHVk aW5nIHRoZSAiY29tcGxldGVseSB1c2VkIHVwIiBjYXNlIHRvby4NCisgICAgLy8NCisgICAgQVNT RVJUIChQcmludGVkICsgMSA8IExlZnQpOw0KKw0KKyAgICBQb3NpdGlvbiArPSBQcmludGVkOw0K KyAgICBMZWZ0IC09IFByaW50ZWQ7DQorDQorICAgIC8vDQorICAgIC8vIFNhbml0eS1jaGVjayB0 aGUgZGlnZXN0IHNpemUgZm9yIEhhc2guDQorICAgIC8vDQorICAgIEFTU0VSVCAoSGFzaC0+RGln ZXN0U2l6ZSA8PSBJU0NTSV9DSEFQX01BWF9ESUdFU1RfU0laRSk7DQorICB9DQorfQ0KZGlmZiAt LWdpdCBhL05ldHdvcmtQa2cvSVNjc2lEeGUvSVNjc2lEcml2ZXIuYyBiL05ldHdvcmtQa2cvSVNj c2lEeGUvSVNjc2lEcml2ZXIuYwppbmRleCA5OGI3MzMwOGMxMTguLjQ4NWM5Mjk3MjExMyAxMDA2 NDQKLS0tIGEvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaURyaXZlci5jCisrKyBiL05ldHdvcmtQ a2cvSVNjc2lEeGUvSVNjc2lEcml2ZXIuYwpAQCAtMTc2MywzOCArMTc2Myw0MCBAQCBJU2NzaURy aXZlckVudHJ5UG9pbnQgKAogICAgIGdvdG8gRXJyb3IxOw0KICAgfQ0KIA0KICAgLy8NCiAgIC8v IEluc3RhbGwgdGhlIGlTQ1NJIEluaXRpYXRvciBOYW1lIFByb3RvY29sLg0KICAgLy8NCiAgIFN0 YXR1cyA9IGdCUy0+SW5zdGFsbFByb3RvY29sSW50ZXJmYWNlICgNCiAgICAgICAgICAgICAgICAg ICAmSW1hZ2VIYW5kbGUsDQogICAgICAgICAgICAgICAgICAgJmdFZmlJU2NzaUluaXRpYXRvck5h bWVQcm90b2NvbEd1aWQsDQogICAgICAgICAgICAgICAgICAgRUZJX05BVElWRV9JTlRFUkZBQ0Us DQogICAgICAgICAgICAgICAgICAgJmdJU2NzaUluaXRpYXRvck5hbWUNCiAgICAgICAgICAgICAg ICAgICApOw0KICAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICBnb3RvIEVycm9yMjsN CiAgIH0NCiANCiAgIC8vDQogICAvLyBDcmVhdGUgdGhlIHByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVz Lg0KICAgLy8NCisgIElTY3NpQ0hBUEluaXRIYXNoTGlzdCAoKTsNCisNCiAgIG1Qcml2YXRlID0g QWxsb2NhdGVaZXJvUG9vbCAoc2l6ZW9mIChJU0NTSV9QUklWQVRFX0RBVEEpKTsNCiAgIGlmICht UHJpdmF0ZSA9PSBOVUxMKSB7DQogICAgIFN0YXR1cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0K ICAgICBnb3RvIEVycm9yMzsNCiAgIH0NCiANCiAgIEluaXRpYWxpemVMaXN0SGVhZCAoJm1Qcml2 YXRlLT5OaWNJbmZvTGlzdCk7DQogICBJbml0aWFsaXplTGlzdEhlYWQgKCZtUHJpdmF0ZS0+QXR0 ZW1wdENvbmZpZ3MpOw0KIA0KICAgLy8NCiAgIC8vIEluaXRpYWxpemUgdGhlIGNvbmZpZ3VyYXRp b24gZm9ybSBvZiBpU0NTSS4NCiAgIC8vDQogICBTdGF0dXMgPSBJU2NzaUNvbmZpZ0Zvcm1Jbml0 IChnSVNjc2lJcDREcml2ZXJCaW5kaW5nLkRyaXZlckJpbmRpbmdIYW5kbGUpOw0KICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSkgew0KICAgICBnb3RvIEVycm9yNDsNCiAgIH0NCiANCiAgIC8vDQog ICAvLyBDcmVhdGUgdGhlIE1heGltdW0gQXR0ZW1wdHMuDQpkaWZmIC0tZ2l0IGEvTmV0d29ya1Br Zy9JU2NzaUR4ZS9JU2NzaVByb3RvLmMgYi9OZXR3b3JrUGtnL0lTY3NpRHhlL0lTY3NpUHJvdG8u YwppbmRleCA2OWQxYjM5ZGJiMWYuLmU2MjczNmJjMDQxZiAxMDA2NDQKLS0tIGEvTmV0d29ya1Br Zy9JU2NzaUR4ZS9JU2NzaVByb3RvLmMKKysrIGIvTmV0d29ya1BrZy9JU2NzaUR4ZS9JU2NzaVBy b3RvLmMKQEAgLTQxNiwzOCArNDE2LDQxIEBAIElTY3NpR2V0SXA2TmljSW5mbyAoCiANCiAgIHJl dHVybiBTdGF0dXM7DQogfQ0KIA0KIC8qKg0KICAgUmUtc2V0IGFueSBzdGF0ZWZ1bCBzZXNzaW9u LWxldmVsIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uIHRoYXQgaXMgdXNlZCBieQ0KICAgdGhl IGxlYWRpbmcgbG9naW4gLyBsZWFkaW5nIGNvbm5lY3Rpb24uDQogDQogICAoTm90ZSB0aGF0IHRo aXMgZHJpdmVyIG9ubHkgc3VwcG9ydHMgYSBzaW5nbGUgY29ubmVjdGlvbiBwZXIgc2Vzc2lvbiAt LSBzZWUNCiAgIElTQ1NJX01BWF9DT05OU19QRVJfU0VTU0lPTi4pDQogDQogICBAcGFyYW1baW4s b3V0XSBTZXNzaW9uICBUaGUgaVNDU0kgc2Vzc2lvbi4NCiAqKi8NCiBTVEFUSUMNCiBWT0lEDQog SVNjc2lTZXNzaW9uUmVzZXRBdXRoRGF0YSAoDQogICBJTiBPVVQgSVNDU0lfU0VTU0lPTiAqU2Vz c2lvbg0KICAgKQ0KIHsNCisgIGlmIChTZXNzaW9uLT5BdXRoVHlwZSA9PSBJU0NTSV9BVVRIX1RZ UEVfQ0hBUCkgew0KKyAgICBTZXNzaW9uLT5BdXRoRGF0YS5DSEFQLkhhc2ggPSBOVUxMOw0KKyAg fQ0KIH0NCiANCiAvKioNCiAgIExvZ2luIHRoZSBpU0NTSSBzZXNzaW9uLg0KIA0KICAgQHBhcmFt W2luXSAgU2Vzc2lvbiAgICAgICAgICAgVGhlIGlTQ1NJIHNlc3Npb24uDQogDQogICBAcmV0dmFs IEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgaVNDU0kgc2Vzc2lvbiBsb2dpbiBwcm9jZWR1cmUg ZmluaXNoZWQuDQogICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBGYWlsZWQgdG8gYWxs b2NhdGUgbWVtb3J5Lg0KICAgQHJldHZhbCBFRklfTk9fTUVESUEgICAgICAgICAgVGhlcmUgd2Fz IGEgbWVkaWEgZXJyb3IuDQogICBAcmV0dmFsIE90aGVycyAgICAgICAgICAgICAgICBPdGhlciBl cnJvcnMgYXMgaW5kaWNhdGVkLg0KIA0KICoqLw0KIEVGSV9TVEFUVVMNCiBJU2NzaVNlc3Npb25M b2dpbiAoDQogICBJTiBJU0NTSV9TRVNTSU9OICAqU2Vzc2lvbg0KICAgKQ0KIHsNCiAgIEVGSV9T VEFUVVMgICAgICAgIFN0YXR1czsNCi0tIAoyLjE5LjEuMy5nMzAyNDdhYTVkMjAxCgoK