From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-1.mimecast.com (us-smtp-1.mimecast.com [207.211.31.120]) by mx.groups.io with SMTP id smtpd.web11.242.1582755155439029114 for ; Wed, 26 Feb 2020 14:12:35 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=ROYLkLvz; spf=pass (domain: redhat.com, ip: 207.211.31.120, mailfrom: lersek@redhat.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1582755154; 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=hCkxAKNO6iwZWFhutokHsUceP9aMCizZIeZilXNM1t0=; b=ROYLkLvzAcrYPH9emDyCSbVXxRb71QC7Q7WObdFA/5pW/yBRIcXizT6tPi3VzTKn3vASHG Lb4/CvxB5829jJaIIDz+Aa3ZYiqRRPoHXsuZtFriMhJ3Bjg5QeGeeJj1XjS+K8OR8vXbZ+ Vj4rTd1oe9p+chuXIVERs/OuptL40C8= 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-13-R6XzJysgOBOketJvp6rxBQ-1; Wed, 26 Feb 2020 17:12:30 -0500 X-MC-Unique: R6XzJysgOBOketJvp6rxBQ-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 9926FDB61; Wed, 26 Feb 2020 22:12:29 +0000 (UTC) Received: from lacos-laptop-7.usersys.redhat.com (ovpn-116-185.ams2.redhat.com [10.36.116.185]) by smtp.corp.redhat.com (Postfix) with ESMTP id E1F5560BEF; Wed, 26 Feb 2020 22:12:27 +0000 (UTC) From: "Laszlo Ersek" To: edk2-devel-groups-io Cc: Ard Biesheuvel , Igor Mammedov , Jiewen Yao , Jordan Justen , Michael Kinney , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= Subject: [PATCH v2 12/16] OvmfPkg/CpuHotplugSmm: introduce First SMI Handler for hot-added CPUs Date: Wed, 26 Feb 2020 23:11:52 +0100 Message-Id: <20200226221156.29589-13-lersek@redhat.com> In-Reply-To: <20200226221156.29589-1-lersek@redhat.com> References: <20200226221156.29589-1-lersek@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 SW1wbGVtZW50IHRoZSBGaXJzdCBTTUkgSGFuZGxlciBmb3IgaG90LWFkZGVkIENQVXMsIGluIE5B U00uCgpBZGQgdGhlIGludGVyZmFjaW5nIEMtbGFuZ3VhZ2UgZnVuY3Rpb24gdGhhdCB0aGUgU01N IE1vbmFyY2ggY2FsbHMuIFRoaXMKZnVuY3Rpb24gbGF1bmNoZXMgYW5kIGNvb3JkaW5hdGVzIFNN QkFTRSByZWxvY2F0aW9uIGZvciBhIGhvdC1hZGRlZCBDUFUuCgpDYzogQXJkIEJpZXNoZXV2ZWwg PGFyZC5iaWVzaGV1dmVsQGxpbmFyby5vcmc+CkNjOiBJZ29yIE1hbW1lZG92IDxpbWFtbWVkb0By ZWRoYXQuY29tPgpDYzogSmlld2VuIFlhbyA8amlld2VuLnlhb0BpbnRlbC5jb20+CkNjOiBKb3Jk YW4gSnVzdGVuIDxqb3JkYW4ubC5qdXN0ZW5AaW50ZWwuY29tPgpDYzogTWljaGFlbCBLaW5uZXkg PG1pY2hhZWwuZC5raW5uZXlAaW50ZWwuY29tPgpDYzogUGhpbGlwcGUgTWF0aGlldS1EYXVkw6kg PHBoaWxtZEByZWRoYXQuY29tPgpSZWY6IGh0dHBzOi8vYnVnemlsbGEudGlhbm9jb3JlLm9yZy9z aG93X2J1Zy5jZ2k/aWQ9MTUxMgpTaWduZWQtb2ZmLWJ5OiBMYXN6bG8gRXJzZWsgPGxlcnNla0By ZWRoYXQuY29tPgotLS0KCk5vdGVzOgogICAgdjI6CiAgICAKICAgIC0gaW1wbGVtZW50IHRoZSBj b21iaW5lZCBhcHByb2FjaCBkZXNjcmliZWQgaGVyZToKICAgIAogICAgICBodHRwOi8vbWlkLm1h aWwtYXJjaGl2ZS5jb20vMTExMTQ1ZmMtYmUzZC0yYTlhLWExMjYtYzE0MzQ1YThhOGE0QHJlZGhh dC5jb20KICAgICAgaHR0cHM6Ly9lZGsyLmdyb3Vwcy5pby9nL2RldmVsL21lc3NhZ2UvNTQ3NTQK ICAgIAogICAgICBieSBpbnRyb2R1Y2luZyAiRklSU1RfU01JX0hBTkRMRVJfQ09OVEVYVC5BYm91 dFRvTGVhdmVTbW0iLgoKIE92bWZQa2cvQ3B1SG90cGx1Z1NtbS9DcHVIb3RwbHVnU21tLmluZiAg ICAgICAgfCAgIDQgKwogT3ZtZlBrZy9DcHVIb3RwbHVnU21tL0ZpcnN0U21pSGFuZGxlckNvbnRl eHQuaCB8ICA0NyArKysrKysKIE92bWZQa2cvQ3B1SG90cGx1Z1NtbS9TbWJhc2UuaCAgICAgICAg ICAgICAgICAgfCAgMTQgKysKIE92bWZQa2cvQ3B1SG90cGx1Z1NtbS9GaXJzdFNtaUhhbmRsZXIu bmFzbSAgICAgfCAxNTQgKysrKysrKysrKysrKysrKysrKwogT3ZtZlBrZy9DcHVIb3RwbHVnU21t L1NtYmFzZS5jICAgICAgICAgICAgICAgICB8IDE1NyArKysrKysrKysrKysrKysrKysrKwogNSBm aWxlcyBjaGFuZ2VkLCAzNzYgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL092bWZQa2cvQ3B1 SG90cGx1Z1NtbS9DcHVIb3RwbHVnU21tLmluZiBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9DcHVI b3RwbHVnU21tLmluZgppbmRleCBiZjQxNjIyOTljN2MuLjA0MzIyYjBkNzg1NSAxMDA2NDQKLS0t IGEvT3ZtZlBrZy9DcHVIb3RwbHVnU21tL0NwdUhvdHBsdWdTbW0uaW5mCisrKyBiL092bWZQa2cv Q3B1SG90cGx1Z1NtbS9DcHVIb3RwbHVnU21tLmluZgpAQCAtNSw1NiArNSw2MCBAQAogIw0KICMg U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRlbnQNCiAjIw0KIA0KIFtE ZWZpbmVzXQ0KICAgSU5GX1ZFUlNJT04gICAgICAgICAgICAgICAgPSAxLjI5DQogICBQSV9TUEVD SUZJQ0FUSU9OX1ZFUlNJT04gICA9IDB4MDAwMTAwNDYgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIyBQSS0xLjcuMA0KICAgQkFTRV9OQU1FICAgICAgICAgICAgICAgICAgPSBDcHVIb3RwbHVn U21tDQogICBGSUxFX0dVSUQgICAgICAgICAgICAgICAgICA9IDg0RUVBMTE0LUM2QkUtNDQ0NS04 RjkwLTUxRDk3ODYzRTM2Mw0KICAgTU9EVUxFX1RZUEUgICAgICAgICAgICAgICAgPSBEWEVfU01N X0RSSVZFUg0KICAgRU5UUllfUE9JTlQgICAgICAgICAgICAgICAgPSBDcHVIb3RwbHVnRW50cnkN CiANCiAjDQogIyBUaGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGlzIGZvciByZWZlcmVuY2Ugb25s eSBhbmQgbm90IHJlcXVpcmVkIGJ5IHRoZSBidWlsZA0KICMgdG9vbHMuDQogIw0KICMgVkFMSURf QVJDSElURUNUVVJFUyAgICAgICAgPSBJQTMyIFg2NA0KICMNCiANCiBbU291cmNlc10NCiAgIEFw aWNJZC5oDQogICBDcHVIb3RwbHVnLmMNCisgIEZpcnN0U21pSGFuZGxlci5uYXNtDQorICBGaXJz dFNtaUhhbmRsZXJDb250ZXh0LmgNCiAgIFBvc3RTbW1QZW4ubmFzbQ0KICAgUWVtdUNwdWhwLmMN CiAgIFFlbXVDcHVocC5oDQogICBTbWJhc2UuYw0KICAgU21iYXNlLmgNCiANCiBbUGFja2FnZXNd DQogICBNZGVQa2cvTWRlUGtnLmRlYw0KICAgT3ZtZlBrZy9Pdm1mUGtnLmRlYw0KICAgVWVmaUNw dVBrZy9VZWZpQ3B1UGtnLmRlYw0KIA0KIFtMaWJyYXJ5Q2xhc3Nlc10NCiAgIEJhc2VMaWINCiAg IEJhc2VNZW1vcnlMaWINCiAgIERlYnVnTGliDQorICBMb2NhbEFwaWNMaWINCiAgIE1tU2Vydmlj ZXNUYWJsZUxpYg0KICAgUGNkTGliDQogICBTYWZlSW50TGliDQorICBTeW5jaHJvbml6YXRpb25M aWINCiAgIFVlZmlEcml2ZXJFbnRyeVBvaW50DQogDQogW1Byb3RvY29sc10NCiAgIGdFZmlNbUNw dUlvUHJvdG9jb2xHdWlkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICMjIENPTlNVTUVTDQogICBnRWZpU21tQ3B1U2VydmljZVByb3RvY29sR3VpZCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KIA0KIFtQY2RdDQogICBnVWVm aUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdUhvdFBsdWdEYXRhQWRkcmVzcyAgICAgICAgICAg ICAgICAjIyBDT05TVU1FUw0KICAgZ1VlZmlPdm1mUGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1U21y YW1BdERlZmF1bHRTbWJhc2UgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCiANCiBbRmVhdHVyZVBj ZF0NCiAgIGdVZWZpT3ZtZlBrZ1Rva2VuU3BhY2VHdWlkLlBjZFNtbVNtcmFtUmVxdWlyZSAgICAg ICAgICAgICAgICAgICAgICMjIENPTlNVTUVTDQogDQogW0RlcGV4XQ0KICAgZ0VmaU1tQ3B1SW9Q cm90b2NvbEd1aWQgQU5EDQogICBnRWZpU21tQ3B1U2VydmljZVByb3RvY29sR3VpZA0KZGlmZiAt LWdpdCBhL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9GaXJzdFNtaUhhbmRsZXJDb250ZXh0LmggYi9P dm1mUGtnL0NwdUhvdHBsdWdTbW0vRmlyc3RTbWlIYW5kbGVyQ29udGV4dC5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uMDI5ZGU0Y2RlYTM1Ci0tLSAvZGV2L251bGwK KysrIGIvT3ZtZlBrZy9DcHVIb3RwbHVnU21tL0ZpcnN0U21pSGFuZGxlckNvbnRleHQuaApAQCAt MCwwICsxLDQ3IEBACisvKiogQGZpbGUNCisgIERlZmluZSB0aGUgRklSU1RfU01JX0hBTkRMRVJf Q09OVEVYVCBzdHJ1Y3R1cmUsIHdoaWNoIGlzIGFuIGV4Y2hhbmdlIGFyZWENCisgIGJldHdlZW4g dGhlIFNNTSBNb25hcmNoIGFuZCB0aGUgaG90LWFkZGVkIENQVSwgZm9yIHJlbG9jYXRpbmcgdGhl IFNNQkFTRSBvZg0KKyAgdGhlIGhvdC1hZGRlZCBDUFUuDQorDQorICBDb3B5cmlnaHQgKGMpIDIw MjAsIFJlZCBIYXQsIEluYy4NCisNCisgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQorKiovDQorDQorI2lmbmRlZiBGSVJTVF9TTUlfSEFORExFUl9DT05URVhU X0hfDQorI2RlZmluZSBGSVJTVF9TTUlfSEFORExFUl9DT05URVhUX0hfDQorDQorLy8NCisvLyBU aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyB1c2VkIHRvIGNvbW11bmljYXRlIGJldHdlZW4gdGhl IFNNTSBNb25hcmNoDQorLy8gKHJ1bm5pbmcgdGhlIHJvb3QgTU1JIGhhbmRsZXIpIGFuZCB0aGUg aG90LWFkZGVkIENQVSAoaGFuZGxpbmcgaXRzIGZpcnN0DQorLy8gU01JKS4gSXQgaXMgcGxhY2Vk IGF0IFNNTV9ERUZBVUxUX1NNQkFTRSwgd2hpY2ggaXMgaW4gU01SQU0gdW5kZXIgUUVNVSdzDQor Ly8gIlNNUkFNIGF0IGRlZmF1bHQgU01CQVNFIiBmZWF0dXJlLg0KKy8vDQorI3ByYWdtYSBwYWNr ICgxKQ0KK3R5cGVkZWYgc3RydWN0IHsNCisgIC8vDQorICAvLyBXaGVuIEFwaWNJZEdhdGUgaXMg TUFYX1VJTlQ2NCwgdGhlbiBubyBob3QtYWRkZWQgQ1BVIG1heSBwcm9jZWVkIHdpdGgNCisgIC8v IFNNQkFTRSByZWxvY2F0aW9uLg0KKyAgLy8NCisgIC8vIE90aGVyd2lzZSwgdGhlIGhvdC1hZGRl ZCBDUFUgd2hvc2UgQVBJQyBJRCBlcXVhbHMgQXBpY0lkR2F0ZSBtYXkgcHJvY2VlZA0KKyAgLy8g d2l0aCBTTUJBU0UgcmVsb2NhdGlvbi4NCisgIC8vDQorICAvLyBUaGlzIGZpZWxkIGlzIGludGVu dGlvbmFsbHkgd2lkZXIgdGhhbiBBUElDX0lEIChVSU5UMzIpIGJlY2F1c2Ugd2UgbmVlZCBhDQor ICAvLyAiZ2F0ZSBsb2NrZWQiIHZhbHVlIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gYWxsIHBvc3Np YmxlIEFQSUNfSURzLg0KKyAgLy8NCisgIFVJTlQ2NCBBcGljSWRHYXRlOw0KKyAgLy8NCisgIC8v IFRoZSBuZXcgU01CQVNFIHZhbHVlIGZvciB0aGUgaG90LWFkZGVkIENQVSB0byBzZXQgaW4gdGhl IFNNUkFNIFNhdmUgU3RhdGUNCisgIC8vIE1hcCwgYmVmb3JlIGxlYXZpbmcgU01NIHdpdGggdGhl IFJTTSBpbnN0cnVjdGlvbi4NCisgIC8vDQorICBVSU5UMzIgTmV3U21iYXNlOw0KKyAgLy8NCisg IC8vIFRoZSBob3QtYWRkZWQgQ1BVIHNldHMgdGhpcyBmaWVsZCB0byAxIHJpZ2h0IGJlZm9yZSBl eGVjdXRpbmcgdGhlIFJTTQ0KKyAgLy8gaW5zdHJ1Y3Rpb24uIFRoaXMgdGVsbHMgdGhlIFNNTSBN b25hcmNoIHRvIHByb2NlZWQgdG8gcG9sbGluZyB0aGUgbGFzdA0KKyAgLy8gYnl0ZSBvZiB0aGUg bm9ybWFsIFJBTSByZXNlcnZlZCBwYWdlIChQb3N0LVNNTSBQZW4pLg0KKyAgLy8NCisgIFVJTlQ4 IEFib3V0VG9MZWF2ZVNtbTsNCit9IEZJUlNUX1NNSV9IQU5ETEVSX0NPTlRFWFQ7DQorI3ByYWdt YSBwYWNrICgpDQorDQorI2VuZGlmIC8vIEZJUlNUX1NNSV9IQU5ETEVSX0NPTlRFWFRfSF8NCmRp ZmYgLS1naXQgYS9Pdm1mUGtnL0NwdUhvdHBsdWdTbW0vU21iYXNlLmggYi9Pdm1mUGtnL0NwdUhv dHBsdWdTbW0vU21iYXNlLmgKaW5kZXggY2I1YWVkOThjZGQzLi5lNzM3MzBkMTk5MjYgMTAwNjQ0 Ci0tLSBhL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9TbWJhc2UuaAorKysgYi9Pdm1mUGtnL0NwdUhv dHBsdWdTbW0vU21iYXNlLmgKQEAgLTEsMzIgKzEsNDYgQEAKIC8qKiBAZmlsZQ0KICAgU01CQVNF IHJlbG9jYXRpb24gZm9yIGhvdC1wbHVnZ2VkIENQVXMuDQogDQogICBDb3B5cmlnaHQgKGMpIDIw MjAsIFJlZCBIYXQsIEluYy4NCiANCiAgIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1D bGF1c2UtUGF0ZW50DQogKiovDQogDQogI2lmbmRlZiBTTUJBU0VfSF8NCiAjZGVmaW5lIFNNQkFT RV9IXw0KIA0KICNpbmNsdWRlIDxVZWZpL1VlZmlCYXNlVHlwZS5oPiAvLyBFRklfU1RBVFVTDQog I2luY2x1ZGUgPFVlZmkvVWVmaVNwZWMuaD4gICAgIC8vIEVGSV9CT09UX1NFUlZJQ0VTDQogDQor I2luY2x1ZGUgIkFwaWNJZC5oIiAgICAgICAgICAgIC8vIEFQSUNfSUQNCisNCiBFRklfU1RBVFVT DQogU21iYXNlQWxsb2NhdGVQb3N0U21tUGVuICgNCiAgIE9VVCBVSU5UMzIgICAgICAgICAgICAg ICAgICAqUGVuQWRkcmVzcywNCiAgIElOICBDT05TVCBFRklfQk9PVF9TRVJWSUNFUyAqQm9vdFNl cnZpY2VzDQogICApOw0KIA0KIFZPSUQNCiBTbWJhc2VSZWluc3RhbGxQb3N0U21tUGVuICgNCiAg IElOIFVJTlQzMiBQZW5BZGRyZXNzDQogICApOw0KIA0KIFZPSUQNCiBTbWJhc2VSZWxlYXNlUG9z dFNtbVBlbiAoDQogICBJTiBVSU5UMzIgICAgICAgICAgICAgICAgICBQZW5BZGRyZXNzLA0KICAg SU4gQ09OU1QgRUZJX0JPT1RfU0VSVklDRVMgKkJvb3RTZXJ2aWNlcw0KICAgKTsNCiANCitWT0lE DQorU21iYXNlSW5zdGFsbEZpcnN0U21pSGFuZGxlciAoDQorICBWT0lEDQorICApOw0KKw0KK0VG SV9TVEFUVVMNCitTbWJhc2VSZWxvY2F0ZSAoDQorICBJTiBBUElDX0lEIEFwaWNJZCwNCisgIElO IFVJTlROICAgU21iYXNlLA0KKyAgSU4gVUlOVDMyICBQZW5BZGRyZXNzDQorICApOw0KKw0KICNl bmRpZiAvLyBTTUJBU0VfSF8NCmRpZmYgLS1naXQgYS9Pdm1mUGtnL0NwdUhvdHBsdWdTbW0vRmly c3RTbWlIYW5kbGVyLm5hc20gYi9Pdm1mUGtnL0NwdUhvdHBsdWdTbW0vRmlyc3RTbWlIYW5kbGVy Lm5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41Mzk5YjVmYTQz ODcKLS0tIC9kZXYvbnVsbAorKysgYi9Pdm1mUGtnL0NwdUhvdHBsdWdTbW0vRmlyc3RTbWlIYW5k bGVyLm5hc20KQEAgLTAsMCArMSwxNTQgQEAKKzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCis7IEBm aWxlDQorOyBSZWxvY2F0ZSB0aGUgU01CQVNFIG9uIGEgaG90LWFkZGVkIENQVSB3aGVuIGl0IHNl cnZpY2VzIGl0cyBmaXJzdCBTTUkuDQorOw0KKzsgQ29weXJpZ2h0IChjKSAyMDIwLCBSZWQgSGF0 LCBJbmMuDQorOw0KKzsgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCis7DQorOyBUaGUgcm91dGluZSBydW5zIG9uIHRoZSBob3QtYWRkZWQgQ1BVIGluIHRoZSBm b2xsb3dpbmcgImJpZyByZWFsIG1vZGUiLA0KKzsgMTYtYml0IGVudmlyb25tZW50OyBwZXIgIlNN SSBIQU5ETEVSIEVYRUNVVElPTiBFTlZJUk9OTUVOVCIgaW4gdGhlIEludGVsIFNETQ0KKzsgKHRh YmxlICJQcm9jZXNzb3IgUmVnaXN0ZXIgSW5pdGlhbGl6YXRpb24gaW4gU01NIik6DQorOw0KKzsg IC0gQ1Mgc2VsZWN0b3I6IDB4MzAwMCAobW9zdCBzaWduaWZpY2FudCAxNiBiaXRzIG9mIFNNTV9E RUZBVUxUX1NNQkFTRSkuDQorOw0KKzsgIC0gQ1MgbGltaXQ6IDB4RkZGRl9GRkZGLg0KKzsNCis7 ICAtIENTIGJhc2U6IFNNTV9ERUZBVUxUX1NNQkFTRSAoMHgzXzAwMDApLg0KKzsNCis7ICAtIElQ OiBTTU1fSEFORExFUl9PRkZTRVQgKDB4ODAwMCkuDQorOw0KKzsgIC0gRVMsIFNTLCBEUywgRlMs IEdTIHNlbGVjdG9yczogMC4NCis7DQorOyAgLSBFUywgU1MsIERTLCBGUywgR1MgbGltaXRzOiAw eEZGRkZfRkZGRi4NCis7DQorOyAgLSBFUywgU1MsIERTLCBGUywgR1MgYmFzZXM6IDAuDQorOw0K KzsgIC0gT3BlcmFuZC1zaXplIGFuZCBhZGRyZXNzLXNpemUgb3ZlcnJpZGUgcHJlZml4ZXMgY2Fu IGJlIHVzZWQgdG8gYWNjZXNzIHRoZQ0KKzsgICAgYWRkcmVzcyBzcGFjZSBiZXlvbmQgMU1CLg0K KzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisNCitTRUNUSU9OIC5kYXRhDQorQklUUyAxNg0KKw0K KzsNCis7IEJyaW5nIGluIFNNTV9ERUZBVUxUX1NNQkFTRSBmcm9tDQorOyAiTWRlUGtnL0luY2x1 ZGUvUmVnaXN0ZXIvSW50ZWwvU21yYW1TYXZlU3RhdGVNYXAuaCIuDQorOw0KK1NNTV9ERUZBVUxU X1NNQkFTRTogZXF1IDB4M18wMDAwDQorDQorOw0KKzsgRmllbGQgb2Zmc2V0cyBpbiBGSVJTVF9T TUlfSEFORExFUl9DT05URVhULCB3aGljaCByZXNpZGVzIGF0DQorOyBTTU1fREVGQVVMVF9TTUJB U0UuDQorOw0KK0FwaWNJZEdhdGU6ICAgICAgZXF1ICAwIDsgVUlOVDY0DQorTmV3U21iYXNlOiAg ICAgICBlcXUgIDggOyBVSU5UMzINCitBYm91dFRvTGVhdmVTbW06IGVxdSAxMiA7IFVJTlQ4DQor DQorOw0KKzsgU01SQU0gU2F2ZSBTdGF0ZSBNYXAgZmllbGQgb2Zmc2V0cywgcGVyIHRoZSBBTUQg KG5vdCBJbnRlbCkgbGF5b3V0IHRoYXQgUUVNVQ0KKzsgaW1wbGVtZW50cy4gUmVsYXRpdmUgdG8g U01NX0RFRkFVTFRfU01CQVNFLg0KKzsNCitTYXZlU3RhdGVSZXZJZDogICAgZXF1IDB4RkVGQyA7 IFVJTlQzMg0KK1NhdmVTdGF0ZVNtYmFzZTogICBlcXUgMHhGRUY4IDsgVUlOVDMyDQorU2F2ZVN0 YXRlU21iYXNlNjQ6IGVxdSAweEZGMDAgOyBVSU5UMzINCisNCis7DQorOyBDUFVJRCBjb25zdGFu dHMsIGZyb20gIk1kZVBrZy9JbmNsdWRlL1JlZ2lzdGVyL0ludGVsL0NwdWlkLmgiLg0KKzsNCitD UFVJRF9TSUdOQVRVUkU6ICAgICAgICAgZXF1IDB4MDANCitDUFVJRF9FWFRFTkRFRF9UT1BPTE9H WTogZXF1IDB4MEINCitDUFVJRF9WRVJTSU9OX0lORk86ICAgICAgZXF1IDB4MDENCisNCitHTE9C QUwgQVNNX1BGWCAobUZpcnN0U21pSGFuZGxlcikgICAgIDsgVUlOVDhbXQ0KK0dMT0JBTCBBU01f UEZYIChtRmlyc3RTbWlIYW5kbGVyU2l6ZSkgOyBVSU5UMTYNCisNCitBU01fUEZYIChtRmlyc3RT bWlIYW5kbGVyKToNCisgIDsNCisgIDsgR2V0IG91ciBvd24gQVBJQyBJRCBmaXJzdCwgc28gd2Ug Y2FuIGNvbnRlbmQgZm9yIEFwaWNJZEdhdGUuDQorICA7DQorICA7IFRoaXMgYmFzaWNhbGx5IHJl aW1wbGVtZW50cyBHZXRJbml0aWFsQXBpY0lkKCkgZnJvbQ0KKyAgOyAiVWVmaUNwdVBrZy9MaWJy YXJ5L0Jhc2VYQXBpY0xpYi9CYXNlWEFwaWNMaWIuYyIuDQorICA7DQorICBtb3YgZWF4LCBDUFVJ RF9TSUdOQVRVUkUNCisgIGNwdWlkDQorICBjbXAgZWF4LCBDUFVJRF9FWFRFTkRFRF9UT1BPTE9H WQ0KKyAgamIgR2V0QXBpY0lkRnJvbVZlcnNpb25JbmZvDQorDQorICBtb3YgZWF4LCBDUFVJRF9F WFRFTkRFRF9UT1BPTE9HWQ0KKyAgbW92IGVjeCwgMA0KKyAgY3B1aWQNCisgIHRlc3QgZWJ4LCAw eEZGRkYNCisgIGp6IEdldEFwaWNJZEZyb21WZXJzaW9uSW5mbw0KKw0KKyAgOw0KKyAgOyBFRFgg aGFzIHRoZSBBUElDIElELCBzYXZlIGl0IHRvIEVTSS4NCisgIDsNCisgIG1vdiBlc2ksIGVkeA0K KyAgam1wIEtub2NrT25HYXRlDQorDQorR2V0QXBpY0lkRnJvbVZlcnNpb25JbmZvOg0KKyAgbW92 IGVheCwgQ1BVSURfVkVSU0lPTl9JTkZPDQorICBjcHVpZA0KKyAgc2hyIGVieCwgMjQNCisgIDsN CisgIDsgRUJYIGhhcyB0aGUgQVBJQyBJRCwgc2F2ZSBpdCB0byBFU0kuDQorICA7DQorICBtb3Yg ZXNpLCBlYngNCisNCitLbm9ja09uR2F0ZToNCisgIDsNCisgIDsgU2VlIGlmIEFwaWNJZEdhdGUg c2hvd3Mgb3VyIG93biBBUElDIElELiBJZiBzbywgc3dhcCBpdCB0byBNQVhfVUlOVDY0DQorICA7 IChjbG9zZSB0aGUgZ2F0ZSksIGFuZCBhZHZhbmNlLiBPdGhlcndpc2UsIGtlZXAga25vY2tpbmcu DQorICA7DQorICA7IEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlNjQoKToNCisgIDsgLSBWYWx1 ZSAgICAgICAgICAgICAgICAgICA6PSAmRklSU1RfU01JX0hBTkRMRVJfQ09OVEVYVC5BcGljSWRH YXRlDQorICA7IC0gQ29tcGFyZVZhbHVlICAoRURYOkVBWCkgOj0gQVBJQyBJRCAoZnJvbSBFU0kp DQorICA7IC0gRXhjaGFuZ2VWYWx1ZSAoRUNYOkVCWCkgOj0gTUFYX1VJTlQ2NA0KKyAgOw0KKyAg bW92IGVkeCwgMA0KKyAgbW92IGVheCwgZXNpDQorICBtb3YgZWN4LCAweEZGRkZfRkZGRg0KKyAg bW92IGVieCwgMHhGRkZGX0ZGRkYNCisgIGxvY2sgY21weGNoZzhiIFtkcyA6IGR3b3JkIChTTU1f REVGQVVMVF9TTUJBU0UgKyBBcGljSWRHYXRlKV0NCisgIGp6IEFwaWNJZE1hdGNoDQorICBwYXVz ZQ0KKyAgam1wIEtub2NrT25HYXRlDQorDQorQXBpY0lkTWF0Y2g6DQorICA7DQorICA7IFVwZGF0 ZSB0aGUgU01CQVNFIGZpZWxkIGluIHRoZSBTTVJBTSBTYXZlIFN0YXRlIE1hcC4NCisgIDsNCisg IDsgRmlyc3QsIGNhbGN1bGF0ZSB0aGUgYWRkcmVzcyBvZiB0aGUgU01CQVNFIGZpZWxkLCBiYXNl ZCBvbiB0aGUgU01NIFJldmlzaW9uDQorICA7IElEOyBzdG9yZSB0aGUgcmVzdWx0IGluIEVCWC4N CisgIDsNCisgIG1vdiBlYXgsIGR3b3JkIFtkcyA6IGR3b3JkIChTTU1fREVGQVVMVF9TTUJBU0Ug KyBTYXZlU3RhdGVSZXZJZCldDQorICB0ZXN0IGVheCwgMHhGRkZGDQorICBqeiBMZWdhY3lTYXZl U3RhdGVNYXANCisNCisgIG1vdiBlYngsIFNNTV9ERUZBVUxUX1NNQkFTRSArIFNhdmVTdGF0ZVNt YmFzZTY0DQorICBqbXAgVXBkYXRlU21iYXNlDQorDQorTGVnYWN5U2F2ZVN0YXRlTWFwOg0KKyAg bW92IGVieCwgU01NX0RFRkFVTFRfU01CQVNFICsgU2F2ZVN0YXRlU21iYXNlDQorDQorVXBkYXRl U21iYXNlOg0KKyAgOw0KKyAgOyBMb2FkIHRoZSBuZXcgU01CQVNFIHZhbHVlIGludG8gRUFYLg0K KyAgOw0KKyAgbW92IGVheCwgZHdvcmQgW2RzIDogZHdvcmQgKFNNTV9ERUZBVUxUX1NNQkFTRSAr IE5ld1NtYmFzZSldDQorICA7DQorICA7IFNhdmUgaXQgdG8gdGhlIFNNQkFTRSBmaWVsZCB3aG9z ZSBhZGRyZXNzIHdlIGNhbGN1bGF0ZWQgaW4gRUJYLg0KKyAgOw0KKyAgbW92IGR3b3JkIFtkcyA6 IGR3b3JkIGVieF0sIGVheA0KKyAgOw0KKyAgOyBTZXQgQWJvdXRUb0xlYXZlU21tLg0KKyAgOw0K KyAgbW92IGJ5dGUgW2RzIDogZHdvcmQgKFNNTV9ERUZBVUxUX1NNQkFTRSArIEFib3V0VG9MZWF2 ZVNtbSldLCAxDQorICA7DQorICA7IFdlJ3JlIGRvbmU7IGxlYXZlIFNNTSBhbmQgY29udGludWUg dG8gdGhlIHBlbi4NCisgIDsNCisgIHJzbQ0KKw0KK0FTTV9QRlggKG1GaXJzdFNtaUhhbmRsZXJT aXplKToNCisgIGR3ICQgLSBBU01fUEZYIChtRmlyc3RTbWlIYW5kbGVyKQ0KZGlmZiAtLWdpdCBh L092bWZQa2cvQ3B1SG90cGx1Z1NtbS9TbWJhc2UuYyBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9T bWJhc2UuYwppbmRleCBlYTIxMTUzZDkxNDUuLjE3MDU3MTIyMWQ4NCAxMDA2NDQKLS0tIGEvT3Zt ZlBrZy9DcHVIb3RwbHVnU21tL1NtYmFzZS5jCisrKyBiL092bWZQa2cvQ3B1SG90cGx1Z1NtbS9T bWJhc2UuYwpAQCAtMSwzOCArMSw0NiBAQAogLyoqIEBmaWxlDQogICBTTUJBU0UgcmVsb2NhdGlv biBmb3IgaG90LXBsdWdnZWQgQ1BVcy4NCiANCiAgIENvcHlyaWdodCAoYykgMjAyMCwgUmVkIEhh dCwgSW5jLg0KIA0KICAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0yLUNsYXVzZS1QYXRl bnQNCiAqKi8NCiANCiAjaW5jbHVkZSA8QmFzZS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gQkFTRV8xTUINCisjaW5jbHVkZSA8TGlicmFyeS9CYXNlTGliLmg+ICAgICAgICAgICAg ICAgICAgLy8gQ3B1UGF1c2UoKQ0KICNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlMaWIuaD4g ICAgICAgICAgICAvLyBDb3B5TWVtKCkNCiAjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPiAg ICAgICAgICAgICAgICAgLy8gREVCVUcoKQ0KKyNpbmNsdWRlIDxMaWJyYXJ5L0xvY2FsQXBpY0xp Yi5oPiAgICAgICAgICAgICAvLyBTZW5kSW5pdFNpcGlTaXBpKCkNCisjaW5jbHVkZSA8TGlicmFy eS9TeW5jaHJvbml6YXRpb25MaWIuaD4gICAgICAgLy8gSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFu Z2U2NCgpDQorI2luY2x1ZGUgPFJlZ2lzdGVyL0ludGVsL1NtcmFtU2F2ZVN0YXRlTWFwLmg+IC8v IFNNTV9ERUZBVUxUX1NNQkFTRQ0KKw0KKyNpbmNsdWRlICJGaXJzdFNtaUhhbmRsZXJDb250ZXh0 LmgiICAgICAgICAgICAvLyBGSVJTVF9TTUlfSEFORExFUl9DT05URVhUDQogDQogI2luY2x1ZGUg IlNtYmFzZS5oIg0KIA0KIGV4dGVybiBDT05TVCBVSU5UOCBtUG9zdFNtbVBlbltdOw0KIGV4dGVy biBDT05TVCBVSU5UMTYgbVBvc3RTbW1QZW5TaXplOw0KK2V4dGVybiBDT05TVCBVSU5UOCBtRmly c3RTbWlIYW5kbGVyW107DQorZXh0ZXJuIENPTlNUIFVJTlQxNiBtRmlyc3RTbWlIYW5kbGVyU2l6 ZTsNCiANCiAvKioNCiAgIEFsbG9jYXRlIGEgbm9uLVNNUkFNIHJlc2VydmVkIG1lbW9yeSBwYWdl IGZvciB0aGUgUG9zdC1TTU0gUGVuIGZvciBob3QtYWRkZWQNCiAgIENQVXMuDQogDQogICBUaGlz IGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBlbnRyeSBwb2ludCBmdW5jdGlv biBvZiB0aGUgZHJpdmVyLg0KIA0KICAgQHBhcmFtW291dF0gUGVuQWRkcmVzcyAgIFRoZSBhZGRy ZXNzIG9mIHRoZSBhbGxvY2F0ZWQgKG5vcm1hbCBSQU0pIHJlc2VydmVkDQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGFnZS4NCiANCiAgIEBwYXJhbVtpbl0gQm9vdFNlcnZpY2VzICBQb2lu dGVyIHRvIHRoZSBVRUZJIGJvb3Qgc2VydmljZXMgdGFibGUuIFVzZWQgZm9yDQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWxsb2NhdGluZyB0aGUgbm9ybWFsIFJBTSAobm90IFNNUkFNKSBy ZXNlcnZlZCBwYWdlLg0KIA0KICAgQHJldHZhbCBFRklfU1VDQ0VTUyAgICAgICAgICBBbGxvY2F0 aW9uIHN1Y2Nlc3NmdWwuDQogDQogICBAcmV0dmFsIEVGSV9CQURfQlVGRkVSX1NJWkUgIFRoZSBQ b3N0LVNNTSBQZW4gdGVtcGxhdGUgaXMgbm90IHNtYWxsZXIgdGhhbg0KICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFRklfUEFHRV9TSVpFLg0KIA0KICAgQHJldHVybiAgICAgICAgICAg ICAgICAgICAgICBFcnJvciBjb2RlcyBwcm9wYWdhdGVkIGZyb20gdW5kZXJseWluZyBzZXJ2aWNl cy4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdfRVJST1IgbWVzc2FnZXMg aGF2ZSBiZWVuIGxvZ2dlZC4gTm8NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVz b3VyY2VzIGhhdmUgYmVlbiBhbGxvY2F0ZWQuDQogKiovDQpAQCAtODksMjIgKzk3LDE3MSBAQCBT bWJhc2VSZWluc3RhbGxQb3N0U21tUGVuICgKIH0NCiANCiAvKioNCiAgIFJlbGVhc2UgdGhlIHJl c2VydmVkIHBhZ2UgYWxsb2NhdGVkIHdpdGggU21iYXNlQWxsb2NhdGVQb3N0U21tUGVuKCkuDQog DQogICBUaGlzIGZ1bmN0aW9uIG1heSBvbmx5IGJlIGNhbGxlZCBmcm9tIHRoZSBlbnRyeSBwb2lu dCBmdW5jdGlvbiBvZiB0aGUgZHJpdmVyLA0KICAgb24gdGhlIGVycm9yIHBhdGguDQogDQogICBA cGFyYW1baW5dIFBlbkFkZHJlc3MgICAgVGhlIGFsbG9jYXRpb24gYWRkcmVzcyByZXR1cm5lZCBi eQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNtYmFzZUFsbG9jYXRlUG9zdFNtbVBlbigp Lg0KIA0KICAgQHBhcmFtW2luXSBCb290U2VydmljZXMgIFBvaW50ZXIgdG8gdGhlIFVFRkkgYm9v dCBzZXJ2aWNlcyB0YWJsZS4gVXNlZCBmb3INCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWxlYXNpbmcgdGhlIG5vcm1hbCBSQU0gKG5vdCBTTVJBTSkgcmVzZXJ2ZWQgcGFnZS4NCiAqKi8N CiBWT0lEDQogU21iYXNlUmVsZWFzZVBvc3RTbW1QZW4gKA0KICAgSU4gVUlOVDMyICAgICAgICAg ICAgICAgICAgUGVuQWRkcmVzcywNCiAgIElOIENPTlNUIEVGSV9CT09UX1NFUlZJQ0VTICpCb290 U2VydmljZXMNCiAgICkNCiB7DQogICBCb290U2VydmljZXMtPkZyZWVQYWdlcyAoUGVuQWRkcmVz cywgMSk7DQogfQ0KKw0KKy8qKg0KKyAgUGxhY2UgdGhlIGhhbmRsZXIgcm91dGluZSBmb3IgdGhl IGZpcnN0IFNNSXMgb2YgaG90LWFkZGVkIENQVXMgYXQNCisgIChTTU1fREVGQVVMVF9TTUJBU0Ug KyBTTU1fSEFORExFUl9PRkZTRVQpLg0KKw0KKyAgTm90ZSB0aGF0IHRoaXMgZWZmZWN0cyBhbiAi U01SQU0gdG8gU01SQU0iIGNvcHkuDQorDQorICBBZGRpdGlvbmFsbHksIHNodXQgdGhlIEFQSUMg SUQgZ2F0ZSBpbiBGSVJTVF9TTUlfSEFORExFUl9DT05URVhULg0KKw0KKyAgVGhpcyBmdW5jdGlv biBtYXkgb25seSBiZSBjYWxsZWQgZnJvbSB0aGUgZW50cnkgcG9pbnQgZnVuY3Rpb24gb2YgdGhl IGRyaXZlciwNCisgIGFuZCBvbmx5IGFmdGVyIFBjZFEzNVNtcmFtQXREZWZhdWx0U21iYXNlIGhh cyBiZWVuIGRldGVybWluZWQgdG8gYmUgVFJVRS4NCisqKi8NCitWT0lEDQorU21iYXNlSW5zdGFs bEZpcnN0U21pSGFuZGxlciAoDQorICBWT0lEDQorICApDQorew0KKyAgRklSU1RfU01JX0hBTkRM RVJfQ09OVEVYVCAqQ29udGV4dDsNCisNCisgIENvcHlNZW0gKChWT0lEICopKFVJTlROKShTTU1f REVGQVVMVF9TTUJBU0UgKyBTTU1fSEFORExFUl9PRkZTRVQpLA0KKyAgICBtRmlyc3RTbWlIYW5k bGVyLCBtRmlyc3RTbWlIYW5kbGVyU2l6ZSk7DQorDQorICBDb250ZXh0ID0gKFZPSUQgKikoVUlO VE4pU01NX0RFRkFVTFRfU01CQVNFOw0KKyAgQ29udGV4dC0+QXBpY0lkR2F0ZSA9IE1BWF9VSU5U NjQ7DQorfQ0KKw0KKy8qKg0KKyAgUmVsb2NhdGUgdGhlIFNNQkFTRSBvbiBhIGhvdC1hZGRlZCBD UFUuIFRoZW4gcGVuIHRoZSBob3QtYWRkZWQgQ1BVIGluIHRoZQ0KKyAgbm9ybWFsIFJBTSByZXNl cnZlZCBtZW1vcnkgcGFnZSwgc2V0IHVwIGVhcmxpZXIgd2l0aA0KKyAgU21iYXNlQWxsb2NhdGVQ b3N0U21tUGVuKCkgYW5kIFNtYmFzZVJlaW5zdGFsbFBvc3RTbW1QZW4oKS4NCisNCisgIFRoZSBT TU0gTW9uYXJjaCBpcyBzdXBwb3NlZCB0byBjYWxsIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgcm9v dCBNTUkgaGFuZGxlci4NCisNCisgIFRoZSBTTU0gTW9uYXJjaCBpcyByZXNwb25zaWJsZSBmb3Ig Y2FsbGluZyBTbWJhc2VJbnN0YWxsRmlyc3RTbWlIYW5kbGVyKCksDQorICBTbWJhc2VBbGxvY2F0 ZVBvc3RTbW1QZW4oKSwgYW5kIFNtYmFzZVJlaW5zdGFsbFBvc3RTbW1QZW4oKSBiZWZvcmUgY2Fs bGluZw0KKyAgdGhpcyBmdW5jdGlvbi4NCisNCisgIElmIHRoZSBPUyBtYWxpY2lvdXNseSBib290 cyB0aGUgaG90LWFkZGVkIENQVSBhaGVhZCBvZiBsZXR0aW5nIHRoZSBBQ1BJIENQVQ0KKyAgaG90 cGx1ZyBldmVudCBoYW5kbGVyIGJyb2FkY2FzdCB0aGUgQ1BVIGhvdHBsdWcgTU1JLCB0aGVuIHRo ZSBob3QtYWRkZWQgQ1BVDQorICByZXR1cm5zIHRvIHRoZSBPUyByYXRoZXIgdGhhbiB0byB0aGUg cGVuLCB1cG9uIFJTTS4gSW4gdGhhdCBjYXNlLCB0aGlzDQorICBmdW5jdGlvbiB3aWxsIGhhbmcg Zm9yZXZlciAodW5sZXNzIHRoZSBPUyBoYXBwZW5zIHRvIHNpZ25hbCBiYWNrIHRocm91Z2ggdGhl DQorICBsYXN0IGJ5dGUgb2YgdGhlIHBlbiBwYWdlKS4NCisNCisgIEBwYXJhbVtpbl0gQXBpY0lk ICAgICAgVGhlIEFQSUMgSUQgb2YgdGhlIGhvdC1hZGRlZCBDUFUgd2hvc2UgU01CQVNFIHNob3Vs ZA0KKyAgICAgICAgICAgICAgICAgICAgICAgICBiZSByZWxvY2F0ZWQuDQorDQorICBAcGFyYW1b aW5dIFNtYmFzZSAgICAgIFRoZSBuZXcgU01CQVNFIGFkZHJlc3MuIFRoZSByb290IE1NSSBoYW5k bGVyIGlzDQorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNpYmxlIGZvciBwYXNzaW5n IGluIGEgZnJlZSAoInVub2NjdXBpZWQiKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICBTTUJB U0UgYWRkcmVzcyB0aGF0IHdhcyBwcmUtY29uZmlndXJlZCBieQ0KKyAgICAgICAgICAgICAgICAg ICAgICAgICBQaVNtbUNwdUR4ZVNtbSBpbiBDUFVfSE9UX1BMVUdfREFUQS4NCisNCisgIEBwYXJh bVtpbl0gUGVuQWRkcmVzcyAgVGhlIGFkZHJlc3Mgb2YgdGhlIFBvc3QtU01NIFBlbiBmb3IgaG90 LWFkZGVkIENQVXMsIGFzDQorICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybmVkIGJ5IFNt YmFzZUFsbG9jYXRlUG9zdFNtbVBlbigpLCBhbmQgaW5zdGFsbGVkDQorICAgICAgICAgICAgICAg ICAgICAgICAgIGJ5IFNtYmFzZVJlaW5zdGFsbFBvc3RTbW1QZW4oKS4NCisNCisgIEByZXR2YWwg RUZJX1NVQ0NFU1MgICAgICAgICAgICBUaGUgU01CQVNFIG9mIHRoZSBob3QtYWRkZWQgQ1BVIHdp dGggQVBJQyBJRA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFwaWNJZCBoYXMg YmVlbiByZWxvY2F0ZWQgdG8gU21iYXNlLiBUaGUNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBob3QtYWRkZWQgQ1BVIGhhcyByZXBvcnRlZCBiYWNrIGFib3V0IGxlYXZpbmcNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTU0uDQorDQorICBAcmV0dmFsIEVGSV9Q Uk9UT0NPTF9FUlJPUiAgICAgU3luY2hyb25pemF0aW9uIGJ1ZyBlbmNvdW50ZXJlZCBhcm91bmQN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSVJTVF9TTUlfSEFORExFUl9DT05U RVhULkFwaWNJZEdhdGUuDQorDQorICBAcmV0dmFsIEVGSV9JTlZBTElEX1BBUkFNRVRFUiAgU21i YXNlIGRvZXMgbm90IGZpdCBpbiAzMiBiaXRzLiBObyByZWxvY2F0aW9uDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaGFzIGJlZW4gYXR0ZW1wdGVkLg0KKyoqLw0KK0VGSV9TVEFU VVMNCitTbWJhc2VSZWxvY2F0ZSAoDQorICBJTiBBUElDX0lEIEFwaWNJZCwNCisgIElOIFVJTlRO ICAgU21iYXNlLA0KKyAgSU4gVUlOVDMyICBQZW5BZGRyZXNzDQorICApDQorew0KKyAgRUZJX1NU QVRVUyAgICAgICAgICAgICAgICAgICAgICAgICBTdGF0dXM7DQorICB2b2xhdGlsZSBVSU5UOCAg ICAgICAgICAgICAgICAgICAgICpTbW1WYWNhdGVkOw0KKyAgdm9sYXRpbGUgRklSU1RfU01JX0hB TkRMRVJfQ09OVEVYVCAqQ29udGV4dDsNCisgIFVJTlQ2NCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRXhjaGFuZ2VSZXN1bHQ7DQorDQorICBpZiAoU21iYXNlID4gTUFYX1VJTlQzMikgew0K KyAgICBTdGF0dXMgPSBFRklfSU5WQUxJRF9QQVJBTUVURVI7DQorICAgIERFQlVHICgoREVCVUdf RVJST1IsICIlYTogQXBpY0lkPSIgRk1UX0FQSUNfSUQgIiBTbWJhc2U9MHglTHg6ICVyXG4iLA0K KyAgICAgIF9fRlVOQ1RJT05fXywgQXBpY0lkLCAoVUlOVDY0KVNtYmFzZSwgU3RhdHVzKSk7DQor ICAgIHJldHVybiBTdGF0dXM7DQorICB9DQorDQorICBTbW1WYWNhdGVkID0gKFVJTlQ4ICopKFVJ TlROKVBlbkFkZHJlc3MgKyAoRUZJX1BBR0VfU0laRSAtIDEpOw0KKyAgQ29udGV4dCA9IChWT0lE ICopKFVJTlROKVNNTV9ERUZBVUxUX1NNQkFTRTsNCisNCisgIC8vDQorICAvLyBDbGVhciBBYm91 dFRvTGVhdmVTbW0sIHNvIHdlIG5vdGljZSB3aGVuIHRoZSBob3QtYWRkZWQgQ1BVIGlzIGp1c3Qg YWJvdXQNCisgIC8vIHRvIHJlYWNoIFJTTSwgYW5kIHdlIGNhbiBwcm9jZWVkIHRvIHBvbGxpbmcg dGhlIGxhc3QgYnl0ZSBvZiB0aGUgcmVzZXJ2ZWQNCisgIC8vIHBhZ2UgKHdoaWNoIGNvdWxkIGJl IGF0dGFja2VkIGJ5IHRoZSBPUykuDQorICAvLw0KKyAgQ29udGV4dC0+QWJvdXRUb0xlYXZlU21t ID0gMDsNCisNCisgIC8vDQorICAvLyBDbGVhciB0aGUgbGFzdCBieXRlIG9mIHRoZSByZXNlcnZl ZCBwYWdlLCBzbyB3ZSBub3RpY2Ugd2hlbiB0aGUgaG90LWFkZGVkDQorICAvLyBDUFUgY2hlY2tz IGJhY2sgaW4gZnJvbSB0aGUgcGVuLg0KKyAgLy8NCisgICpTbW1WYWNhdGVkID0gMDsNCisNCisg IC8vDQorICAvLyBCb290IHRoZSBob3QtYWRkZWQgQ1BVLg0KKyAgLy8NCisgIC8vIElmIHRoZSBP UyBpcyBiZW5pZ24sIGFuZCBzbyB0aGUgaG90LWFkZGVkIENQVSBpcyBzdGlsbCBpbiBSRVNFVCBz dGF0ZSwNCisgIC8vIHRoZW4gdGhlIGJyb2FkY2FzdCBTTUkgaXMgc3RpbGwgcGVuZGluZyBmb3Ig aXQ7IGl0IHdpbGwgbm93IGxhdW5jaA0KKyAgLy8gZGlyZWN0bHkgaW50byBTTU0uDQorICAvLw0K KyAgLy8gSWYgdGhlIE9TIGlzIG1hbGljaW91cywgdGhlIGhvdC1hZGRlZCBDUFUgaGFzIGJlZW4g Ym9vdGVkIGFscmVhZHksIGFuZCBzbw0KKyAgLy8gaXQgaXMgYWxyZWFkeSBzcGlubmluZyBvbiB0 aGUgQVBJQyBJRCBnYXRlLiBJbiB0aGF0IGNhc2UsIHRoZQ0KKyAgLy8gSU5JVC1TSVBJLVNJUEkg YmVsb3cgd2lsbCBiZSBpZ25vcmVkLg0KKyAgLy8NCisgIFNlbmRJbml0U2lwaVNpcGkgKEFwaWNJ ZCwgUGVuQWRkcmVzcyk7DQorDQorICAvLw0KKyAgLy8gRXhwb3NlIHRoZSBkZXNpcmVkIG5ldyBT TUJBU0UgdmFsdWUgdG8gdGhlIGhvdC1hZGRlZCBDUFUuDQorICAvLw0KKyAgQ29udGV4dC0+TmV3 U21iYXNlID0gKFVJTlQzMilTbWJhc2U7DQorDQorICAvLw0KKyAgLy8gVW4tZ2F0ZSBTTUJBU0Ug cmVsb2NhdGlvbiBmb3IgdGhlIGhvdC1hZGRlZCBDUFUgd2hvc2UgQVBJQyBJRCBpcyBBcGljSWQu DQorICAvLw0KKyAgRXhjaGFuZ2VSZXN1bHQgPSBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZTY0 ICgmQ29udGV4dC0+QXBpY0lkR2F0ZSwNCisgICAgICAgICAgICAgICAgICAgICBNQVhfVUlOVDY0 LCBBcGljSWQpOw0KKyAgaWYgKEV4Y2hhbmdlUmVzdWx0ICE9IE1BWF9VSU5UNjQpIHsNCisgICAg U3RhdHVzID0gRUZJX1BST1RPQ09MX0VSUk9SOw0KKyAgICBERUJVRyAoKERFQlVHX0VSUk9SLCAi JWE6IEFwaWNJZD0iIEZNVF9BUElDX0lEICIgQXBpY0lkR2F0ZT0weCVMeDogJXJcbiIsDQorICAg ICAgX19GVU5DVElPTl9fLCBBcGljSWQsIEV4Y2hhbmdlUmVzdWx0LCBTdGF0dXMpKTsNCisgICAg cmV0dXJuIFN0YXR1czsNCisgIH0NCisNCisgIC8vDQorICAvLyBXYWl0IHVudGlsIHRoZSBob3Qt YWRkZWQgQ1BVIGlzIGp1c3QgYWJvdXQgdG8gZXhlY3V0ZSBSU00uDQorICAvLw0KKyAgd2hpbGUg KENvbnRleHQtPkFib3V0VG9MZWF2ZVNtbSA9PSAwKSB7DQorICAgIENwdVBhdXNlICgpOw0KKyAg fQ0KKw0KKyAgLy8NCisgIC8vIE5vdyB3YWl0IHVudGlsIHRoZSBob3QtYWRkZWQgQ1BVIHJlcG9y dHMgYmFjayBmcm9tIHRoZSBwZW4gKG9yIHRoZSBPUw0KKyAgLy8gYXR0YWNrcyB0aGUgbGFzdCBi eXRlIG9mIHRoZSByZXNlcnZlZCBwYWdlKS4NCisgIC8vDQorICB3aGlsZSAoKlNtbVZhY2F0ZWQg PT0gMCkgew0KKyAgICBDcHVQYXVzZSAoKTsNCisgIH0NCisNCisgIFN0YXR1cyA9IEVGSV9TVUND RVNTOw0KKyAgcmV0dXJuIFN0YXR1czsNCit9DQotLSAKMi4xOS4xLjMuZzMwMjQ3YWE1ZDIwMQoK Cg==