From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH RFC v1 04/13] libxc: allow arch_setup_meminit to populate HVM domain memory Date: Mon, 22 Jun 2015 18:11:18 +0200 Message-ID: <1434989487-74940-5-git-send-email-roger.pau@citrix.com> References: <1434989487-74940-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta3.messagelabs.com ([195.245.230.39]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1Z74Jx-0007yv-6M for xen-devel@lists.xenproject.org; Mon, 22 Jun 2015 16:11:41 +0000 In-Reply-To: <1434989487-74940-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Elena Ufimtseva , Wei Liu , Ian Campbell , Stefano Stabellini , Andrew Cooper , Ian Jackson , Jan Beulich , Boris Ostrovsky , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGEgbmV3IGFyY2hfc2V0dXBfbWVtaW5pdF9odm0gdGhhdCdzIGdvaW5nIHRvIGJl IHVzZWQgdG8gcG9wdWxhdGUKSFZNIGRvbWFpbiBtZW1vcnkuIFJlbmFtZSBhcmNoX3NldHVwX21l bWluaXQgdG8gYXJjaF9zZXR1cF9tZW1pbml0X2h2bV9wdgphbmQgaW50cm9kdWNlIGEgc3R1YiBh cmNoX3NldHVwX21lbWluaXQgdGhhdCB3aWxsIGNhbGwgdGhlIHJpZ2h0IG1lbWluaXQKZnVuY3Rp b24gZGVwZW5kaW5nIG9uIHRoZSBjb250YWlucyB0eXBlLgoKU2lnbmVkLW9mZi1ieTogUm9nZXIg UGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+CkNjOiBJYW4gSmFja3NvbiA8aWFuLmph Y2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8gU3RhYmVsbGluaSA8c3RlZmFuby5zdGFi ZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gQ2FtcGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRy aXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KQ2M6IEphbiBCZXVsaWNo IDxqYmV1bGljaEBzdXNlLmNvbT4KQ2M6IEFuZHJldyBDb29wZXIgPGFuZHJldy5jb29wZXIzQGNp dHJpeC5jb20+CkNjOiBCb3JpcyBPc3Ryb3Zza3kgPGJvcmlzLm9zdHJvdnNreUBvcmFjbGUuY29t PgpDYzogS29ucmFkIFJ6ZXN6dXRlayBXaWxrIDxrb25yYWQud2lsa0BvcmFjbGUuY29tPgpDYzog RWxlbmEgVWZpbXRzZXZhIDxlbGVuYS51ZmltdHNldmFAb3JhY2xlLmNvbT4KLS0tCkkgdGhpbmsg dGhhdCBib3RoIGFyY2hfc2V0dXBfbWVtaW5pdF9odm0gYW5kIGFyY2hfc2V0dXBfbWVtaW5pdF9w diBjb3VsZCBiZQp1bmlmaWVkIGludG8gYSBzaW5nbGUgbWVtaW5pdCBmdW5jdGlvbi4gSSBoYXZl IGhvd2V2ZXIgbm90IGxvb2tlZCBpbnRvIGl0LAphbmQganVzdCBjcmVhdGVkIGFyY2hfc2V0dXBf bWVtaW5pdF9odm0gYmFzZWQgb24gdGhlIGNvZGUgaW4KeGNfaHZtX3BvcHVsYXRlX21lbW9yeS4K LS0tCiB0b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oIHwgICA4ICsKIHRvb2xzL2xpYnhjL3hj X2RvbV94ODYuYyAgICAgfCAzNjUgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKystLQogdG9vbHMvbGlieGwvbGlieGxfZG9tLmMgICAgICB8ICAgMSArCiAzIGZpbGVzIGNo YW5nZWQsIDM2MiBpbnNlcnRpb25zKCspLCAxMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS90 b29scy9saWJ4Yy9pbmNsdWRlL3hjX2RvbS5oIGIvdG9vbHMvbGlieGMvaW5jbHVkZS94Y19kb20u aAppbmRleCBmN2I1ZjBmLi4wNTFhN2RlIDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy9pbmNsdWRl L3hjX2RvbS5oCisrKyBiL3Rvb2xzL2xpYnhjL2luY2x1ZGUveGNfZG9tLmgKQEAgLTE4Niw2ICsx ODYsMTQgQEAgc3RydWN0IHhjX2RvbV9pbWFnZSB7CiAgICAgICAgIFhDX0RPTV9QVl9DT05UQUlO RVIsCiAgICAgICAgIFhDX0RPTV9IVk1fQ09OVEFJTkVSLAogICAgIH0gY29udGFpbmVyX3R5cGU7 CisKKyAgICAvKiBIVk0gc3BlY2lmaWMgZmllbGRzLiAqLworICAgIHhlbl9wZm5fdCB0YXJnZXRf cGFnZXM7CisgICAgeGVuX3Bmbl90IG1taW9fc3RhcnQ7CisgICAgeGVuX3Bmbl90IG1taW9fc2l6 ZTsKKyAgICB4ZW5fcGZuX3QgbG93bWVtX2VuZDsKKyAgICB4ZW5fcGZuX3QgaGlnaG1lbV9lbmQ7 CisgICAgaW50IHZnYV9ob2xlOwogfTsKIAogLyogLS0tIHBsdWdnYWJsZSBrZXJuZWwgbG9hZGVy IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL3Rv b2xzL2xpYnhjL3hjX2RvbV94ODYuYyBiL3Rvb2xzL2xpYnhjL3hjX2RvbV94ODYuYwppbmRleCBi ODlmNWMyLi44YTFlZjI0IDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94Y19kb21feDg2LmMKKysr IGIvdG9vbHMvbGlieGMveGNfZG9tX3g4Ni5jCkBAIC00MCwxMCArNDAsMTUgQEAKIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUgU1VQRVJQQUdFX1BGTl9TSElGVCAgOQotI2RlZmlu ZSBTVVBFUlBBR0VfTlJfUEZOUyAgICAoMVVMIDw8IFNVUEVSUEFHRV9QRk5fU0hJRlQpCiAjZGVm aW5lIFNVUEVSUEFHRV9CQVRDSF9TSVpFIDUxMgogCisjZGVmaW5lIFNVUEVSUEFHRV8yTUJfU0hJ RlQgICA5CisjZGVmaW5lIFNVUEVSUEFHRV8yTUJfTlJfUEZOUyAoMVVMIDw8IFNVUEVSUEFHRV8y TUJfU0hJRlQpCisjZGVmaW5lIFNVUEVSUEFHRV8xR0JfU0hJRlQgICAxOAorI2RlZmluZSBTVVBF UlBBR0VfMUdCX05SX1BGTlMgKDFVTCA8PCBTVVBFUlBBR0VfMUdCX1NISUZUKQorCisjZGVmaW5l IFZHQV9IT0xFX1NJWkUgKDB4MjApCisKICNkZWZpbmUgYml0c190b19tYXNrKGJpdHMpICAgICAg ICgoKHhlbl92YWRkcl90KTEgPDwgKGJpdHMpKS0xKQogI2RlZmluZSByb3VuZF9kb3duKGFkZHIs IG1hc2spICAgKChhZGRyKSAmIH4obWFzaykpCiAjZGVmaW5lIHJvdW5kX3VwKGFkZHIsIG1hc2sp ICAgICAoKGFkZHIpIHwgKG1hc2spKQpAQCAtNzU4LDcgKzc2Myw3IEBAIHN0YXRpYyBpbnQgeDg2 X3NoYWRvdyh4Y19pbnRlcmZhY2UgKnhjaCwgZG9taWRfdCBkb21pZCkKICAgICByZXR1cm4gcmM7 CiB9CiAKLWludCBhcmNoX3NldHVwX21lbWluaXQoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9tKQor c3RhdGljIGludCBhcmNoX3NldHVwX21lbWluaXRfcHYoc3RydWN0IHhjX2RvbV9pbWFnZSAqZG9t KQogewogICAgIGludCByYzsKICAgICB4ZW5fcGZuX3QgcGZuLCBhbGxvY3N6LCBtZm4sIHRvdGFs LCBwZm5fYmFzZTsKQEAgLTc4Miw3ICs3ODcsNyBAQCBpbnQgYXJjaF9zZXR1cF9tZW1pbml0KHN0 cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKIAogICAgIGlmICggZG9tLT5zdXBlcnBhZ2VzICkKICAg ICB7Ci0gICAgICAgIGludCBjb3VudCA9IGRvbS0+dG90YWxfcGFnZXMgPj4gU1VQRVJQQUdFX1BG Tl9TSElGVDsKKyAgICAgICAgaW50IGNvdW50ID0gZG9tLT50b3RhbF9wYWdlcyA+PiBTVVBFUlBB R0VfMk1CX1NISUZUOwogICAgICAgICB4ZW5fcGZuX3QgZXh0ZW50c1tjb3VudF07CiAKICAgICAg ICAgZG9tLT5wMm1fc2l6ZSA9IGRvbS0+dG90YWxfcGFnZXM7CkBAIC03OTMsOSArNzk4LDkgQEAg aW50IGFyY2hfc2V0dXBfbWVtaW5pdChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAKICAgICAg ICAgRE9NUFJJTlRGKCJQb3B1bGF0aW5nIG1lbW9yeSB3aXRoICVkIHN1cGVycGFnZXMiLCBjb3Vu dCk7CiAgICAgICAgIGZvciAoIHBmbiA9IDA7IHBmbiA8IGNvdW50OyBwZm4rKyApCi0gICAgICAg ICAgICBleHRlbnRzW3Bmbl0gPSBwZm4gPDwgU1VQRVJQQUdFX1BGTl9TSElGVDsKKyAgICAgICAg ICAgIGV4dGVudHNbcGZuXSA9IHBmbiA8PCBTVVBFUlBBR0VfMk1CX1NISUZUOwogICAgICAgICBy YyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFwX2V4YWN0KGRvbS0+eGNoLCBkb20tPmd1ZXN0 X2RvbWlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b3VudCwgU1VQRVJQQUdFX1BGTl9TSElGVCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY291bnQsIFNVUEVSUEFHRV8yTUJfU0hJRlQsIDAsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVudHMpOwogICAg ICAgICBpZiAoIHJjICkKICAgICAgICAgICAgIHJldHVybiByYzsKQEAgLTgwNSw3ICs4MTAsNyBA QCBpbnQgYXJjaF9zZXR1cF9tZW1pbml0KHN0cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKICAgICAg ICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKICAgICAgICAgewogICAgICAgICAgICAg bWZuID0gZXh0ZW50c1tpXTsKLSAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwgU1VQRVJQQUdF X05SX1BGTlM7IGorKywgcGZuKysgKQorICAgICAgICAgICAgZm9yICggaiA9IDA7IGogPCBTVVBF UlBBR0VfMk1CX05SX1BGTlM7IGorKywgcGZuKysgKQogICAgICAgICAgICAgICAgIGRvbS0+cDJt X2hvc3RbcGZuXSA9IG1mbiArIGo7CiAgICAgICAgIH0KICAgICB9CkBAIC04ODEsNyArODg2LDcg QEAgaW50IGFyY2hfc2V0dXBfbWVtaW5pdChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgbWVtZmxhZ3M7CiAgICAgICAgICAgICB1aW50NjRfdCBwYWdl czsKICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwbm9kZSA9IHZub2RlX3RvX3Bub2RlW3ZtZW1y YW5nZXNbaV0ubmlkXTsKLSAgICAgICAgICAgIGludCBucl9zcGFnZXMgPSBkb20tPnRvdGFsX3Bh Z2VzID4+IFNVUEVSUEFHRV9QRk5fU0hJRlQ7CisgICAgICAgICAgICBpbnQgbnJfc3BhZ2VzID0g ZG9tLT50b3RhbF9wYWdlcyA+PiBTVVBFUlBBR0VfMk1CX1NISUZUOwogICAgICAgICAgICAgeGVu X3Bmbl90IGV4dGVudHNbU1VQRVJQQUdFX0JBVENIX1NJWkVdOwogICAgICAgICAgICAgeGVuX3Bm bl90IHBmbl9iYXNlX2lkeDsKIApAQCAtOTAyLDExICs5MDcsMTEgQEAgaW50IGFyY2hfc2V0dXBf bWVtaW5pdChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAgICAgICAgICAgICAgICAgbnJfc3Bh Z2VzIC09IGNvdW50OwogCiAgICAgICAgICAgICAgICAgZm9yICggcGZuID0gcGZuX2Jhc2VfaWR4 LCBqID0gMDsKLSAgICAgICAgICAgICAgICAgICAgICBwZm4gPCBwZm5fYmFzZV9pZHggKyAoY291 bnQgPDwgU1VQRVJQQUdFX1BGTl9TSElGVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgcGZuICs9 IFNVUEVSUEFHRV9OUl9QRk5TLCBqKysgKQorICAgICAgICAgICAgICAgICAgICAgIHBmbiA8IHBm bl9iYXNlX2lkeCArIChjb3VudCA8PCBTVVBFUlBBR0VfMk1CX1NISUZUKTsKKyAgICAgICAgICAg ICAgICAgICAgICBwZm4gKz0gU1VQRVJQQUdFXzJNQl9OUl9QRk5TLCBqKysgKQogICAgICAgICAg ICAgICAgICAgICBleHRlbnRzW2pdID0gZG9tLT5wMm1faG9zdFtwZm5dOwogICAgICAgICAgICAg ICAgIHJjID0geGNfZG9tYWluX3BvcHVsYXRlX3BoeXNtYXAoZG9tLT54Y2gsIGRvbS0+Z3Vlc3Rf ZG9taWQsIGNvdW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgU1VQRVJQQUdFX1BGTl9TSElGVCwgbWVtZmxhZ3MsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMk1CX1NISUZULCBtZW1mbGFn cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVu dHMpOwogICAgICAgICAgICAgICAgIGlmICggcmMgPCAwICkKICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHJjOwpAQCAtOTE2LDcgKzkyMSw3IEBAIGludCBhcmNoX3NldHVwX21lbWluaXQoc3Ry dWN0IHhjX2RvbV9pbWFnZSAqZG9tKQogICAgICAgICAgICAgICAgIGZvciAoIGogPSAwOyBqIDwg cmM7IGorKyApCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICBtZm4gPSBl eHRlbnRzW2pdOwotICAgICAgICAgICAgICAgICAgICBmb3IgKCBrID0gMDsgayA8IFNVUEVSUEFH RV9OUl9QRk5TOyBrKyssIHBmbisrICkKKyAgICAgICAgICAgICAgICAgICAgZm9yICggayA9IDA7 IGsgPCBTVVBFUlBBR0VfMk1CX05SX1BGTlM7IGsrKywgcGZuKysgKQogICAgICAgICAgICAgICAg ICAgICAgICAgZG9tLT5wMm1faG9zdFtwZm5dID0gbWZuICsgazsKICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgcGZuX2Jhc2VfaWR4ID0gcGZuOwpAQCAtOTU3LDYgKzk2MiwzNDIg QEAgaW50IGFyY2hfc2V0dXBfbWVtaW5pdChzdHJ1Y3QgeGNfZG9tX2ltYWdlICpkb20pCiAgICAg cmV0dXJuIHJjOwogfQogCisvKgorICogQ2hlY2sgd2hldGhlciB0aGVyZSBleGlzdHMgbW1pbyBo b2xlIGluIHRoZSBzcGVjaWZpZWQgbWVtb3J5IHJhbmdlLgorICogUmV0dXJucyAxIGlmIGV4aXN0 cywgZWxzZSByZXR1cm5zIDAuCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfbW1pb19ob2xlKHVpbnQ2 NF90IHN0YXJ0LCB1aW50NjRfdCBtZW1zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg dWludDY0X3QgbW1pb19zdGFydCwgdWludDY0X3QgbW1pb19zaXplKQoreworICAgIGlmICggc3Rh cnQgKyBtZW1zaXplIDw9IG1taW9fc3RhcnQgfHwgc3RhcnQgPj0gbW1pb19zdGFydCArIG1taW9f c2l6ZSApCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyBpbnQgYXJjaF9zZXR1cF9tZW1pbml0X2h2bShzdHJ1Y3QgeGNfZG9tX2ltYWdl ICpkb20pCit7CisgICAgdW5zaWduZWQgbG9uZyBpLCB2bWVtaWQsIG5yX3BhZ2VzID0gZG9tLT50 b3RhbF9wYWdlczsKKyAgICB1bnNpZ25lZCBsb25nIHAybV9zaXplOworICAgIHVuc2lnbmVkIGxv bmcgdGFyZ2V0X3BhZ2VzID0gZG9tLT50YXJnZXRfcGFnZXM7CisgICAgdW5zaWduZWQgbG9uZyBj dXJfcGFnZXMsIGN1cl9wZm47CisgICAgaW50IHJjOworICAgIHhlbl9jYXBhYmlsaXRpZXNfaW5m b190IGNhcHM7CisgICAgdW5zaWduZWQgbG9uZyBzdGF0X25vcm1hbF9wYWdlcyA9IDAsIHN0YXRf Mm1iX3BhZ2VzID0gMCwgCisgICAgICAgIHN0YXRfMWdiX3BhZ2VzID0gMDsKKyAgICB1bnNpZ25l ZCBpbnQgbWVtZmxhZ3MgPSAwOworICAgIGludCBjbGFpbV9lbmFibGVkID0gZG9tLT5jbGFpbV9l bmFibGVkOworICAgIHVpbnQ2NF90IHRvdGFsX3BhZ2VzOworICAgIHhlbl92bWVtcmFuZ2VfdCBk dW1teV92bWVtcmFuZ2VbMl07CisgICAgdW5zaWduZWQgaW50IGR1bW15X3Zub2RlX3RvX3Bub2Rl WzFdOworICAgIHhlbl92bWVtcmFuZ2VfdCAqdm1lbXJhbmdlczsKKyAgICB1bnNpZ25lZCBpbnQg KnZub2RlX3RvX3Bub2RlOworICAgIHVuc2lnbmVkIGludCBucl92bWVtcmFuZ2VzLCBucl92bm9k ZXM7CisgICAgeGNfaW50ZXJmYWNlICp4Y2ggPSBkb20tPnhjaDsKKyAgICB1aW50MzJfdCBkb21p ZCA9IGRvbS0+Z3Vlc3RfZG9taWQ7CisKKyAgICBpZiAoIG5yX3BhZ2VzID4gdGFyZ2V0X3BhZ2Vz ICkKKyAgICAgICAgbWVtZmxhZ3MgfD0gWEVOTUVNRl9wb3B1bGF0ZV9vbl9kZW1hbmQ7CisKKyAg ICBpZiAoIGRvbS0+bnJfdm1lbXJhbmdlcyA9PSAwICkKKyAgICB7CisgICAgICAgIC8qIEJ1aWxk IGR1bW15IHZub2RlIGluZm9ybWF0aW9uCisgICAgICAgICAqCisgICAgICAgICAqIEd1ZXN0IHBo eXNpY2FsIGFkZHJlc3Mgc3BhY2UgbGF5b3V0OgorICAgICAgICAgKiBbMCwgaG9sZV9zdGFydCkg W2hvbGVfc3RhcnQsIDRHKSBbNEcsIGhpZ2htZW1fZW5kKQorICAgICAgICAgKgorICAgICAgICAg KiBPZiBjb3Vyc2UgaWYgdGhlcmUgaXMgbm8gaGlnaCBtZW1vcnksIHRoZSBzZWNvbmQgdm1lbXJh bmdlCisgICAgICAgICAqIGhhcyBubyBlZmZlY3Qgb24gdGhlIGFjdHVhbCByZXN1bHQuCisgICAg ICAgICAqLworCisgICAgICAgIGR1bW15X3ZtZW1yYW5nZVswXS5zdGFydCA9IDA7CisgICAgICAg IGR1bW15X3ZtZW1yYW5nZVswXS5lbmQgICA9IGRvbS0+bG93bWVtX2VuZDsKKyAgICAgICAgZHVt bXlfdm1lbXJhbmdlWzBdLmZsYWdzID0gMDsKKyAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzBdLm5p ZCAgID0gMDsKKyAgICAgICAgbnJfdm1lbXJhbmdlcyA9IDE7CisKKyAgICAgICAgaWYgKCBkb20t PmhpZ2htZW1fZW5kID4gKDFVTEwgPDwgMzIpICkKKyAgICAgICAgeworICAgICAgICAgICAgZHVt bXlfdm1lbXJhbmdlWzFdLnN0YXJ0ID0gMVVMTCA8PCAzMjsKKyAgICAgICAgICAgIGR1bW15X3Zt ZW1yYW5nZVsxXS5lbmQgICA9IGRvbS0+aGlnaG1lbV9lbmQ7CisgICAgICAgICAgICBkdW1teV92 bWVtcmFuZ2VbMV0uZmxhZ3MgPSAwOworICAgICAgICAgICAgZHVtbXlfdm1lbXJhbmdlWzFdLm5p ZCAgID0gMDsKKworICAgICAgICAgICAgbnJfdm1lbXJhbmdlcysrOworICAgICAgICB9CisKKyAg ICAgICAgZHVtbXlfdm5vZGVfdG9fcG5vZGVbMF0gPSBYQ19OVU1BX05PX05PREU7CisgICAgICAg IG5yX3Zub2RlcyA9IDE7CisgICAgICAgIHZtZW1yYW5nZXMgPSBkdW1teV92bWVtcmFuZ2U7Cisg ICAgICAgIHZub2RlX3RvX3Bub2RlID0gZHVtbXlfdm5vZGVfdG9fcG5vZGU7CisgICAgfQorICAg IGVsc2UKKyAgICB7CisgICAgICAgIGlmICggbnJfcGFnZXMgPiB0YXJnZXRfcGFnZXMgKQorICAg ICAgICB7CisgICAgICAgICAgICBET01QUklOVEYoIkNhbm5vdCBlbmFibGUgdk5VTUEgYW5kIFBv RCBhdCB0aGUgc2FtZSB0aW1lIik7CisgICAgICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICAg ICAgfQorCisgICAgICAgIG5yX3ZtZW1yYW5nZXMgPSBkb20tPm5yX3ZtZW1yYW5nZXM7CisgICAg ICAgIG5yX3Zub2RlcyA9IGRvbS0+bnJfdm5vZGVzOworICAgICAgICB2bWVtcmFuZ2VzID0gZG9t LT52bWVtcmFuZ2VzOworICAgICAgICB2bm9kZV90b19wbm9kZSA9IGRvbS0+dm5vZGVfdG9fcG5v ZGU7CisgICAgfQorCisgICAgdG90YWxfcGFnZXMgPSAwOworICAgIHAybV9zaXplID0gMDsKKyAg ICBmb3IgKCBpID0gMDsgaSA8IG5yX3ZtZW1yYW5nZXM7IGkrKyApCisgICAgeworICAgICAgICB0 b3RhbF9wYWdlcyArPSAoKHZtZW1yYW5nZXNbaV0uZW5kIC0gdm1lbXJhbmdlc1tpXS5zdGFydCkK KyAgICAgICAgICAgICAgICAgICAgICAgID4+IFBBR0VfU0hJRlQpOworICAgICAgICBwMm1fc2l6 ZSA9IHAybV9zaXplID4gKHZtZW1yYW5nZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQpID8KKyAgICAg ICAgICAgIHAybV9zaXplIDogKHZtZW1yYW5nZXNbaV0uZW5kID4+IFBBR0VfU0hJRlQpOworICAg IH0KKworICAgIGlmICggdG90YWxfcGFnZXMgIT0gbnJfcGFnZXMgKQorICAgIHsKKyAgICAgICAg RE9NUFJJTlRGKCJ2TlVNQSBtZW1vcnkgcGFnZXMgbWlzbWF0Y2ggKDB4JSJQUkl4NjQiICE9IDB4 JSJQUkl4NjQiKSIsCisgICAgICAgICAgICAgICB0b3RhbF9wYWdlcywgbnJfcGFnZXMpOworICAg ICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisKKyAgICBpZiAoIHhjX3ZlcnNpb24oeGNoLCBY RU5WRVJfY2FwYWJpbGl0aWVzLCAmY2FwcykgIT0gMCApCisgICAgeworICAgICAgICBET01QUklO VEYoIkNvdWxkIG5vdCBnZXQgWGVuIGNhcGFiaWxpdGllcyIpOworICAgICAgICBnb3RvIGVycm9y X291dDsKKyAgICB9CisKKyAgICBkb20tPnAybV9zaXplID0gcDJtX3NpemU7CisgICAgZG9tLT5w Mm1faG9zdCA9IHhjX2RvbV9tYWxsb2MoZG9tLCBzaXplb2YoeGVuX3Bmbl90KSAqCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbS0+cDJtX3NpemUpOworICAgIGlmICgg ZG9tLT5wMm1faG9zdCA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIERPTVBSSU5URigiQ291bGQg bm90IGFsbG9jYXRlIHAybSIpOworICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisKKyAg ICBmb3IgKCBpID0gMDsgaSA8IHAybV9zaXplOyBpKysgKQorICAgICAgICBkb20tPnAybV9ob3N0 W2ldID0gKCh4ZW5fcGZuX3QpLTEpOworICAgIGZvciAoIHZtZW1pZCA9IDA7IHZtZW1pZCA8IG5y X3ZtZW1yYW5nZXM7IHZtZW1pZCsrICkKKyAgICB7CisgICAgICAgIHVpbnQ2NF90IHBmbjsKKwor ICAgICAgICBmb3IgKCBwZm4gPSB2bWVtcmFuZ2VzW3ZtZW1pZF0uc3RhcnQgPj4gUEFHRV9TSElG VDsKKyAgICAgICAgICAgICAgcGZuIDwgdm1lbXJhbmdlc1t2bWVtaWRdLmVuZCA+PiBQQUdFX1NI SUZUOworICAgICAgICAgICAgICBwZm4rKyApCisgICAgICAgICAgICBkb20tPnAybV9ob3N0W3Bm bl0gPSBwZm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUcnkgdG8gY2xhaW0gcGFnZXMgZm9y IGVhcmx5IHdhcm5pbmcgb2YgaW5zdWZmaWNpZW50IG1lbW9yeSBhdmFpbGFibGUuCisgICAgICog VGhpcyBzaG91bGQgZ28gYmVmb3JlIHhjX2RvbWFpbl9zZXRfcG9kX3RhcmdldCwgYmVjdWFzZSB0 aGF0IGZ1bmN0aW9uCisgICAgICogYWN0dWFsbHkgYWxsb2NhdGVzIG1lbW9yeSBmb3IgdGhlIGd1 ZXN0LiBDbGFpbWluZyBhZnRlciBtZW1vcnkgaGFzIGJlZW4KKyAgICAgKiBhbGxvY2F0ZWQgaXMg cG9pbnRsZXNzLgorICAgICAqLworICAgIGlmICggY2xhaW1fZW5hYmxlZCApIHsKKyAgICAgICAg cmMgPSB4Y19kb21haW5fY2xhaW1fcGFnZXMoeGNoLCBkb21pZCwgdGFyZ2V0X3BhZ2VzIC0KKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9tLT52Z2FfaG9sZSA/IFZHQV9IT0xF X1NJWkUgOiAwKTsKKyAgICAgICAgaWYgKCByYyAhPSAwICkKKyAgICAgICAgeworICAgICAgICAg ICAgRE9NUFJJTlRGKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBIVk0gZ3Vlc3QgYXMg d2UgY2Fubm90IGNsYWltIG1lbW9yeSEiKTsKKyAgICAgICAgICAgIGdvdG8gZXJyb3Jfb3V0Owor ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCBtZW1mbGFncyAmIFhFTk1FTUZfcG9wdWxhdGVf b25fZGVtYW5kICkKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFN1YnRyYWN0IFZHQV9I T0xFX1NJWkUgZnJvbSB0YXJnZXRfcGFnZXMgZm9yIHRoZSBWR0EKKyAgICAgICAgICogImhvbGUi LiAgWGVuIHdpbGwgYWRqdXN0IHRoZSBQb0QgY2FjaGUgc2l6ZSBzbyB0aGF0IGRvbWFpbgorICAg ICAgICAgKiB0b3RfcGFnZXMgd2lsbCBiZSB0YXJnZXRfcGFnZXMgLSBWR0FfSE9MRV9TSVpFIGFm dGVyCisgICAgICAgICAqIHRoaXMgY2FsbC4KKyAgICAgICAgICovCisgICAgICAgIHJjID0geGNf ZG9tYWluX3NldF9wb2RfdGFyZ2V0KHhjaCwgZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHRhcmdldF9wYWdlcyAtIAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBkb20tPnZnYV9ob2xlID8gVkdBX0hPTEVfU0laRSA6IDAsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICAg ICBpZiAoIHJjICE9IDAgKQorICAgICAgICB7CisgICAgICAgICAgICBET01QUklOVEYoIkNvdWxk IG5vdCBzZXQgUG9EIHRhcmdldCBmb3IgSFZNIGd1ZXN0LlxuIik7CisgICAgICAgICAgICBnb3Rv IGVycm9yX291dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogQWxsb2NhdGUg bWVtb3J5IGZvciBIVk0gZ3Vlc3QsIHNraXBwaW5nIFZHQSBob2xlIDB4QTAwMDAtMHhDMDAwMC4K KyAgICAgKgorICAgICAqIFdlIGF0dGVtcHQgdG8gYWxsb2NhdGUgMUdCIHBhZ2VzIGlmIHBvc3Np YmxlLiBJdCBmYWxscyBiYWNrIG9uIDJNQgorICAgICAqIHBhZ2VzIGlmIDFHQiBhbGxvY2F0aW9u IGZhaWxzLiA0S0IgcGFnZXMgd2lsbCBiZSB1c2VkIGV2ZW50dWFsbHkgaWYKKyAgICAgKiBib3Ro IGZhaWwuCisgICAgICogCisgICAgICogVW5kZXIgMk1CIG1vZGUsIHdlIGFsbG9jYXRlIHBhZ2Vz IGluIGJhdGNoZXMgb2Ygbm8gbW9yZSB0aGFuIDhNQiB0byAKKyAgICAgKiBlbnN1cmUgdGhhdCB3 ZSBjYW4gYmUgcHJlZW1wdGVkIGFuZCBoZW5jZSBkb20wIHJlbWFpbnMgcmVzcG9uc2l2ZS4KKyAg ICAgKi8KKyAgICBpZiAoIGRvbS0+dmdhX2hvbGUgKQorICAgICAgICByYyA9IHhjX2RvbWFpbl9w b3B1bGF0ZV9waHlzbWFwX2V4YWN0KAorICAgICAgICAgICAgeGNoLCBkb21pZCwgMHhhMCwgMCwg bWVtZmxhZ3MsICZkb20tPnAybV9ob3N0WzB4MDBdKTsKKworICAgIHN0YXRfbm9ybWFsX3BhZ2Vz ID0gMDsKKyAgICBmb3IgKCB2bWVtaWQgPSAwOyB2bWVtaWQgPCBucl92bWVtcmFuZ2VzOyB2bWVt aWQrKyApCisgICAgeworICAgICAgICB1bnNpZ25lZCBpbnQgbmV3X21lbWZsYWdzID0gbWVtZmxh Z3M7CisgICAgICAgIHVpbnQ2NF90IGVuZF9wYWdlczsKKyAgICAgICAgdW5zaWduZWQgaW50IHZu b2RlID0gdm1lbXJhbmdlc1t2bWVtaWRdLm5pZDsKKyAgICAgICAgdW5zaWduZWQgaW50IHBub2Rl ID0gdm5vZGVfdG9fcG5vZGVbdm5vZGVdOworCisgICAgICAgIGlmICggcG5vZGUgIT0gWENfTlVN QV9OT19OT0RFICkKKyAgICAgICAgICAgIG5ld19tZW1mbGFncyB8PSBYRU5NRU1GX2V4YWN0X25v ZGUocG5vZGUpOworCisgICAgICAgIGVuZF9wYWdlcyA9IHZtZW1yYW5nZXNbdm1lbWlkXS5lbmQg Pj4gUEFHRV9TSElGVDsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29uc2lkZXIgdmdhIGhvbGUg YmVsb25ncyB0byB0aGUgdm1lbXJhbmdlIHRoYXQgY292ZXJzCisgICAgICAgICAqIDB4QTAwMDAt MHhDMDAwMC4gTm90ZSB0aGF0IDB4MDAwMDAtMHhBMDAwMCBpcyBwb3B1bGF0ZWQganVzdAorICAg ICAgICAgKiBiZWZvcmUgdGhpcyBsb29wLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCB2bWVt cmFuZ2VzW3ZtZW1pZF0uc3RhcnQgPT0gMCAmJiBkb20tPnZnYV9ob2xlICkKKyAgICAgICAgewor ICAgICAgICAgICAgY3VyX3BhZ2VzID0gMHhjMDsKKyAgICAgICAgICAgIHN0YXRfbm9ybWFsX3Bh Z2VzICs9IDB4YzA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VyX3Bh Z2VzID0gdm1lbXJhbmdlc1t2bWVtaWRdLnN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisKKyAgICAgICAg d2hpbGUgKCAocmMgPT0gMCkgJiYgKGVuZF9wYWdlcyA+IGN1cl9wYWdlcykgKQorICAgICAgICB7 CisgICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRvIG1heGltdW0gMUdCIGV4dGVudC4gKi8KKyAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQgPSBlbmRfcGFnZXMgLSBjdXJfcGFnZXM7Cisg ICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9wYWdlcyA9IFNVUEVSUEFHRV8xR0JfTlJfUEZO UzsKKworICAgICAgICAgICAgaWYgKCBjb3VudCA+IG1heF9wYWdlcyApCisgICAgICAgICAgICAg ICAgY291bnQgPSBtYXhfcGFnZXM7CisKKyAgICAgICAgICAgIGN1cl9wZm4gPSBkb20tPnAybV9o b3N0W2N1cl9wYWdlc107CisKKyAgICAgICAgICAgIC8qIFRha2UgY2FyZSB0aGUgY29ybmVyIGNh c2VzIG9mIHN1cGVyIHBhZ2UgdGFpbHMgKi8KKyAgICAgICAgICAgIGlmICggKChjdXJfcGZuICYg KFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgKGNv dW50ID4gKC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkpICkKKyAgICAgICAg ICAgICAgICBjb3VudCA9IC1jdXJfcGZuICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKTsKKyAg ICAgICAgICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNVUEVSUEFHRV8xR0JfTlJfUEZOUy0xKSkg IT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAoY291bnQgPiBTVVBFUlBBR0VfMUdCX05S X1BGTlMpICkKKyAgICAgICAgICAgICAgICBjb3VudCAmPSB+KFNVUEVSUEFHRV8xR0JfTlJfUEZO UyAtIDEpOworCisgICAgICAgICAgICAvKiBBdHRlbXAgdG8gYWxsb2NhdGUgMUdCIHN1cGVyIHBh Z2UuIEJlY2F1c2UgaW4gZWFjaCBwYXNzCisgICAgICAgICAgICAgKiB3ZSBvbmx5IGFsbG9jYXRl IGF0IG1vc3QgMUdCLCB3ZSBkb24ndCBoYXZlIHRvIGNsaXAKKyAgICAgICAgICAgICAqIHN1cGVy IHBhZ2UgYm91bmRhcmllcy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCAoKGNv dW50IHwgY3VyX3BmbikgJiAoU1VQRVJQQUdFXzFHQl9OUl9QRk5TIC0gMSkpID09IDAgJiYKKyAg ICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlcmUgZXhpc3RzIE1NSU8gaG9sZSBpbiB0aGUg MUdCIG1lbW9yeQorICAgICAgICAgICAgICAgICAgKiByYW5nZSAqLworICAgICAgICAgICAgICAg ICAhY2hlY2tfbW1pb19ob2xlKGN1cl9wZm4gPDwgUEFHRV9TSElGVCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX05SX1BGTlMgPDwgUEFHRV9TSElGVCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb20tPm1taW9fc3RhcnQsIGRvbS0+ bW1pb19zaXplKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbG9uZyBkb25lOwor ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbnJfZXh0ZW50cyA9IGNvdW50ID4+IFNVUEVS UEFHRV8xR0JfU0hJRlQ7CisgICAgICAgICAgICAgICAgeGVuX3Bmbl90IHNwX2V4dGVudHNbbnJf ZXh0ZW50c107CisKKyAgICAgICAgICAgICAgICBmb3IgKCBpID0gMDsgaSA8IG5yX2V4dGVudHM7 IGkrKyApCisgICAgICAgICAgICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQorICAgICAgICAgICAg ICAgICAgICAgICAgZG9tLT5wMm1faG9zdFtjdXJfcGFnZXMrKGk8PFNVUEVSUEFHRV8xR0JfU0hJ RlQpXTsKKworICAgICAgICAgICAgICAgIGRvbmUgPSB4Y19kb21haW5fcG9wdWxhdGVfcGh5c21h cCh4Y2gsIGRvbWlkLCBucl9leHRlbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMUdCX1NISUZULAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1mbGFncywgc3BfZXh0ZW50cyk7 CisKKyAgICAgICAgICAgICAgICBpZiAoIGRvbmUgPiAwICkKKyAgICAgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgICAgIHN0YXRfMWdiX3BhZ2VzICs9IGRvbmU7CisgICAgICAgICAgICAg ICAgICAgIGRvbmUgPDw9IFNVUEVSUEFHRV8xR0JfU0hJRlQ7CisgICAgICAgICAgICAgICAgICAg IGN1cl9wYWdlcyArPSBkb25lOworICAgICAgICAgICAgICAgICAgICBjb3VudCAtPSBkb25lOwor ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCBjb3Vu dCAhPSAwICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDbGlwIGNvdW50IHRv IG1heGltdW0gOE1CIGV4dGVudC4gKi8KKyAgICAgICAgICAgICAgICBtYXhfcGFnZXMgPSBTVVBF UlBBR0VfMk1CX05SX1BGTlMgKiA0OworICAgICAgICAgICAgICAgIGlmICggY291bnQgPiBtYXhf cGFnZXMgKQorICAgICAgICAgICAgICAgICAgICBjb3VudCA9IG1heF9wYWdlczsKKworICAgICAg ICAgICAgICAgIC8qIENsaXAgcGFydGlhbCBzdXBlcnBhZ2UgZXh0ZW50cyB0byBzdXBlcnBhZ2UK KyAgICAgICAgICAgICAgICAgKiBib3VuZGFyaWVzLiAqLworICAgICAgICAgICAgICAgIGlmICgg KChjdXJfcGZuICYgKFNVUEVSUEFHRV8yTUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAg ICAgICAgICAgICAgIChjb3VudCA+ICgtY3VyX3BmbiAmIChTVVBFUlBBR0VfMk1CX05SX1BGTlMt MSkpKSApCisgICAgICAgICAgICAgICAgICAgIGNvdW50ID0gLWN1cl9wZm4gJiAoU1VQRVJQQUdF XzJNQl9OUl9QRk5TLTEpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAoKGNvdW50ICYgKFNV UEVSUEFHRV8yTUJfTlJfUEZOUy0xKSkgIT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvdW50ID4gU1VQRVJQQUdFXzJNQl9OUl9QRk5TKSApCisgICAgICAgICAgICAgICAgICAg IGNvdW50ICY9IH4oU1VQRVJQQUdFXzJNQl9OUl9QRk5TIC0gMSk7IC8qIGNsaXAgbm9uLXMucC4g dGFpbCAqLworCisgICAgICAgICAgICAgICAgLyogQXR0ZW1wdCB0byBhbGxvY2F0ZSBzdXBlcnBh Z2UgZXh0ZW50cy4gKi8KKyAgICAgICAgICAgICAgICBpZiAoICgoY291bnQgfCBjdXJfcGZuKSAm IChTVVBFUlBBR0VfMk1CX05SX1BGTlMgLSAxKSkgPT0gMCApCisgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICBsb25nIGRvbmU7CisgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgbnJfZXh0ZW50cyA9IGNvdW50ID4+IFNVUEVSUEFHRV8yTUJfU0hJRlQ7CisgICAg ICAgICAgICAgICAgICAgIHhlbl9wZm5fdCBzcF9leHRlbnRzW25yX2V4dGVudHNdOworCisgICAg ICAgICAgICAgICAgICAgIGZvciAoIGkgPSAwOyBpIDwgbnJfZXh0ZW50czsgaSsrICkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHNwX2V4dGVudHNbaV0gPQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGRvbS0+cDJtX2hvc3RbY3VyX3BhZ2VzKyhpPDxTVVBFUlBBR0VfMk1CX1NISUZUKV07 CisKKyAgICAgICAgICAgICAgICAgICAgZG9uZSA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFw KHhjaCwgZG9taWQsIG5yX2V4dGVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBTVVBFUlBBR0VfMk1CX1NISUZULAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtZmxhZ3MsIHNwX2V4 dGVudHMpOworCisgICAgICAgICAgICAgICAgICAgIGlmICggZG9uZSA+IDAgKQorICAgICAgICAg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0XzJtYl9wYWdlcyArPSBk b25lOworICAgICAgICAgICAgICAgICAgICAgICAgZG9uZSA8PD0gU1VQRVJQQUdFXzJNQl9TSElG VDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cl9wYWdlcyArPSBkb25lOworICAgICAgICAg ICAgICAgICAgICAgICAgY291bnQgLT0gZG9uZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogRmFsbCBiYWNr IHRvIDRrQiBleHRlbnRzLiAqLworICAgICAgICAgICAgaWYgKCBjb3VudCAhPSAwICkKKyAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IHhjX2RvbWFpbl9wb3B1bGF0ZV9waHlzbWFw X2V4YWN0KAorICAgICAgICAgICAgICAgICAgICB4Y2gsIGRvbWlkLCBjb3VudCwgMCwgbmV3X21l bWZsYWdzLCAmZG9tLT5wMm1faG9zdFtjdXJfcGFnZXNdKTsKKyAgICAgICAgICAgICAgICBjdXJf cGFnZXMgKz0gY291bnQ7CisgICAgICAgICAgICAgICAgc3RhdF9ub3JtYWxfcGFnZXMgKz0gY291 bnQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHJjICE9IDAgKQor ICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCByYyAhPSAwICkKKyAgICB7Cisg ICAgICAgIERPTVBSSU5URigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgSFZNIGd1ZXN0 LiIpOworICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisKKyAgICBEUFJJTlRGKCJQSFlT SUNBTCBNRU1PUlkgQUxMT0NBVElPTjpcbiIpOworICAgIERQUklOVEYoIiAgNEtCIFBBR0VTOiAw eCUwMTZseFxuIiwgc3RhdF9ub3JtYWxfcGFnZXMpOworICAgIERQUklOVEYoIiAgMk1CIFBBR0VT OiAweCUwMTZseFxuIiwgc3RhdF8ybWJfcGFnZXMpOworICAgIERQUklOVEYoIiAgMUdCIFBBR0VT OiAweCUwMTZseFxuIiwgc3RhdF8xZ2JfcGFnZXMpOworCisgICAgcmMgPSAwOworICAgIGdvdG8g b3V0OworIGVycm9yX291dDoKKyAgICByYyA9IC0xOworIG91dDoKKworICAgIC8qIGVuc3VyZSBu byB1bmNsYWltZWQgcGFnZXMgYXJlIGxlZnQgdW51c2VkICovCisgICAgeGNfZG9tYWluX2NsYWlt X3BhZ2VzKHhjaCwgZG9taWQsIDAgLyogY2FuY2VscyB0aGUgY2xhaW0gKi8pOworCisgICAgcmV0 dXJuIHJjOworfQorCitpbnQgYXJjaF9zZXR1cF9tZW1pbml0KHN0cnVjdCB4Y19kb21faW1hZ2Ug KmRvbSkKK3sKKyAgICByZXR1cm4gKGRvbS0+Y29udGFpbmVyX3R5cGUgPT0gWENfRE9NX1BWX0NP TlRBSU5FUikgPworICAgICAgICAgICBhcmNoX3NldHVwX21lbWluaXRfcHYoZG9tKSA6IGFyY2hf c2V0dXBfbWVtaW5pdF9odm0oZG9tKTsKK30KKwogaW50IGFyY2hfc2V0dXBfYm9vdGVhcmx5KHN0 cnVjdCB4Y19kb21faW1hZ2UgKmRvbSkKIHsKICAgICBET01QUklOVEYoIiVzOiBkb2luZyBub3Ro aW5nIiwgX19GVU5DVElPTl9fKTsKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhsL2xpYnhsX2RvbS5j IGIvdG9vbHMvbGlieGwvbGlieGxfZG9tLmMKaW5kZXggODkwN2JkNi4uNjI3MzA1MiAxMDA2NDQK LS0tIGEvdG9vbHMvbGlieGwvbGlieGxfZG9tLmMKKysrIGIvdG9vbHMvbGlieGwvbGlieGxfZG9t LmMKQEAgLTY2Niw2ICs2NjYsNyBAQCBpbnQgbGlieGxfX2J1aWxkX3B2KGxpYnhsX19nYyAqZ2Ms IHVpbnQzMl90IGRvbWlkLAogICAgIGRvbS0+eGVuc3RvcmVfZXZ0Y2huID0gc3RhdGUtPnN0b3Jl X3BvcnQ7CiAgICAgZG9tLT54ZW5zdG9yZV9kb21pZCA9IHN0YXRlLT5zdG9yZV9kb21pZDsKICAg ICBkb20tPmNsYWltX2VuYWJsZWQgPSBsaWJ4bF9kZWZib29sX3ZhbChpbmZvLT5jbGFpbV9tb2Rl KTsKKyAgICBkb20tPnZnYV9ob2xlID0gMDsKIAogICAgIGlmIChpbmZvLT5udW1fdm51bWFfbm9k ZXMgIT0gMCkgewogICAgICAgICB1bnNpZ25lZCBpbnQgaTsKLS0gCjEuOS41IChBcHBsZSBHaXQt NTAuMykKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpY ZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHA6Ly9saXN0 cy54ZW4ub3JnL3hlbi1kZXZlbAo=