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.web09.296.1582755161584477370 for ; Wed, 26 Feb 2020 14:12:41 -0800 Authentication-Results: mx.groups.io; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=EsceXUb9; 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=1582755160; 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=/DjQUQy5Mo1UyjU5K8cFyf9MZKccfZHh9+KS40KLE6M=; b=EsceXUb9vPb5zYrLn4Tzoetufx+rRvdN+VY3tzqD87fBfbYM/ByzNZkYPmgq8bo7tNZ/Rr g9NEqZ4XrdXiA8wR3WwOrXrR/cgRB1k23ClCUhKUCs0rhlA6JoPf9FiK68jHxdAbU2l+hT Z1IQjdxGgB0RdarSNRd5CC7sknFESjo= 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-427-OI0NQ6XJPAm1Ddaqi1u-dQ-1; Wed, 26 Feb 2020 17:12:39 -0500 X-MC-Unique: OI0NQ6XJPAm1Ddaqi1u-dQ-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 D063818CA240; Wed, 26 Feb 2020 22:12:37 +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 23ED5909E9; Wed, 26 Feb 2020 22:12:35 +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 16/16] OvmfPkg/CpuS3DataDxe: enable S3 resume after CPU hotplug Date: Wed, 26 Feb 2020 23:11:56 +0100 Message-Id: <20200226221156.29589-17-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 RHVyaW5nIG5vcm1hbCBib290LCBDcHVTM0RhdGFEeGUgYWxsb2NhdGVzCgotIGFuIGVtcHR5IENQ VV9SRUdJU1RFUl9UQUJMRSBlbnRyeSBpbiB0aGUKICAiQUNQSV9DUFVfREFUQS5QcmVTbW1Jbml0 UmVnaXN0ZXJUYWJsZSIgYXJyYXksIGFuZAoKLSBhbiBlbXB0eSBDUFVfUkVHSVNURVJfVEFCTEUg ZW50cnkgaW4gdGhlICJBQ1BJX0NQVV9EQVRBLlJlZ2lzdGVyVGFibGUiCiAgYXJyYXksCgpmb3Ig ZXZlcnkgQ1BVIHdob3NlIEFQSUMgSUQgQ3B1UzNEYXRhRHhlIGNhbiBsZWFybi4KCkN1cnJlbnRs eSBFRklfTVBfU0VSVklDRVNfUFJPVE9DT0wgaXMgdXNlZCBmb3IgYm90aCBkZXRlcm1pbmluZyB0 aGUgbnVtYmVyCm9mIENQVXMgLS0gdGhlIHByb3RvY29sIHJlcG9ydHMgdGhlIHByZXNlbnQtYXQt Ym9vdCBDUFUgY291bnQgLS0sIGFuZCBmb3IKcmV0cmlldmluZyB0aGUgQVBJQyBJRHMgb2YgdGhv c2UgQ1BVcy4KCkNvbnNlcXVlbnRseSwgaWYgYSBDUFUgaXMgaG90LXBsdWdnZWQgYXQgT1MgcnVu dGltZSwgdGhlbiBTMyByZXN1bWUKYnJlYWtzLiBUaGF0J3MgYmVjYXVzZSBQaVNtbUNwdUR4ZVNt bSB3aWxsIG5vdCBmaW5kIHRoZSBob3QtYWRkZWQgQ1BVJ3MKQVBJQyBJRCBhc3NvY2lhdGVkIHdp dGggYW55IENQVV9SRUdJU1RFUl9UQUJMRSBvYmplY3QsIGluIHRoZSBTTVJBTSBjb3BpZXMKb2Yg ZWl0aGVyIG9mIHRoZSAiUmVnaXN0ZXJUYWJsZSIgYW5kICJQcmVTbW1Jbml0UmVnaXN0ZXJUYWJs ZSIgYXJyYXlzLiBUaGUKZmFpbHVyZSB0byBtYXRjaCB0aGUgaG90LWFkZGVkIENQVSdzIEFQSUMg SUQgdHJpcHMgdGhlIEFTU0VSVCgpIGluClNldFJlZ2lzdGVyKCkgW1VlZmlDcHVQa2cvUGlTbW1D cHVEeGVTbW0vQ3B1UzMuY10uCgpJZiAiUGNkUTM1U21yYW1BdERlZmF1bHRTbWJhc2UiIGlzIFRS VUUsIHRoZW46CgotIHByZXBhcmUgQ1BVX1JFR0lTVEVSX1RBQkxFIG9iamVjdHMgZm9yIGFsbCBw b3NzaWJsZSBDUFVzLCBub3QganVzdCB0aGUKICBwcmVzZW50LWF0LWJvb3QgQ1BVcyAoUGxhdGZv cm1QZWkgc3RvcmVkIHRoZSBwb3NzaWJsZSBDUFUgY291bnQgdG8KICAiUGNkQ3B1TWF4TG9naWNh bFByb2Nlc3Nvck51bWJlciIpOwoKLSB1c2UgUUVNVV9DUFVIUF9DTURfR0VUX0FSQ0hfSUQgZm9y IGZpbGxpbmcgaW4gdGhlICJJbml0aWFsQXBpY0lkIiBmaWVsZHMKICBvZiB0aGUgQ1BVX1JFR0lT VEVSX1RBQkxFIG9iamVjdHMuCgpUaGlzIHByb3ZpZGVzIGZ1bGwgQVBJQyBJRCBjb3ZlcmFnZSBm b3IgUGlTbW1DcHVEeGVTbW0gZHVyaW5nIFMzIHJlc3VtZSwKYWNjb21tb2RhdGluZyBDUFVzIGhv dC1hZGRlZCBhdCBPUyBydW50aW1lLgoKVGhpcyBwYXRjaCBpcyBiZXN0IHJldmlld2VkIHdpdGgK CiQgZ2l0IHNob3cgLWIKCkNjOiBBcmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJv Lm9yZz4KQ2M6IElnb3IgTWFtbWVkb3YgPGltYW1tZWRvQHJlZGhhdC5jb20+CkNjOiBKaWV3ZW4g WWFvIDxqaWV3ZW4ueWFvQGludGVsLmNvbT4KQ2M6IEpvcmRhbiBKdXN0ZW4gPGpvcmRhbi5sLmp1 c3RlbkBpbnRlbC5jb20+CkNjOiBNaWNoYWVsIEtpbm5leSA8bWljaGFlbC5kLmtpbm5leUBpbnRl bC5jb20+CkNjOiBQaGlsaXBwZSBNYXRoaWV1LURhdWTDqSA8cGhpbG1kQHJlZGhhdC5jb20+ClJl ZjogaHR0cHM6Ly9idWd6aWxsYS50aWFub2NvcmUub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTEyClNp Z25lZC1vZmYtYnk6IExhc3psbyBFcnNlayA8bGVyc2VrQHJlZGhhdC5jb20+CkFja2VkLWJ5OiBB cmQgQmllc2hldXZlbCA8YXJkLmJpZXNoZXV2ZWxAbGluYXJvLm9yZz4KLS0tCgpOb3RlczoKICAg IHYyOgogICAgCiAgICAtIFBpY2sgdXAgQXJkJ3MgQWNrZWQtYnksIHdoaWNoIGlzIGNvbmRpdGlv bmFsIG9uIGFwcHJvdmFsIGZyb20gSW50ZWwKICAgICAgcmV2aWV3ZXJzIG9uIENjLiAoSSdkIGxp a2UgdG8gc2F2ZSBBcmQgdGhlIGNodXJuIG9mIHJlLWFja2luZwogICAgICB1bm1vZGlmaWVkIHBh dGNoZXMuKQoKIE92bWZQa2cvQ3B1UzNEYXRhRHhlL0NwdVMzRGF0YUR4ZS5pbmYgfCAgNCArCiBP dm1mUGtnL0NwdVMzRGF0YUR4ZS9DcHVTM0RhdGEuYyAgICAgIHwgOTEgKysrKysrKysrKysrKyst LS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgNzAgaW5zZXJ0aW9ucygrKSwgMjUgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvT3ZtZlBrZy9DcHVTM0RhdGFEeGUvQ3B1UzNEYXRhRHhlLmluZiBiL092 bWZQa2cvQ3B1UzNEYXRhRHhlL0NwdVMzRGF0YUR4ZS5pbmYKaW5kZXggZjk2NzllMGMzM2IzLi5j ZWFlMWQ0MDc4YzcgMTAwNjQ0Ci0tLSBhL092bWZQa2cvQ3B1UzNEYXRhRHhlL0NwdVMzRGF0YUR4 ZS5pbmYKKysrIGIvT3ZtZlBrZy9DcHVTM0RhdGFEeGUvQ3B1UzNEYXRhRHhlLmluZgpAQCAtMTYs NDYgKzE2LDUwIEBACiAjDQogIyMNCiANCiBbRGVmaW5lc10NCiAgIElORl9WRVJTSU9OICAgICAg ICAgICAgICAgICAgICA9IDEuMjkNCiAgIEJBU0VfTkFNRSAgICAgICAgICAgICAgICAgICAgICA9 IENwdVMzRGF0YUR4ZQ0KICAgRklMRV9HVUlEICAgICAgICAgICAgICAgICAgICAgID0gMjI5QjdF RkQtREEwMi00NkI5LTkzRjQtRTIwQzAwOUY5NEU5DQogICBNT0RVTEVfVFlQRSAgICAgICAgICAg ICAgICAgICAgPSBEWEVfRFJJVkVSDQogICBWRVJTSU9OX1NUUklORyAgICAgICAgICAgICAgICAg PSAxLjANCiAgIEVOVFJZX1BPSU5UICAgICAgICAgICAgICAgICAgICA9IENwdVMzRGF0YUluaXRp YWxpemUNCiANCiAjIFRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gaXMgZm9yIHJlZmVyZW5jZSBv bmx5IGFuZCBub3QgcmVxdWlyZWQgYnkgdGhlIGJ1aWxkDQogIyB0b29scy4NCiAjDQogIyAgVkFM SURfQVJDSElURUNUVVJFUyAgICAgICAgICAgPSBJQTMyIFg2NA0KIA0KIFtTb3VyY2VzXQ0KICAg Q3B1UzNEYXRhLmMNCiANCiBbUGFja2FnZXNdDQogICBNZGVNb2R1bGVQa2cvTWRlTW9kdWxlUGtn LmRlYw0KICAgTWRlUGtnL01kZVBrZy5kZWMNCisgIE92bWZQa2cvT3ZtZlBrZy5kZWMNCiAgIFVl ZmlDcHVQa2cvVWVmaUNwdVBrZy5kZWMNCiANCiBbTGlicmFyeUNsYXNzZXNdDQogICBCYXNlTGli DQogICBCYXNlTWVtb3J5TGliDQogICBEZWJ1Z0xpYg0KKyAgSW9MaWINCiAgIE1lbW9yeUFsbG9j YXRpb25MaWINCiAgIE10cnJMaWINCiAgIFVlZmlCb290U2VydmljZXNUYWJsZUxpYg0KICAgVWVm aURyaXZlckVudHJ5UG9pbnQNCiANCiBbR3VpZHNdDQogICBnRWZpRW5kT2ZEeGVFdmVudEdyb3Vw R3VpZCAgICAgICAgICMjIENPTlNVTUVTICAgIyMgRXZlbnQNCiANCiBbUHJvdG9jb2xzXQ0KICAg Z0VmaU1wU2VydmljZVByb3RvY29sR3VpZCAgICAgICAgICAjIyBDT05TVU1FUw0KIA0KIFtQY2Rd DQogICBnRWZpTWRlTW9kdWxlUGtnVG9rZW5TcGFjZUd1aWQuUGNkQWNwaVMzRW5hYmxlICAgICAg ICAgICAgICAgICAgICAjIyBDT05TVU1FUw0KICAgZ1VlZmlDcHVQa2dUb2tlblNwYWNlR3VpZC5Q Y2RDcHVBcFN0YWNrU2l6ZSAgICAgICAgICAgICAgICAgICAgICAgIyMgQ09OU1VNRVMNCisgIGdV ZWZpQ3B1UGtnVG9rZW5TcGFjZUd1aWQuUGNkQ3B1TWF4TG9naWNhbFByb2Nlc3Nvck51bWJlciAg ICAgICAgICMjIENPTlNVTUVTDQogICBnVWVmaUNwdVBrZ1Rva2VuU3BhY2VHdWlkLlBjZENwdVMz RGF0YUFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAjIyBQUk9EVUNFUw0KKyAgZ1VlZmlPdm1m UGtnVG9rZW5TcGFjZUd1aWQuUGNkUTM1U21yYW1BdERlZmF1bHRTbWJhc2UgICAgICAgICAgICAg IyMgQ09OU1VNRVMNCiANCiBbRGVwZXhdDQogICBnRWZpTXBTZXJ2aWNlUHJvdG9jb2xHdWlkDQpk aWZmIC0tZ2l0IGEvT3ZtZlBrZy9DcHVTM0RhdGFEeGUvQ3B1UzNEYXRhLmMgYi9Pdm1mUGtnL0Nw dVMzRGF0YUR4ZS9DcHVTM0RhdGEuYwppbmRleCA4YmI5ODA3Y2Q1MDEuLmJhYzcyODVhYTJmMyAx MDA2NDQKLS0tIGEvT3ZtZlBrZy9DcHVTM0RhdGFEeGUvQ3B1UzNEYXRhLmMKKysrIGIvT3ZtZlBr Zy9DcHVTM0RhdGFEeGUvQ3B1UzNEYXRhLmMKQEAgLTQsNTEgKzQsNTUgQEAgQUNQSSBDUFUgRGF0 YSBpbml0aWFsaXphdGlvbiBtb2R1bGUKIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIHRoZSBBQ1BJ X0NQVV9EQVRBIHN0cnVjdHVyZSBhbmQgcmVnaXN0ZXJzIHRoZSBhZGRyZXNzDQogb2YgdGhpcyBz dHJ1Y3R1cmUgaW4gdGhlIFBjZENwdVMzRGF0YUFkZHJlc3MgUENELiAgVGhpcyBpcyBhIGdlbmVy aWMvc2ltcGxlDQogdmVyc2lvbiBvZiB0aGlzIG1vZHVsZS4gIEl0IGRvZXMgbm90IHByb3ZpZGUg YSBtYWNoaW5lIGNoZWNrIGhhbmRsZXIgb3IgQ1BVDQogcmVnaXN0ZXIgaW5pdGlhbGl6YXRpb24g dGFibGVzIGZvciBBQ1BJIFMzIHJlc3VtZS4gIEl0IGFsc28gb25seSBzdXBwb3J0cyB0aGUNCiBu dW1iZXIgb2YgQ1BVcyByZXBvcnRlZCBieSB0aGUgTVAgU2VydmljZXMgUHJvdG9jb2wsIHNvIHRo aXMgbW9kdWxlIGRvZXMgbm90DQogc3VwcG9ydCBob3QgcGx1ZyBDUFVzLiAgVGhpcyBtb2R1bGUg Y2FuIGJlIGNvcGllZCBpbnRvIGEgQ1BVIHNwZWNpZmljIHBhY2thZ2UNCiBhbmQgY3VzdG9taXpl ZCBpZiB0aGVzZSBhZGRpdGlvbmFsIGZlYXR1cmVzIGFyZSByZXF1aXJlZC4NCiANCiBDb3B5cmln aHQgKGMpIDIwMTMgLSAyMDE3LCBJbnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZl ZC48QlI+DQogQ29weXJpZ2h0IChjKSAyMDE1IC0gMjAyMCwgUmVkIEhhdCwgSW5jLg0KIA0KIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMi1DbGF1c2UtUGF0ZW50DQogDQogKiovDQogDQog I2luY2x1ZGUgPFBpRHhlLmg+DQogDQogI2luY2x1ZGUgPEFjcGlDcHVEYXRhLmg+DQogDQogI2lu Y2x1ZGUgPExpYnJhcnkvQmFzZUxpYi5oPg0KICNpbmNsdWRlIDxMaWJyYXJ5L0Jhc2VNZW1vcnlM aWIuaD4NCiAjaW5jbHVkZSA8TGlicmFyeS9EZWJ1Z0xpYi5oPg0KKyNpbmNsdWRlIDxMaWJyYXJ5 L0lvTGliLmg+DQogI2luY2x1ZGUgPExpYnJhcnkvTWVtb3J5QWxsb2NhdGlvbkxpYi5oPg0KICNp bmNsdWRlIDxMaWJyYXJ5L010cnJMaWIuaD4NCiAjaW5jbHVkZSA8TGlicmFyeS9VZWZpQm9vdFNl cnZpY2VzVGFibGVMaWIuaD4NCiANCiAjaW5jbHVkZSA8UHJvdG9jb2wvTXBTZXJ2aWNlLmg+DQog I2luY2x1ZGUgPEd1aWQvRXZlbnRHcm91cC5oPg0KIA0KKyNpbmNsdWRlIDxJbmR1c3RyeVN0YW5k YXJkL1EzNU1jaEljaDkuaD4NCisjaW5jbHVkZSA8SW5kdXN0cnlTdGFuZGFyZC9RZW11Q3B1SG90 cGx1Zy5oPg0KKw0KIC8vDQogLy8gRGF0YSBzdHJ1Y3R1cmUgdXNlZCB0byBhbGxvY2F0ZSBBQ1BJ X0NQVV9EQVRBIGFuZCBpdHMgc3VwcG9ydGluZyBzdHJ1Y3R1cmVzDQogLy8NCiB0eXBlZGVmIHN0 cnVjdCB7DQogICBBQ1BJX0NQVV9EQVRBICAgICAgICAgICAgIEFjcGlDcHVEYXRhOw0KICAgTVRS Ul9TRVRUSU5HUyAgICAgICAgICAgICBNdHJyVGFibGU7DQogICBJQTMyX0RFU0NSSVBUT1IgICAg ICAgICAgIEdkdHJQcm9maWxlOw0KICAgSUEzMl9ERVNDUklQVE9SICAgICAgICAgICBJZHRyUHJv ZmlsZTsNCiB9IEFDUElfQ1BVX0RBVEFfRVg7DQogDQogLyoqDQogICBBbGxvY2F0ZSBFZmlBQ1BJ TWVtb3J5TlZTIG1lbW9yeS4NCiANCiAgIEBwYXJhbVtpbl0gU2l6ZSAgIFNpemUgb2YgbWVtb3J5 IHRvIGFsbG9jYXRlLg0KIA0KICAgQHJldHVybiAgICAgICBBbGxvY2F0ZWQgYWRkcmVzcyBmb3Ig b3V0cHV0Lg0KIA0KICoqLw0KIFZPSUQgKg0KIEFsbG9jYXRlQWNwaU52c01lbW9yeSAoDQogICBJ TiBVSU5UTiAgU2l6ZQ0KICAgKQ0KQEAgLTE0NCw4OSArMTQ4LDEwMSBAQCBDcHVTM0RhdGFPbkVu ZE9mRHhlICgKICAgIHRvIHRoZSBhZGRyZXNzIHRoYXQgQUNQSV9DUFVfREFUQSBpcyBhbGxvY2F0 ZWQgYXQuDQogDQogICAgQHBhcmFtW2luXSBJbWFnZUhhbmRsZSAgVGhlIGZpcm13YXJlIGFsbG9j YXRlZCBoYW5kbGUgZm9yIHRoZSBFRkkgaW1hZ2UuDQogICAgQHBhcmFtW2luXSBTeXN0ZW1UYWJs ZSAgQSBwb2ludGVyIHRvIHRoZSBFRkkgU3lzdGVtIFRhYmxlLg0KIA0KICAgIEByZXR2YWwgRUZJ X1NVQ0NFU1MgICAgIFRoZSBlbnRyeSBwb2ludCBpcyBleGVjdXRlZCBzdWNjZXNzZnVsbHkuDQog ICAgQHJldHZhbCBFRklfVU5TVVBQT1JURUQgRG8gbm90IHN1cHBvcnQgQUNQSSBTMy4NCiAgICBA cmV0dmFsIG90aGVyICAgICAgICAgICBTb21lIGVycm9yIG9jY3VycyB3aGVuIGV4ZWN1dGluZyB0 aGlzIGVudHJ5IHBvaW50Lg0KIA0KICoqLw0KIEVGSV9TVEFUVVMNCiBFRklBUEkNCiBDcHVTM0Rh dGFJbml0aWFsaXplICgNCiAgIElOIEVGSV9IQU5ETEUgICAgICAgIEltYWdlSGFuZGxlLA0KICAg SU4gRUZJX1NZU1RFTV9UQUJMRSAgKlN5c3RlbVRhYmxlDQogICApDQogew0KICAgRUZJX1NUQVRV UyAgICAgICAgICAgICAgICAgU3RhdHVzOw0KICAgQUNQSV9DUFVfREFUQV9FWCAgICAgICAgICAg KkFjcGlDcHVEYXRhRXg7DQogICBBQ1BJX0NQVV9EQVRBICAgICAgICAgICAgICAqQWNwaUNwdURh dGE7DQogICBFRklfTVBfU0VSVklDRVNfUFJPVE9DT0wgICAqTXBTZXJ2aWNlczsNCiAgIFVJTlRO ICAgICAgICAgICAgICAgICAgICAgIE51bWJlck9mQ3B1czsNCi0gIFVJTlROICAgICAgICAgICAg ICAgICAgICAgIE51bWJlck9mRW5hYmxlZFByb2Nlc3NvcnM7DQogICBWT0lEICAgICAgICAgICAg ICAgICAgICAgICAqU3RhY2s7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBUYWJsZVNp emU7DQogICBDUFVfUkVHSVNURVJfVEFCTEUgICAgICAgICAqUmVnaXN0ZXJUYWJsZTsNCiAgIFVJ TlROICAgICAgICAgICAgICAgICAgICAgIEluZGV4Ow0KICAgRUZJX1BST0NFU1NPUl9JTkZPUk1B VElPTiAgUHJvY2Vzc29ySW5mb0J1ZmZlcjsNCiAgIFVJTlROICAgICAgICAgICAgICAgICAgICAg IEdkdFNpemU7DQogICBVSU5UTiAgICAgICAgICAgICAgICAgICAgICBJZHRTaXplOw0KICAgVk9J RCAgICAgICAgICAgICAgICAgICAgICAgKkdkdDsNCiAgIFZPSUQgICAgICAgICAgICAgICAgICAg ICAgICpJZHQ7DQogICBFRklfRVZFTlQgICAgICAgICAgICAgICAgICBFdmVudDsNCiAgIEFDUElf Q1BVX0RBVEEgICAgICAgICAgICAgICpPbGRBY3BpQ3B1RGF0YTsNCisgIEJPT0xFQU4gICAgICAg ICAgICAgICAgICAgIEZldGNoUG9zc2libGVBcGljSWRzOw0KIA0KICAgaWYgKCFQY2RHZXRCb29s IChQY2RBY3BpUzNFbmFibGUpKSB7DQogICAgIHJldHVybiBFRklfVU5TVVBQT1JURUQ7DQogICB9 DQogDQogICAvLw0KICAgLy8gU2V0IFBjZENwdVMzRGF0YUFkZHJlc3MgdG8gdGhlIGJhc2UgYWRk cmVzcyBvZiB0aGUgQUNQSV9DUFVfREFUQSBzdHJ1Y3R1cmUNCiAgIC8vDQogICBPbGRBY3BpQ3B1 RGF0YSA9IChBQ1BJX0NQVV9EQVRBICopIChVSU5UTikgUGNkR2V0NjQgKFBjZENwdVMzRGF0YUFk ZHJlc3MpOw0KIA0KICAgQWNwaUNwdURhdGFFeCA9IEFsbG9jYXRlWmVyb1BhZ2VzIChzaXplb2Yg KEFDUElfQ1BVX0RBVEFfRVgpKTsNCiAgIEFTU0VSVCAoQWNwaUNwdURhdGFFeCAhPSBOVUxMKTsN CiAgIEFjcGlDcHVEYXRhID0gJkFjcGlDcHVEYXRhRXgtPkFjcGlDcHVEYXRhOw0KIA0KICAgLy8N Ci0gIC8vIEdldCBNUCBTZXJ2aWNlcyBQcm90b2NvbA0KKyAgLy8gVGhlICJTTVJBTSBhdCBkZWZh dWx0IFNNQkFTRSIgZmVhdHVyZSBndWFyYW50ZWVzIHRoYXQNCisgIC8vIFFFTVVfQ1BVSFBfQ01E X0dFVF9BUkNIX0lEIHRvbyBpcyBhdmFpbGFibGUuDQogICAvLw0KLSAgU3RhdHVzID0gZ0JTLT5M b2NhdGVQcm90b2NvbCAoDQotICAgICAgICAgICAgICAgICAgJmdFZmlNcFNlcnZpY2VQcm90b2Nv bEd1aWQsDQotICAgICAgICAgICAgICAgICAgTlVMTCwNCi0gICAgICAgICAgICAgICAgICAoVk9J RCAqKikmTXBTZXJ2aWNlcw0KLSAgICAgICAgICAgICAgICAgICk7DQotICBBU1NFUlRfRUZJX0VS Uk9SIChTdGF0dXMpOw0KKyAgRmV0Y2hQb3NzaWJsZUFwaWNJZHMgPSBQY2RHZXRCb29sIChQY2RR MzVTbXJhbUF0RGVmYXVsdFNtYmFzZSk7DQogDQotICAvLw0KLSAgLy8gR2V0IHRoZSBudW1iZXIg b2YgQ1BVcw0KLSAgLy8NCi0gIFN0YXR1cyA9IE1wU2VydmljZXMtPkdldE51bWJlck9mUHJvY2Vz c29ycyAoDQotICAgICAgICAgICAgICAgICAgICAgICAgIE1wU2VydmljZXMsDQotICAgICAgICAg ICAgICAgICAgICAgICAgICZOdW1iZXJPZkNwdXMsDQotICAgICAgICAgICAgICAgICAgICAgICAg ICZOdW1iZXJPZkVuYWJsZWRQcm9jZXNzb3JzDQotICAgICAgICAgICAgICAgICAgICAgICAgICk7 DQotICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKyAgaWYgKEZldGNoUG9zc2libGVBcGlj SWRzKSB7DQorICAgIE51bWJlck9mQ3B1cyA9IFBjZEdldDMyIChQY2RDcHVNYXhMb2dpY2FsUHJv Y2Vzc29yTnVtYmVyKTsNCisgIH0gZWxzZSB7DQorICAgIFVJTlROIE51bWJlck9mRW5hYmxlZFBy b2Nlc3NvcnM7DQorDQorICAgIC8vDQorICAgIC8vIEdldCBNUCBTZXJ2aWNlcyBQcm90b2NvbA0K KyAgICAvLw0KKyAgICBTdGF0dXMgPSBnQlMtPkxvY2F0ZVByb3RvY29sICgNCisgICAgICAgICAg ICAgICAgICAgICZnRWZpTXBTZXJ2aWNlUHJvdG9jb2xHdWlkLA0KKyAgICAgICAgICAgICAgICAg ICAgTlVMTCwNCisgICAgICAgICAgICAgICAgICAgIChWT0lEICoqKSZNcFNlcnZpY2VzDQorICAg ICAgICAgICAgICAgICAgICApOw0KKyAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KKw0K KyAgICAvLw0KKyAgICAvLyBHZXQgdGhlIG51bWJlciBvZiBDUFVzDQorICAgIC8vDQorICAgIFN0 YXR1cyA9IE1wU2VydmljZXMtPkdldE51bWJlck9mUHJvY2Vzc29ycyAoDQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgTXBTZXJ2aWNlcywNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAm TnVtYmVyT2ZDcHVzLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZOdW1iZXJPZkVuYWJs ZWRQcm9jZXNzb3JzDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsNCisgICAgQVNTRVJU X0VGSV9FUlJPUiAoU3RhdHVzKTsNCisgIH0NCiAgIEFjcGlDcHVEYXRhLT5OdW1iZXJPZkNwdXMg PSAoVUlOVDMyKU51bWJlck9mQ3B1czsNCiANCiAgIC8vDQogICAvLyBJbml0aWFsaXplIEFDUElf Q1BVX0RBVEEgZmllbGRzDQogICAvLw0KICAgQWNwaUNwdURhdGEtPlN0YWNrU2l6ZSAgICAgICAg ICAgICAgICAgPSBQY2RHZXQzMiAoUGNkQ3B1QXBTdGFja1NpemUpOw0KICAgQWNwaUNwdURhdGEt PkFwTWFjaGluZUNoZWNrSGFuZGxlckJhc2UgPSAwOw0KICAgQWNwaUNwdURhdGEtPkFwTWFjaGlu ZUNoZWNrSGFuZGxlclNpemUgPSAwOw0KICAgQWNwaUNwdURhdGEtPkdkdHJQcm9maWxlICA9IChF RklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pJkFjcGlDcHVEYXRhRXgtPkdkdHJQcm9maWxlOw0K ICAgQWNwaUNwdURhdGEtPklkdHJQcm9maWxlICA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlO VE4pJkFjcGlDcHVEYXRhRXgtPklkdHJQcm9maWxlOw0KICAgQWNwaUNwdURhdGEtPk10cnJUYWJs ZSAgICA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pJkFjcGlDcHVEYXRhRXgtPk10cnJU YWJsZTsNCiANCiAgIC8vDQogICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3IgYWxsIENQVXMu DQogICAvLyBVc2UgQUNQSSBOVlMgbWVtb3J5IHR5cGUgYmVjYXVzZSB0aGlzIGRhdGEgd2lsbCBi ZSBkaXJlY3RseSB1c2VkIGJ5IEFQcw0KICAgLy8gaW4gUzMgcmVzdW1lIHBoYXNlIGluIGxvbmcg bW9kZS4gQWxzbyBkdXJpbmcgUzMgcmVzdW1lLCB0aGUgc3RhY2sgYnVmZmVyDQogICAvLyB3aWxs IG9ubHkgYmUgdXNlZCBhcyBzY3JhdGNoIHNwYWNlLiBpLmUuIHdlIHdvbid0IHJlYWQgYW55dGhp bmcgZnJvbSBpdA0KICAgLy8gYmVmb3JlIHdlIHdyaXRlIHRvIGl0LCBpbiBQaVNtbUNwdUR4ZVNt bS4NCiAgIC8vDQogICBTdGFjayA9IEFsbG9jYXRlQWNwaU52c01lbW9yeSAoTnVtYmVyT2ZDcHVz ICogQWNwaUNwdURhdGEtPlN0YWNrU2l6ZSk7DQogICBBU1NFUlQgKFN0YWNrICE9IE5VTEwpOw0K ICAgQWNwaUNwdURhdGEtPlN0YWNrQWRkcmVzcyA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlO VE4pU3RhY2s7DQpAQCAtMjQ0LDU4ICsyNjAsODMgQEAgQ3B1UzNEYXRhSW5pdGlhbGl6ZSAoCiAg IElkdFNpemUgPSBBY3BpQ3B1RGF0YUV4LT5JZHRyUHJvZmlsZS5MaW1pdCArIDE7DQogICBHZHQg PSBBbGxvY2F0ZVplcm9QYWdlcyAoR2R0U2l6ZSArIElkdFNpemUpOw0KICAgQVNTRVJUIChHZHQg IT0gTlVMTCk7DQogICBJZHQgPSAoVk9JRCAqKSgoVUlOVE4pR2R0ICsgR2R0U2l6ZSk7DQogICBD b3B5TWVtIChHZHQsIChWT0lEICopQWNwaUNwdURhdGFFeC0+R2R0clByb2ZpbGUuQmFzZSwgR2R0 U2l6ZSk7DQogICBDb3B5TWVtIChJZHQsIChWT0lEICopQWNwaUNwdURhdGFFeC0+SWR0clByb2Zp bGUuQmFzZSwgSWR0U2l6ZSk7DQogICBBY3BpQ3B1RGF0YUV4LT5HZHRyUHJvZmlsZS5CYXNlID0g KFVJTlROKUdkdDsNCiAgIEFjcGlDcHVEYXRhRXgtPklkdHJQcm9maWxlLkJhc2UgPSAoVUlOVE4p SWR0Ow0KIA0KICAgaWYgKE9sZEFjcGlDcHVEYXRhICE9IE5VTEwpIHsNCiAgICAgQWNwaUNwdURh dGEtPlJlZ2lzdGVyVGFibGUgICAgICAgICAgID0gT2xkQWNwaUNwdURhdGEtPlJlZ2lzdGVyVGFi bGU7DQogICAgIEFjcGlDcHVEYXRhLT5QcmVTbW1Jbml0UmVnaXN0ZXJUYWJsZSA9IE9sZEFjcGlD cHVEYXRhLT5QcmVTbW1Jbml0UmVnaXN0ZXJUYWJsZTsNCiAgICAgQWNwaUNwdURhdGEtPkFwTG9j YXRpb24gICAgICAgICAgICAgID0gT2xkQWNwaUNwdURhdGEtPkFwTG9jYXRpb247DQogICAgIENv cHlNZW0gKCZBY3BpQ3B1RGF0YS0+Q3B1U3RhdHVzLCAmT2xkQWNwaUNwdURhdGEtPkNwdVN0YXR1 cywgc2l6ZW9mIChDUFVfU1RBVFVTX0lORk9STUFUSU9OKSk7DQogICB9IGVsc2Ugew0KICAgICAv Lw0KICAgICAvLyBBbGxvY2F0ZSBidWZmZXIgZm9yIGVtcHR5IFJlZ2lzdGVyVGFibGUgYW5kIFBy ZVNtbUluaXRSZWdpc3RlclRhYmxlIGZvciBhbGwgQ1BVcw0KICAgICAvLw0KICAgICBUYWJsZVNp emUgPSAyICogTnVtYmVyT2ZDcHVzICogc2l6ZW9mIChDUFVfUkVHSVNURVJfVEFCTEUpOw0KICAg ICBSZWdpc3RlclRhYmxlID0gKENQVV9SRUdJU1RFUl9UQUJMRSAqKUFsbG9jYXRlWmVyb1BhZ2Vz IChUYWJsZVNpemUpOw0KICAgICBBU1NFUlQgKFJlZ2lzdGVyVGFibGUgIT0gTlVMTCk7DQogDQor ICAgIGlmIChGZXRjaFBvc3NpYmxlQXBpY0lkcykgew0KKyAgICAgIC8vDQorICAgICAgLy8gV3Jp dGUgYSB2YWxpZCBzZWxlY3RvciBzbyB0aGF0IG90aGVyIGhvdHBsdWcgcmVnaXN0ZXJzIGNhbiBi ZQ0KKyAgICAgIC8vIGFjY2Vzc2VkLg0KKyAgICAgIC8vDQorICAgICAgSW9Xcml0ZTMyIChJQ0g5 X0NQVV9IT1RQTFVHX0JBU0UgKyBRRU1VX0NQVUhQX1dfQ1BVX1NFTCwgMCk7DQorICAgICAgLy8N CisgICAgICAvLyBXZSdsbCBiZSBmZXRjaGluZyB0aGUgQVBJQyBJRHMuDQorICAgICAgLy8NCisg ICAgICBJb1dyaXRlOCAoSUNIOV9DUFVfSE9UUExVR19CQVNFICsgUUVNVV9DUFVIUF9XX0NNRCwN CisgICAgICAgIFFFTVVfQ1BVSFBfQ01EX0dFVF9BUkNIX0lEKTsNCisgICAgfQ0KICAgICBmb3Ig KEluZGV4ID0gMDsgSW5kZXggPCBOdW1iZXJPZkNwdXM7IEluZGV4KyspIHsNCi0gICAgICBTdGF0 dXMgPSBNcFNlcnZpY2VzLT5HZXRQcm9jZXNzb3JJbmZvICgNCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBNcFNlcnZpY2VzLA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEluZGV4LA0K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm9jZXNzb3JJbmZvQnVmZmVyDQotICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsNCi0gICAgICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMp Ow0KKyAgICAgIFVJTlQzMiBJbml0aWFsQXBpY0lkOw0KIA0KLSAgICAgIFJlZ2lzdGVyVGFibGVb SW5kZXhdLkluaXRpYWxBcGljSWQgICAgICA9IChVSU5UMzIpUHJvY2Vzc29ySW5mb0J1ZmZlci5Q cm9jZXNzb3JJZDsNCisgICAgICBpZiAoRmV0Y2hQb3NzaWJsZUFwaWNJZHMpIHsNCisgICAgICAg IElvV3JpdGUzMiAoSUNIOV9DUFVfSE9UUExVR19CQVNFICsgUUVNVV9DUFVIUF9XX0NQVV9TRUws DQorICAgICAgICAgIChVSU5UMzIpSW5kZXgpOw0KKyAgICAgICAgSW5pdGlhbEFwaWNJZCA9IElv UmVhZDMyICgNCisgICAgICAgICAgICAgICAgICAgICAgICAgIElDSDlfQ1BVX0hPVFBMVUdfQkFT RSArIFFFTVVfQ1BVSFBfUldfQ01EX0RBVEEpOw0KKyAgICAgIH0gZWxzZSB7DQorICAgICAgICBT dGF0dXMgPSBNcFNlcnZpY2VzLT5HZXRQcm9jZXNzb3JJbmZvICgNCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1wU2VydmljZXMsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJ bmRleCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZQcm9jZXNzb3JJbmZvQnVmZmVy DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOw0KKyAgICAgICAgQVNTRVJUX0VGSV9F UlJPUiAoU3RhdHVzKTsNCisgICAgICAgIEluaXRpYWxBcGljSWQgPSAoVUlOVDMyKVByb2Nlc3Nv ckluZm9CdWZmZXIuUHJvY2Vzc29ySWQ7DQorICAgICAgfQ0KKw0KKyAgICAgIERFQlVHICgoREVC VUdfVkVSQk9TRSwgIiVhOiBJbmRleD0lMDVMdSBBcGljSWQ9MHglMDh4XG4iLCBfX0ZVTkNUSU9O X18sDQorICAgICAgICAoVUlOVDY0KUluZGV4LCBJbml0aWFsQXBpY0lkKSk7DQorDQorICAgICAg UmVnaXN0ZXJUYWJsZVtJbmRleF0uSW5pdGlhbEFwaWNJZCAgICAgID0gSW5pdGlhbEFwaWNJZDsN CiAgICAgICBSZWdpc3RlclRhYmxlW0luZGV4XS5UYWJsZUxlbmd0aCAgICAgICAgPSAwOw0KICAg ICAgIFJlZ2lzdGVyVGFibGVbSW5kZXhdLkFsbG9jYXRlZFNpemUgICAgICA9IDA7DQogICAgICAg UmVnaXN0ZXJUYWJsZVtJbmRleF0uUmVnaXN0ZXJUYWJsZUVudHJ5ID0gMDsNCiANCi0gICAgICBS ZWdpc3RlclRhYmxlW051bWJlck9mQ3B1cyArIEluZGV4XS5Jbml0aWFsQXBpY0lkICAgICAgPSAo VUlOVDMyKVByb2Nlc3NvckluZm9CdWZmZXIuUHJvY2Vzc29ySWQ7DQorICAgICAgUmVnaXN0ZXJU YWJsZVtOdW1iZXJPZkNwdXMgKyBJbmRleF0uSW5pdGlhbEFwaWNJZCAgICAgID0gSW5pdGlhbEFw aWNJZDsNCiAgICAgICBSZWdpc3RlclRhYmxlW051bWJlck9mQ3B1cyArIEluZGV4XS5UYWJsZUxl bmd0aCAgICAgICAgPSAwOw0KICAgICAgIFJlZ2lzdGVyVGFibGVbTnVtYmVyT2ZDcHVzICsgSW5k ZXhdLkFsbG9jYXRlZFNpemUgICAgICA9IDA7DQogICAgICAgUmVnaXN0ZXJUYWJsZVtOdW1iZXJP ZkNwdXMgKyBJbmRleF0uUmVnaXN0ZXJUYWJsZUVudHJ5ID0gMDsNCiAgICAgfQ0KICAgICBBY3Bp Q3B1RGF0YS0+UmVnaXN0ZXJUYWJsZSAgICAgICAgICAgPSAoRUZJX1BIWVNJQ0FMX0FERFJFU1Mp KFVJTlROKVJlZ2lzdGVyVGFibGU7DQogICAgIEFjcGlDcHVEYXRhLT5QcmVTbW1Jbml0UmVnaXN0 ZXJUYWJsZSA9IChFRklfUEhZU0lDQUxfQUREUkVTUykoVUlOVE4pKFJlZ2lzdGVyVGFibGUgKyBO dW1iZXJPZkNwdXMpOw0KICAgfQ0KIA0KICAgLy8NCiAgIC8vIFNldCBQY2RDcHVTM0RhdGFBZGRy ZXNzIHRvIHRoZSBiYXNlIGFkZHJlc3Mgb2YgdGhlIEFDUElfQ1BVX0RBVEEgc3RydWN0dXJlDQog ICAvLw0KICAgU3RhdHVzID0gUGNkU2V0NjRTIChQY2RDcHVTM0RhdGFBZGRyZXNzLCAoVUlOVDY0 KShVSU5UTilBY3BpQ3B1RGF0YSk7DQogICBBU1NFUlRfRUZJX0VSUk9SIChTdGF0dXMpOw0KIA0K ICAgLy8NCiAgIC8vIFJlZ2lzdGVyIEVGSV9FTkRfT0ZfRFhFX0VWRU5UX0dST1VQX0dVSUQgZXZl bnQuDQogICAvLyBUaGUgbm90aWZpY2F0aW9uIGZ1bmN0aW9uIGFsbG9jYXRlcyBTdGFydHVwVmVj dG9yIGFuZCBzYXZlcyBNVFJScyBmb3IgQUNQSV9DUFVfREFUQQ0KICAgLy8NCiAgIFN0YXR1cyA9 IGdCUy0+Q3JlYXRlRXZlbnRFeCAoDQogICAgICAgICAgICAgICAgICAgRVZUX05PVElGWV9TSUdO QUwsDQogICAgICAgICAgICAgICAgICAgVFBMX0NBTExCQUNLLA0KICAgICAgICAgICAgICAgICAg IENwdVMzRGF0YU9uRW5kT2ZEeGUsDQotLSAKMi4xOS4xLjMuZzMwMjQ3YWE1ZDIwMQoK