From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by mx.groups.io with SMTP id smtpd.web11.2921.1622060917760361928 for ; Wed, 26 May 2021 13:28:38 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YMqpGcKH; spf=pass (domain: redhat.com, ip: 170.10.133.124, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1622060916; 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=yfUdOQxsMuAPTvh8esBU65iBk0JF7ZL3Fw18Aucp3zo=; b=YMqpGcKHW4krm0Dodvj8ML35KYuyJ6gFNuPNVGdbsSg3YrFGWwGVYnnLAJpAdYec31Zt64 CXLqpiVm13YihAVnOk7S/Wst62IdeuqiAA73Iifyx3AE2ZH7NXADe6I0G9yRYaUWLPqnWC BYWUY1mcpl0wEiNsZcJ6kn9j9DIjh08= 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-208-TrWGICKiMXiAdQnsvNpXWg-1; Wed, 26 May 2021 16:28:33 -0400 X-MC-Unique: TrWGICKiMXiAdQnsvNpXWg-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 01CF2101371E; Wed, 26 May 2021 20:28:32 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-114-61.ams2.redhat.com [10.36.114.61]) by smtp.corp.redhat.com (Postfix) with ESMTP id D573016935; Wed, 26 May 2021 20:28:29 +0000 (UTC) From: "Laszlo Ersek" To: devel@edk2.groups.io Cc: Anthony Perard , Ard Biesheuvel , Jordan Justen , Julien Grall , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH 13/43] OvmfPkg/XenAcpiPlatformDxe: remove the QEMU ACPI linker/loader client Date: Wed, 26 May 2021 22:14:16 +0200 Message-Id: <20210526201446.12554-14-lersek@redhat.com> In-Reply-To: <20210526201446.12554-1-lersek@redhat.com> References: <20210526201446.12554-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 VGhlIHJvb3Qgb2YgdGhlIFFFTVUgQUNQSSBsaW5rZXIvbG9hZGVyIGNsaWVudCBpbiBYZW5BY3Bp UGxhdGZvcm1EeGUgaXMKdGhlIEluc3RhbGxRZW11RndDZmdUYWJsZXMoKSBmdW5jdGlvbi4gVGhp cyBmdW5jdGlvbiBhbHdheXMgZmFpbHMgb24gWGVuLApkdWUgdG8gaXRzIHRvcC1tb3N0IFFlbXVG d0NmZ0ZpbmRGaWxlKCkgY2FsbC4KClJlbW92ZSB0aGUgSW5zdGFsbFFlbXVGd0NmZ1RhYmxlcygp IGZ1bmN0aW9uIGNhbGwgZnJvbSBYZW5BY3BpUGxhdGZvcm1EeGUsCmFsb25nIHdpdGggYWxsIGRl cGVuZGVuY2llcyB0aGF0IG5vdyBiZWNvbWUgdW51c2VkLgoKQ2M6IEFudGhvbnkgUGVyYXJkIDxh bnRob255LnBlcmFyZEBjaXRyaXguY29tPgpDYzogQXJkIEJpZXNoZXV2ZWwgPGFyZGIrdGlhbm9j b3JlQGtlcm5lbC5vcmc+CkNjOiBKb3JkYW4gSnVzdGVuIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwu Y29tPgpDYzogSnVsaWVuIEdyYWxsIDxqdWxpZW5AeGVuLm9yZz4KQ2M6IFBoaWxpcHBlIE1hdGhp ZXUtRGF1ZMOpIDxwaGlsbWRAcmVkaGF0LmNvbT4KUmVmOiBodHRwczovL2J1Z3ppbGxhLnRpYW5v Y29yZS5vcmcvc2hvd19idWcuY2dpP2lkPTIxMjIKU2lnbmVkLW9mZi1ieTogTGFzemxvIEVyc2Vr IDxsZXJzZWtAcmVkaGF0LmNvbT4KLS0tCiBPdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5B Y3BpUGxhdGZvcm1EeGUuaW5mIHwgICAgNiAtCiBPdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9B Y3BpUGxhdGZvcm0uaCAgICAgICAgIHwgICA1MSAtCiBPdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4 ZS9BY3BpUGxhdGZvcm0uYyAgICAgICAgIHwgICAgMiArLQogT3ZtZlBrZy9YZW5BY3BpUGxhdGZv cm1EeGUvQm9vdFNjcmlwdC5jICAgICAgICAgICB8ICAyNjkgLS0tLS0KIE92bWZQa2cvWGVuQWNw aVBsYXRmb3JtRHhlL1BjaURlY29kaW5nLmMgICAgICAgICAgfCAgMTk0IC0tLS0KIE92bWZQa2cv WGVuQWNwaVBsYXRmb3JtRHhlL1FlbXVGd0NmZ0FjcGkuYyAgICAgICAgfCAxMTk2IC0tLS0tLS0t LS0tLS0tLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDEgaW5zZXJ0aW9uKCspLCAxNzE3IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL092bWZQa2cvWGVuQWNwaVBsYXRmb3JtRHhlL1hlbkFjcGlQ bGF0Zm9ybUR4ZS5pbmYgYi9Pdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5BY3BpUGxhdGZv cm1EeGUuaW5mCmluZGV4IDM3OWI1ZDU2ZDU2NS4uNzIxMzJlMzk3ZGMxIDEwMDY0NAotLS0gYS9P dm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9YZW5BY3BpUGxhdGZvcm1EeGUuaW5mCisrKyBiL092 bWZQa2cvWGVuQWNwaVBsYXRmb3JtRHhlL1hlbkFjcGlQbGF0Zm9ybUR4ZS5pbmYKQEAgLTIxLDE3 ICsyMSwxNCBAQCBbRGVmaW5lc10KICMgIFZBTElEX0FSQ0hJVEVDVFVSRVMgICAgICAgICAgID0g SUEzMiBYNjQgRUJDDQogIw0KIA0KIFtTb3VyY2VzXQ0KICAgQWNwaVBsYXRmb3JtLmMNCiAgIEFj cGlQbGF0Zm9ybS5oDQotICBCb290U2NyaXB0LmMNCiAgIEVudHJ5UG9pbnQuYw0KLSAgUGNpRGVj b2RpbmcuYw0KICAgUWVtdS5jDQotICBRZW11RndDZmdBY3BpLmMNCiAgIFhlbi5jDQogDQogW1Bh Y2thZ2VzXQ0KICAgTWRlTW9kdWxlUGtnL01kZU1vZHVsZVBrZy5kZWMNCiAgIE1kZVBrZy9NZGVQ a2cuZGVjDQogICBPdm1mUGtnL092bWZQa2cuZGVjDQpAQCAtNDAsMjQgKzM3LDIxIEBAIFtQYWNr YWdlc10KIFtMaWJyYXJ5Q2xhc3Nlc10NCiAgIEJhc2VMaWINCiAgIEJhc2VNZW1vcnlMaWINCiAg IERlYnVnTGliDQogICBEeGVTZXJ2aWNlc1RhYmxlTGliDQogICBNZW1vcnlBbGxvY2F0aW9uTGli DQotICBPcmRlcmVkQ29sbGVjdGlvbkxpYg0KICAgUGNkTGliDQogICBRZW11RndDZmdMaWINCi0g IFFlbXVGd0NmZ1MzTGliDQogICBVZWZpQm9vdFNlcnZpY2VzVGFibGVMaWINCiAgIFVlZmlEcml2 ZXJFbnRyeVBvaW50DQogICBYZW5QbGF0Zm9ybUxpYg0KIA0KIFtQcm90b2NvbHNdDQogICBnRWZp QWNwaVRhYmxlUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgIyBQUk9UT0NPTCBBTFdB WVNfQ09OU1VNRUQNCiAgIGdFZmlGaXJtd2FyZVZvbHVtZTJQcm90b2NvbEd1aWQgICAgICAgICAg ICAgICAjIFBST1RPQ09MIFNPTUVUSU1FU19DT05TVU1FRA0KLSAgZ0VmaVBjaUlvUHJvdG9jb2xH dWlkICAgICAgICAgICAgICAgICAgICAgICAgICMgUFJPVE9DT0wgU09NRVRJTUVTX0NPTlNVTUVE DQogDQogW0d1aWRzXQ0KICAgZ1Jvb3RCcmlkZ2VzQ29ubmVjdGVkRXZlbnRHcm91cEd1aWQNCiAN CiBbUGNkXQ0KICAgZ0VmaU1kZU1vZHVsZVBrZ1Rva2VuU3BhY2VHdWlkLlBjZEFjcGlUYWJsZVN0 b3JhZ2VGaWxlDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvQWNwaVBs YXRmb3JtLmggYi9Pdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uaAppbmRl eCA2MjU5Njk3YzRiMmQuLmQzNTE0M2EwMGQwMSAxMDA2NDQKLS0tIGEvT3ZtZlBrZy9YZW5BY3Bp UGxhdGZvcm1EeGUvQWNwaVBsYXRmb3JtLmgKKysrIGIvT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1E eGUvQWNwaVBsYXRmb3JtLmgKQEAgLTgsMjAgKzgsMTIgQEAKICoqLw0KIA0KICNpZm5kZWYgQUNQ SV9QTEFURk9STV9IXw0KICNkZWZpbmUgQUNQSV9QTEFURk9STV9IXw0KIA0KICNpbmNsdWRlIDxQ cm90b2NvbC9BY3BpVGFibGUuaD4gLy8gRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wNCi0jaW5jbHVk ZSA8UHJvdG9jb2wvUGNpSW8uaD4gICAgIC8vIEVGSV9QQ0lfSU9fUFJPVE9DT0wNCi0NCi10eXBl ZGVmIHN0cnVjdCB7DQotICBFRklfUENJX0lPX1BST1RPQ09MICpQY2lJbzsNCi0gIFVJTlQ2NCAg ICAgICAgICAgICAgUGNpQXR0cmlidXRlczsNCi19IE9SSUdJTkFMX0FUVFJJQlVURVM7DQotDQot dHlwZWRlZiBzdHJ1Y3QgUzNfQ09OVEVYVCBTM19DT05URVhUOw0KIA0KIEVGSV9TVEFUVVMNCiBF RklBUEkNCiBJbnN0YWxsQWNwaVRhYmxlICgNCiAgIElOICAgRUZJX0FDUElfVEFCTEVfUFJPVE9D T0wgICAgICAgKkFjcGlQcm90b2NvbCwNCiAgIElOICAgVk9JRCAgICAgICAgICAgICAgICAgICAg ICAgICAgKkFjcGlUYWJsZUJ1ZmZlciwNCkBAIC00Niw1NyArMzgsMTQgQEAgUWVtdUluc3RhbGxB Y3BpVGFibGUgKAogRUZJX1NUQVRVUw0KIEVGSUFQSQ0KIEluc3RhbGxYZW5UYWJsZXMgKA0KICAg SU4gICBFRklfQUNQSV9UQUJMRV9QUk9UT0NPTCAgICAgICAqQWNwaVByb3RvY29sDQogICApOw0K IA0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1JbnN0YWxsUWVtdUZ3Q2ZnVGFibGVzICgNCi0gIElO ICAgRUZJX0FDUElfVEFCTEVfUFJPVE9DT0wgICAgICAgKkFjcGlQcm90b2NvbA0KLSAgKTsNCi0N CiBFRklfU1RBVFVTDQogRUZJQVBJDQogSW5zdGFsbEFjcGlUYWJsZXMgKA0KICAgSU4gICBFRklf QUNQSV9UQUJMRV9QUk9UT0NPTCAgICAgICAqQWNwaVRhYmxlDQogICApOw0KIA0KLVZPSUQNCi1F bmFibGVQY2lEZWNvZGluZyAoDQotICBPVVQgT1JJR0lOQUxfQVRUUklCVVRFUyAqKk9yaWdpbmFs QXR0cmlidXRlcywNCi0gIE9VVCBVSU5UTiAgICAgICAgICAgICAgICpDb3VudA0KLSAgKTsNCi0N Ci1WT0lEDQotUmVzdG9yZVBjaURlY29kaW5nICgNCi0gIElOIE9SSUdJTkFMX0FUVFJJQlVURVMg Kk9yaWdpbmFsQXR0cmlidXRlcywNCi0gIElOIFVJTlROICAgICAgICAgICAgICAgQ291bnQNCi0g ICk7DQotDQotRUZJX1NUQVRVUw0KLUFsbG9jYXRlUzNDb250ZXh0ICgNCi0gIE9VVCBTM19DT05U RVhUICoqUzNDb250ZXh0LA0KLSAgSU4gIFVJTlROICAgICAgV3JpdGVQb2ludGVyQ291bnQNCi0g ICk7DQotDQotVk9JRA0KLVJlbGVhc2VTM0NvbnRleHQgKA0KLSAgSU4gUzNfQ09OVEVYVCAqUzND b250ZXh0DQotICApOw0KLQ0KLUVGSV9TVEFUVVMNCi1TYXZlQ29uZGVuc2VkV3JpdGVQb2ludGVy VG9TM0NvbnRleHQgKA0KLSAgSU4gT1VUIFMzX0NPTlRFWFQgKlMzQ29udGV4dCwNCi0gIElOICAg ICBVSU5UMTYgICAgIFBvaW50ZXJJdGVtLA0KLSAgSU4gICAgIFVJTlQ4ICAgICAgUG9pbnRlclNp emUsDQotICBJTiAgICAgVUlOVDMyICAgICBQb2ludGVyT2Zmc2V0LA0KLSAgSU4gICAgIFVJTlQ2 NCAgICAgUG9pbnRlclZhbHVlDQotICApOw0KLQ0KLUVGSV9TVEFUVVMNCi1UcmFuc2ZlclMzQ29u dGV4dFRvQm9vdFNjcmlwdCAoDQotICBJTiBTM19DT05URVhUICpTM0NvbnRleHQNCi0gICk7DQot DQogI2VuZGlmDQogDQpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvQWNw aVBsYXRmb3JtLmMgYi9Pdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9BY3BpUGxhdGZvcm0uYwpp bmRleCAyYjJkYzU3Njc1NGIuLjljOGIxZTBmY2ZmYSAxMDA2NDQKLS0tIGEvT3ZtZlBrZy9YZW5B Y3BpUGxhdGZvcm1EeGUvQWNwaVBsYXRmb3JtLmMKKysrIGIvT3ZtZlBrZy9YZW5BY3BpUGxhdGZv cm1EeGUvQWNwaVBsYXRmb3JtLmMKQEAgLTI1MywxMyArMjUzLDEzIEBAIEluc3RhbGxBY3BpVGFi bGVzICgKIHsNCiAgIEVGSV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0K IA0KICAgaWYgKFhlbkRldGVjdGVkICgpKSB7DQogICAgIFN0YXR1cyA9IEluc3RhbGxYZW5UYWJs ZXMgKEFjcGlUYWJsZSk7DQogICB9IGVsc2Ugew0KLSAgICBTdGF0dXMgPSBJbnN0YWxsUWVtdUZ3 Q2ZnVGFibGVzIChBY3BpVGFibGUpOw0KKyAgICBTdGF0dXMgPSBFRklfVU5TVVBQT1JURUQ7DQog ICB9DQogDQogICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQogICAgIFN0YXR1cyA9IEluc3Rh bGxPdm1mRnZUYWJsZXMgKEFjcGlUYWJsZSk7DQogICB9DQogDQpkaWZmIC0tZ2l0IGEvT3ZtZlBr Zy9YZW5BY3BpUGxhdGZvcm1EeGUvQm9vdFNjcmlwdC5jIGIvT3ZtZlBrZy9YZW5BY3BpUGxhdGZv cm1EeGUvQm9vdFNjcmlwdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxNGQxZTY4 Njk0Y2IuLjAwMDAwMDAwMDAwMAotLS0gYS9Pdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9Cb290 U2NyaXB0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoqIEBmaWxlDQotICBB cHBlbmQgYW4gQUNQSSBTMyBCb290IFNjcmlwdCBmcmFnbWVudCBmcm9tIHRoZSBRRU1VX0xPQURF Ul9XUklURV9QT0lOVEVSDQotICBjb21tYW5kcyBvZiBRRU1VJ3MgZnVsbHkgcHJvY2Vzc2VkIHRh YmxlIGxpbmtlci9sb2FkZXIgc2NyaXB0Lg0KLQ0KLSAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjEs IFJlZCBIYXQsIEluYy4NCi0NCi0gIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1 c2UtUGF0ZW50DQotKiovDQotDQotI2luY2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPiAgICAgICAg ICAgICAvLyBDcHVEZWFkTG9vcCgpDQotI2luY2x1ZGUgPExpYnJhcnkvRGVidWdMaWIuaD4gICAg ICAgICAgICAvLyBERUJVRygpDQotI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxp Yi5oPiAvLyBBbGxvY2F0ZVBvb2woKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L1FlbXVGd0NmZ1MzTGli Lmg+ICAgICAgLy8gUWVtdUZ3Q2ZnUzNTY3JpcHRTa2lwQnl0ZXMoKQ0KLQ0KLSNpbmNsdWRlICJB Y3BpUGxhdGZvcm0uaCINCi0NCi0NCi0vLw0KLS8vIENvbmRlbnNlZCBzdHJ1Y3R1cmUgZm9yIGNh cHR1cmluZyB0aGUgZndfY2ZnIG9wZXJhdGlvbnMgLS0gc2VsZWN0LCBza2lwLA0KLS8vIHdyaXRl IC0tIGluaGVyZW50IGluIGV4ZWN1dGluZyBhIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIgY29t bWFuZC4NCi0vLw0KLXR5cGVkZWYgc3RydWN0IHsNCi0gIFVJTlQxNiBQb2ludGVySXRlbTsgICAv LyByZXNvbHZlZCBmcm9tIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIuUG9pbnRlckZpbGUNCi0g IFVJTlQ4ICBQb2ludGVyU2l6ZTsgICAvLyBjb3BpZWQgYXMtaXMgZnJvbSBRRU1VX0xPQURFUl9X UklURV9QT0lOVEVSDQotICBVSU5UMzIgUG9pbnRlck9mZnNldDsgLy8gY29waWVkIGFzLWlzIGZy b20gUUVNVV9MT0FERVJfV1JJVEVfUE9JTlRFUg0KLSAgVUlOVDY0IFBvaW50ZXJWYWx1ZTsgIC8v IHJlc29sdmVkIGZyb20gUUVNVV9MT0FERVJfV1JJVEVfUE9JTlRFUi5Qb2ludGVlRmlsZQ0KLSAg ICAgICAgICAgICAgICAgICAgICAgIC8vICAgYW5kIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIu UG9pbnRlZU9mZnNldA0KLX0gQ09OREVOU0VEX1dSSVRFX1BPSU5URVI7DQotDQotDQotLy8NCi0v LyBDb250ZXh0IHN0cnVjdHVyZSB0byBhY2N1bXVsYXRlIENPTkRFTlNFRF9XUklURV9QT0lOVEVS IG9iamVjdHMgZnJvbQ0KLS8vIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIgY29tbWFuZHMuDQot Ly8NCi0vLyBBbnkgcG9pbnRlcnMgaW4gdGhpcyBzdHJ1Y3R1cmUgb3duIHRoZSBwb2ludGVkLXRv IG9iamVjdHM7IHRoYXQgaXMsIHdoZW4gdGhlDQotLy8gY29udGV4dCBzdHJ1Y3R1cmUgaXMgcmVs ZWFzZWQsIGFsbCBwb2ludGVkLXRvIG9iamVjdHMgbXVzdCBiZSByZWxlYXNlZCB0b28uDQotLy8N Ci1zdHJ1Y3QgUzNfQ09OVEVYVCB7DQotICBDT05ERU5TRURfV1JJVEVfUE9JTlRFUiAqV3JpdGVQ b2ludGVyczsgLy8gb25lIGFycmF5IGVsZW1lbnQgcGVyIHByb2Nlc3NlZA0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgUUVNVV9MT0FERVJfV1JJVEVfUE9J TlRFUg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgY29t bWFuZA0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgQWxsb2NhdGVkOyAgICAgIC8vIG51bWJl ciBvZiBlbGVtZW50cyBhbGxvY2F0ZWQgZm9yDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLy8gICBXcml0ZVBvaW50ZXJzDQotICBVSU5UTiAgICAgICAgICAgICAg ICAgICBVc2VkOyAgICAgICAgICAgLy8gbnVtYmVyIG9mIGVsZW1lbnRzIHBvcHVsYXRlZCBpbg0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgV3JpdGVQb2lu dGVycw0KLX07DQotDQotDQotLy8NCi0vLyBTY3JhdGNoIGJ1ZmZlciwgYWxsb2NhdGVkIGluIEVm aVJlc2VydmVkTWVtb3J5VHlwZSB0eXBlIG1lbW9yeSwgZm9yIHRoZSBBQ1BJDQotLy8gUzMgQm9v dCBTY3JpcHQgb3Bjb2RlcyB0byB3b3JrIG9uLg0KLS8vDQotI3ByYWdtYSBwYWNrICgxKQ0KLXR5 cGVkZWYgdW5pb24gew0KLSAgVUlOVDY0IFBvaW50ZXJWYWx1ZTsgLy8gZmlsbGVkIGluIGZyb20g Q09OREVOU0VEX1dSSVRFX1BPSU5URVIuUG9pbnRlclZhbHVlDQotfSBTQ1JBVENIX0JVRkZFUjsN Ci0jcHJhZ21hIHBhY2sgKCkNCi0NCi0NCi0vKioNCi0gIEFsbG9jYXRlIGFuIFMzX0NPTlRFWFQg b2JqZWN0Lg0KLQ0KLSAgQHBhcmFtW291dF0gUzNDb250ZXh0ICAgICAgICAgVGhlIGFsbG9jYXRl ZCBTM19DT05URVhUIG9iamVjdCBpcyByZXR1cm5lZA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhyb3VnaCB0aGlzIHBhcmFtZXRlci4NCi0NCi0gIEBwYXJhbVtpbl0gV3JpdGVQ b2ludGVyQ291bnQgIE51bWJlciBvZiBDT05ERU5TRURfV1JJVEVfUE9JTlRFUiBlbGVtZW50cyB0 bw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb2NhdGUgcm9vbSBmb3IuIFdy aXRlUG9pbnRlckNvdW50IG11c3QgYmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHBvc2l0aXZlLg0KLQ0KLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICAgIEFsbG9jYXRp b24gc3VjY2Vzc2Z1bC4NCi0NCi0gIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgICBPdXQg b2YgbWVtb3J5Lg0KLQ0KLSAgQHJldHZhbCBFRklfSU5WQUxJRF9QQVJBTUVURVIgIFdyaXRlUG9p bnRlckNvdW50IGlzIHplcm8uDQotKiovDQotRUZJX1NUQVRVUw0KLUFsbG9jYXRlUzNDb250ZXh0 ICgNCi0gIE9VVCBTM19DT05URVhUICoqUzNDb250ZXh0LA0KLSAgSU4gIFVJTlROICAgICAgV3Jp dGVQb2ludGVyQ291bnQNCi0gICkNCi17DQotICBFRklfU1RBVFVTIFN0YXR1czsNCi0gIFMzX0NP TlRFWFQgKkNvbnRleHQ7DQotDQotICBpZiAoV3JpdGVQb2ludGVyQ291bnQgPT0gMCkgew0KLSAg ICByZXR1cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KLSAgfQ0KLQ0KLSAgQ29udGV4dCA9IEFs bG9jYXRlWmVyb1Bvb2wgKHNpemVvZiAqQ29udGV4dCk7DQotICBpZiAoQ29udGV4dCA9PSBOVUxM KSB7DQotICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCi0gIH0NCi0NCi0gIENvbnRl eHQtPldyaXRlUG9pbnRlcnMgPSBBbGxvY2F0ZVBvb2wgKFdyaXRlUG9pbnRlckNvdW50ICoNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiAqQ29udGV4dC0+V3JpdGVQb2ludGVy cyk7DQotICBpZiAoQ29udGV4dC0+V3JpdGVQb2ludGVycyA9PSBOVUxMKSB7DQotICAgIFN0YXR1 cyA9IEVGSV9PVVRfT0ZfUkVTT1VSQ0VTOw0KLSAgICBnb3RvIEZyZWVDb250ZXh0Ow0KLSAgfQ0K LQ0KLSAgQ29udGV4dC0+QWxsb2NhdGVkID0gV3JpdGVQb2ludGVyQ291bnQ7DQotICAqUzNDb250 ZXh0ID0gQ29udGV4dDsNCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi0NCi1GcmVlQ29udGV4dDoN Ci0gIEZyZWVQb29sIChDb250ZXh0KTsNCi0NCi0gIHJldHVybiBTdGF0dXM7DQotfQ0KLQ0KLQ0K LS8qKg0KLSAgUmVsZWFzZSBhbiBTM19DT05URVhUIG9iamVjdC4NCi0NCi0gIEBwYXJhbVtpbl0g UzNDb250ZXh0ICBUaGUgb2JqZWN0IHRvIHJlbGVhc2UuDQotKiovDQotVk9JRA0KLVJlbGVhc2VT M0NvbnRleHQgKA0KLSAgSU4gUzNfQ09OVEVYVCAqUzNDb250ZXh0DQotICApDQotew0KLSAgRnJl ZVBvb2wgKFMzQ29udGV4dC0+V3JpdGVQb2ludGVycyk7DQotICBGcmVlUG9vbCAoUzNDb250ZXh0 KTsNCi19DQotDQotDQotLyoqDQotICBTYXZlIHRoZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgdG8g cmVwbGljYXRlIGEgUUVNVV9MT0FERVJfV1JJVEVfUE9JTlRFUg0KLSAgY29tbWFuZCBkdXJpbmcg UzMgcmVzdW1lLCBpbiBjb25kZW5zZWQgZm9ybWF0Lg0KLQ0KLSAgVGhpcyBmdW5jdGlvbiBpcyB0 byBiZSBjYWxsZWQgZnJvbSBQcm9jZXNzQ21kV3JpdGVQb2ludGVyKCksIGFmdGVyIGFsbCB0aGUN Ci0gIHNhbml0eSBjaGVja3MgaGF2ZSBwYXNzZWQsIGFuZCBiZWZvcmUgdGhlIGZ3X2NmZyBvcGVy YXRpb25zIGFyZSBwZXJmb3JtZWQuDQotDQotICBAcGFyYW1baW4sb3V0XSBTM0NvbnRleHQgIFRo ZSBTM19DT05URVhUIG9iamVjdCBpbnRvIHdoaWNoIHRoZSBjYWxsZXIgd2FudHMNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgdG8gc2F2ZSB0aGUgaW5mb3JtYXRpb24gdGhhdCB3YXMgZGVy aXZlZCBmcm9tDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVVfTE9BREVSX1dSSVRF X1BPSU5URVIuDQotDQotICBAcGFyYW1baW5dIFBvaW50ZXJJdGVtICAgIFRoZSBGSVJNV0FSRV9D T05GSUdfSVRFTSB0aGF0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVVfTE9BREVS X1dSSVRFX1BPSU5URVIuUG9pbnRlckZpbGUgd2FzIHJlc29sdmVkDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHRvLCBleHByZXNzZWQgYXMgYSBVSU5UMTYgdmFsdWUuDQotDQotICBAcGFy YW1baW5dIFBvaW50ZXJTaXplICAgIENvcGllZCBkaXJlY3RseSBmcm9tDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIuUG9pbnRlclNpemUuDQot DQotICBAcGFyYW1baW5dIFBvaW50ZXJPZmZzZXQgIENvcGllZCBkaXJlY3RseSBmcm9tDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIuUG9pbnRl ck9mZnNldC4NCi0NCi0gIEBwYXJhbVtpbl0gUG9pbnRlclZhbHVlICAgVGhlIGJhc2UgYWRkcmVz cyBvZiB0aGUgYWxsb2NhdGVkIC8gZG93bmxvYWRlZA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmd19jZmcgYmxvYiB0aGF0IGlzIGlkZW50aWZpZWQgYnkNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgUUVNVV9MT0FERVJfV1JJVEVfUE9JTlRFUi5Qb2ludGVlRmlsZSwgcGx1cw0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBRRU1VX0xPQURFUl9XUklURV9QT0lOVEVSLlBv aW50ZWVPZmZzZXQuDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBUaGUgaW5m b3JtYXRpb24gZGVyaXZlZCBmcm9tDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBR RU1VX0xPQURFUl9XUklURV9QT0lOVEVSIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseQ0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYWJzb3JiZWQgaW50byBTM0NvbnRleHQuDQotDQotICBA cmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICBObyByb29tIGF2YWlsYWJsZSBpbiBTM0NvbnRl eHQuDQotKiovDQotRUZJX1NUQVRVUw0KLVNhdmVDb25kZW5zZWRXcml0ZVBvaW50ZXJUb1MzQ29u dGV4dCAoDQotICBJTiBPVVQgUzNfQ09OVEVYVCAqUzNDb250ZXh0LA0KLSAgSU4gICAgIFVJTlQx NiAgICAgUG9pbnRlckl0ZW0sDQotICBJTiAgICAgVUlOVDggICAgICBQb2ludGVyU2l6ZSwNCi0g IElOICAgICBVSU5UMzIgICAgIFBvaW50ZXJPZmZzZXQsDQotICBJTiAgICAgVUlOVDY0ICAgICBQ b2ludGVyVmFsdWUNCi0gICkNCi17DQotICBDT05ERU5TRURfV1JJVEVfUE9JTlRFUiAqQ29uZGVu c2VkOw0KLQ0KLSAgaWYgKFMzQ29udGV4dC0+VXNlZCA9PSBTM0NvbnRleHQtPkFsbG9jYXRlZCkg ew0KLSAgICByZXR1cm4gRUZJX09VVF9PRl9SRVNPVVJDRVM7DQotICB9DQotICBDb25kZW5zZWQg PSBTM0NvbnRleHQtPldyaXRlUG9pbnRlcnMgKyBTM0NvbnRleHQtPlVzZWQ7DQotICBDb25kZW5z ZWQtPlBvaW50ZXJJdGVtICAgPSBQb2ludGVySXRlbTsNCi0gIENvbmRlbnNlZC0+UG9pbnRlclNp emUgICA9IFBvaW50ZXJTaXplOw0KLSAgQ29uZGVuc2VkLT5Qb2ludGVyT2Zmc2V0ID0gUG9pbnRl ck9mZnNldDsNCi0gIENvbmRlbnNlZC0+UG9pbnRlclZhbHVlICA9IFBvaW50ZXJWYWx1ZTsNCi0g IERFQlVHICgoREVCVUdfVkVSQk9TRSwgIiVhOiAweCUwNHgvWzB4JTA4eCslZF0gOj0gMHglTHgg KCVMdSlcbiIsDQotICAgIF9fRlVOQ1RJT05fXywgUG9pbnRlckl0ZW0sIFBvaW50ZXJPZmZzZXQs IFBvaW50ZXJTaXplLCBQb2ludGVyVmFsdWUsDQotICAgIChVSU5UNjQpUzNDb250ZXh0LT5Vc2Vk KSk7DQotICArK1MzQ29udGV4dC0+VXNlZDsNCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQot DQotDQotLyoqDQotICBGV19DRkdfQk9PVF9TQ1JJUFRfQ0FMTEJBQ0tfRlVOQ1RJT04gcHJvdmlk ZWQgdG8gUWVtdUZ3Q2ZnUzNMaWIuDQotKiovDQotU1RBVElDDQotVk9JRA0KLUVGSUFQSQ0KLUFw cGVuZEZ3Q2ZnQm9vdFNjcmlwdCAoDQotICBJTiBPVVQgVk9JRCAqQ29udGV4dCwgICAgICAgICAg ICAgIE9QVElPTkFMDQotICBJTiBPVVQgVk9JRCAqRXh0ZXJuYWxTY3JhdGNoQnVmZmVyDQotICAp DQotew0KLSAgUzNfQ09OVEVYVCAgICAgKlMzQ29udGV4dDsNCi0gIFNDUkFUQ0hfQlVGRkVSICpT Y3JhdGNoQnVmZmVyOw0KLSAgVUlOVE4gICAgICAgICAgSW5kZXg7DQotDQotICBTM0NvbnRleHQg PSBDb250ZXh0Ow0KLSAgU2NyYXRjaEJ1ZmZlciA9IEV4dGVybmFsU2NyYXRjaEJ1ZmZlcjsNCi0N Ci0gIGZvciAoSW5kZXggPSAwOyBJbmRleCA8IFMzQ29udGV4dC0+VXNlZDsgKytJbmRleCkgew0K LSAgICBDT05TVCBDT05ERU5TRURfV1JJVEVfUE9JTlRFUiAqQ29uZGVuc2VkOw0KLSAgICBSRVRV Uk5fU1RBVFVTICAgICAgICAgICAgICAgICBTdGF0dXM7DQotDQotICAgIENvbmRlbnNlZCA9ICZT M0NvbnRleHQtPldyaXRlUG9pbnRlcnNbSW5kZXhdOw0KLQ0KLSAgICBTdGF0dXMgPSBRZW11RndD ZmdTM1NjcmlwdFNraXBCeXRlcyAoQ29uZGVuc2VkLT5Qb2ludGVySXRlbSwNCi0gICAgICAgICAg ICAgICBDb25kZW5zZWQtPlBvaW50ZXJPZmZzZXQpOw0KLSAgICBpZiAoUkVUVVJOX0VSUk9SIChT dGF0dXMpKSB7DQotICAgICAgZ290byBGYXRhbEVycm9yOw0KLSAgICB9DQotDQotICAgIFNjcmF0 Y2hCdWZmZXItPlBvaW50ZXJWYWx1ZSA9IENvbmRlbnNlZC0+UG9pbnRlclZhbHVlOw0KLSAgICBT dGF0dXMgPSBRZW11RndDZmdTM1NjcmlwdFdyaXRlQnl0ZXMgKC0xLCBDb25kZW5zZWQtPlBvaW50 ZXJTaXplKTsNCi0gICAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAgIGdvdG8g RmF0YWxFcnJvcjsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgREVCVUcgKChERUJVR19WRVJCT1NFLCAi JWE6IGJvb3Qgc2NyaXB0IGZyYWdtZW50IHNhdmVkXG4iLCBfX0ZVTkNUSU9OX18pKTsNCi0NCi0g IFJlbGVhc2VTM0NvbnRleHQgKFMzQ29udGV4dCk7DQotICByZXR1cm47DQotDQotRmF0YWxFcnJv cjoNCi0gIEFTU0VSVCAoRkFMU0UpOw0KLSAgQ3B1RGVhZExvb3AgKCk7DQotfQ0KLQ0KLQ0KLS8q Kg0KLSAgVHJhbnNsYXRlIGFuZCBhcHBlbmQgdGhlIGluZm9ybWF0aW9uIGZyb20gYW4gUzNfQ09O VEVYVCBvYmplY3QgdG8gdGhlIEFDUEkgUzMNCi0gIEJvb3QgU2NyaXB0Lg0KLQ0KLSAgVGhlIGVm ZmVjdHMgb2YgYSBzdWNjZXNzZnVsIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiBjYW5ub3QgYmUgdW5k b25lLg0KLQ0KLSAgQHBhcmFtW2luXSBTM0NvbnRleHQgIFRoZSBTM19DT05URVhUIG9iamVjdCB0 byB0cmFuc2xhdGUgdG8gQUNQSSBTMyBCb290DQotICAgICAgICAgICAgICAgICAgICAgICAgU2Ny aXB0IG9wY29kZXMuIElmIHRoZSBmdW5jdGlvbiByZXR1cm5zIHN1Y2Nlc3NmdWxseSwNCi0gICAg ICAgICAgICAgICAgICAgICAgICB0aGUgY2FsbGVyIG11c3Qgc2V0IHRoZSBTM0NvbnRleHQgcG9p bnRlciAtLSBvcmlnaW5hbGx5DQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuZWQgYnkg QWxsb2NhdGVTM0NvbnRleHQoKSAtLSBpbW1lZGlhdGVseSB0byBOVUxMLA0KLSAgICAgICAgICAg ICAgICAgICAgICAgIGJlY2F1c2UgdGhlIG93bmVyc2hpcCBvZiBTM0NvbnRleHQgaGFzIGJlZW4g dHJhbnNmZXJyZWQuDQotDQotICBAcmV0dmFsIEVGSV9TVUNDRVNTIFRoZSB0cmFuc2xhdGlvbiBv ZiBTM0NvbnRleHQgdG8gQUNQSSBTMyBCb290IFNjcmlwdA0KLSAgICAgICAgICAgICAgICAgICAg ICBvcGNvZGVzIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBleGVjdXRlZCBvciBxdWV1ZWQuIChUaGlz DQotICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGVzIHRoZSBjYXNlIHdoZW4gUzNDb250ZXh0 IHdhcyBlbXB0eSBvbiBpbnB1dCBhbmQNCi0gICAgICAgICAgICAgICAgICAgICAgbm8gQUNQSSBT MyBCb290IFNjcmlwdCBvcGNvZGVzIGhhdmUgYmVlbiBuZWNlc3NhcnkgdG8NCi0gICAgICAgICAg ICAgICAgICAgICAgcHJvZHVjZS4pDQotDQotICBAcmV0dXJuICAgICAgICAgICAgIEVycm9yIGNv ZGVzIGZyb20gdW5kZXJseWluZyBmdW5jdGlvbnMuDQotKiovDQotRUZJX1NUQVRVUw0KLVRyYW5z ZmVyUzNDb250ZXh0VG9Cb290U2NyaXB0ICgNCi0gIElOIFMzX0NPTlRFWFQgKlMzQ29udGV4dA0K LSAgKQ0KLXsNCi0gIFJFVFVSTl9TVEFUVVMgU3RhdHVzOw0KLQ0KLSAgaWYgKFMzQ29udGV4dC0+ VXNlZCA9PSAwKSB7DQotICAgIFJlbGVhc2VTM0NvbnRleHQgKFMzQ29udGV4dCk7DQotICAgIHJl dHVybiBFRklfU1VDQ0VTUzsNCi0gIH0NCi0NCi0gIFN0YXR1cyA9IFFlbXVGd0NmZ1MzQ2FsbFdo ZW5Cb290U2NyaXB0UmVhZHkgKEFwcGVuZEZ3Q2ZnQm9vdFNjcmlwdCwNCi0gICAgICAgICAgICAg UzNDb250ZXh0LCBzaXplb2YgKFNDUkFUQ0hfQlVGRkVSKSk7DQotICByZXR1cm4gKEVGSV9TVEFU VVMpU3RhdHVzOw0KLX0NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL1hlbkFjcGlQbGF0Zm9ybUR4ZS9Q Y2lEZWNvZGluZy5jIGIvT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvUGNpRGVjb2RpbmcuYwpk ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBmYzU3ZWIxM2ViLi4wMDAwMDAwMDAwMDAK LS0tIGEvT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvUGNpRGVjb2RpbmcuYworKysgL2Rldi9u dWxsCkBAIC0xLDE5NCArMCwwIEBACi0vKiogQGZpbGUNCi0gIFRlbXBvcmFyaWx5IGVuYWJsZSBJ TyBhbmQgTU1JTyBkZWNvZGluZyBmb3IgYWxsIFBDSSBkZXZpY2VzIHdoaWxlIFFFTVUNCi0gIHJl Z2VuZXJhdGVzIHRoZSBBQ1BJIHRhYmxlcy4NCi0NCi0gIENvcHlyaWdodCAoQykgMjAxNi0yMDIx LCBSZWQgSGF0LCBJbmMuDQotDQotICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTItQ2xh dXNlLVBhdGVudA0KLSoqLw0KLQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ICAgICAg ICAgICAgICAgICAgLy8gREVCVUcoKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L01lbW9yeUFsbG9jYXRp b25MaWIuaD4gICAgICAgLy8gQWxsb2NhdGVQb29sKCkNCi0jaW5jbHVkZSA8TGlicmFyeS9VZWZp Qm9vdFNlcnZpY2VzVGFibGVMaWIuaD4gIC8vIGdCUw0KLQ0KLSNpbmNsdWRlICJBY3BpUGxhdGZv cm0uaCINCi0NCi0NCi0vKioNCi0gIENvbGxlY3QgYWxsIFBjaUlvIHByb3RvY29sIGluc3RhbmNl cyBpbiB0aGUgc3lzdGVtLiBTYXZlIHRoZWlyIG9yaWdpbmFsDQotICBhdHRyaWJ1dGVzLCBhbmQg ZW5hYmxlIElPIGFuZCBNTUlPIGRlY29kaW5nIGZvciBlYWNoLg0KLQ0KLSAgVGhpcyBpcyBhIGJl c3QgZWZmb3J0IGZ1bmN0aW9uOyBpdCBkb2Vzbid0IHJldHVybiBzdGF0dXMgY29kZXMuIEl0cw0K LSAgY2FsbGVyIGlzIHN1cHBvc2VkIHRvIHByb2NlZWQgZXZlbiBpZiB0aGlzIGZ1bmN0aW9uIGZh aWxzLg0KLQ0KLSAgQHBhcmFtW291dF0gT3JpZ2luYWxBdHRyaWJ1dGVzICBPbiBvdXRwdXQsIGEg ZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IG9mDQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE9SSUdJTkFMX0FUVFJJQlVURVMgZWxlbWVudHMuIFRoZSBhcnJheSBsaXN0cw0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgUGNpSW8gcHJvdG9jb2wgaW5z dGFuY2VzIGZvdW5kIGluIHRoZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz eXN0ZW0gYXQgdGhlIHRpbWUgb2YgdGhlIGNhbGwsIHBsdXMgdGhlDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsIFBDSSBhdHRyaWJ1dGVzIGZvciBlYWNoLg0KLQ0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWZvcmUgcmV0dXJuaW5nLCB0aGUg ZnVuY3Rpb24gZW5hYmxlcyBJTyBhbmQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgTU1JTyBkZWNvZGluZyBmb3IgZWFjaCBQY2lJbyBpbnN0YW5jZSBpdA0KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBmaW5kcy4NCi0NCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgT24gZXJyb3IsIG9yIHdoZW4gbm8gc3VjaCBpbnN0YW5jZXMgYXJlDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kLCBPcmlnaW5hbEF0dHJpYnV0ZXMg aXMgc2V0IHRvIE5VTEwuDQotDQotICBAcGFyYW1bb3V0XSBDb3VudCAgICAgICAgICAgICAgIE9u IG91dHB1dCwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpbg0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBPcmlnaW5hbEF0dHJpYnV0ZXMuIE9uIGVycm9yIGl0IGlzIHNldCB0bw0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZXJvLg0KLSoqLw0KLVZPSUQNCi1F bmFibGVQY2lEZWNvZGluZyAoDQotICBPVVQgT1JJR0lOQUxfQVRUUklCVVRFUyAqKk9yaWdpbmFs QXR0cmlidXRlcywNCi0gIE9VVCBVSU5UTiAgICAgICAgICAgICAgICpDb3VudA0KLSAgKQ0KLXsN Ci0gIEVGSV9TVEFUVVMgICAgICAgICAgU3RhdHVzOw0KLSAgVUlOVE4gICAgICAgICAgICAgICBO b0hhbmRsZXM7DQotICBFRklfSEFORExFICAgICAgICAgICpIYW5kbGVzOw0KLSAgT1JJR0lOQUxf QVRUUklCVVRFUyAqT3JpZ0F0dHJzOw0KLSAgVUlOVE4gICAgICAgICAgICAgICBJZHg7DQotDQot ICAqT3JpZ2luYWxBdHRyaWJ1dGVzID0gTlVMTDsNCi0gICpDb3VudCAgICAgICAgICAgICAgPSAw Ow0KLQ0KLSAgaWYgKFBjZEdldEJvb2wgKFBjZFBjaURpc2FibGVCdXNFbnVtZXJhdGlvbikpIHsN Ci0gICAgLy8NCi0gICAgLy8gVGhlIHBsYXRmb3JtIGRvd25sb2FkcyBBQ1BJIHRhYmxlcyBmcm9t IFFFTVUgaW4gZ2VuZXJhbCwgYnV0IHRoZXJlIGFyZQ0KLSAgICAvLyBubyByb290IGJyaWRnZXMg aW4gdGhpcyBleGVjdXRpb24uIFdlJ3JlIGRvbmUuDQotICAgIC8vDQotICAgIHJldHVybjsNCi0g IH0NCi0NCi0gIFN0YXR1cyA9IGdCUy0+TG9jYXRlSGFuZGxlQnVmZmVyIChCeVByb3RvY29sLCAm Z0VmaVBjaUlvUHJvdG9jb2xHdWlkLA0KLSAgICAgICAgICAgICAgICAgIE5VTEwgLyogU2VhcmNo S2V5ICovLCAmTm9IYW5kbGVzLCAmSGFuZGxlcyk7DQotICBpZiAoU3RhdHVzID09IEVGSV9OT1Rf Rk9VTkQpIHsNCi0gICAgLy8NCi0gICAgLy8gTm8gUENJIGRldmljZXMgd2VyZSBmb3VuZCBvbiBl aXRoZXIgb2YgdGhlIHJvb3QgYnJpZGdlcy4gV2UncmUgZG9uZS4NCi0gICAgLy8NCi0gICAgcmV0 dXJuOw0KLSAgfQ0KLQ0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICBERUJVRyAo KERFQlVHX1dBUk4sICIlYTogTG9jYXRlSGFuZGxlQnVmZmVyKCk6ICVyXG4iLCBfX0ZVTkNUSU9O X18sDQotICAgICAgU3RhdHVzKSk7DQotICAgIHJldHVybjsNCi0gIH0NCi0NCi0gIE9yaWdBdHRy cyA9IEFsbG9jYXRlUG9vbCAoTm9IYW5kbGVzICogc2l6ZW9mICpPcmlnQXR0cnMpOw0KLSAgaWYg KE9yaWdBdHRycyA9PSBOVUxMKSB7DQotICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiVhOiBBbGxv Y2F0ZVBvb2woKTogb3V0IG9mIHJlc291cmNlc1xuIiwNCi0gICAgICBfX0ZVTkNUSU9OX18pKTsN Ci0gICAgZ290byBGcmVlSGFuZGxlczsNCi0gIH0NCi0NCi0gIGZvciAoSWR4ID0gMDsgSWR4IDwg Tm9IYW5kbGVzOyArK0lkeCkgew0KLSAgICBFRklfUENJX0lPX1BST1RPQ09MICpQY2lJbzsNCi0g ICAgVUlOVDY0ICAgICAgICAgICAgICBBdHRyaWJ1dGVzOw0KLQ0KLSAgICAvLw0KLSAgICAvLyBM b29rIHVwIFBjaUlvIG9uIHRoZSBoYW5kbGUgYW5kIHN0YXNoIGl0DQotICAgIC8vDQotICAgIFN0 YXR1cyA9IGdCUy0+SGFuZGxlUHJvdG9jb2wgKEhhbmRsZXNbSWR4XSwgJmdFZmlQY2lJb1Byb3Rv Y29sR3VpZCwNCi0gICAgICAgICAgICAgICAgICAgIChWT0lEKiopJlBjaUlvKTsNCi0gICAgQVNT RVJUX0VGSV9FUlJPUiAoU3RhdHVzKTsNCi0gICAgT3JpZ0F0dHJzW0lkeF0uUGNpSW8gPSBQY2lJ bzsNCi0NCi0gICAgLy8NCi0gICAgLy8gU3Rhc2ggdGhlIGN1cnJlbnQgYXR0cmlidXRlcw0KLSAg ICAvLw0KLSAgICBTdGF0dXMgPSBQY2lJby0+QXR0cmlidXRlcyAoUGNpSW8sIEVmaVBjaUlvQXR0 cmlidXRlT3BlcmF0aW9uR2V0LCAwLA0KLSAgICAgICAgICAgICAgICAgICAgICAmT3JpZ0F0dHJz W0lkeF0uUGNpQXR0cmlidXRlcyk7DQotICAgIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0g ICAgICBERUJVRyAoKERFQlVHX1dBUk4sICIlYTogRWZpUGNpSW9BdHRyaWJ1dGVPcGVyYXRpb25H ZXQ6ICVyXG4iLA0KLSAgICAgICAgX19GVU5DVElPTl9fLCBTdGF0dXMpKTsNCi0gICAgICBnb3Rv IFJlc3RvcmVBdHRyaWJ1dGVzOw0KLSAgICB9DQotDQotICAgIC8vDQotICAgIC8vIFJldHJpZXZl IHN1cHBvcnRlZCBhdHRyaWJ1dGVzDQotICAgIC8vDQotICAgIFN0YXR1cyA9IFBjaUlvLT5BdHRy aWJ1dGVzIChQY2lJbywgRWZpUGNpSW9BdHRyaWJ1dGVPcGVyYXRpb25TdXBwb3J0ZWQsIDAsDQot ICAgICAgICAgICAgICAgICAgICAgICZBdHRyaWJ1dGVzKTsNCi0gICAgaWYgKEVGSV9FUlJPUiAo U3RhdHVzKSkgew0KLSAgICAgIERFQlVHICgoREVCVUdfV0FSTiwgIiVhOiBFZmlQY2lJb0F0dHJp YnV0ZU9wZXJhdGlvblN1cHBvcnRlZDogJXJcbiIsDQotICAgICAgICBfX0ZVTkNUSU9OX18sIFN0 YXR1cykpOw0KLSAgICAgIGdvdG8gUmVzdG9yZUF0dHJpYnV0ZXM7DQotICAgIH0NCi0NCi0gICAg Ly8NCi0gICAgLy8gRW5hYmxlIElPIGFuZCBNTUlPIGRlY29kaW5nDQotICAgIC8vDQotICAgIEF0 dHJpYnV0ZXMgJj0gRUZJX1BDSV9JT19BVFRSSUJVVEVfSU8gfCBFRklfUENJX0lPX0FUVFJJQlVU RV9NRU1PUlk7DQotICAgIFN0YXR1cyA9IFBjaUlvLT5BdHRyaWJ1dGVzIChQY2lJbywgRWZpUGNp SW9BdHRyaWJ1dGVPcGVyYXRpb25FbmFibGUsDQotICAgICAgICAgICAgICAgICAgICAgIEF0dHJp YnV0ZXMsIE5VTEwpOw0KLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgICAgREVC VUcgKChERUJVR19XQVJOLCAiJWE6IEVmaVBjaUlvQXR0cmlidXRlT3BlcmF0aW9uRW5hYmxlOiAl clxuIiwNCi0gICAgICAgIF9fRlVOQ1RJT05fXywgU3RhdHVzKSk7DQotICAgICAgZ290byBSZXN0 b3JlQXR0cmlidXRlczsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgLy8NCi0gIC8vIFN1Y2Nlc3MNCi0g IC8vDQotICBGcmVlUG9vbCAoSGFuZGxlcyk7DQotICAqT3JpZ2luYWxBdHRyaWJ1dGVzID0gT3Jp Z0F0dHJzOw0KLSAgKkNvdW50ICAgICAgICAgICAgICA9IE5vSGFuZGxlczsNCi0gIHJldHVybjsN Ci0NCi1SZXN0b3JlQXR0cmlidXRlczoNCi0gIHdoaWxlIChJZHggPiAwKSB7DQotICAgIC0tSWR4 Ow0KLSAgICBPcmlnQXR0cnNbSWR4XS5QY2lJby0+QXR0cmlidXRlcyAoT3JpZ0F0dHJzW0lkeF0u UGNpSW8sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVBjaUlvQXR0cmlidXRlT3Bl cmF0aW9uU2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnQXR0cnNbSWR4XS5Q Y2lBdHRyaWJ1dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICk7DQotICB9DQotICBGcmVlUG9vbCAoT3JpZ0F0dHJzKTsN Ci0NCi1GcmVlSGFuZGxlczoNCi0gIEZyZWVQb29sIChIYW5kbGVzKTsNCi19DQotDQotDQotLyoq DQotICBSZXN0b3JlIHRoZSBvcmlnaW5hbCBQQ0kgYXR0cmlidXRlcyBzYXZlZCB3aXRoIEVuYWJs ZVBjaURlY29kaW5nKCkuDQotDQotICBAcGFyYW1baW5dIE9yaWdpbmFsQXR0cmlidXRlcyAgVGhl IGFycmF5IGFsbG9jYXRlZCBhbmQgcG9wdWxhdGVkIGJ5DQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRW5hYmxlUGNpRGVjb2RpbmcoKS4gVGhpcyBwYXJhbWV0ZXIgbWF5IGJlDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTC4gSWYgT3JpZ2luYWxBdHRyaWJ1 dGVzIGlzIE5VTEwsIHRoZW4gdGhlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZnVuY3Rpb24gaXMgYSBuby1vcDsgb3RoZXJ3aXNlIHRoZSBQY2lJbw0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgd2lsbCBiZSByZXN0b3JlZCwgYW5kIHRoZQ0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsQXR0cmlidXRlcyBhcnJh eSB3aWxsIGJlIGZyZWVkLg0KLQ0KLSAgQHBhcmFtW2luXSBDb3VudCAgICAgICAgICAgICAgIFRo ZSBDb3VudCB2YWx1ZSBzdG9yZWQgYnkgRW5hYmxlUGNpRGVjb2RpbmcoKSwNCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIE9yaWdpbmFs QXR0cmlidXRlcy4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3VudCBtYXkg YmUgemVybyBpZiBhbmQgb25seSBpZg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IE9yaWdpbmFsQXR0cmlidXRlcyBpcyBOVUxMLg0KLSoqLw0KLVZPSUQNCi1SZXN0b3JlUGNpRGVj b2RpbmcgKA0KLSAgSU4gT1JJR0lOQUxfQVRUUklCVVRFUyAqT3JpZ2luYWxBdHRyaWJ1dGVzLA0K LSAgSU4gVUlOVE4gICAgICAgICAgICAgICBDb3VudA0KLSAgKQ0KLXsNCi0gIFVJTlROIElkeDsN Ci0NCi0gIEFTU0VSVCAoKE9yaWdpbmFsQXR0cmlidXRlcyA9PSBOVUxMKSA9PSAoQ291bnQgPT0g MCkpOw0KLSAgaWYgKE9yaWdpbmFsQXR0cmlidXRlcyA9PSBOVUxMKSB7DQotICAgIHJldHVybjsN Ci0gIH0NCi0NCi0gIGZvciAoSWR4ID0gMDsgSWR4IDwgQ291bnQ7ICsrSWR4KSB7DQotICAgIE9y aWdpbmFsQXR0cmlidXRlc1tJZHhdLlBjaUlvLT5BdHRyaWJ1dGVzICgNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgT3JpZ2luYWxBdHRyaWJ1dGVzW0lkeF0uUGNpSW8sDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVmaVBjaUlvQXR0cmlidXRlT3Bl cmF0aW9uU2V0LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW5h bEF0dHJpYnV0ZXNbSWR4XS5QY2lBdHRyaWJ1dGVzLA0KLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBOVUxMDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICk7DQotICB9DQotICBGcmVlUG9vbCAoT3JpZ2luYWxBdHRyaWJ1dGVzKTsNCi19DQpkaWZmIC0t Z2l0IGEvT3ZtZlBrZy9YZW5BY3BpUGxhdGZvcm1EeGUvUWVtdUZ3Q2ZnQWNwaS5jIGIvT3ZtZlBr Zy9YZW5BY3BpUGxhdGZvcm1EeGUvUWVtdUZ3Q2ZnQWNwaS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NAppbmRleCA1MjFjMDZjZjU0NmYuLjAwMDAwMDAwMDAwMAotLS0gYS9Pdm1mUGtnL1hlbkFj cGlQbGF0Zm9ybUR4ZS9RZW11RndDZmdBY3BpLmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTk2ICsw LDAgQEAKLS8qKiBAZmlsZQ0KLSAgT1ZNRiBBQ1BJIHN1cHBvcnQgdXNpbmcgUUVNVSdzIGZ3LWNm ZyBpbnRlcmZhY2UNCi0NCi0gIENvcHlyaWdodCAoQykgMjAxMi0yMDIxLCBSZWQgSGF0LCBJbmMu DQotICBDb3B5cmlnaHQgKGMpIDIwMDggLSAyMDE0LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJp Z2h0cyByZXNlcnZlZC48QlI+DQotDQotICBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTIt Q2xhdXNlLVBhdGVudA0KLQ0KLSoqLw0KLQ0KLSNpbmNsdWRlIDxJbmR1c3RyeVN0YW5kYXJkL0Fj cGkuaD4gICAgICAgICAgICAvLyBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVINCi0jaW5jbHVk ZSA8SW5kdXN0cnlTdGFuZGFyZC9RZW11TG9hZGVyLmg+ICAgICAgLy8gUUVNVV9MT0FERVJfRk5B TUVfU0laRQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VMaWIuaD4gICAgICAgICAgICAgICAgICAv LyBBc2NpaVN0ckNtcCgpDQotI2luY2x1ZGUgPExpYnJhcnkvQmFzZU1lbW9yeUxpYi5oPiAgICAg ICAgICAgIC8vIENvcHlNZW0oKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L0RlYnVnTGliLmg+ICAgICAg ICAgICAgICAgICAvLyBERUJVRygpDQotI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlv bkxpYi5oPiAgICAgIC8vIEFsbG9jYXRlUG9vbCgpDQotI2luY2x1ZGUgPExpYnJhcnkvT3JkZXJl ZENvbGxlY3Rpb25MaWIuaD4gICAgIC8vIE9yZGVyZWRDb2xsZWN0aW9uTWluKCkNCi0jaW5jbHVk ZSA8TGlicmFyeS9RZW11RndDZmdMaWIuaD4gICAgICAgICAgICAgLy8gUWVtdUZ3Q2ZnRmluZEZp bGUoKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L1FlbXVGd0NmZ1MzTGliLmg+ICAgICAgICAgICAvLyBR ZW11RndDZmdTM0VuYWJsZWQoKQ0KLSNpbmNsdWRlIDxMaWJyYXJ5L1VlZmlCb290U2VydmljZXNU YWJsZUxpYi5oPiAvLyBnQlMNCi0NCi0jaW5jbHVkZSAiQWNwaVBsYXRmb3JtLmgiDQotDQotLy8N Ci0vLyBUaGUgdXNlciBzdHJ1Y3R1cmUgZm9yIHRoZSBvcmRlcmVkIGNvbGxlY3Rpb24gdGhhdCB3 aWxsIHRyYWNrIHRoZSBmd19jZmcNCi0vLyBibG9icyB1bmRlciBwcm9jZXNzaW5nLg0KLS8vDQot dHlwZWRlZiBzdHJ1Y3Qgew0KLSAgVUlOVDggICBGaWxlW1FFTVVfTE9BREVSX0ZOQU1FX1NJWkVd OyAvLyBOVUwtdGVybWluYXRlZCBuYW1lIG9mIHRoZSBmd19jZmcNCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmxvYi4gVGhpcyBpcyB0aGUgb3JkZXJpbmcgLyBz ZWFyY2gNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ga2V5Lg0K LSAgVUlOVE4gICBTaXplOyAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGUgbnVtYmVyIG9m IGJ5dGVzIGluIHRoaXMgYmxvYi4NCi0gIFVJTlQ4ICAgKkJhc2U7ICAgICAgICAgICAgICAgICAg ICAgICAgLy8gUG9pbnRlciB0byB0aGUgYmxvYiBkYXRhLg0KLSAgQk9PTEVBTiBIb3N0c09ubHlU YWJsZURhdGE7ICAgICAgICAgICAvLyBUUlVFIGlmZiB0aGUgYmxvYiBoYXMgYmVlbiBmb3VuZCB0 bw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvbmx5IGNvbnRh aW4gZGF0YSB0aGF0IGlzIGRpcmVjdGx5DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vIHBhcnQgb2YgQUNQSSB0YWJsZXMuDQotfSBCTE9COw0KLQ0KLQ0KLS8qKg0K LSAgQ29tcGFyZSBhIHN0YW5kYWxvbmUga2V5IGFnYWluc3QgYSB1c2VyIHN0cnVjdHVyZSBjb250 YWluaW5nIGFuIGVtYmVkZGVkIGtleS4NCi0NCi0gIEBwYXJhbVtpbl0gU3RhbmRhbG9uZUtleSAg UG9pbnRlciB0byB0aGUgYmFyZSBrZXkuDQotDQotICBAcGFyYW1baW5dIFVzZXJTdHJ1Y3QgICAg IFBvaW50ZXIgdG8gdGhlIHVzZXIgc3RydWN0dXJlIHdpdGggdGhlIGVtYmVkZGVkDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGtleS4NCi0NCi0gIEByZXR2YWwgPDAgIElmIFN0YW5kYWxv bmVLZXkgY29tcGFyZXMgbGVzcyB0aGFuIFVzZXJTdHJ1Y3QncyBrZXkuDQotDQotICBAcmV0dmFs ICAwICBJZiBTdGFuZGFsb25lS2V5IGNvbXBhcmVzIGVxdWFsIHRvIFVzZXJTdHJ1Y3QncyBrZXku DQotDQotICBAcmV0dmFsID4wICBJZiBTdGFuZGFsb25lS2V5IGNvbXBhcmVzIGdyZWF0ZXIgdGhh biBVc2VyU3RydWN0J3Mga2V5Lg0KLSoqLw0KLVNUQVRJQw0KLUlOVE4NCi1FRklBUEkNCi1CbG9i S2V5Q29tcGFyZSAoDQotICBJTiBDT05TVCBWT0lEICpTdGFuZGFsb25lS2V5LA0KLSAgSU4gQ09O U1QgVk9JRCAqVXNlclN0cnVjdA0KLSAgKQ0KLXsNCi0gIENPTlNUIEJMT0IgKkJsb2I7DQotDQot ICBCbG9iID0gVXNlclN0cnVjdDsNCi0gIHJldHVybiBBc2NpaVN0ckNtcCAoU3RhbmRhbG9uZUtl eSwgKENPTlNUIENIQVI4ICopQmxvYi0+RmlsZSk7DQotfQ0KLQ0KLQ0KLS8qKg0KLSAgQ29tcGFy YXRvciBmdW5jdGlvbiBmb3IgdHdvIHVzZXIgc3RydWN0dXJlcy4NCi0NCi0gIEBwYXJhbVtpbl0g VXNlclN0cnVjdDEgIFBvaW50ZXIgdG8gdGhlIGZpcnN0IHVzZXIgc3RydWN0dXJlLg0KLQ0KLSAg QHBhcmFtW2luXSBVc2VyU3RydWN0MiAgUG9pbnRlciB0byB0aGUgc2Vjb25kIHVzZXIgc3RydWN0 dXJlLg0KLQ0KLSAgQHJldHZhbCA8MCAgSWYgVXNlclN0cnVjdDEgY29tcGFyZXMgbGVzcyB0aGFu IFVzZXJTdHJ1Y3QyLg0KLQ0KLSAgQHJldHZhbCAgMCAgSWYgVXNlclN0cnVjdDEgY29tcGFyZXMg ZXF1YWwgdG8gVXNlclN0cnVjdDIuDQotDQotICBAcmV0dmFsID4wICBJZiBVc2VyU3RydWN0MSBj b21wYXJlcyBncmVhdGVyIHRoYW4gVXNlclN0cnVjdDIuDQotKiovDQotU1RBVElDDQotSU5UTg0K LUVGSUFQSQ0KLUJsb2JDb21wYXJlICgNCi0gIElOIENPTlNUIFZPSUQgKlVzZXJTdHJ1Y3QxLA0K LSAgSU4gQ09OU1QgVk9JRCAqVXNlclN0cnVjdDINCi0gICkNCi17DQotICBDT05TVCBCTE9CICpC bG9iMTsNCi0NCi0gIEJsb2IxID0gVXNlclN0cnVjdDE7DQotICByZXR1cm4gQmxvYktleUNvbXBh cmUgKEJsb2IxLT5GaWxlLCBVc2VyU3RydWN0Mik7DQotfQ0KLQ0KLQ0KLS8qKg0KLSAgQ29tcGFy YXRvciBmdW5jdGlvbiBmb3IgdHdvIG9wYXF1ZSBwb2ludGVycywgb3JkZXJpbmcgb24gKHVuc2ln bmVkKSBwb2ludGVyDQotICB2YWx1ZSBpdHNlbGYuDQotICBDYW4gYmUgdXNlZCBhcyBib3RoIEtl eSBhbmQgVXNlclN0cnVjdCBjb21wYXJhdG9yLg0KLQ0KLSAgQHBhcmFtW2luXSBQb2ludGVyMSAg Rmlyc3QgcG9pbnRlci4NCi0NCi0gIEBwYXJhbVtpbl0gUG9pbnRlcjIgIFNlY29uZCBwb2ludGVy Lg0KLQ0KLSAgQHJldHZhbCA8MCAgSWYgUG9pbnRlcjEgY29tcGFyZXMgbGVzcyB0aGFuIFBvaW50 ZXIyLg0KLQ0KLSAgQHJldHZhbCAgMCAgSWYgUG9pbnRlcjEgY29tcGFyZXMgZXF1YWwgdG8gUG9p bnRlcjIuDQotDQotICBAcmV0dmFsID4wICBJZiBQb2ludGVyMSBjb21wYXJlcyBncmVhdGVyIHRo YW4gUG9pbnRlcjIuDQotKiovDQotU1RBVElDDQotSU5UTg0KLUVGSUFQSQ0KLVBvaW50ZXJDb21w YXJlICgNCi0gIElOIENPTlNUIFZPSUQgKlBvaW50ZXIxLA0KLSAgSU4gQ09OU1QgVk9JRCAqUG9p bnRlcjINCi0gICkNCi17DQotICBpZiAoUG9pbnRlcjEgPT0gUG9pbnRlcjIpIHsNCi0gICAgcmV0 dXJuIDA7DQotICB9DQotICBpZiAoKFVJTlROKVBvaW50ZXIxIDwgKFVJTlROKVBvaW50ZXIyKSB7 DQotICAgIHJldHVybiAtMTsNCi0gIH0NCi0gIHJldHVybiAxOw0KLX0NCi0NCi0NCi0vKioNCi0g IENvbXBhcmF0b3IgZnVuY3Rpb24gZm9yIHR3byBBU0NJSSBzdHJpbmdzLiBDYW4gYmUgdXNlZCBh cyBib3RoIEtleSBhbmQNCi0gIFVzZXJTdHJ1Y3QgY29tcGFyYXRvci4NCi0NCi0gIFRoaXMgZnVu Y3Rpb24gZXhpc3RzIHNvbGVseSBzbyB3ZSBjYW4gYXZvaWQgY2FzdGluZyAmQXNjaWlTdHJDbXAg dG8NCi0gIE9SREVSRURfQ09MTEVDVElPTl9VU0VSX0NPTVBBUkUgYW5kIE9SREVSRURfQ09MTEVD VElPTl9LRVlfQ09NUEFSRS4NCi0NCi0gIEBwYXJhbVtpbl0gQXNjaWlTdHJpbmcxICBQb2ludGVy IHRvIHRoZSBmaXJzdCBBU0NJSSBzdHJpbmcuDQotDQotICBAcGFyYW1baW5dIEFzY2lpU3RyaW5n MiAgUG9pbnRlciB0byB0aGUgc2Vjb25kIEFTQ0lJIHN0cmluZy4NCi0NCi0gIEByZXR1cm4gIFRo ZSByZXR1cm4gdmFsdWUgb2YgQXNjaWlTdHJDbXAgKEFzY2lpU3RyaW5nMSwgQXNjaWlTdHJpbmcy KS4NCi0qKi8NCi1TVEFUSUMNCi1JTlRODQotRUZJQVBJDQotQXNjaWlTdHJpbmdDb21wYXJlICgN Ci0gIElOIENPTlNUIFZPSUQgKkFzY2lpU3RyaW5nMSwNCi0gIElOIENPTlNUIFZPSUQgKkFzY2lp U3RyaW5nMg0KLSAgKQ0KLXsNCi0gIHJldHVybiBBc2NpaVN0ckNtcCAoQXNjaWlTdHJpbmcxLCBB c2NpaVN0cmluZzIpOw0KLX0NCi0NCi0NCi0vKioNCi0gIFJlbGVhc2UgdGhlIE9SREVSRURfQ09M TEVDVElPTiBzdHJ1Y3R1cmUgcG9wdWxhdGVkIGJ5DQotICBDb2xsZWN0QWxsb2NhdGlvbnNSZXN0 cmljdGVkVG8zMkJpdCgpIChiZWxvdykuDQotDQotICBUaGlzIGZ1bmN0aW9uIG1heSBiZSBjYWxs ZWQgYnkgQ29sbGVjdEFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQoKSBpdHNlbGYsDQotICBv biB0aGUgZXJyb3IgcGF0aC4NCi0NCi0gIEBwYXJhbVtpbl0gQWxsb2NhdGlvbnNSZXN0cmljdGVk VG8zMkJpdCAgVGhlIE9SREVSRURfQ09MTEVDVElPTiBzdHJ1Y3R1cmUgdG8NCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZS4NCi0qKi8NCi1TVEFUSUMN Ci1WT0lEDQotUmVsZWFzZUFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQgKA0KLSAgSU4gT1JE RVJFRF9DT0xMRUNUSU9OICpBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0DQotKQ0KLXsNCi0g IE9SREVSRURfQ09MTEVDVElPTl9FTlRSWSAqRW50cnksICpFbnRyeTI7DQotDQotICBmb3IgKEVu dHJ5ID0gT3JkZXJlZENvbGxlY3Rpb25NaW4gKEFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQp Ow0KLSAgICAgICBFbnRyeSAhPSBOVUxMOw0KLSAgICAgICBFbnRyeSA9IEVudHJ5Mikgew0KLSAg ICBFbnRyeTIgPSBPcmRlcmVkQ29sbGVjdGlvbk5leHQgKEVudHJ5KTsNCi0gICAgT3JkZXJlZENv bGxlY3Rpb25EZWxldGUgKEFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQsIEVudHJ5LCBOVUxM KTsNCi0gIH0NCi0gIE9yZGVyZWRDb2xsZWN0aW9uVW5pbml0IChBbGxvY2F0aW9uc1Jlc3RyaWN0 ZWRUbzMyQml0KTsNCi19DQotDQotDQotLyoqDQotICBJdGVyYXRlIG92ZXIgdGhlIGxpbmtlci9s b2FkZXIgc2NyaXB0LCBhbmQgY29sbGVjdCB0aGUgbmFtZXMgb2YgdGhlIGZ3X2NmZw0KLSAgYmxv YnMgdGhhdCBhcmUgcmVmZXJlbmNlZCBieSBRRU1VX0xPQURFUl9BRERfUE9JTlRFUi5Qb2ludGVl RmlsZSBmaWVsZHMsIHN1Y2gNCi0gIHRoYXQgUUVNVV9MT0FERVJfQUREX1BPSU5URVIuUG9pbnRl clNpemUgaXMgbGVzcyB0aGFuIDguIFRoaXMgbWVhbnMgdGhhdCB0aGUNCi0gIHBvaW50ZWUgYmxv YidzIGFkZHJlc3Mgd2lsbCBoYXZlIHRvIGJlIHBhdGNoZWQgaW50byBhIG5hcnJvd2VyLXRoYW4t OCBieXRlDQotICBwb2ludGVyIGZpZWxkLCBoZW5jZSB0aGUgcG9pbnRlZSBibG9iIG11c3Qgbm90 IGJlIGFsbG9jYXRlZCBmcm9tIDY0LWJpdA0KLSAgYWRkcmVzcyBzcGFjZS4NCi0NCi0gIEBwYXJh bVtvdXRdIEFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQgIFRoZSBPUkRFUkVEX0NPTExFQ1RJ T04gc3RydWN0dXJlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsaW5raW5nIChub3QgY29weWluZyAvIG93bmluZykgc3VjaA0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUUVNVV9MT0FERVJfQUREX1BPSU5URVIuUG9pbnRl ZUZpbGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxk cyB0aGF0IG5hbWUgdGhlIGJsb2JzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICByZXN0cmljdGVkIGZyb20gNjQtYml0IGFsbG9jYXRpb24uDQotDQotICBAcGFy YW1baW5dIExvYWRlclN0YXJ0ICAgICAgICAgICAgICAgICAgICBQb2ludHMgdG8gdGhlIGZpcnN0 IGVudHJ5IGluIHRoZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgbGlua2VyL2xvYWRlciBzY3JpcHQuDQotDQotICBAcGFyYW1baW5dIExvYWRlckVuZCAgICAg ICAgICAgICAgICAgICAgICBQb2ludHMgb25lIHBhc3QgdGhlIGxhc3QgZW50cnkgaW4NCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBsaW5rZXIvbG9hZGVy IHNjcmlwdC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgIEFsbG9jYXRpb25z UmVzdHJpY3RlZFRvMzJCaXQgaGFzIGJlZW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBvcHVsYXRlZC4NCi0NCi0gIEByZXR2YWwgRUZJX09VVF9PRl9SRVNPVVJDRVMgIE1lbW9y eSBhbGxvY2F0aW9uIGZhaWxlZC4NCi0NCi0gIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAg IEludmFsaWQgbGlua2VyL2xvYWRlciBzY3JpcHQgY29udGVudHMuDQotKiovDQotU1RBVElDDQot RUZJX1NUQVRVUw0KLUNvbGxlY3RBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0ICgNCi0gIE9V VCBPUkRFUkVEX0NPTExFQ1RJT04gICAgICoqQWxsb2NhdGlvbnNSZXN0cmljdGVkVG8zMkJpdCwN Ci0gIElOIENPTlNUIFFFTVVfTE9BREVSX0VOVFJZICpMb2FkZXJTdGFydCwNCi0gIElOIENPTlNU IFFFTVVfTE9BREVSX0VOVFJZICpMb2FkZXJFbmQNCi0pDQotew0KLSAgT1JERVJFRF9DT0xMRUNU SU9OICAgICAgKkNvbGxlY3Rpb247DQotICBDT05TVCBRRU1VX0xPQURFUl9FTlRSWSAqTG9hZGVy RW50cnk7DQotICBFRklfU1RBVFVTICAgICAgICAgICAgICBTdGF0dXM7DQotDQotICBDb2xsZWN0 aW9uID0gT3JkZXJlZENvbGxlY3Rpb25Jbml0IChBc2NpaVN0cmluZ0NvbXBhcmUsIEFzY2lpU3Ry aW5nQ29tcGFyZSk7DQotICBpZiAoQ29sbGVjdGlvbiA9PSBOVUxMKSB7DQotICAgIHJldHVybiBF RklfT1VUX09GX1JFU09VUkNFUzsNCi0gIH0NCi0NCi0gIGZvciAoTG9hZGVyRW50cnkgPSBMb2Fk ZXJTdGFydDsgTG9hZGVyRW50cnkgPCBMb2FkZXJFbmQ7ICsrTG9hZGVyRW50cnkpIHsNCi0gICAg Q09OU1QgUUVNVV9MT0FERVJfQUREX1BPSU5URVIgKkFkZFBvaW50ZXI7DQotDQotICAgIGlmIChM b2FkZXJFbnRyeS0+VHlwZSAhPSBRZW11TG9hZGVyQ21kQWRkUG9pbnRlcikgew0KLSAgICAgIGNv bnRpbnVlOw0KLSAgICB9DQotICAgIEFkZFBvaW50ZXIgPSAmTG9hZGVyRW50cnktPkNvbW1hbmQu QWRkUG9pbnRlcjsNCi0NCi0gICAgaWYgKEFkZFBvaW50ZXItPlBvaW50ZXJTaXplID49IDgpIHsN Ci0gICAgICBjb250aW51ZTsNCi0gICAgfQ0KLQ0KLSAgICBpZiAoQWRkUG9pbnRlci0+UG9pbnRl ZUZpbGVbUUVNVV9MT0FERVJfRk5BTUVfU0laRSAtIDFdICE9ICdcMCcpIHsNCi0gICAgICBERUJV RyAoKERFQlVHX0VSUk9SLCAiJWE6IG1hbGZvcm1lZCBmaWxlIG5hbWVcbiIsIF9fRlVOQ1RJT05f XykpOw0KLSAgICAgIFN0YXR1cyA9IEVGSV9QUk9UT0NPTF9FUlJPUjsNCi0gICAgICBnb3RvIFJv bGxCYWNrOw0KLSAgICB9DQotDQotICAgIFN0YXR1cyA9IE9yZGVyZWRDb2xsZWN0aW9uSW5zZXJ0 ICgNCi0gICAgICAgICAgICAgICBDb2xsZWN0aW9uLA0KLSAgICAgICAgICAgICAgIE5VTEwsICAg ICAgICAgICAgICAgICAgICAgICAgICAgLy8gRW50cnkNCi0gICAgICAgICAgICAgICAoVk9JRCAq KUFkZFBvaW50ZXItPlBvaW50ZWVGaWxlDQotICAgICAgICAgICAgICAgKTsNCi0gICAgc3dpdGNo IChTdGF0dXMpIHsNCi0gICAgY2FzZSBFRklfU1VDQ0VTUzoNCi0gICAgICBERUJVRyAoKA0KLSAg ICAgICAgREVCVUdfVkVSQk9TRSwNCi0gICAgICAgICIlYTogcmVzdHJpY3RpbmcgYmxvYiBcIiVh XCIgZnJvbSA2NC1iaXQgYWxsb2NhdGlvblxuIiwNCi0gICAgICAgIF9fRlVOQ1RJT05fXywNCi0g ICAgICAgIEFkZFBvaW50ZXItPlBvaW50ZWVGaWxlDQotICAgICAgICApKTsNCi0gICAgICBicmVh azsNCi0gICAgY2FzZSBFRklfQUxSRUFEWV9TVEFSVEVEOg0KLSAgICAgIC8vDQotICAgICAgLy8g VGhlIHJlc3RyaWN0aW9uIGhhcyBiZWVuIHJlY29yZGVkIGFscmVhZHkuDQotICAgICAgLy8NCi0g ICAgICBicmVhazsNCi0gICAgY2FzZSBFRklfT1VUX09GX1JFU09VUkNFUzoNCi0gICAgICBnb3Rv IFJvbGxCYWNrOw0KLSAgICBkZWZhdWx0Og0KLSAgICAgIEFTU0VSVCAoRkFMU0UpOw0KLSAgICB9 DQotICB9DQotDQotICAqQWxsb2NhdGlvbnNSZXN0cmljdGVkVG8zMkJpdCA9IENvbGxlY3Rpb247 DQotICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotDQotUm9sbEJhY2s6DQotICBSZWxlYXNlQWxsb2Nh dGlvbnNSZXN0cmljdGVkVG8zMkJpdCAoQ29sbGVjdGlvbik7DQotICByZXR1cm4gU3RhdHVzOw0K LX0NCi0NCi0NCi0vKioNCi0gIFByb2Nlc3MgYSBRRU1VX0xPQURFUl9BTExPQ0FURSBjb21tYW5k Lg0KLQ0KLSAgQHBhcmFtW2luXSBBbGxvY2F0ZSAgICAgICAgICAgICAgICAgICAgICBUaGUgUUVN VV9MT0FERVJfQUxMT0NBVEUgY29tbWFuZCB0bw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcm9jZXNzLg0KLQ0KLSAgQHBhcmFtW2luLG91dF0gVHJhY2tlciAg ICAgICAgICAgICAgICAgICBUaGUgT1JERVJFRF9DT0xMRUNUSU9OIHRyYWNraW5nIHRoZQ0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCTE9CIHVzZXIgc3RydWN0 dXJlcyBjcmVhdGVkIHRodXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgZmFyLg0KLQ0KLSAgQHBhcmFtW2luXSBBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0 ICBUaGUgT1JERVJFRF9DT0xMRUNUSU9OIHBvcHVsYXRlZCBieQ0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24NCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29sbGVjdEFsbG9jYXRpb25zUmVzdHJpY3RlZFRv MzJCaXQsDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWlu ZyB0aGUgZndfY2ZnIGJsb2JzIHRoYXQgbXVzdA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBub3QgYmUgYWxsb2NhdGVkIGZyb20gNjQtYml0IGFkZHJlc3MNCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhY2UuDQotDQotICBA cmV0dmFsIEVGSV9TVUNDRVNTICAgICAgICAgICBBbiBhcmVhIG9mIHdob2xlIEFjcGlOVlMgcGFn ZXMgaGFzIGJlZW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG9jYXRlZCBm b3IgdGhlIGJsb2IgY29udGVudHMsIGFuZCB0aGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnRlbnRzIGhhdmUgYmVlbiBzYXZlZC4gQSBCTE9CIG9iamVjdCAodXNlcg0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlKSBoYXMgYmVlbiBhbGxvY2F0 ZWQgZnJvbSBwb29sIG1lbW9yeSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl ZmVyZW5jaW5nIHRoZSBibG9iIGNvbnRlbnRzLiBUaGUgQkxPQiB1c2VyDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3R1cmUgaGFzIGJlZW4gbGlua2VkIGludG8gVHJhY2tl ci4NCi0NCi0gIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICAgIE1hbGZvcm1lZCBmd19jZmcg ZmlsZSBuYW1lIGhhcyBiZWVuIGZvdW5kIGluDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBBbGxvY2F0ZSwgb3IgdGhlIEFsbG9jYXRlIGNvbW1hbmQgcmVmZXJlbmNlcyBhDQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlIHRoYXQgaXMgYWxyZWFkeSBrbm93biBi eSBUcmFja2VyLg0KLQ0KLSAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgICAgICAgVW5zdXBwb3J0 ZWQgYWxpZ25tZW50IHJlcXVlc3QgaGFzIGJlZW4gZm91bmQgaW4NCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFsbG9jYXRlLg0KLQ0KLSAgQHJldHZhbCBFRklfT1VUX09GX1JFU09V UkNFUyAgUG9vbCBhbGxvY2F0aW9uIGZhaWxlZC4NCi0NCi0gIEByZXR1cm4gICAgICAgICAgICAg ICAgICAgICAgIEVycm9yIGNvZGVzIGZyb20gUWVtdUZ3Q2ZnRmluZEZpbGUoKSBhbmQNCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdCUy0+QWxsb2NhdGVQYWdlcygpLg0KLSoqLw0K LVNUQVRJQw0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1Qcm9jZXNzQ21kQWxsb2NhdGUgKA0KLSAg SU4gQ09OU1QgUUVNVV9MT0FERVJfQUxMT0NBVEUgKkFsbG9jYXRlLA0KLSAgSU4gT1VUIE9SREVS RURfQ09MTEVDVElPTiAgICAgKlRyYWNrZXIsDQotICBJTiBPUkRFUkVEX0NPTExFQ1RJT04gICAg ICAgICAqQWxsb2NhdGlvbnNSZXN0cmljdGVkVG8zMkJpdA0KLSAgKQ0KLXsNCi0gIEZJUk1XQVJF X0NPTkZJR19JVEVNIEZ3Q2ZnSXRlbTsNCi0gIFVJTlROICAgICAgICAgICAgICAgIEZ3Q2ZnU2l6 ZTsNCi0gIEVGSV9TVEFUVVMgICAgICAgICAgIFN0YXR1czsNCi0gIFVJTlROICAgICAgICAgICAg ICAgIE51bVBhZ2VzOw0KLSAgRUZJX1BIWVNJQ0FMX0FERFJFU1MgQWRkcmVzczsNCi0gIEJMT0Ig ICAgICAgICAgICAgICAgICpCbG9iOw0KLQ0KLSAgaWYgKEFsbG9jYXRlLT5GaWxlW1FFTVVfTE9B REVSX0ZOQU1FX1NJWkUgLSAxXSAhPSAnXDAnKSB7DQotICAgIERFQlVHICgoREVCVUdfRVJST1Is ICIlYTogbWFsZm9ybWVkIGZpbGUgbmFtZVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAgIHJldHVy biBFRklfUFJPVE9DT0xfRVJST1I7DQotICB9DQotDQotICBpZiAoQWxsb2NhdGUtPkFsaWdubWVu dCA+IEVGSV9QQUdFX1NJWkUpIHsNCi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiB1bnN1 cHBvcnRlZCBhbGlnbm1lbnQgMHgleFxuIiwgX19GVU5DVElPTl9fLA0KLSAgICAgIEFsbG9jYXRl LT5BbGlnbm1lbnQpKTsNCi0gICAgcmV0dXJuIEVGSV9VTlNVUFBPUlRFRDsNCi0gIH0NCi0NCi0g IFN0YXR1cyA9IFFlbXVGd0NmZ0ZpbmRGaWxlICgoQ0hBUjggKilBbGxvY2F0ZS0+RmlsZSwgJkZ3 Q2ZnSXRlbSwgJkZ3Q2ZnU2l6ZSk7DQotICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAg IERFQlVHICgoREVCVUdfRVJST1IsICIlYTogUWVtdUZ3Q2ZnRmluZEZpbGUoXCIlYVwiKTogJXJc biIsIF9fRlVOQ1RJT05fXywNCi0gICAgICBBbGxvY2F0ZS0+RmlsZSwgU3RhdHVzKSk7DQotICAg IHJldHVybiBTdGF0dXM7DQotICB9DQotDQotICBOdW1QYWdlcyA9IEVGSV9TSVpFX1RPX1BBR0VT IChGd0NmZ1NpemUpOw0KLSAgQWRkcmVzcyA9IE1BWF9VSU5UNjQ7DQotICBpZiAoT3JkZXJlZENv bGxlY3Rpb25GaW5kICgNCi0gICAgICAgIEFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQsDQot ICAgICAgICBBbGxvY2F0ZS0+RmlsZQ0KLSAgICAgICAgKSAhPSBOVUxMKSB7DQotICAgIEFkZHJl c3MgPSBNQVhfVUlOVDMyOw0KLSAgfQ0KLSAgU3RhdHVzID0gZ0JTLT5BbGxvY2F0ZVBhZ2VzIChB bGxvY2F0ZU1heEFkZHJlc3MsIEVmaUFDUElNZW1vcnlOVlMsIE51bVBhZ2VzLA0KLSAgICAgICAg ICAgICAgICAgICZBZGRyZXNzKTsNCi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAg cmV0dXJuIFN0YXR1czsNCi0gIH0NCi0NCi0gIEJsb2IgPSBBbGxvY2F0ZVBvb2wgKHNpemVvZiAq QmxvYik7DQotICBpZiAoQmxvYiA9PSBOVUxMKSB7DQotICAgIFN0YXR1cyA9IEVGSV9PVVRfT0Zf UkVTT1VSQ0VTOw0KLSAgICBnb3RvIEZyZWVQYWdlczsNCi0gIH0NCi0gIENvcHlNZW0gKEJsb2It PkZpbGUsIEFsbG9jYXRlLT5GaWxlLCBRRU1VX0xPQURFUl9GTkFNRV9TSVpFKTsNCi0gIEJsb2It PlNpemUgPSBGd0NmZ1NpemU7DQotICBCbG9iLT5CYXNlID0gKFZPSUQgKikoVUlOVE4pQWRkcmVz czsNCi0gIEJsb2ItPkhvc3RzT25seVRhYmxlRGF0YSA9IFRSVUU7DQotDQotICBTdGF0dXMgPSBP cmRlcmVkQ29sbGVjdGlvbkluc2VydCAoVHJhY2tlciwgTlVMTCwgQmxvYik7DQotICBpZiAoU3Rh dHVzID09IFJFVFVSTl9BTFJFQURZX1NUQVJURUQpIHsNCi0gICAgREVCVUcgKChERUJVR19FUlJP UiwgIiVhOiBkdXBsaWNhdGVkIGZpbGUgXCIlYVwiXG4iLCBfX0ZVTkNUSU9OX18sDQotICAgICAg QWxsb2NhdGUtPkZpbGUpKTsNCi0gICAgU3RhdHVzID0gRUZJX1BST1RPQ09MX0VSUk9SOw0KLSAg fQ0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICBnb3RvIEZyZWVCbG9iOw0KLSAg fQ0KLQ0KLSAgUWVtdUZ3Q2ZnU2VsZWN0SXRlbSAoRndDZmdJdGVtKTsNCi0gIFFlbXVGd0NmZ1Jl YWRCeXRlcyAoRndDZmdTaXplLCBCbG9iLT5CYXNlKTsNCi0gIFplcm9NZW0gKEJsb2ItPkJhc2Ug KyBCbG9iLT5TaXplLCBFRklfUEFHRVNfVE9fU0laRSAoTnVtUGFnZXMpIC0gQmxvYi0+U2l6ZSk7 DQotDQotICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYTogRmlsZT1cIiVhXCIgQWxpZ25tZW50 PTB4JXggWm9uZT0lZCBTaXplPTB4JUx4ICINCi0gICAgIkFkZHJlc3M9MHglTHhcbiIsIF9fRlVO Q1RJT05fXywgQWxsb2NhdGUtPkZpbGUsIEFsbG9jYXRlLT5BbGlnbm1lbnQsDQotICAgIEFsbG9j YXRlLT5ab25lLCAoVUlOVDY0KUJsb2ItPlNpemUsIChVSU5UNjQpKFVJTlROKUJsb2ItPkJhc2Up KTsNCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi0NCi1GcmVlQmxvYjoNCi0gIEZyZWVQb29sIChC bG9iKTsNCi0NCi1GcmVlUGFnZXM6DQotICBnQlMtPkZyZWVQYWdlcyAoQWRkcmVzcywgTnVtUGFn ZXMpOw0KLQ0KLSAgcmV0dXJuIFN0YXR1czsNCi19DQotDQotDQotLyoqDQotICBQcm9jZXNzIGEg UUVNVV9MT0FERVJfQUREX1BPSU5URVIgY29tbWFuZC4NCi0NCi0gIEBwYXJhbVtpbl0gQWRkUG9p bnRlciAgVGhlIFFFTVVfTE9BREVSX0FERF9QT0lOVEVSIGNvbW1hbmQgdG8gcHJvY2Vzcy4NCi0N Ci0gIEBwYXJhbVtpbl0gVHJhY2tlciAgICAgVGhlIE9SREVSRURfQ09MTEVDVElPTiB0cmFja2lu ZyB0aGUgQkxPQiB1c2VyDQotICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMgY3Jl YXRlZCB0aHVzIGZhci4NCi0NCi0gIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICBNYWxmb3Jt ZWQgZndfY2ZnIGZpbGUgbmFtZShzKSBoYXZlIGJlZW4gZm91bmQgaW4NCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBBZGRQb2ludGVyLCBvciB0aGUgQWRkUG9pbnRlciBjb21tYW5kIHJl ZmVyZW5jZXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhIGZpbGUgdW5rbm93biB0 byBUcmFja2VyLCBvciB0aGUgcG9pbnRlciB0bw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlbG9jYXRlIGhhcyBpbnZhbGlkIGxvY2F0aW9uLCBzaXplLCBvciB2YWx1ZSwgb3INCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVsb2NhdGVkIHBvaW50ZXIgdmFsdWUg aXMgbm90IHJlcHJlc2VudGFibGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbiB0 aGUgZ2l2ZW4gcG9pbnRlciBzaXplLg0KLQ0KLSAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAg IFRoZSBwb2ludGVyIGZpZWxkIGluc2lkZSB0aGUgcG9pbnRlciBibG9iIGhhcw0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGJlZW4gcmVsb2NhdGVkLg0KLSoqLw0KLVNUQVRJQw0KLUVG SV9TVEFUVVMNCi1FRklBUEkNCi1Qcm9jZXNzQ21kQWRkUG9pbnRlciAoDQotICBJTiBDT05TVCBR RU1VX0xPQURFUl9BRERfUE9JTlRFUiAqQWRkUG9pbnRlciwNCi0gIElOIENPTlNUIE9SREVSRURf Q09MTEVDVElPTiAgICAgICpUcmFja2VyDQotICApDQotew0KLSAgT1JERVJFRF9DT0xMRUNUSU9O X0VOVFJZICpUcmFja2VyRW50cnksICpUcmFja2VyRW50cnkyOw0KLSAgQkxPQiAgICAgICAgICAg ICAgICAgICAgICpCbG9iLCAqQmxvYjI7DQotICBVSU5UOCAgICAgICAgICAgICAgICAgICAgKlBv aW50ZXJGaWVsZDsNCi0gIFVJTlQ2NCAgICAgICAgICAgICAgICAgICBQb2ludGVyVmFsdWU7DQot DQotICBpZiAoQWRkUG9pbnRlci0+UG9pbnRlckZpbGVbUUVNVV9MT0FERVJfRk5BTUVfU0laRSAt IDFdICE9ICdcMCcgfHwNCi0gICAgICBBZGRQb2ludGVyLT5Qb2ludGVlRmlsZVtRRU1VX0xPQURF Ul9GTkFNRV9TSVpFIC0gMV0gIT0gJ1wwJykgew0KLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6IG1hbGZvcm1lZCBmaWxlIG5hbWVcbiIsIF9fRlVOQ1RJT05fXykpOw0KLSAgICByZXR1cm4g RUZJX1BST1RPQ09MX0VSUk9SOw0KLSAgfQ0KLQ0KLSAgVHJhY2tlckVudHJ5ID0gT3JkZXJlZENv bGxlY3Rpb25GaW5kIChUcmFja2VyLCBBZGRQb2ludGVyLT5Qb2ludGVyRmlsZSk7DQotICBUcmFj a2VyRW50cnkyID0gT3JkZXJlZENvbGxlY3Rpb25GaW5kIChUcmFja2VyLCBBZGRQb2ludGVyLT5Q b2ludGVlRmlsZSk7DQotICBpZiAoVHJhY2tlckVudHJ5ID09IE5VTEwgfHwgVHJhY2tlckVudHJ5 MiA9PSBOVUxMKSB7DQotICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogaW52YWxpZCBibG9i IHJlZmVyZW5jZShzKSBcIiVhXCIgLyBcIiVhXCJcbiIsDQotICAgICAgX19GVU5DVElPTl9fLCBB ZGRQb2ludGVyLT5Qb2ludGVyRmlsZSwgQWRkUG9pbnRlci0+UG9pbnRlZUZpbGUpKTsNCi0gICAg cmV0dXJuIEVGSV9QUk9UT0NPTF9FUlJPUjsNCi0gIH0NCi0NCi0gIEJsb2IgPSBPcmRlcmVkQ29s bGVjdGlvblVzZXJTdHJ1Y3QgKFRyYWNrZXJFbnRyeSk7DQotICBCbG9iMiA9IE9yZGVyZWRDb2xs ZWN0aW9uVXNlclN0cnVjdCAoVHJhY2tlckVudHJ5Mik7DQotICBpZiAoKEFkZFBvaW50ZXItPlBv aW50ZXJTaXplICE9IDEgJiYgQWRkUG9pbnRlci0+UG9pbnRlclNpemUgIT0gMiAmJg0KLSAgICAg ICBBZGRQb2ludGVyLT5Qb2ludGVyU2l6ZSAhPSA0ICYmIEFkZFBvaW50ZXItPlBvaW50ZXJTaXpl ICE9IDgpIHx8DQotICAgICAgQmxvYi0+U2l6ZSA8IEFkZFBvaW50ZXItPlBvaW50ZXJTaXplIHx8 DQotICAgICAgQmxvYi0+U2l6ZSAtIEFkZFBvaW50ZXItPlBvaW50ZXJTaXplIDwgQWRkUG9pbnRl ci0+UG9pbnRlck9mZnNldCkgew0KLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IGludmFs aWQgcG9pbnRlciBsb2NhdGlvbiBvciBzaXplIGluIFwiJWFcIlxuIiwNCi0gICAgICBfX0ZVTkNU SU9OX18sIEFkZFBvaW50ZXItPlBvaW50ZXJGaWxlKSk7DQotICAgIHJldHVybiBFRklfUFJPVE9D T0xfRVJST1I7DQotICB9DQotDQotICBQb2ludGVyRmllbGQgPSBCbG9iLT5CYXNlICsgQWRkUG9p bnRlci0+UG9pbnRlck9mZnNldDsNCi0gIFBvaW50ZXJWYWx1ZSA9IDA7DQotICBDb3B5TWVtICgm UG9pbnRlclZhbHVlLCBQb2ludGVyRmllbGQsIEFkZFBvaW50ZXItPlBvaW50ZXJTaXplKTsNCi0g IGlmIChQb2ludGVyVmFsdWUgPj0gQmxvYjItPlNpemUpIHsNCi0gICAgREVCVUcgKChERUJVR19F UlJPUiwgIiVhOiBpbnZhbGlkIHBvaW50ZXIgdmFsdWUgaW4gXCIlYVwiXG4iLCBfX0ZVTkNUSU9O X18sDQotICAgICAgQWRkUG9pbnRlci0+UG9pbnRlckZpbGUpKTsNCi0gICAgcmV0dXJuIEVGSV9Q Uk9UT0NPTF9FUlJPUjsNCi0gIH0NCi0NCi0gIC8vDQotICAvLyBUaGUgbWVtb3J5IGFsbG9jYXRp b24gc3lzdGVtIGVuc3VyZXMgdGhhdCB0aGUgYWRkcmVzcyBvZiB0aGUgYnl0ZSBwYXN0IHRoZQ0K LSAgLy8gbGFzdCBieXRlIG9mIGFueSBhbGxvY2F0ZWQgb2JqZWN0IGlzIGV4cHJlc3NpYmxlIChu byB3cmFwYXJvdW5kKS4NCi0gIC8vDQotICBBU1NFUlQgKChVSU5UTilCbG9iMi0+QmFzZSA8PSBN QVhfQUREUkVTUyAtIEJsb2IyLT5TaXplKTsNCi0NCi0gIFBvaW50ZXJWYWx1ZSArPSAoVUlOVDY0 KShVSU5UTilCbG9iMi0+QmFzZTsNCi0gIGlmIChBZGRQb2ludGVyLT5Qb2ludGVyU2l6ZSA8IDgg JiYNCi0gICAgICBSU2hpZnRVNjQgKFBvaW50ZXJWYWx1ZSwgQWRkUG9pbnRlci0+UG9pbnRlclNp emUgKiA4KSAhPSAwKSB7DQotICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogcmVsb2NhdGVk IHBvaW50ZXIgdmFsdWUgdW5yZXByZXNlbnRhYmxlIGluICINCi0gICAgICAiXCIlYVwiXG4iLCBf X0ZVTkNUSU9OX18sIEFkZFBvaW50ZXItPlBvaW50ZXJGaWxlKSk7DQotICAgIHJldHVybiBFRklf UFJPVE9DT0xfRVJST1I7DQotICB9DQotDQotICBDb3B5TWVtIChQb2ludGVyRmllbGQsICZQb2lu dGVyVmFsdWUsIEFkZFBvaW50ZXItPlBvaW50ZXJTaXplKTsNCi0NCi0gIERFQlVHICgoREVCVUdf VkVSQk9TRSwgIiVhOiBQb2ludGVyRmlsZT1cIiVhXCIgUG9pbnRlZUZpbGU9XCIlYVwiICINCi0g ICAgIlBvaW50ZXJPZmZzZXQ9MHgleCBQb2ludGVyU2l6ZT0lZFxuIiwgX19GVU5DVElPTl9fLA0K LSAgICBBZGRQb2ludGVyLT5Qb2ludGVyRmlsZSwgQWRkUG9pbnRlci0+UG9pbnRlZUZpbGUsDQot ICAgIEFkZFBvaW50ZXItPlBvaW50ZXJPZmZzZXQsIEFkZFBvaW50ZXItPlBvaW50ZXJTaXplKSk7 DQotICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotfQ0KLQ0KLQ0KLS8qKg0KLSAgUHJvY2VzcyBhIFFF TVVfTE9BREVSX0FERF9DSEVDS1NVTSBjb21tYW5kLg0KLQ0KLSAgQHBhcmFtW2luXSBBZGRDaGVj a3N1bSAgVGhlIFFFTVVfTE9BREVSX0FERF9DSEVDS1NVTSBjb21tYW5kIHRvIHByb2Nlc3MuDQot DQotICBAcGFyYW1baW5dIFRyYWNrZXIgICAgICBUaGUgT1JERVJFRF9DT0xMRUNUSU9OIHRyYWNr aW5nIHRoZSBCTE9CIHVzZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdHVyZXMg Y3JlYXRlZCB0aHVzIGZhci4NCi0NCi0gIEByZXR2YWwgRUZJX1BST1RPQ09MX0VSUk9SICBNYWxm b3JtZWQgZndfY2ZnIGZpbGUgbmFtZSBoYXMgYmVlbiBmb3VuZCBpbg0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIEFkZENoZWNrc3VtLCBvciB0aGUgQWRkQ2hlY2tzdW0gY29tbWFuZA0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgYSBmaWxlIHVua25vd24g dG8gVHJhY2tlciwgb3IgdGhlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmFuZ2Ug dG8gY2hlY2tzdW0gaXMgaW52YWxpZC4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAg ICBUaGUgcmVxdWVzdGVkIHJhbmdlIGhhcyBiZWVuIGNoZWNrc3VtbWVkLg0KLSoqLw0KLVNUQVRJ Qw0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1Qcm9jZXNzQ21kQWRkQ2hlY2tzdW0gKA0KLSAgSU4g Q09OU1QgUUVNVV9MT0FERVJfQUREX0NIRUNLU1VNICpBZGRDaGVja3N1bSwNCi0gIElOIENPTlNU IE9SREVSRURfQ09MTEVDVElPTiAgICAgICAqVHJhY2tlcg0KLSAgKQ0KLXsNCi0gIE9SREVSRURf Q09MTEVDVElPTl9FTlRSWSAqVHJhY2tlckVudHJ5Ow0KLSAgQkxPQiAgICAgICAgICAgICAgICAg ICAgICpCbG9iOw0KLQ0KLSAgaWYgKEFkZENoZWNrc3VtLT5GaWxlW1FFTVVfTE9BREVSX0ZOQU1F X1NJWkUgLSAxXSAhPSAnXDAnKSB7DQotICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogbWFs Zm9ybWVkIGZpbGUgbmFtZVxuIiwgX19GVU5DVElPTl9fKSk7DQotICAgIHJldHVybiBFRklfUFJP VE9DT0xfRVJST1I7DQotICB9DQotDQotICBUcmFja2VyRW50cnkgPSBPcmRlcmVkQ29sbGVjdGlv bkZpbmQgKFRyYWNrZXIsIEFkZENoZWNrc3VtLT5GaWxlKTsNCi0gIGlmIChUcmFja2VyRW50cnkg PT0gTlVMTCkgew0KLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAiJWE6IGludmFsaWQgYmxvYiBy ZWZlcmVuY2UgXCIlYVwiXG4iLCBfX0ZVTkNUSU9OX18sDQotICAgICAgQWRkQ2hlY2tzdW0tPkZp bGUpKTsNCi0gICAgcmV0dXJuIEVGSV9QUk9UT0NPTF9FUlJPUjsNCi0gIH0NCi0NCi0gIEJsb2Ig PSBPcmRlcmVkQ29sbGVjdGlvblVzZXJTdHJ1Y3QgKFRyYWNrZXJFbnRyeSk7DQotICBpZiAoQmxv Yi0+U2l6ZSA8PSBBZGRDaGVja3N1bS0+UmVzdWx0T2Zmc2V0IHx8DQotICAgICAgQmxvYi0+U2l6 ZSA8IEFkZENoZWNrc3VtLT5MZW5ndGggfHwNCi0gICAgICBCbG9iLT5TaXplIC0gQWRkQ2hlY2tz dW0tPkxlbmd0aCA8IEFkZENoZWNrc3VtLT5TdGFydCkgew0KLSAgICBERUJVRyAoKERFQlVHX0VS Uk9SLCAiJWE6IGludmFsaWQgY2hlY2tzdW0gcmFuZ2UgaW4gXCIlYVwiXG4iLA0KLSAgICAgIF9f RlVOQ1RJT05fXywgQWRkQ2hlY2tzdW0tPkZpbGUpKTsNCi0gICAgcmV0dXJuIEVGSV9QUk9UT0NP TF9FUlJPUjsNCi0gIH0NCi0NCi0gIEJsb2ItPkJhc2VbQWRkQ2hlY2tzdW0tPlJlc3VsdE9mZnNl dF0gPSBDYWxjdWxhdGVDaGVja1N1bTggKA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBCbG9iLT5CYXNlICsgQWRkQ2hlY2tzdW0tPlN0YXJ0LA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBZGRDaGVja3N1bS0+TGVuZ3RoDQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7DQotICBERUJVRyAo KERFQlVHX1ZFUkJPU0UsICIlYTogRmlsZT1cIiVhXCIgUmVzdWx0T2Zmc2V0PTB4JXggU3RhcnQ9 MHgleCAiDQotICAgICJMZW5ndGg9MHgleFxuIiwgX19GVU5DVElPTl9fLCBBZGRDaGVja3N1bS0+ RmlsZSwNCi0gICAgQWRkQ2hlY2tzdW0tPlJlc3VsdE9mZnNldCwgQWRkQ2hlY2tzdW0tPlN0YXJ0 LCBBZGRDaGVja3N1bS0+TGVuZ3RoKSk7DQotICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotfQ0KLQ0K LQ0KLS8qKg0KLSAgUHJvY2VzcyBhIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVIgY29tbWFuZC4N Ci0NCi0gIEBwYXJhbVtpbl0gV3JpdGVQb2ludGVyICAgVGhlIFFFTVVfTE9BREVSX1dSSVRFX1BP SU5URVIgY29tbWFuZCB0byBwcm9jZXNzLg0KLQ0KLSAgQHBhcmFtW2luXSBUcmFja2VyICAgICAg ICBUaGUgT1JERVJFRF9DT0xMRUNUSU9OIHRyYWNraW5nIHRoZSBCTE9CIHVzZXINCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0dXJlcyBjcmVhdGVkIHRodXMgZmFyLg0KLQ0KLSAg QHBhcmFtW2luLG91dF0gUzNDb250ZXh0ICBUaGUgUzNfQ09OVEVYVCBvYmplY3QgY2FwdHVyaW5n IHRoZSBmd19jZmcgYWN0aW9ucw0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBzdWNj ZXNzZnVsbHkgcHJvY2Vzc2VkIFFFTVVfTE9BREVSX1dSSVRFX1BPSU5URVINCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29tbWFuZHMsIHRvIGJlIHJlcGxheWVkIGF0IFMzIHJlc3VtZS4g UzNDb250ZXh0DQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heSBiZSBOVUxMIGlmIFMz IGlzIGRpc2FibGVkLg0KLQ0KLSAgQHJldHZhbCBFRklfUFJPVE9DT0xfRVJST1IgIE1hbGZvcm1l ZCBmd19jZmcgZmlsZSBuYW1lKHMpIGhhdmUgYmVlbiBmb3VuZCBpbg0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFdyaXRlUG9pbnRlci4gT3IsIHRoZSBXcml0ZVBvaW50ZXIgY29tbWFu ZA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXMgYSBmaWxlIHVua25v d24gdG8gVHJhY2tlciBvciB0aGUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd19j ZmcgZGlyZWN0b3J5LiBPciwgdGhlIHBvaW50ZXIgb2JqZWN0IHRvDQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcmV3cml0ZSBoYXMgaW52YWxpZCBsb2NhdGlvbiwgc2l6ZSwgb3IgaW5p dGlhbA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlIHZhbHVlLiBPciwg dGhlIHBvaW50ZXIgdmFsdWUgdG8gc3RvcmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkb2VzIG5vdCBmaXQgaW4gdGhlIGdpdmVuIHBvaW50ZXIgc2l6ZS4NCi0NCi0gIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICBUaGUgcG9pbnRlciBvYmplY3QgaW5zaWRlIHRoZSB3cml0ZWFi bGUgZndfY2ZnDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZSBoYXMgYmVlbiB3 cml0dGVuLiBJZiBTM0NvbnRleHQgaXMgbm90IE5VTEwsDQotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdGhlbiBXcml0ZVBvaW50ZXIgaGFzIGJlZW4gY29uZGVuc2VkIGludG8NCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBTM0NvbnRleHQuDQotDQotICBAcmV0dXJuICAgICAg ICAgICAgICAgICAgICAgRXJyb3IgY29kZXMgcHJvcGFnYXRlZCBmcm9tDQotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgU2F2ZUNvbmRlbnNlZFdyaXRlUG9pbnRlclRvUzNDb250ZXh0KCku IFRoZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvaW50ZXIgb2JqZWN0IGluc2lk ZSB0aGUgd3JpdGVhYmxlIGZ3X2NmZyBmaWxlDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaGFzIG5vdCBiZWVuIHdyaXR0ZW4uDQotKiovDQotU1RBVElDDQotRUZJX1NUQVRVUw0KLVBy b2Nlc3NDbWRXcml0ZVBvaW50ZXIgKA0KLSAgSU4gICAgIENPTlNUIFFFTVVfTE9BREVSX1dSSVRF X1BPSU5URVIgKldyaXRlUG9pbnRlciwNCi0gIElOICAgICBDT05TVCBPUkRFUkVEX0NPTExFQ1RJ T04gICAgICAgICpUcmFja2VyLA0KLSAgSU4gT1VUICAgICAgIFMzX0NPTlRFWFQgICAgICAgICAg ICAgICAgKlMzQ29udGV4dCBPUFRJT05BTA0KLSAgKQ0KLXsNCi0gIFJFVFVSTl9TVEFUVVMgICAg ICAgICAgICBTdGF0dXM7DQotICBGSVJNV0FSRV9DT05GSUdfSVRFTSAgICAgUG9pbnRlckl0ZW07 DQotICBVSU5UTiAgICAgICAgICAgICAgICAgICAgUG9pbnRlckl0ZW1TaXplOw0KLSAgT1JERVJF RF9DT0xMRUNUSU9OX0VOVFJZICpQb2ludGVlRW50cnk7DQotICBCTE9CICAgICAgICAgICAgICAg ICAgICAgKlBvaW50ZWVCbG9iOw0KLSAgVUlOVDY0ICAgICAgICAgICAgICAgICAgIFBvaW50ZXJW YWx1ZTsNCi0NCi0gIGlmIChXcml0ZVBvaW50ZXItPlBvaW50ZXJGaWxlW1FFTVVfTE9BREVSX0ZO QU1FX1NJWkUgLSAxXSAhPSAnXDAnIHx8DQotICAgICAgV3JpdGVQb2ludGVyLT5Qb2ludGVlRmls ZVtRRU1VX0xPQURFUl9GTkFNRV9TSVpFIC0gMV0gIT0gJ1wwJykgew0KLSAgICBERUJVRyAoKERF QlVHX0VSUk9SLCAiJWE6IG1hbGZvcm1lZCBmaWxlIG5hbWVcbiIsIF9fRlVOQ1RJT05fXykpOw0K LSAgICByZXR1cm4gRUZJX1BST1RPQ09MX0VSUk9SOw0KLSAgfQ0KLQ0KLSAgU3RhdHVzID0gUWVt dUZ3Q2ZnRmluZEZpbGUgKChDT05TVCBDSEFSOCAqKVdyaXRlUG9pbnRlci0+UG9pbnRlckZpbGUs DQotICAgICAgICAgICAgICZQb2ludGVySXRlbSwgJlBvaW50ZXJJdGVtU2l6ZSk7DQotICBQb2lu dGVlRW50cnkgPSBPcmRlcmVkQ29sbGVjdGlvbkZpbmQgKFRyYWNrZXIsIFdyaXRlUG9pbnRlci0+ UG9pbnRlZUZpbGUpOw0KLSAgaWYgKFJFVFVSTl9FUlJPUiAoU3RhdHVzKSB8fCBQb2ludGVlRW50 cnkgPT0gTlVMTCkgew0KLSAgICBERUJVRyAoKERFQlVHX0VSUk9SLA0KLSAgICAgICIlYTogaW52 YWxpZCBmd19jZmcgZmlsZSBvciBibG9iIHJlZmVyZW5jZSBcIiVhXCIgLyBcIiVhXCJcbiIsDQot ICAgICAgX19GVU5DVElPTl9fLCBXcml0ZVBvaW50ZXItPlBvaW50ZXJGaWxlLCBXcml0ZVBvaW50 ZXItPlBvaW50ZWVGaWxlKSk7DQotICAgIHJldHVybiBFRklfUFJPVE9DT0xfRVJST1I7DQotICB9 DQotDQotICBpZiAoKFdyaXRlUG9pbnRlci0+UG9pbnRlclNpemUgIT0gMSAmJiBXcml0ZVBvaW50 ZXItPlBvaW50ZXJTaXplICE9IDIgJiYNCi0gICAgICAgV3JpdGVQb2ludGVyLT5Qb2ludGVyU2l6 ZSAhPSA0ICYmIFdyaXRlUG9pbnRlci0+UG9pbnRlclNpemUgIT0gOCkgfHwNCi0gICAgICAoUG9p bnRlckl0ZW1TaXplIDwgV3JpdGVQb2ludGVyLT5Qb2ludGVyU2l6ZSkgfHwNCi0gICAgICAoUG9p bnRlckl0ZW1TaXplIC0gV3JpdGVQb2ludGVyLT5Qb2ludGVyU2l6ZSA8DQotICAgICAgIFdyaXRl UG9pbnRlci0+UG9pbnRlck9mZnNldCkpIHsNCi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVh OiBpbnZhbGlkIHBvaW50ZXIgbG9jYXRpb24gb3Igc2l6ZSBpbiBcIiVhXCJcbiIsDQotICAgICAg X19GVU5DVElPTl9fLCBXcml0ZVBvaW50ZXItPlBvaW50ZXJGaWxlKSk7DQotICAgIHJldHVybiBF RklfUFJPVE9DT0xfRVJST1I7DQotICB9DQotDQotICBQb2ludGVlQmxvYiA9IE9yZGVyZWRDb2xs ZWN0aW9uVXNlclN0cnVjdCAoUG9pbnRlZUVudHJ5KTsNCi0gIFBvaW50ZXJWYWx1ZSA9IFdyaXRl UG9pbnRlci0+UG9pbnRlZU9mZnNldDsNCi0gIGlmIChQb2ludGVyVmFsdWUgPj0gUG9pbnRlZUJs b2ItPlNpemUpIHsNCi0gICAgREVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBpbnZhbGlkIFBvaW50 ZWVPZmZzZXRcbiIsIF9fRlVOQ1RJT05fXykpOw0KLSAgICByZXR1cm4gRUZJX1BST1RPQ09MX0VS Uk9SOw0KLSAgfQ0KLQ0KLSAgLy8NCi0gIC8vIFRoZSBtZW1vcnkgYWxsb2NhdGlvbiBzeXN0ZW0g ZW5zdXJlcyB0aGF0IHRoZSBhZGRyZXNzIG9mIHRoZSBieXRlIHBhc3QgdGhlDQotICAvLyBsYXN0 IGJ5dGUgb2YgYW55IGFsbG9jYXRlZCBvYmplY3QgaXMgZXhwcmVzc2libGUgKG5vIHdyYXBhcm91 bmQpLg0KLSAgLy8NCi0gIEFTU0VSVCAoKFVJTlROKVBvaW50ZWVCbG9iLT5CYXNlIDw9IE1BWF9B RERSRVNTIC0gUG9pbnRlZUJsb2ItPlNpemUpOw0KLQ0KLSAgUG9pbnRlclZhbHVlICs9IChVSU5U NjQpKFVJTlROKVBvaW50ZWVCbG9iLT5CYXNlOw0KLSAgaWYgKFdyaXRlUG9pbnRlci0+UG9pbnRl clNpemUgPCA4ICYmDQotICAgICAgUlNoaWZ0VTY0IChQb2ludGVyVmFsdWUsIFdyaXRlUG9pbnRl ci0+UG9pbnRlclNpemUgKiA4KSAhPSAwKSB7DQotICAgIERFQlVHICgoREVCVUdfRVJST1IsICIl YTogcG9pbnRlciB2YWx1ZSB1bnJlcHJlc2VudGFibGUgaW4gXCIlYVwiXG4iLA0KLSAgICAgIF9f RlVOQ1RJT05fXywgV3JpdGVQb2ludGVyLT5Qb2ludGVyRmlsZSkpOw0KLSAgICByZXR1cm4gRUZJ X1BST1RPQ09MX0VSUk9SOw0KLSAgfQ0KLQ0KLSAgLy8NCi0gIC8vIElmIFMzIGlzIGVuYWJsZWQs IHdlIGhhdmUgdG8gY2FwdHVyZSB0aGUgYmVsb3cgZndfY2ZnIGFjdGlvbnMgaW4gY29uZGVuc2Vk DQotICAvLyBmb3JtLCB0byBiZSByZXBsYXllZCBkdXJpbmcgUzMgcmVzdW1lLg0KLSAgLy8NCi0g IGlmIChTM0NvbnRleHQgIT0gTlVMTCkgew0KLSAgICBFRklfU1RBVFVTIFNhdmVTdGF0dXM7DQot DQotICAgIFNhdmVTdGF0dXMgPSBTYXZlQ29uZGVuc2VkV3JpdGVQb2ludGVyVG9TM0NvbnRleHQg KA0KLSAgICAgICAgICAgICAgICAgICBTM0NvbnRleHQsDQotICAgICAgICAgICAgICAgICAgIChV SU5UMTYpUG9pbnRlckl0ZW0sDQotICAgICAgICAgICAgICAgICAgIFdyaXRlUG9pbnRlci0+UG9p bnRlclNpemUsDQotICAgICAgICAgICAgICAgICAgIFdyaXRlUG9pbnRlci0+UG9pbnRlck9mZnNl dCwNCi0gICAgICAgICAgICAgICAgICAgUG9pbnRlclZhbHVlDQotICAgICAgICAgICAgICAgICAg ICk7DQotICAgIGlmIChFRklfRVJST1IgKFNhdmVTdGF0dXMpKSB7DQotICAgICAgcmV0dXJuIFNh dmVTdGF0dXM7DQotICAgIH0NCi0gIH0NCi0NCi0gIFFlbXVGd0NmZ1NlbGVjdEl0ZW0gKFBvaW50 ZXJJdGVtKTsNCi0gIFFlbXVGd0NmZ1NraXBCeXRlcyAoV3JpdGVQb2ludGVyLT5Qb2ludGVyT2Zm c2V0KTsNCi0gIFFlbXVGd0NmZ1dyaXRlQnl0ZXMgKFdyaXRlUG9pbnRlci0+UG9pbnRlclNpemUs ICZQb2ludGVyVmFsdWUpOw0KLQ0KLSAgLy8NCi0gIC8vIEJlY2F1c2UgUUVNVSBoYXMgbm93IGxl YXJuZWQgUG9pbnRlZUJsb2ItPkJhc2UsIHdlIG11c3QgbWFyayBQb2ludGVlQmxvYg0KLSAgLy8g YXMgdW5yZWxlYXNhYmxlLCBmb3IgdGhlIGNhc2Ugd2hlbiB0aGUgd2hvbGUgbGlua2VyL2xvYWRl ciBzY3JpcHQgaXMNCi0gIC8vIGhhbmRsZWQgc3VjY2Vzc2Z1bGx5Lg0KLSAgLy8NCi0gIFBvaW50 ZWVCbG9iLT5Ib3N0c09ubHlUYWJsZURhdGEgPSBGQUxTRTsNCi0NCi0gIERFQlVHICgoREVCVUdf VkVSQk9TRSwgIiVhOiBQb2ludGVyRmlsZT1cIiVhXCIgUG9pbnRlZUZpbGU9XCIlYVwiICINCi0g ICAgIlBvaW50ZXJPZmZzZXQ9MHgleCBQb2ludGVlT2Zmc2V0PTB4JXggUG9pbnRlclNpemU9JWRc biIsIF9fRlVOQ1RJT05fXywNCi0gICAgV3JpdGVQb2ludGVyLT5Qb2ludGVyRmlsZSwgV3JpdGVQ b2ludGVyLT5Qb2ludGVlRmlsZSwNCi0gICAgV3JpdGVQb2ludGVyLT5Qb2ludGVyT2Zmc2V0LCBX cml0ZVBvaW50ZXItPlBvaW50ZWVPZmZzZXQsDQotICAgIFdyaXRlUG9pbnRlci0+UG9pbnRlclNp emUpKTsNCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi19DQotDQotDQotLyoqDQotICBVbmRvIGEg UUVNVV9MT0FERVJfV1JJVEVfUE9JTlRFUiBjb21tYW5kLg0KLQ0KLSAgVGhpcyBmdW5jdGlvbiBy ZXZva2VzICh6ZXJvZXMgb3V0KSBhIGd1ZXN0IG1lbW9yeSByZWZlcmVuY2UgY29tbXVuaWNhdGVk IHRvDQotICBRRU1VIGVhcmxpZXIuIFRoZSBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGludm9r aW5nIHRoaXMgZnVuY3Rpb24gb25seSBvbg0KLSAgc3VjaCBRRU1VX0xPQURFUl9XUklURV9QT0lO VEVSIGNvbW1hbmRzIHRoYXQgaGF2ZSBiZWVuIHN1Y2Nlc3NmdWxseSBwcm9jZXNzZWQNCi0gIGJ5 IFByb2Nlc3NDbWRXcml0ZVBvaW50ZXIoKS4NCi0NCi0gIEBwYXJhbVtpbl0gV3JpdGVQb2ludGVy ICBUaGUgUUVNVV9MT0FERVJfV1JJVEVfUE9JTlRFUiBjb21tYW5kIHRvIHVuZG8uDQotKiovDQot U1RBVElDDQotVk9JRA0KLVVuZG9DbWRXcml0ZVBvaW50ZXIgKA0KLSAgSU4gQ09OU1QgUUVNVV9M T0FERVJfV1JJVEVfUE9JTlRFUiAqV3JpdGVQb2ludGVyDQotICApDQotew0KLSAgUkVUVVJOX1NU QVRVUyAgICAgICAgU3RhdHVzOw0KLSAgRklSTVdBUkVfQ09ORklHX0lURU0gUG9pbnRlckl0ZW07 DQotICBVSU5UTiAgICAgICAgICAgICAgICBQb2ludGVySXRlbVNpemU7DQotICBVSU5UNjQgICAg ICAgICAgICAgICBQb2ludGVyVmFsdWU7DQotDQotICBTdGF0dXMgPSBRZW11RndDZmdGaW5kRmls ZSAoKENPTlNUIENIQVI4ICopV3JpdGVQb2ludGVyLT5Qb2ludGVyRmlsZSwNCi0gICAgICAgICAg ICAgJlBvaW50ZXJJdGVtLCAmUG9pbnRlckl0ZW1TaXplKTsNCi0gIEFTU0VSVF9SRVRVUk5fRVJS T1IgKFN0YXR1cyk7DQotDQotICBQb2ludGVyVmFsdWUgPSAwOw0KLSAgUWVtdUZ3Q2ZnU2VsZWN0 SXRlbSAoUG9pbnRlckl0ZW0pOw0KLSAgUWVtdUZ3Q2ZnU2tpcEJ5dGVzIChXcml0ZVBvaW50ZXIt PlBvaW50ZXJPZmZzZXQpOw0KLSAgUWVtdUZ3Q2ZnV3JpdGVCeXRlcyAoV3JpdGVQb2ludGVyLT5Q b2ludGVyU2l6ZSwgJlBvaW50ZXJWYWx1ZSk7DQotDQotICBERUJVRyAoKERFQlVHX1ZFUkJPU0Us DQotICAgICIlYTogUG9pbnRlckZpbGU9XCIlYVwiIFBvaW50ZXJPZmZzZXQ9MHgleCBQb2ludGVy U2l6ZT0lZFxuIiwgX19GVU5DVElPTl9fLA0KLSAgICBXcml0ZVBvaW50ZXItPlBvaW50ZXJGaWxl LCBXcml0ZVBvaW50ZXItPlBvaW50ZXJPZmZzZXQsDQotICAgIFdyaXRlUG9pbnRlci0+UG9pbnRl clNpemUpKTsNCi19DQotDQotDQotLy8NCi0vLyBXZSdsbCBiZSBzYXZpbmcgdGhlIGtleXMgb2Yg aW5zdGFsbGVkIHRhYmxlcyBzbyB0aGF0IHdlIGNhbiByb2xsIHRoZW0gYmFjaw0KLS8vIGluIGNh c2Ugb2YgZmFpbHVyZS4gMTI4IHRhYmxlcyBzaG91bGQgYmUgZW5vdWdoIGZvciBhbnlvbmUgKFRN KS4NCi0vLw0KLSNkZWZpbmUgSU5TVEFMTEVEX1RBQkxFU19NQVggMTI4DQotDQotLyoqDQotICBQ cm9jZXNzIGEgUUVNVV9MT0FERVJfQUREX1BPSU5URVIgY29tbWFuZCBpbiBvcmRlciB0byBzZWUg aWYgaXRzIHRhcmdldCBieXRlDQotICBhcnJheSBpcyBhbiBBQ1BJIHRhYmxlLCBhbmQgaWYgc28s IGluc3RhbGwgaXQuDQotDQotICBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZW50aXJl IFFFTVUgbGlua2VyL2xvYWRlciBjb21tYW5kIGZpbGUgaGFzDQotICBiZWVuIHByb2Nlc3NlZCBz dWNjZXNzZnVsbHkgaW4gYSBwcmlvciBmaXJzdCBwYXNzLg0KLQ0KLSAgQHBhcmFtW2luXSBBZGRQ b2ludGVyICAgICAgICBUaGUgUUVNVV9MT0FERVJfQUREX1BPSU5URVIgY29tbWFuZCB0byBwcm9j ZXNzLg0KLQ0KLSAgQHBhcmFtW2luXSBUcmFja2VyICAgICAgICAgICBUaGUgT1JERVJFRF9DT0xM RUNUSU9OIHRyYWNraW5nIHRoZSBCTE9CIHVzZXINCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0dXJlcy4NCi0NCi0gIEBwYXJhbVtpbl0gQWNwaVByb3RvY29sICAgICAgVGhl IEFDUEkgdGFibGUgcHJvdG9jb2wgdXNlZCB0byBpbnN0YWxsIHRhYmxlcy4NCi0NCi0gIEBwYXJh bVtpbixvdXRdIEluc3RhbGxlZEtleSAgT24gaW5wdXQsIGFuIGFycmF5IG9mIElOU1RBTExFRF9U QUJMRVNfTUFYIFVJTlRODQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnRz LCBhbGxvY2F0ZWQgYnkgdGhlIGNhbGxlci4gT24gb3V0cHV0LA0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGUgZnVuY3Rpb24gd2lsbCBoYXZlIHN0b3JlZCAoYXBwZW5kZWQpIHRo ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBY3BpUHJvdG9jb2wtaW50ZXJuYWwg a2V5IG9mIHRoZSBBQ1BJIHRhYmxlIHRoYXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdGhlIGZ1bmN0aW9uIGhhcyBpbnN0YWxsZWQsIGlmIHRoZSBBZGRQb2ludGVyDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgaWRlbnRpZmllZCBhbiBBQ1BJIHRhYmxl IHRoYXQgaXMNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGZyb20g UlNEVCBhbmQgWFNEVC4NCi0NCi0gIEBwYXJhbVtpbixvdXRdIE51bUluc3RhbGxlZCAgT24gaW5w dXQsIHRoZSBudW1iZXIgb2YgZW50cmllcyBhbHJlYWR5IHVzZWQgaW4NCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgSW5zdGFsbGVkS2V5OyBpdCBtdXN0IGJlIGluIFswLA0KLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQUxMRURfVEFCTEVTX01BWF0gaW5jbHVzaXZl LiBPbiBvdXRwdXQsIHRoZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbWV0 ZXIgaXMgaW5jcmVtZW50ZWQgaWYgdGhlIEFkZFBvaW50ZXINCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29tbWFuZCBpZGVudGlmaWVkIGFuIEFDUEkgdGFibGUgdGhhdCBpcw0KLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbnQgZnJvbSBSU0RUIGFuZCBYU0RU Lg0KLQ0KLSAgQHBhcmFtW2luLG91dF0gU2VlblBvaW50ZXJzICBUaGUgT1JERVJFRF9DT0xMRUNU SU9OIHRyYWNraW5nIHRoZSBhYnNvbHV0ZQ0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0YXJnZXQgYWRkcmVzc2VzIHRoYXQgaGF2ZSBiZWVuIHBvaW50ZWQtdG8gYnkNCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUUVNVV9MT0FERVJfQUREX1BPSU5URVIgY29tbWFuZHMg dGh1cyBmYXIuIElmIGENCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0IGFk ZHJlc3MgaXMgZW5jb3VudGVyZWQgZm9yIHRoZSBmaXJzdA0KLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB0aW1lLCBhbmQgaXQgaWRlbnRpZmllcyBhbiBBQ1BJIHRhYmxlIHRoYXQgaXMN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlmZmVyZW50IGZyb20gUkRTVCBhbmQg WFNEVCwgdGhlIHRhYmxlIGlzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3Rh bGxlZC4gSWYgYSB0YXJnZXQgYWRkcmVzcyBpcyBzZWVuIGZvciB0aGUNCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2Vjb25kIG9yIGxhdGVyIHRpbWVzLCBpdCBpcyBza2lwcGVkIHdp dGhvdXQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFraW5nIGFueSBhY3Rpb24u DQotDQotICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgTnVtSW5zdGFsbGVkIHdhcyBv dXRzaWRlIHRoZSBhbGxvd2VkIHJhbmdlIG9uDQotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW5wdXQuDQotDQotICBAcmV0dmFsIEVGSV9PVVRfT0ZfUkVTT1VSQ0VTICAgVGhlIEFk ZFBvaW50ZXIgY29tbWFuZCBpZGVudGlmaWVkIGFuIEFDUEkNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0YWJsZSBkaWZmZXJlbnQgZnJvbSBSU0RUIGFuZCBYU0RULCBidXQgdGhl cmUNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXMgbm8gbW9yZSByb29tIGlu IEluc3RhbGxlZEtleS4NCi0NCi0gIEByZXR2YWwgRUZJX1NVQ0NFU1MgICAgICAgICAgICBBZGRQ b2ludGVyIGhhcyBiZWVuIHByb2Nlc3NlZC4gRWl0aGVyIGl0cw0KLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGFic29sdXRlIHRhcmdldCBhZGRyZXNzIGhhcyBiZWVuIGVuY291bnRl cmVkDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlLCBvciBhbiBBQ1BJ IHRhYmxlIGRpZmZlcmVudCBmcm9tIFJTRFQNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBhbmQgWFNEVCBoYXMgYmVlbiBpbnN0YWxsZWQgKHJlZmxlY3RlZCBieQ0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEluc3RhbGxlZEtleSBhbmQgTnVtSW5zdGFsbGVkKSwg b3IgUlNEVCBvcg0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhTRFQgaGFzIGJl ZW4gaWRlbnRpZmllZCBidXQgbm90IGluc3RhbGxlZCwgb3INCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB0aGUgZndfY2ZnIGJsb2IgcG9pbnRlZC1pbnRvIGJ5IEFkZFBvaW50ZXIg aGFzDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmVlbiBtYXJrZWQgYXMgaG9z dGluZyBzb21ldGhpbmcgZWxzZSB0aGFuDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAganVzdCBkaXJlY3QgQUNQSSB0YWJsZSBjb250ZW50cy4NCi0NCi0gIEByZXR1cm4gICAgICAg ICAgICAgICAgICAgICAgICBFcnJvciBjb2RlcyByZXR1cm5lZCBieQ0KLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIEFjcGlQcm90b2NvbC0+SW5zdGFsbEFjcGlUYWJsZSgpLg0KLSoq Lw0KLVNUQVRJQw0KLUVGSV9TVEFUVVMNCi1FRklBUEkNCi1Qcm9jZXNzMm5kUGFzc0NtZEFkZFBv aW50ZXIgKA0KLSAgSU4gICAgIENPTlNUIFFFTVVfTE9BREVSX0FERF9QT0lOVEVSICpBZGRQb2lu dGVyLA0KLSAgSU4gICAgIENPTlNUIE9SREVSRURfQ09MTEVDVElPTiAgICAgICpUcmFja2VyLA0K LSAgSU4gICAgIEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MICAgICAgICpBY3BpUHJvdG9jb2wsDQot ICBJTiBPVVQgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgSW5zdGFsbGVkS2V5W0lOU1RB TExFRF9UQUJMRVNfTUFYXSwNCi0gIElOIE9VVCBJTlQzMiAgICAgICAgICAgICAgICAgICAgICAg ICAqTnVtSW5zdGFsbGVkLA0KLSAgSU4gT1VUIE9SREVSRURfQ09MTEVDVElPTiAgICAgICAgICAg ICpTZWVuUG9pbnRlcnMNCi0gICkNCi17DQotICBDT05TVCBPUkRFUkVEX0NPTExFQ1RJT05fRU5U UlkgICAgICAgICAgICAgICAgICAgICAqVHJhY2tlckVudHJ5Ow0KLSAgQ09OU1QgT1JERVJFRF9D T0xMRUNUSU9OX0VOVFJZICAgICAgICAgICAgICAgICAgICAgKlRyYWNrZXJFbnRyeTI7DQotICBP UkRFUkVEX0NPTExFQ1RJT05fRU5UUlkgICAgICAgICAgICAgICAgICAgICAgICAgICAqU2VlblBv aW50ZXJFbnRyeTsNCi0gIENPTlNUIEJMT0IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICpCbG9iOw0KLSAgQkxPQiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKkJsb2IyOw0KLSAgQ09OU1QgVUlOVDggICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKlBvaW50ZXJGaWVsZDsNCi0gIFVJTlQ2NCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBvaW50ZXJWYWx1ZTsNCi0gIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJsb2IyUmVtYWlu aW5nOw0KLSAgVUlOVE4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgVGFibGVTaXplOw0KLSAgQ09OU1QgRUZJX0FDUElfMV8wX0ZJUk1XQVJFX0FDUElfQ09OVFJP TF9TVFJVQ1RVUkUgKkZhY3M7DQotICBDT05TVCBFRklfQUNQSV9ERVNDUklQVElPTl9IRUFERVIg ICAgICAgICAgICAgICAgICAqSGVhZGVyOw0KLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzOw0KLQ0KLSAgaWYgKCpOdW1JbnN0YWxsZWQg PCAwIHx8ICpOdW1JbnN0YWxsZWQgPiBJTlNUQUxMRURfVEFCTEVTX01BWCkgew0KLSAgICByZXR1 cm4gRUZJX0lOVkFMSURfUEFSQU1FVEVSOw0KLSAgfQ0KLQ0KLSAgVHJhY2tlckVudHJ5ID0gT3Jk ZXJlZENvbGxlY3Rpb25GaW5kIChUcmFja2VyLCBBZGRQb2ludGVyLT5Qb2ludGVyRmlsZSk7DQot ICBUcmFja2VyRW50cnkyID0gT3JkZXJlZENvbGxlY3Rpb25GaW5kIChUcmFja2VyLCBBZGRQb2lu dGVyLT5Qb2ludGVlRmlsZSk7DQotICBCbG9iID0gT3JkZXJlZENvbGxlY3Rpb25Vc2VyU3RydWN0 IChUcmFja2VyRW50cnkpOw0KLSAgQmxvYjIgPSBPcmRlcmVkQ29sbGVjdGlvblVzZXJTdHJ1Y3Qg KFRyYWNrZXJFbnRyeTIpOw0KLSAgUG9pbnRlckZpZWxkID0gQmxvYi0+QmFzZSArIEFkZFBvaW50 ZXItPlBvaW50ZXJPZmZzZXQ7DQotICBQb2ludGVyVmFsdWUgPSAwOw0KLSAgQ29weU1lbSAoJlBv aW50ZXJWYWx1ZSwgUG9pbnRlckZpZWxkLCBBZGRQb2ludGVyLT5Qb2ludGVyU2l6ZSk7DQotDQot ICAvLw0KLSAgLy8gV2UgYXNzZXJ0IHRoYXQgUG9pbnRlclZhbHVlIGZhbGxzIGluc2lkZSBCbG9i MidzIGNvbnRlbnRzLiBUaGlzIGlzIGVuc3VyZWQNCi0gIC8vIGJ5IHRoZSBCbG9iMi0+U2l6ZSBj aGVjayBhbmQgbGF0ZXIgY2hlY2tzIGluIFByb2Nlc3NDbWRBZGRQb2ludGVyKCkuDQotICAvLw0K LSAgQmxvYjJSZW1haW5pbmcgPSAoVUlOVE4pQmxvYjItPkJhc2U7DQotICBBU1NFUlQoUG9pbnRl clZhbHVlID49IEJsb2IyUmVtYWluaW5nKTsNCi0gIEJsb2IyUmVtYWluaW5nICs9IEJsb2IyLT5T aXplOw0KLSAgQVNTRVJUIChQb2ludGVyVmFsdWUgPCBCbG9iMlJlbWFpbmluZyk7DQotDQotICBT dGF0dXMgPSBPcmRlcmVkQ29sbGVjdGlvbkluc2VydCAoDQotICAgICAgICAgICAgIFNlZW5Qb2lu dGVycywNCi0gICAgICAgICAgICAgJlNlZW5Qb2ludGVyRW50cnksIC8vIGZvciByZXZlcnRpbmcg aW5zZXJ0aW9uIGluIGVycm9yIGNhc2UNCi0gICAgICAgICAgICAgKFZPSUQgKikoVUlOVE4pUG9p bnRlclZhbHVlDQotICAgICAgICAgICAgICk7DQotICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7 DQotICAgIGlmIChTdGF0dXMgPT0gUkVUVVJOX0FMUkVBRFlfU1RBUlRFRCkgew0KLSAgICAgIC8v DQotICAgICAgLy8gQWxyZWFkeSBzZWVuIHRoaXMgcG9pbnRlciwgZG9uJ3QgdHJ5IHRvIHByb2Nl c3MgaXQgYWdhaW4uDQotICAgICAgLy8NCi0gICAgICBERUJVRyAoKA0KLSAgICAgICAgREVCVUdf VkVSQk9TRSwNCi0gICAgICAgICIlYTogUG9pbnRlclZhbHVlPTB4JUx4IGFscmVhZHkgcHJvY2Vz c2VkLCBza2lwcGluZy5cbiIsDQotICAgICAgICBfX0ZVTkNUSU9OX18sDQotICAgICAgICBQb2lu dGVyVmFsdWUNCi0gICAgICAgICkpOw0KLSAgICAgIFN0YXR1cyA9IEVGSV9TVUNDRVNTOw0KLSAg ICB9DQotICAgIHJldHVybiBTdGF0dXM7DQotICB9DQotDQotICBCbG9iMlJlbWFpbmluZyAtPSAo VUlOVE4pIFBvaW50ZXJWYWx1ZTsNCi0gIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIiVhOiBjaGVj a2luZyBmb3IgQUNQSSBoZWFkZXIgaW4gXCIlYVwiIGF0IDB4JUx4ICINCi0gICAgIihyZW1haW5p bmc6IDB4JUx4KTogIiwgX19GVU5DVElPTl9fLCBBZGRQb2ludGVyLT5Qb2ludGVlRmlsZSwNCi0g ICAgUG9pbnRlclZhbHVlLCAoVUlOVDY0KUJsb2IyUmVtYWluaW5nKSk7DQotDQotICBUYWJsZVNp emUgPSAwOw0KLQ0KLSAgLy8NCi0gIC8vIFRvIG1ha2Ugb3VyIGpvYiBzaW1wbGUsIHRoZSBGQUNT IGhhcyBhIGN1c3RvbSBoZWFkZXIuIFNpZ2guDQotICAvLw0KLSAgaWYgKHNpemVvZiAqRmFjcyA8 PSBCbG9iMlJlbWFpbmluZykgew0KLSAgICBGYWNzID0gKEVGSV9BQ1BJXzFfMF9GSVJNV0FSRV9B Q1BJX0NPTlRST0xfU1RSVUNUVVJFICopKFVJTlROKVBvaW50ZXJWYWx1ZTsNCi0NCi0gICAgaWYg KEZhY3MtPkxlbmd0aCA+PSBzaXplb2YgKkZhY3MgJiYNCi0gICAgICAgIEZhY3MtPkxlbmd0aCA8 PSBCbG9iMlJlbWFpbmluZyAmJg0KLSAgICAgICAgRmFjcy0+U2lnbmF0dXJlID09DQotICAgICAg ICAgICAgICAgIEVGSV9BQ1BJXzFfMF9GSVJNV0FSRV9BQ1BJX0NPTlRST0xfU1RSVUNUVVJFX1NJ R05BVFVSRSkgew0KLSAgICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgImZvdW5kIFwiJS00LjRh XCIgc2l6ZSAweCV4XG4iLA0KLSAgICAgICAgKENPTlNUIENIQVI4ICopJkZhY3MtPlNpZ25hdHVy ZSwgRmFjcy0+TGVuZ3RoKSk7DQotICAgICAgVGFibGVTaXplID0gRmFjcy0+TGVuZ3RoOw0KLSAg ICB9DQotICB9DQotDQotICAvLw0KLSAgLy8gY2hlY2sgZm9yIHRoZSB1bmlmb3JtIHRhYmxlcw0K LSAgLy8NCi0gIGlmIChUYWJsZVNpemUgPT0gMCAmJiBzaXplb2YgKkhlYWRlciA8PSBCbG9iMlJl bWFpbmluZykgew0KLSAgICBIZWFkZXIgPSAoRUZJX0FDUElfREVTQ1JJUFRJT05fSEVBREVSICop KFVJTlROKVBvaW50ZXJWYWx1ZTsNCi0NCi0gICAgaWYgKEhlYWRlci0+TGVuZ3RoID49IHNpemVv ZiAqSGVhZGVyICYmDQotICAgICAgICBIZWFkZXItPkxlbmd0aCA8PSBCbG9iMlJlbWFpbmluZyAm Jg0KLSAgICAgICAgQ2FsY3VsYXRlU3VtOCAoKENPTlNUIFVJTlQ4ICopSGVhZGVyLCBIZWFkZXIt Pkxlbmd0aCkgPT0gMCkgew0KLSAgICAgIC8vDQotICAgICAgLy8gVGhpcyBsb29rcyB2ZXJ5IG11 Y2ggbGlrZSBhbiBBQ1BJIHRhYmxlIGZyb20gUUVNVToNCi0gICAgICAvLyAtIExlbmd0aCBmaWVs ZCBjb25zaXN0ZW50IHdpdGggYm90aCBBQ1BJIGFuZCBjb250YWluaW5nIGJsb2Igc2l6ZQ0KLSAg ICAgIC8vIC0gY2hlY2tzdW0gaXMgY29ycmVjdA0KLSAgICAgIC8vDQotICAgICAgREVCVUcgKChE RUJVR19WRVJCT1NFLCAiZm91bmQgXCIlLTQuNGFcIiBzaXplIDB4JXhcbiIsDQotICAgICAgICAo Q09OU1QgQ0hBUjggKikmSGVhZGVyLT5TaWduYXR1cmUsIEhlYWRlci0+TGVuZ3RoKSk7DQotICAg ICAgVGFibGVTaXplID0gSGVhZGVyLT5MZW5ndGg7DQotDQotICAgICAgLy8NCi0gICAgICAvLyBT a2lwIFJTRFQgYW5kIFhTRFQgYmVjYXVzZSB0aG9zZSBhcmUgaGFuZGxlZCBieQ0KLSAgICAgIC8v IEVGSV9BQ1BJX1RBQkxFX1BST1RPQ09MIGF1dG9tYXRpY2FsbHkuDQotICAgICAgaWYgKEhlYWRl ci0+U2lnbmF0dXJlID09DQotICAgICAgICAgICAgICAgICAgICBFRklfQUNQSV8xXzBfUk9PVF9T WVNURU1fREVTQ1JJUFRJT05fVEFCTEVfU0lHTkFUVVJFIHx8DQotICAgICAgICAgIEhlYWRlci0+ U2lnbmF0dXJlID09DQotICAgICAgICAgICAgICAgICAgICBFRklfQUNQSV8yXzBfRVhURU5ERURf U1lTVEVNX0RFU0NSSVBUSU9OX1RBQkxFX1NJR05BVFVSRSkgew0KLSAgICAgICAgcmV0dXJuIEVG SV9TVUNDRVNTOw0KLSAgICAgIH0NCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgaWYgKFRhYmxlU2l6ZSA9 PSAwKSB7DQotICAgIERFQlVHICgoREVCVUdfVkVSQk9TRSwgIm5vdCBmb3VuZDsgbWFya2luZyBm d19jZmcgYmxvYiBhcyBvcGFxdWVcbiIpKTsNCi0gICAgQmxvYjItPkhvc3RzT25seVRhYmxlRGF0 YSA9IEZBTFNFOw0KLSAgICByZXR1cm4gRUZJX1NVQ0NFU1M7DQotICB9DQotDQotICBpZiAoKk51 bUluc3RhbGxlZCA9PSBJTlNUQUxMRURfVEFCTEVTX01BWCkgew0KLSAgICBERUJVRyAoKERFQlVH X0VSUk9SLCAiJWE6IGNhbid0IGluc3RhbGwgbW9yZSB0aGFuICVkIHRhYmxlc1xuIiwNCi0gICAg ICBfX0ZVTkNUSU9OX18sIElOU1RBTExFRF9UQUJMRVNfTUFYKSk7DQotICAgIFN0YXR1cyA9IEVG SV9PVVRfT0ZfUkVTT1VSQ0VTOw0KLSAgICBnb3RvIFJvbGxiYWNrU2VlblBvaW50ZXI7DQotICB9 DQotDQotICBTdGF0dXMgPSBBY3BpUHJvdG9jb2wtPkluc3RhbGxBY3BpVGFibGUgKEFjcGlQcm90 b2NvbCwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAoVk9JRCAqKShVSU5UTilQb2ludGVy VmFsdWUsIFRhYmxlU2l6ZSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmSW5zdGFsbGVk S2V5WypOdW1JbnN0YWxsZWRdKTsNCi0gIGlmIChFRklfRVJST1IgKFN0YXR1cykpIHsNCi0gICAg REVCVUcgKChERUJVR19FUlJPUiwgIiVhOiBJbnN0YWxsQWNwaVRhYmxlKCk6ICVyXG4iLCBfX0ZV TkNUSU9OX18sDQotICAgICAgU3RhdHVzKSk7DQotICAgIGdvdG8gUm9sbGJhY2tTZWVuUG9pbnRl cjsNCi0gIH0NCi0gICsrKk51bUluc3RhbGxlZDsNCi0gIHJldHVybiBFRklfU1VDQ0VTUzsNCi0N Ci1Sb2xsYmFja1NlZW5Qb2ludGVyOg0KLSAgT3JkZXJlZENvbGxlY3Rpb25EZWxldGUgKFNlZW5Q b2ludGVycywgU2VlblBvaW50ZXJFbnRyeSwgTlVMTCk7DQotICByZXR1cm4gU3RhdHVzOw0KLX0N Ci0NCi0NCi0vKioNCi0gIERvd25sb2FkLCBwcm9jZXNzLCBhbmQgaW5zdGFsbCBBQ1BJIHRhYmxl IGRhdGEgZnJvbSB0aGUgUUVNVSBsb2FkZXINCi0gIGludGVyZmFjZS4NCi0NCi0gIEBwYXJhbVtp bl0gQWNwaVByb3RvY29sICBUaGUgQUNQSSB0YWJsZSBwcm90b2NvbCB1c2VkIHRvIGluc3RhbGwg dGFibGVzLg0KLQ0KLSAgQHJldHZhbCAgRUZJX1VOU1VQUE9SVEVEICAgICAgIEZpcm13YXJlIGNv bmZpZ3VyYXRpb24gaXMgdW5hdmFpbGFibGUsIG9yIFFFTVUNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBsb2FkZXIgY29tbWFuZCB3aXRoIHVuc3VwcG9ydGVkIHBhcmFtZXRlcnMN Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXMgYmVlbiBmb3VuZC4NCi0NCi0g IEByZXR2YWwgIEVGSV9OT1RfRk9VTkQgICAgICAgICBUaGUgaG9zdCBkb2Vzbid0IGV4cG9ydCB0 aGUgcmVxdWlyZWQgZndfY2ZnDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls ZXMuDQotDQotICBAcmV0dmFsICBFRklfT1VUX09GX1JFU09VUkNFUyAgTWVtb3J5IGFsbG9jYXRp b24gZmFpbGVkLCBvciBtb3JlIHRoYW4NCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBJTlNUQUxMRURfVEFCTEVTX01BWCB0YWJsZXMgZm91bmQuDQotDQotICBAcmV0dmFsICBFRklf UFJPVE9DT0xfRVJST1IgICAgRm91bmQgaW52YWxpZCBmd19jZmcgY29udGVudHMuDQotDQotICBA cmV0dXJuICAgICAgICAgICAgICAgICAgICAgICAgU3RhdHVzIGNvZGVzIHJldHVybmVkIGJ5DQot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWNwaVByb3RvY29sLT5JbnN0YWxsQWNw aVRhYmxlKCkuDQotDQotKiovDQotRUZJX1NUQVRVUw0KLUVGSUFQSQ0KLUluc3RhbGxRZW11RndD ZmdUYWJsZXMgKA0KLSAgSU4gICBFRklfQUNQSV9UQUJMRV9QUk9UT0NPTCAgICAgICAqQWNwaVBy b3RvY29sDQotICApDQotew0KLSAgRUZJX1NUQVRVUyAgICAgICAgICAgICAgIFN0YXR1czsNCi0g IEZJUk1XQVJFX0NPTkZJR19JVEVNICAgICBGd0NmZ0l0ZW07DQotICBVSU5UTiAgICAgICAgICAg ICAgICAgICAgRndDZmdTaXplOw0KLSAgUUVNVV9MT0FERVJfRU5UUlkgICAgICAgICpMb2FkZXJT dGFydDsNCi0gIENPTlNUIFFFTVVfTE9BREVSX0VOVFJZICAqTG9hZGVyRW50cnksICpMb2FkZXJF bmQ7DQotICBDT05TVCBRRU1VX0xPQURFUl9FTlRSWSAgKldyaXRlUG9pbnRlclN1YnNldEVuZDsN Ci0gIE9SSUdJTkFMX0FUVFJJQlVURVMgICAgICAqT3JpZ2luYWxQY2lBdHRyaWJ1dGVzOw0KLSAg VUlOVE4gICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsUGNpQXR0cmlidXRlc0NvdW50Ow0KLSAg T1JERVJFRF9DT0xMRUNUSU9OICAgICAgICpBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0Ow0K LSAgUzNfQ09OVEVYVCAgICAgICAgICAgICAgICpTM0NvbnRleHQ7DQotICBPUkRFUkVEX0NPTExF Q1RJT04gICAgICAgKlRyYWNrZXI7DQotICBVSU5UTiAgICAgICAgICAgICAgICAgICAgKkluc3Rh bGxlZEtleTsNCi0gIElOVDMyICAgICAgICAgICAgICAgICAgICBJbnN0YWxsZWQ7DQotICBPUkRF UkVEX0NPTExFQ1RJT05fRU5UUlkgKlRyYWNrZXJFbnRyeSwgKlRyYWNrZXJFbnRyeTI7DQotICBP UkRFUkVEX0NPTExFQ1RJT04gICAgICAgKlNlZW5Qb2ludGVyczsNCi0gIE9SREVSRURfQ09MTEVD VElPTl9FTlRSWSAqU2VlblBvaW50ZXJFbnRyeSwgKlNlZW5Qb2ludGVyRW50cnkyOw0KLQ0KLSAg U3RhdHVzID0gUWVtdUZ3Q2ZnRmluZEZpbGUgKCJldGMvdGFibGUtbG9hZGVyIiwgJkZ3Q2ZnSXRl bSwgJkZ3Q2ZnU2l6ZSk7DQotICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgIHJldHVy biBTdGF0dXM7DQotICB9DQotICBpZiAoRndDZmdTaXplICUgc2l6ZW9mICpMb2FkZXJFbnRyeSAh PSAwKSB7DQotICAgIERFQlVHICgoREVCVUdfRVJST1IsICIlYTogXCJldGMvdGFibGUtbG9hZGVy XCIgaGFzIGludmFsaWQgc2l6ZSAweCVMeFxuIiwNCi0gICAgICBfX0ZVTkNUSU9OX18sIChVSU5U NjQpRndDZmdTaXplKSk7DQotICAgIHJldHVybiBFRklfUFJPVE9DT0xfRVJST1I7DQotICB9DQot DQotICBMb2FkZXJTdGFydCA9IEFsbG9jYXRlUG9vbCAoRndDZmdTaXplKTsNCi0gIGlmIChMb2Fk ZXJTdGFydCA9PSBOVUxMKSB7DQotICAgIHJldHVybiBFRklfT1VUX09GX1JFU09VUkNFUzsNCi0g IH0NCi0gIEVuYWJsZVBjaURlY29kaW5nICgmT3JpZ2luYWxQY2lBdHRyaWJ1dGVzLCAmT3JpZ2lu YWxQY2lBdHRyaWJ1dGVzQ291bnQpOw0KLSAgUWVtdUZ3Q2ZnU2VsZWN0SXRlbSAoRndDZmdJdGVt KTsNCi0gIFFlbXVGd0NmZ1JlYWRCeXRlcyAoRndDZmdTaXplLCBMb2FkZXJTdGFydCk7DQotICBS ZXN0b3JlUGNpRGVjb2RpbmcgKE9yaWdpbmFsUGNpQXR0cmlidXRlcywgT3JpZ2luYWxQY2lBdHRy aWJ1dGVzQ291bnQpOw0KLSAgTG9hZGVyRW5kID0gTG9hZGVyU3RhcnQgKyBGd0NmZ1NpemUgLyBz aXplb2YgKkxvYWRlckVudHJ5Ow0KLQ0KLSAgQWxsb2NhdGlvbnNSZXN0cmljdGVkVG8zMkJpdCA9 IE5VTEw7DQotICBTdGF0dXMgPSBDb2xsZWN0QWxsb2NhdGlvbnNSZXN0cmljdGVkVG8zMkJpdCAo DQotICAgICAgICAgICAgICZBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0LA0KLSAgICAgICAg ICAgICBMb2FkZXJTdGFydCwNCi0gICAgICAgICAgICAgTG9hZGVyRW5kDQotICAgICAgICAgICAg ICk7DQotICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgIGdvdG8gRnJlZUxvYWRlcjsN Ci0gIH0NCi0NCi0gIFMzQ29udGV4dCA9IE5VTEw7DQotICBpZiAoUWVtdUZ3Q2ZnUzNFbmFibGVk ICgpKSB7DQotICAgIC8vDQotICAgIC8vIFNpemUgdGhlIGFsbG9jYXRpb24gcGVzc2ltaXN0aWNh bGx5LCBhc3N1bWluZyB0aGF0IGFsbCBjb21tYW5kcyBpbiB0aGUNCi0gICAgLy8gc2NyaXB0IGFy ZSBRRU1VX0xPQURFUl9XUklURV9QT0lOVEVSIGNvbW1hbmRzLg0KLSAgICAvLw0KLSAgICBTdGF0 dXMgPSBBbGxvY2F0ZVMzQ29udGV4dCAoJlMzQ29udGV4dCwgTG9hZGVyRW5kIC0gTG9hZGVyU3Rh cnQpOw0KLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQotICAgICAgZ290byBGcmVlQWxs b2NhdGlvbnNSZXN0cmljdGVkVG8zMkJpdDsNCi0gICAgfQ0KLSAgfQ0KLQ0KLSAgVHJhY2tlciA9 IE9yZGVyZWRDb2xsZWN0aW9uSW5pdCAoQmxvYkNvbXBhcmUsIEJsb2JLZXlDb21wYXJlKTsNCi0g IGlmIChUcmFja2VyID09IE5VTEwpIHsNCi0gICAgU3RhdHVzID0gRUZJX09VVF9PRl9SRVNPVVJD RVM7DQotICAgIGdvdG8gRnJlZVMzQ29udGV4dDsNCi0gIH0NCi0NCi0gIC8vDQotICAvLyBmaXJz dCBwYXNzOiBwcm9jZXNzIHRoZSBjb21tYW5kcw0KLSAgLy8NCi0gIC8vICJXcml0ZVBvaW50ZXJT dWJzZXRFbmQiIHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCBzdWNjZXNzZnVsDQotICAvLyBRRU1V X0xPQURFUl9XUklURV9QT0lOVEVSIGNvbW1hbmQuIE5vdyB3aGVuIHdlJ3JlIGFib3V0IHRvIHN0 YXJ0IHRoZSBmaXJzdA0KLSAgLy8gcGFzcywgbm8gc3VjaCBjb21tYW5kIGhhcyBiZWVuIGVuY291 bnRlcmVkIHlldC4NCi0gIC8vDQotICBXcml0ZVBvaW50ZXJTdWJzZXRFbmQgPSBMb2FkZXJTdGFy dDsNCi0gIGZvciAoTG9hZGVyRW50cnkgPSBMb2FkZXJTdGFydDsgTG9hZGVyRW50cnkgPCBMb2Fk ZXJFbmQ7ICsrTG9hZGVyRW50cnkpIHsNCi0gICAgc3dpdGNoIChMb2FkZXJFbnRyeS0+VHlwZSkg ew0KLSAgICBjYXNlIFFlbXVMb2FkZXJDbWRBbGxvY2F0ZToNCi0gICAgICBTdGF0dXMgPSBQcm9j ZXNzQ21kQWxsb2NhdGUgKA0KLSAgICAgICAgICAgICAgICAgJkxvYWRlckVudHJ5LT5Db21tYW5k LkFsbG9jYXRlLA0KLSAgICAgICAgICAgICAgICAgVHJhY2tlciwNCi0gICAgICAgICAgICAgICAg IEFsbG9jYXRpb25zUmVzdHJpY3RlZFRvMzJCaXQNCi0gICAgICAgICAgICAgICAgICk7DQotICAg ICAgYnJlYWs7DQotDQotICAgIGNhc2UgUWVtdUxvYWRlckNtZEFkZFBvaW50ZXI6DQotICAgICAg U3RhdHVzID0gUHJvY2Vzc0NtZEFkZFBvaW50ZXIgKCZMb2FkZXJFbnRyeS0+Q29tbWFuZC5BZGRQ b2ludGVyLA0KLSAgICAgICAgICAgICAgICAgVHJhY2tlcik7DQotICAgICAgYnJlYWs7DQotDQot ICAgIGNhc2UgUWVtdUxvYWRlckNtZEFkZENoZWNrc3VtOg0KLSAgICAgIFN0YXR1cyA9IFByb2Nl c3NDbWRBZGRDaGVja3N1bSAoJkxvYWRlckVudHJ5LT5Db21tYW5kLkFkZENoZWNrc3VtLA0KLSAg ICAgICAgICAgICAgICAgVHJhY2tlcik7DQotICAgICAgYnJlYWs7DQotDQotICAgIGNhc2UgUWVt dUxvYWRlckNtZFdyaXRlUG9pbnRlcjoNCi0gICAgICAgIFN0YXR1cyA9IFByb2Nlc3NDbWRXcml0 ZVBvaW50ZXIgKCZMb2FkZXJFbnRyeS0+Q29tbWFuZC5Xcml0ZVBvaW50ZXIsDQotICAgICAgICAg ICAgICAgICAgIFRyYWNrZXIsIFMzQ29udGV4dCk7DQotICAgICAgICBpZiAoIUVGSV9FUlJPUiAo U3RhdHVzKSkgew0KLSAgICAgICAgICBXcml0ZVBvaW50ZXJTdWJzZXRFbmQgPSBMb2FkZXJFbnRy eSArIDE7DQotICAgICAgICB9DQotICAgICAgICBicmVhazsNCi0NCi0gICAgZGVmYXVsdDoNCi0g ICAgICBERUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYTogdW5rbm93biBsb2FkZXIgY29tbWFuZDog MHgleFxuIiwNCi0gICAgICAgIF9fRlVOQ1RJT05fXywgTG9hZGVyRW50cnktPlR5cGUpKTsNCi0g ICAgICBicmVhazsNCi0gICAgfQ0KLQ0KLSAgICBpZiAoRUZJX0VSUk9SIChTdGF0dXMpKSB7DQot ICAgICAgZ290byBSb2xsYmFja1dyaXRlUG9pbnRlcnNBbmRGcmVlVHJhY2tlcjsNCi0gICAgfQ0K LSAgfQ0KLQ0KLSAgSW5zdGFsbGVkS2V5ID0gQWxsb2NhdGVQb29sIChJTlNUQUxMRURfVEFCTEVT X01BWCAqIHNpemVvZiAqSW5zdGFsbGVkS2V5KTsNCi0gIGlmIChJbnN0YWxsZWRLZXkgPT0gTlVM TCkgew0KLSAgICBTdGF0dXMgPSBFRklfT1VUX09GX1JFU09VUkNFUzsNCi0gICAgZ290byBSb2xs YmFja1dyaXRlUG9pbnRlcnNBbmRGcmVlVHJhY2tlcjsNCi0gIH0NCi0NCi0gIFNlZW5Qb2ludGVy cyA9IE9yZGVyZWRDb2xsZWN0aW9uSW5pdCAoUG9pbnRlckNvbXBhcmUsIFBvaW50ZXJDb21wYXJl KTsNCi0gIGlmIChTZWVuUG9pbnRlcnMgPT0gTlVMTCkgew0KLSAgICBTdGF0dXMgPSBFRklfT1VU X09GX1JFU09VUkNFUzsNCi0gICAgZ290byBGcmVlS2V5czsNCi0gIH0NCi0NCi0gIC8vDQotICAv LyBzZWNvbmQgcGFzczogaWRlbnRpZnkgYW5kIGluc3RhbGwgQUNQSSB0YWJsZXMNCi0gIC8vDQot ICBJbnN0YWxsZWQgPSAwOw0KLSAgZm9yIChMb2FkZXJFbnRyeSA9IExvYWRlclN0YXJ0OyBMb2Fk ZXJFbnRyeSA8IExvYWRlckVuZDsgKytMb2FkZXJFbnRyeSkgew0KLSAgICBpZiAoTG9hZGVyRW50 cnktPlR5cGUgPT0gUWVtdUxvYWRlckNtZEFkZFBvaW50ZXIpIHsNCi0gICAgICBTdGF0dXMgPSBQ cm9jZXNzMm5kUGFzc0NtZEFkZFBvaW50ZXIgKA0KLSAgICAgICAgICAgICAgICAgJkxvYWRlckVu dHJ5LT5Db21tYW5kLkFkZFBvaW50ZXIsDQotICAgICAgICAgICAgICAgICBUcmFja2VyLA0KLSAg ICAgICAgICAgICAgICAgQWNwaVByb3RvY29sLA0KLSAgICAgICAgICAgICAgICAgSW5zdGFsbGVk S2V5LA0KLSAgICAgICAgICAgICAgICAgJkluc3RhbGxlZCwNCi0gICAgICAgICAgICAgICAgIFNl ZW5Qb2ludGVycw0KLSAgICAgICAgICAgICAgICAgKTsNCi0gICAgICBpZiAoRUZJX0VSUk9SIChT dGF0dXMpKSB7DQotICAgICAgICBnb3RvIFVuaW5zdGFsbEFjcGlUYWJsZXM7DQotICAgICAgfQ0K LSAgICB9DQotICB9DQotDQotICAvLw0KLSAgLy8gVHJhbnNsYXRpbmcgdGhlIGNvbmRlbnNlZCBR RU1VX0xPQURFUl9XUklURV9QT0lOVEVSIGNvbW1hbmRzIHRvIEFDUEkgUzMNCi0gIC8vIEJvb3Qg U2NyaXB0IG9wY29kZXMgaGFzIHRvIGJlIHRoZSBsYXN0IG9wZXJhdGlvbiBpbiB0aGlzIGZ1bmN0 aW9uLCBiZWNhdXNlDQotICAvLyBpZiBpdCBzdWNjZWVkcywgaXQgY2Fubm90IGJlIHVuZG9uZS4N Ci0gIC8vDQotICBpZiAoUzNDb250ZXh0ICE9IE5VTEwpIHsNCi0gICAgU3RhdHVzID0gVHJhbnNm ZXJTM0NvbnRleHRUb0Jvb3RTY3JpcHQgKFMzQ29udGV4dCk7DQotICAgIGlmIChFRklfRVJST1Ig KFN0YXR1cykpIHsNCi0gICAgICBnb3RvIFVuaW5zdGFsbEFjcGlUYWJsZXM7DQotICAgIH0NCi0g ICAgLy8NCi0gICAgLy8gT3duZXJzaGlwIG9mIFMzQ29udGV4dCBoYXMgYmVlbiB0cmFuc2ZlcnJl ZC4NCi0gICAgLy8NCi0gICAgUzNDb250ZXh0ID0gTlVMTDsNCi0gIH0NCi0NCi1Vbmluc3RhbGxB Y3BpVGFibGVzOg0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICAvLw0KLSAgICAv LyByb2xsIGJhY2sgcGFydGlhbCBpbnN0YWxsYXRpb24NCi0gICAgLy8NCi0gICAgd2hpbGUgKElu c3RhbGxlZCA+IDApIHsNCi0gICAgICAtLUluc3RhbGxlZDsNCi0gICAgICBBY3BpUHJvdG9jb2wt PlVuaW5zdGFsbEFjcGlUYWJsZSAoQWNwaVByb3RvY29sLCBJbnN0YWxsZWRLZXlbSW5zdGFsbGVk XSk7DQotICAgIH0NCi0gIH0gZWxzZSB7DQotICAgIERFQlVHICgoREVCVUdfSU5GTywgIiVhOiBp bnN0YWxsZWQgJWQgdGFibGVzXG4iLCBfX0ZVTkNUSU9OX18sIEluc3RhbGxlZCkpOw0KLSAgfQ0K LQ0KLSAgZm9yIChTZWVuUG9pbnRlckVudHJ5ID0gT3JkZXJlZENvbGxlY3Rpb25NaW4gKFNlZW5Q b2ludGVycyk7DQotICAgICAgIFNlZW5Qb2ludGVyRW50cnkgIT0gTlVMTDsNCi0gICAgICAgU2Vl blBvaW50ZXJFbnRyeSA9IFNlZW5Qb2ludGVyRW50cnkyKSB7DQotICAgIFNlZW5Qb2ludGVyRW50 cnkyID0gT3JkZXJlZENvbGxlY3Rpb25OZXh0IChTZWVuUG9pbnRlckVudHJ5KTsNCi0gICAgT3Jk ZXJlZENvbGxlY3Rpb25EZWxldGUgKFNlZW5Qb2ludGVycywgU2VlblBvaW50ZXJFbnRyeSwgTlVM TCk7DQotICB9DQotICBPcmRlcmVkQ29sbGVjdGlvblVuaW5pdCAoU2VlblBvaW50ZXJzKTsNCi0N Ci1GcmVlS2V5czoNCi0gIEZyZWVQb29sIChJbnN0YWxsZWRLZXkpOw0KLQ0KLVJvbGxiYWNrV3Jp dGVQb2ludGVyc0FuZEZyZWVUcmFja2VyOg0KLSAgLy8NCi0gIC8vIEluIGNhc2Ugb2YgZmFpbHVy ZSwgcmV2b2tlIGFueSBhbGxvY2F0aW9uIGFkZHJlc3NlcyB0aGF0IHdlcmUgY29tbXVuaWNhdGVk DQotICAvLyB0byBRRU1VIHByZXZpb3VzbHksIGJlZm9yZSB3ZSByZWxlYXNlIGFsbCB0aGUgYmxv YnMuDQotICAvLw0KLSAgaWYgKEVGSV9FUlJPUiAoU3RhdHVzKSkgew0KLSAgICBMb2FkZXJFbnRy eSA9IFdyaXRlUG9pbnRlclN1YnNldEVuZDsNCi0gICAgd2hpbGUgKExvYWRlckVudHJ5ID4gTG9h ZGVyU3RhcnQpIHsNCi0gICAgICAtLUxvYWRlckVudHJ5Ow0KLSAgICAgIGlmIChMb2FkZXJFbnRy eS0+VHlwZSA9PSBRZW11TG9hZGVyQ21kV3JpdGVQb2ludGVyKSB7DQotICAgICAgICBVbmRvQ21k V3JpdGVQb2ludGVyICgmTG9hZGVyRW50cnktPkNvbW1hbmQuV3JpdGVQb2ludGVyKTsNCi0gICAg ICB9DQotICAgIH0NCi0gIH0NCi0NCi0gIC8vDQotICAvLyBUZWFyIGRvd24gdGhlIHRyYWNrZXIg aW5mcmFzdHJ1Y3R1cmUuIEVhY2ggZndfY2ZnIGJsb2Igd2lsbCBiZSBsZWZ0IGluDQotICAvLyBw bGFjZSBvbmx5IGlmIHdlJ3JlIGV4aXRpbmcgd2l0aCBzdWNjZXNzIGFuZCB0aGUgYmxvYiBob3N0 cyBkYXRhIHRoYXQgaXMNCi0gIC8vIG5vdCBkaXJlY3RseSBwYXJ0IG9mIHNvbWUgQUNQSSB0YWJs ZS4NCi0gIC8vDQotICBmb3IgKFRyYWNrZXJFbnRyeSA9IE9yZGVyZWRDb2xsZWN0aW9uTWluIChU cmFja2VyKTsgVHJhY2tlckVudHJ5ICE9IE5VTEw7DQotICAgICAgIFRyYWNrZXJFbnRyeSA9IFRy YWNrZXJFbnRyeTIpIHsNCi0gICAgVk9JRCAqVXNlclN0cnVjdDsNCi0gICAgQkxPQiAqQmxvYjsN Ci0NCi0gICAgVHJhY2tlckVudHJ5MiA9IE9yZGVyZWRDb2xsZWN0aW9uTmV4dCAoVHJhY2tlckVu dHJ5KTsNCi0gICAgT3JkZXJlZENvbGxlY3Rpb25EZWxldGUgKFRyYWNrZXIsIFRyYWNrZXJFbnRy eSwgJlVzZXJTdHJ1Y3QpOw0KLSAgICBCbG9iID0gVXNlclN0cnVjdDsNCi0NCi0gICAgaWYgKEVG SV9FUlJPUiAoU3RhdHVzKSB8fCBCbG9iLT5Ib3N0c09ubHlUYWJsZURhdGEpIHsNCi0gICAgICBE RUJVRyAoKERFQlVHX1ZFUkJPU0UsICIlYTogZnJlZWluZyBcIiVhXCJcbiIsIF9fRlVOQ1RJT05f XywNCi0gICAgICAgIEJsb2ItPkZpbGUpKTsNCi0gICAgICBnQlMtPkZyZWVQYWdlcyAoKFVJTlRO KUJsb2ItPkJhc2UsIEVGSV9TSVpFX1RPX1BBR0VTIChCbG9iLT5TaXplKSk7DQotICAgIH0NCi0g ICAgRnJlZVBvb2wgKEJsb2IpOw0KLSAgfQ0KLSAgT3JkZXJlZENvbGxlY3Rpb25VbmluaXQgKFRy YWNrZXIpOw0KLQ0KLUZyZWVTM0NvbnRleHQ6DQotICBpZiAoUzNDb250ZXh0ICE9IE5VTEwpIHsN Ci0gICAgUmVsZWFzZVMzQ29udGV4dCAoUzNDb250ZXh0KTsNCi0gIH0NCi0NCi1GcmVlQWxsb2Nh dGlvbnNSZXN0cmljdGVkVG8zMkJpdDoNCi0gIFJlbGVhc2VBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRU bzMyQml0IChBbGxvY2F0aW9uc1Jlc3RyaWN0ZWRUbzMyQml0KTsNCi0NCi1GcmVlTG9hZGVyOg0K LSAgRnJlZVBvb2wgKExvYWRlclN0YXJ0KTsNCi0NCi0gIHJldHVybiBTdGF0dXM7DQotfQ0KLS0g CjIuMTkuMS4zLmczMDI0N2FhNWQyMDEKCgo=