From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 19/29] xl: split out vcpu related code Date: Fri, 24 Feb 2017 16:13:04 +0000 Message-ID: <20170224161314.22154-20-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@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.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIXu-0006ak-6k for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:38 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDIgKy0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDMwNiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xzL3hsL3hsX3Zj cHUuYyAgICB8IDMzNyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzMzggaW5zZXJ0aW9ucygrKSwgMzA3IGRlbGV0aW9u cygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3hsL3hsX3ZjcHUuYwoKZGlmZiAtLWdpdCBh L3Rvb2xzL3hsL01ha2VmaWxlIGIvdG9vbHMveGwvTWFrZWZpbGUKaW5kZXggMGFmMWU5MmI2NS4u ZTZlOGNlZjcxMCAxMDA2NDQKLS0tIGEvdG9vbHMveGwvTWFrZWZpbGUKKysrIGIvdG9vbHMveGwv TWFrZWZpbGUKQEAgLTE4LDcgKzE4LDcgQEAgQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CiBYTF9PQkpT ID0geGwubyB4bF9jbWRpbXBsLm8geGxfY21kdGFibGUubyB4bF9zeHAubyB4bF91dGlscy5vCiBY TF9PQkpTICs9IHhsX3RtZW0ubyB4bF9wYXJzZS5vIHhsX2NwdXBvb2wubyB4bF9mbGFzay5vCiBY TF9PQkpTICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vIHhsX25pYy5vIHhsX3VzYi5vCi1YTF9PQkpT ICs9IHhsX3NjaGVkLm8geGxfcGNpLm8KK1hMX09CSlMgKz0geGxfc2NoZWQubyB4bF9wY2kubyB4 bF92Y3B1Lm8KIAogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX2xpYnhlbnRvb2xsb2cp CiAkKFhMX09CSlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfWEwpCmRpZmYgLS1naXQgYS90b29scy94 bC94bF9jbWRpbXBsLmMgYi90b29scy94bC94bF9jbWRpbXBsLmMKaW5kZXggYjMyMjMzZTk1ZS4u ZmFlYWM2NzVhZCAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGxfY21kaW1wbC5jCisrKyBiL3Rvb2xz L3hsL3hsX2NtZGltcGwuYwpAQCAtMjg4NSwzMTIgKzI4ODUsNiBAQCBpbnQgbWFpbl9idXR0b25f cHJlc3MoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMg dm9pZCBwcmludF92Y3B1aW5mbyh1aW50MzJfdCB0ZG9taWQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBsaWJ4bF92Y3B1aW5mbyAqdmNwdWluZm8sCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICB1aW50MzJfdCBucl9jcHVzKQotewotICAgIGNoYXIgKmRvbW5hbWU7Ci0KLSAg ICAvKiAgICAgIE5BTUUgIElEICBWQ1BVICovCi0gICAgZG9tbmFtZSA9IGxpYnhsX2RvbWlkX3Rv X25hbWUoY3R4LCB0ZG9taWQpOwotICAgIHByaW50ZigiJS0zMnMgJTV1ICU1dSIsCi0gICAgICAg ICAgIGRvbW5hbWUsIHRkb21pZCwgdmNwdWluZm8tPnZjcHVpZCk7Ci0gICAgZnJlZShkb21uYW1l KTsKLSAgICBpZiAoIXZjcHVpbmZvLT5vbmxpbmUpIHsKLSAgICAgICAgLyogICAgICBDUFUgU1RB ICovCi0gICAgICAgIHByaW50ZigiJTVjICUzYyVjcCAiLCAnLScsICctJywgJy0nKTsKLSAgICB9 IGVsc2UgewotICAgICAgICAvKiAgICAgIENQVSBTVEEgKi8KLSAgICAgICAgcHJpbnRmKCIlNXUg JTNjJWMtICIsIHZjcHVpbmZvLT5jcHUsCi0gICAgICAgICAgICAgICB2Y3B1aW5mby0+cnVubmlu ZyA/ICdyJyA6ICctJywKLSAgICAgICAgICAgICAgIHZjcHVpbmZvLT5ibG9ja2VkID8gJ2InIDog Jy0nKTsKLSAgICB9Ci0gICAgLyogICAgICBUSU0gKi8KLSAgICBwcmludGYoIiU5LjFmICAiLCAo KGZsb2F0KXZjcHVpbmZvLT52Y3B1X3RpbWUgLyAxZTkpKTsKLSAgICAvKiBDUFUgSEFSRCBBTkQg U09GVCBBRkZJTklUWSAqLwotICAgIHByaW50X2JpdG1hcCh2Y3B1aW5mby0+Y3B1bWFwLm1hcCwg bnJfY3B1cywgc3Rkb3V0KTsKLSAgICBwcmludGYoIiAvICIpOwotICAgIHByaW50X2JpdG1hcCh2 Y3B1aW5mby0+Y3B1bWFwX3NvZnQubWFwLCBucl9jcHVzLCBzdGRvdXQpOwotICAgIHByaW50Zigi XG4iKTsKLX0KLQotc3RhdGljIHZvaWQgcHJpbnRfZG9tYWluX3ZjcHVpbmZvKHVpbnQzMl90IGRv bWlkLCB1aW50MzJfdCBucl9jcHVzKQotewotICAgIGxpYnhsX3ZjcHVpbmZvICp2Y3B1aW5mbzsK LSAgICBpbnQgaSwgbmJfdmNwdSwgbnJjcHVzOwotCi0gICAgdmNwdWluZm8gPSBsaWJ4bF9saXN0 X3ZjcHUoY3R4LCBkb21pZCwgJm5iX3ZjcHUsICZucmNwdXMpOwotCi0gICAgaWYgKCF2Y3B1aW5m bykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgZm9yIChpID0gMDsgaSA8IG5iX3ZjcHU7IGkrKykg ewotICAgICAgICBwcmludF92Y3B1aW5mbyhkb21pZCwgJnZjcHVpbmZvW2ldLCBucl9jcHVzKTsK LSAgICB9Ci0KLSAgICBsaWJ4bF92Y3B1aW5mb19saXN0X2ZyZWUodmNwdWluZm8sIG5iX3ZjcHUp OwotfQotCi1zdGF0aWMgdm9pZCB2Y3B1bGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0g ICAgbGlieGxfZG9taW5mbyAqZG9taW5mbzsKLSAgICBsaWJ4bF9waHlzaW5mbyBwaHlzaW5mbzsK LSAgICBpbnQgaSwgbmJfZG9tYWluOwotCi0gICAgaWYgKGxpYnhsX2dldF9waHlzaW5mbyhjdHgs ICZwaHlzaW5mbykgIT0gMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX3BoeXNp bmZvIGZhaWxlZC5cbiIpOwotICAgICAgICBnb3RvIHZjcHVsaXN0X291dDsKLSAgICB9Ci0KLSAg ICBwcmludGYoIiUtMzJzICU1cyAlNXMgJTVzICU1cyAlOXMgJXNcbiIsCi0gICAgICAgICAgICJO YW1lIiwgIklEIiwgIlZDUFUiLCAiQ1BVIiwgIlN0YXRlIiwgIlRpbWUocykiLAotICAgICAgICAg ICAiQWZmaW5pdHkgKEhhcmQgLyBTb2Z0KSIpOwotICAgIGlmICghYXJnYykgewotICAgICAgICBp ZiAoIShkb21pbmZvID0gbGlieGxfbGlzdF9kb21haW4oY3R4LCAmbmJfZG9tYWluKSkpIHsKLSAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfbGlzdF9kb21haW4gZmFpbGVkLlxuIik7 Ci0gICAgICAgICAgICBnb3RvIHZjcHVsaXN0X291dDsKLSAgICAgICAgfQotCi0gICAgICAgIGZv ciAoaSA9IDA7IGk8bmJfZG9tYWluOyBpKyspCi0gICAgICAgICAgICBwcmludF9kb21haW5fdmNw dWluZm8oZG9taW5mb1tpXS5kb21pZCwgcGh5c2luZm8ubnJfY3B1cyk7Ci0KLSAgICAgICAgbGli eGxfZG9taW5mb19saXN0X2ZyZWUoZG9taW5mbywgbmJfZG9tYWluKTsKLSAgICB9IGVsc2Ugewot ICAgICAgICBmb3IgKDsgYXJnYyA+IDA7ICsrYXJndiwgLS1hcmdjKSB7Ci0gICAgICAgICAgICB1 aW50MzJfdCBkb21pZCA9IHhmaW5kX2RvbWFpbigqYXJndik7Ci0gICAgICAgICAgICBwcmludF9k b21haW5fdmNwdWluZm8oZG9taWQsIHBoeXNpbmZvLm5yX2NwdXMpOwotICAgICAgICB9Ci0gICAg fQotICB2Y3B1bGlzdF9vdXQ6Ci0gICAgbGlieGxfcGh5c2luZm9fZGlzcG9zZSgmcGh5c2luZm8p OwotfQotCi1pbnQgbWFpbl92Y3B1bGlzdChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAg aW50IG9wdDsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBOVUxMLCAidmNwdS1s aXN0IiwgMCkgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAgdmNwdWxp c3QoYXJnYyAtIG9wdGluZCwgYXJndiArIG9wdGluZCk7Ci0gICAgcmV0dXJuIEVYSVRfU1VDQ0VT UzsKLX0KLQotaW50IG1haW5fdmNwdXBpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAg c3RhdGljIHN0cnVjdCBvcHRpb24gb3B0c1tdID0gewotICAgICAgICB7ImZvcmNlIiwgMCwgMCwg J2YnfSwKLSAgICAgICAgQ09NTU9OX0xPTkdfT1BUUwotICAgIH07Ci0gICAgbGlieGxfdmNwdWlu Zm8gKnZjcHVpbmZvOwotICAgIGxpYnhsX2JpdG1hcCBjcHVtYXBfaGFyZCwgY3B1bWFwX3NvZnQ7 OwotICAgIGxpYnhsX2JpdG1hcCAqc29mdCA9ICZjcHVtYXBfc29mdCwgKmhhcmQgPSAmY3B1bWFw X2hhcmQ7Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0gICAgLyoKLSAgICAgKiBpbnQgd291bGQgYmUg ZW5vdWdoIGZvciB2Y3B1aWQsIGJ1dCB3ZSBkb24ndCB3YW50IHRvCi0gICAgICogbWVzcyBhcm91 bmcgcmFuZ2UgY2hlY2tpbmcgdGhlIHJldHVybiB2YWx1ZSBvZiBzdHJ0b2woKS4KLSAgICAgKi8K LSAgICBsb25nIHZjcHVpZDsKLSAgICBjb25zdCBjaGFyICp2Y3B1LCAqaGFyZF9zdHIsICpzb2Z0 X3N0cjsKLSAgICBjaGFyICplbmRwdHI7Ci0gICAgaW50IG9wdCwgbmJfY3B1LCBuYl92Y3B1LCBy YyA9IEVYSVRfRkFJTFVSRTsKLSAgICBib29sIGZvcmNlID0gZmFsc2U7Ci0KLSAgICBsaWJ4bF9i aXRtYXBfaW5pdCgmY3B1bWFwX2hhcmQpOwotICAgIGxpYnhsX2JpdG1hcF9pbml0KCZjcHVtYXBf c29mdCk7Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiZiIsIG9wdHMsICJ2Y3B1LXBp biIsIDMpIHsKLSAgICBjYXNlICdmJzoKLSAgICAgICAgZm9yY2UgPSB0cnVlOwotICAgICAgICBi cmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBkb21pZCA9 IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwotICAgIHZjcHUgPSBhcmd2W29wdGluZCsxXTsK LSAgICBoYXJkX3N0ciA9IGFyZ3Zbb3B0aW5kKzJdOwotICAgIHNvZnRfc3RyID0gKGFyZ2MgPiBv cHRpbmQrMykgPyBhcmd2W29wdGluZCszXSA6IE5VTEw7Ci0KLSAgICAvKiBGaWd1cmUgb3V0IHdp dGggd2hpY2ggdkNQVSB3ZSBhcmUgZGVhbGluZyB3aXRoICovCi0gICAgdmNwdWlkID0gc3RydG9s KHZjcHUsICZlbmRwdHIsIDEwKTsKLSAgICBpZiAodmNwdSA9PSBlbmRwdHIgfHwgdmNwdWlkIDwg MCkgewotICAgICAgICBpZiAoc3RyY21wKHZjcHUsICJhbGwiKSkgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJFcnJvcjogSW52YWxpZCBhcmd1bWVudCAlcyBhcyBWQ1BVLlxuIiwgdmNw dSk7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotICAgICAgICBpZiAoZm9yY2Up IHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IC0tZm9yY2UgYW5kICdhbGwn IGFzIFZDUFUgbm90IGFsbG93ZWQuXG4iKTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAg ICB9Ci0gICAgICAgIHZjcHVpZCA9IC0xOwotICAgIH0KLQotICAgIGlmIChsaWJ4bF9jcHVfYml0 bWFwX2FsbG9jKGN0eCwgJmNwdW1hcF9oYXJkLCAwKSB8fAotICAgICAgICBsaWJ4bF9jcHVfYml0 bWFwX2FsbG9jKGN0eCwgJmNwdW1hcF9zb2Z0LCAwKSkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAg ICAvKgotICAgICAqIFN5bnRheCBpczogeGwgdmNwdS1waW4gPGRvbWlkPiA8dmNwdT4gPGhhcmQ+ IDxzb2Z0PgotICAgICAqIFdlIHdhbnQgdG8gaGFuZGxlIGFsbCB0aGUgZm9sbG93aW5nIGNhc2Vz ICgnLScgbWVhbnMKLSAgICAgKiAibGVhdmUgaXQgYWxvbmUiKToKLSAgICAgKiAgeGwgdmNwdS1w aW4gMCAzIDMsNAotICAgICAqICB4bCB2Y3B1LXBpbiAwIDMgMyw0IC0KLSAgICAgKiAgeGwgdmNw dS1waW4gMCAzIC0gNi05Ci0gICAgICogIHhsIHZjcHUtcGluIDAgMyAzLDQgNi05Ci0gICAgICov Ci0KLSAgICAvKgotICAgICAqIEhhcmQgYWZmaW5pdHkgaXMgYWx3YXlzIHByZXNlbnQuIEhvd2V2 ZXIsIGlmIGl0J3MgIi0iLCBhbGwgd2UgbmVlZAotICAgICAqIGlzIHBhc3NpbmcgYSBOVUxMIHBv aW50ZXIgdG8gdGhlIGxpYnhsX3NldF92Y3B1YWZmaW5pdHkoKSBjYWxsIGJlbG93LgotICAgICAq LwotICAgIGlmICghc3RyY21wKGhhcmRfc3RyLCAiLSIpKQotICAgICAgICBoYXJkID0gTlVMTDsK LSAgICBlbHNlIGlmIChwYXJzZV9jcHVyYW5nZShoYXJkX3N0ciwgaGFyZCkpCi0gICAgICAgIGdv dG8gb3V0OwotICAgIC8qCi0gICAgICogU29mdCBhZmZpbml0eSBpcyBoYW5kbGVkIHNpbWlsYXJs eS4gT25seSBkaWZmZXJlbmNlOiB3ZSBhbHNvIHdhbnQKLSAgICAgKiB0byBwYXNzIE5VTEwgdG8g bGlieGxfc2V0X3ZjcHVhZmZpbml0eSgpIGlmIGl0IGlzIG5vdCBzcGVjaWZpZWQuCi0gICAgICov Ci0gICAgaWYgKGFyZ2MgPD0gb3B0aW5kKzMgfHwgIXN0cmNtcChzb2Z0X3N0ciwgIi0iKSkKLSAg ICAgICAgc29mdCA9IE5VTEw7Ci0gICAgZWxzZSBpZiAocGFyc2VfY3B1cmFuZ2Uoc29mdF9zdHIs IHNvZnQpKQotICAgICAgICBnb3RvIG91dDsKLQotICAgIGlmIChkcnlydW5fb25seSkgewotICAg ICAgICBuYl9jcHUgPSBsaWJ4bF9nZXRfb25saW5lX2NwdXMoY3R4KTsKLSAgICAgICAgaWYgKG5i X2NwdSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfZ2V0X29ubGlu ZV9jcHVzIGZhaWxlZC5cbiIpOwotICAgICAgICAgICAgZ290byBvdXQ7Ci0gICAgICAgIH0KLQot ICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImNwdW1hcDogIik7Ci0gICAgICAgIGlmIChoYXJkKQot ICAgICAgICAgICAgcHJpbnRfYml0bWFwKGhhcmQtPm1hcCwgbmJfY3B1LCBzdGRvdXQpOwotICAg ICAgICBlbHNlCi0gICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIi0iKTsKLSAgICAgICAgaWYg KHNvZnQpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiICIpOwotICAgICAgICAgICAg cHJpbnRfYml0bWFwKHNvZnQtPm1hcCwgbmJfY3B1LCBzdGRvdXQpOwotICAgICAgICB9Ci0gICAg ICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKLQotICAgICAgICBpZiAoZmVycm9yKHN0ZG91dCkg fHwgZmZsdXNoKHN0ZG91dCkpIHsKLSAgICAgICAgICAgIHBlcnJvcigic3Rkb3V0Iik7Ci0gICAg ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IEVY SVRfU1VDQ0VTUzsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgaWYgKGZvcmNlKSB7 Ci0gICAgICAgIGlmIChsaWJ4bF9zZXRfdmNwdWFmZmluaXR5X2ZvcmNlKGN0eCwgZG9taWQsIHZj cHVpZCwgaGFyZCwgc29mdCkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQg bm90IHNldCBhZmZpbml0eSBmb3IgdmNwdSBgJWxkJy5cbiIsCi0gICAgICAgICAgICAgICAgICAg IHZjcHVpZCk7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotICAgIH0KLSAgICBl bHNlIGlmICh2Y3B1aWQgIT0gLTEpIHsKLSAgICAgICAgaWYgKGxpYnhsX3NldF92Y3B1YWZmaW5p dHkoY3R4LCBkb21pZCwgdmNwdWlkLCBoYXJkLCBzb2Z0KSkgewotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJDb3VsZCBub3Qgc2V0IGFmZmluaXR5IGZvciB2Y3B1IGAlbGQnLlxuIiwKLSAg ICAgICAgICAgICAgICAgICAgdmNwdWlkKTsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAg ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCEodmNwdWluZm8gPSBsaWJ4bF9saXN0X3Zj cHUoY3R4LCBkb21pZCwgJm5iX3ZjcHUsICZuYl9jcHUpKSkgewotICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJsaWJ4bF9saXN0X3ZjcHUgZmFpbGVkLlxuIik7Ci0gICAgICAgICAgICBnb3Rv IG91dDsKLSAgICAgICAgfQotICAgICAgICBpZiAobGlieGxfc2V0X3ZjcHVhZmZpbml0eV9hbGwo Y3R4LCBkb21pZCwgbmJfdmNwdSwgaGFyZCwgc29mdCkpCi0gICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIkNvdWxkIG5vdCBzZXQgYWZmaW5pdHkuXG4iKTsKLSAgICAgICAgbGlieGxfdmNwdWlu Zm9fbGlzdF9mcmVlKHZjcHVpbmZvLCBuYl92Y3B1KTsKLSAgICB9Ci0KLSAgICByYyA9IEVYSVRf U1VDQ0VTUzsKLSBvdXQ6Ci0gICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJmNwdW1hcF9zb2Z0KTsK LSAgICBsaWJ4bF9iaXRtYXBfZGlzcG9zZSgmY3B1bWFwX2hhcmQpOwotICAgIHJldHVybiByYzsK LX0KLQotc3RhdGljIGludCB2Y3B1c2V0KHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyKiBucl92 Y3B1cywgaW50IGNoZWNrX2hvc3QpCi17Ci0gICAgY2hhciAqZW5kcHRyOwotICAgIHVuc2lnbmVk IGludCBtYXhfdmNwdXMsIGk7Ci0gICAgbGlieGxfYml0bWFwIGNwdW1hcDsKLSAgICBpbnQgcmM7 Ci0KLSAgICBsaWJ4bF9iaXRtYXBfaW5pdCgmY3B1bWFwKTsKLSAgICBtYXhfdmNwdXMgPSBzdHJ0 b3VsKG5yX3ZjcHVzLCAmZW5kcHRyLCAxMCk7Ci0gICAgaWYgKG5yX3ZjcHVzID09IGVuZHB0cikg ewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBJbnZhbGlkIGFyZ3VtZW50LlxuIik7 Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTWF4aW11bSBhbW91 bnQgb2YgdkNQVVMgdGhlIGd1ZXN0IGlzIGFsbG93ZWQgdG8gc2V0IGlzIGxpbWl0ZWQKLSAgICAg KiBieSB0aGUgaG9zdCdzIGFtb3VudCBvZiBwQ1BVcy4KLSAgICAgKi8KLSAgICBpZiAoY2hlY2tf aG9zdCkgewotICAgICAgICB1bnNpZ25lZCBpbnQgb25saW5lX3ZjcHVzLCBob3N0X2NwdSA9IGxp YnhsX2dldF9tYXhfY3B1cyhjdHgpOwotICAgICAgICBsaWJ4bF9kb21pbmZvIGRvbWluZm87Ci0K LSAgICAgICAgaWYgKGxpYnhsX2RvbWFpbl9pbmZvKGN0eCwgJmRvbWluZm8sIGRvbWlkKSkKLSAg ICAgICAgICAgIHJldHVybiAxOwotCi0gICAgICAgIG9ubGluZV92Y3B1cyA9IGRvbWluZm8udmNw dV9vbmxpbmU7Ci0gICAgICAgIGxpYnhsX2RvbWluZm9fZGlzcG9zZSgmZG9taW5mbyk7Ci0KLSAg ICAgICAgaWYgKG1heF92Y3B1cyA+IG9ubGluZV92Y3B1cyAmJiBtYXhfdmNwdXMgPiBob3N0X2Nw dSkgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgYXJlIG92ZXJjb21tbWl0dGlu ZyEgWW91IGhhdmUgJWQgcGh5c2ljYWwiIFwKLSAgICAgICAgICAgICAgICAgICAgIiBDUFVzIGFu ZCB3YW50ICVkIHZDUFVzISBBYm9ydGluZywgdXNlIC0taWdub3JlLWhvc3QgdG8iIFwKLSAgICAg ICAgICAgICAgICAgICAgIiBjb250aW51ZVxuIiwgaG9zdF9jcHUsIG1heF92Y3B1cyk7Ci0gICAg ICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgfQotICAgIH0KLSAgICByYyA9IGxpYnhsX2NwdV9i aXRtYXBfYWxsb2MoY3R4LCAmY3B1bWFwLCBtYXhfdmNwdXMpOwotICAgIGlmIChyYykgewotICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2NwdV9iaXRtYXBfYWxsb2MgZmFpbGVkLCByYzog JWRcbiIsIHJjKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotICAgIGZvciAoaSA9IDA7IGkg PCBtYXhfdmNwdXM7IGkrKykKLSAgICAgICAgbGlieGxfYml0bWFwX3NldCgmY3B1bWFwLCBpKTsK LQotICAgIHJjID0gbGlieGxfc2V0X3ZjcHVvbmxpbmUoY3R4LCBkb21pZCwgJmNwdW1hcCk7Ci0g ICAgaWYgKHJjID09IEVSUk9SX0RPTUFJTl9OT1RGT1VORCkKLSAgICAgICAgZnByaW50ZihzdGRl cnIsICJEb21haW4gJXUgZG9lcyBub3QgZXhpc3QuXG4iLCBkb21pZCk7Ci0gICAgZWxzZSBpZiAo cmMpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfc2V0X3ZjcHVvbmxpbmUgZmFpbGVk IGRvbWlkPSV1IG1heF92Y3B1cz0lZCwiIFwKLSAgICAgICAgICAgICAgICAiIHJjOiAlZFxuIiwg ZG9taWQsIG1heF92Y3B1cywgcmMpOwotCi0gICAgbGlieGxfYml0bWFwX2Rpc3Bvc2UoJmNwdW1h cCk7Ci0gICAgcmV0dXJuIHJjID8gMSA6IDA7Ci19Ci0KLWludCBtYWluX3ZjcHVzZXQoaW50IGFy Z2MsIGNoYXIgKiphcmd2KQotewotICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsK LSAgICAgICAgeyJpZ25vcmUtaG9zdCIsIDAsIDAsICdpJ30sCi0gICAgICAgIENPTU1PTl9MT05H X09QVFMKLSAgICB9OwotICAgIGludCBvcHQsIGNoZWNrX2hvc3QgPSAxOwotCi0gICAgU1dJVENI X0ZPUkVBQ0hfT1BUKG9wdCwgImkiLCBvcHRzLCAidmNwdS1zZXQiLCAyKSB7Ci0gICAgY2FzZSAn aSc6Ci0gICAgICAgIGNoZWNrX2hvc3QgPSAwOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0 OgotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAodmNwdXNldCh4ZmluZF9kb21haW4o YXJndltvcHRpbmRdKSwgYXJndltvcHRpbmQgKyAxXSwgY2hlY2tfaG9zdCkpCi0gICAgICAgIHJl dHVybiBFWElUX0ZBSUxVUkU7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCiAvKiBQ b3NzaWJseSBzZWxlY3QgYSBzcGVjaWZpYyBwaWVjZSBvZiBgeGwgaW5mb2AgdG8gcHJpbnQuICov CiBzdGF0aWMgY29uc3QgY2hhciAqaW5mb19uYW1lOwogc3RhdGljIGludCBtYXliZV9wcmludGYo Y29uc3QgY2hhciAqZm10LCAuLi4pIF9fYXR0cmlidXRlX18oKGZvcm1hdChwcmludGYsMSwyKSkp OwpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGxfdmNwdS5jIGIvdG9vbHMveGwveGxfdmNwdS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjRkYjk2ZTc5MzMKLS0tIC9kZXYv bnVsbAorKysgYi90b29scy94bC94bF92Y3B1LmMKQEAgLTAsMCArMSwzMzcgQEAKKy8qCisgKiBD b3B5cmlnaHQgMjAwOS0yMDE3IENpdHJpeCBMdGQgYW5kIG90aGVyIGNvbnRyaWJ1dG9ycworICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp dCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3 YXJlIEZvdW5kYXRpb247IHZlcnNpb24gMi4xIG9ubHkuIHdpdGggdGhlIHNwZWNpYWwKKyAqIGV4 Y2VwdGlvbiBvbiBsaW5raW5nIGRlc2NyaWJlZCBpbiBmaWxlIExJQ0VOU0UuCisgKgorICogVGhp cyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5j bHVkZSA8bGlieGwuaD4KKyNpbmNsdWRlIDxsaWJ4bF91dGlscy5oPgorI2luY2x1ZGUgPGxpYnhs dXRpbC5oPgorCisjaW5jbHVkZSAieGwuaCIKKyNpbmNsdWRlICJ4bF91dGlscy5oIgorI2luY2x1 ZGUgInhsX3BhcnNlLmgiCisKK3N0YXRpYyB2b2lkIHByaW50X3ZjcHVpbmZvKHVpbnQzMl90IHRk b21pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpYnhsX3ZjcHVpbmZvICp2 Y3B1aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IG5yX2NwdXMpCit7 CisgICAgY2hhciAqZG9tbmFtZTsKKworICAgIC8qICAgICAgTkFNRSAgSUQgIFZDUFUgKi8KKyAg ICBkb21uYW1lID0gbGlieGxfZG9taWRfdG9fbmFtZShjdHgsIHRkb21pZCk7CisgICAgcHJpbnRm KCIlLTMycyAlNXUgJTV1IiwKKyAgICAgICAgICAgZG9tbmFtZSwgdGRvbWlkLCB2Y3B1aW5mby0+ dmNwdWlkKTsKKyAgICBmcmVlKGRvbW5hbWUpOworICAgIGlmICghdmNwdWluZm8tPm9ubGluZSkg eworICAgICAgICAvKiAgICAgIENQVSBTVEEgKi8KKyAgICAgICAgcHJpbnRmKCIlNWMgJTNjJWNw ICIsICctJywgJy0nLCAnLScpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qICAgICAgQ1BVIFNU QSAqLworICAgICAgICBwcmludGYoIiU1dSAlM2MlYy0gIiwgdmNwdWluZm8tPmNwdSwKKyAgICAg ICAgICAgICAgIHZjcHVpbmZvLT5ydW5uaW5nID8gJ3InIDogJy0nLAorICAgICAgICAgICAgICAg dmNwdWluZm8tPmJsb2NrZWQgPyAnYicgOiAnLScpOworICAgIH0KKyAgICAvKiAgICAgIFRJTSAq LworICAgIHByaW50ZigiJTkuMWYgICIsICgoZmxvYXQpdmNwdWluZm8tPnZjcHVfdGltZSAvIDFl OSkpOworICAgIC8qIENQVSBIQVJEIEFORCBTT0ZUIEFGRklOSVRZICovCisgICAgcHJpbnRfYml0 bWFwKHZjcHVpbmZvLT5jcHVtYXAubWFwLCBucl9jcHVzLCBzdGRvdXQpOworICAgIHByaW50Zigi IC8gIik7CisgICAgcHJpbnRfYml0bWFwKHZjcHVpbmZvLT5jcHVtYXBfc29mdC5tYXAsIG5yX2Nw dXMsIHN0ZG91dCk7CisgICAgcHJpbnRmKCJcbiIpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9k b21haW5fdmNwdWluZm8odWludDMyX3QgZG9taWQsIHVpbnQzMl90IG5yX2NwdXMpCit7CisgICAg bGlieGxfdmNwdWluZm8gKnZjcHVpbmZvOworICAgIGludCBpLCBuYl92Y3B1LCBucmNwdXM7CisK KyAgICB2Y3B1aW5mbyA9IGxpYnhsX2xpc3RfdmNwdShjdHgsIGRvbWlkLCAmbmJfdmNwdSwgJm5y Y3B1cyk7CisKKyAgICBpZiAoIXZjcHVpbmZvKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbmJfdmNwdTsgaSsrKSB7CisgICAgICAgIHByaW50X3ZjcHVpbmZvKGRvbWlk LCAmdmNwdWluZm9baV0sIG5yX2NwdXMpOworICAgIH0KKworICAgIGxpYnhsX3ZjcHVpbmZvX2xp c3RfZnJlZSh2Y3B1aW5mbywgbmJfdmNwdSk7Cit9CisKK3N0YXRpYyB2b2lkIHZjcHVsaXN0KGlu dCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBsaWJ4bF9kb21pbmZvICpkb21pbmZvOworICAg IGxpYnhsX3BoeXNpbmZvIHBoeXNpbmZvOworICAgIGludCBpLCBuYl9kb21haW47CisKKyAgICBp ZiAobGlieGxfZ2V0X3BoeXNpbmZvKGN0eCwgJnBoeXNpbmZvKSAhPSAwKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAibGlieGxfcGh5c2luZm8gZmFpbGVkLlxuIik7CisgICAgICAgIGdvdG8g dmNwdWxpc3Rfb3V0OworICAgIH0KKworICAgIHByaW50ZigiJS0zMnMgJTVzICU1cyAlNXMgJTVz ICU5cyAlc1xuIiwKKyAgICAgICAgICAgIk5hbWUiLCAiSUQiLCAiVkNQVSIsICJDUFUiLCAiU3Rh dGUiLCAiVGltZShzKSIsCisgICAgICAgICAgICJBZmZpbml0eSAoSGFyZCAvIFNvZnQpIik7Cisg ICAgaWYgKCFhcmdjKSB7CisgICAgICAgIGlmICghKGRvbWluZm8gPSBsaWJ4bF9saXN0X2RvbWFp bihjdHgsICZuYl9kb21haW4pKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJsaWJ4 bF9saXN0X2RvbWFpbiBmYWlsZWQuXG4iKTsKKyAgICAgICAgICAgIGdvdG8gdmNwdWxpc3Rfb3V0 OworICAgICAgICB9CisKKyAgICAgICAgZm9yIChpID0gMDsgaTxuYl9kb21haW47IGkrKykKKyAg ICAgICAgICAgIHByaW50X2RvbWFpbl92Y3B1aW5mbyhkb21pbmZvW2ldLmRvbWlkLCBwaHlzaW5m by5ucl9jcHVzKTsKKworICAgICAgICBsaWJ4bF9kb21pbmZvX2xpc3RfZnJlZShkb21pbmZvLCBu Yl9kb21haW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoOyBhcmdjID4gMDsgKythcmd2 LCAtLWFyZ2MpIHsKKyAgICAgICAgICAgIHVpbnQzMl90IGRvbWlkID0geGZpbmRfZG9tYWluKCph cmd2KTsKKyAgICAgICAgICAgIHByaW50X2RvbWFpbl92Y3B1aW5mbyhkb21pZCwgcGh5c2luZm8u bnJfY3B1cyk7CisgICAgICAgIH0KKyAgICB9CisgIHZjcHVsaXN0X291dDoKKyAgICBsaWJ4bF9w aHlzaW5mb19kaXNwb3NlKCZwaHlzaW5mbyk7Cit9CisKK2ludCBtYWluX3ZjcHVsaXN0KGludCBh cmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgb3B0OworCisgICAgU1dJVENIX0ZPUkVBQ0hf T1BUKG9wdCwgIiIsIE5VTEwsICJ2Y3B1LWxpc3QiLCAwKSB7CisgICAgICAgIC8qIE5vIG9wdGlv bnMgKi8KKyAgICB9CisKKyAgICB2Y3B1bGlzdChhcmdjIC0gb3B0aW5kLCBhcmd2ICsgb3B0aW5k KTsKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQorCitpbnQgbWFpbl92Y3B1cGluKGludCBh cmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7 CisgICAgICAgIHsiZm9yY2UiLCAwLCAwLCAnZid9LAorICAgICAgICBDT01NT05fTE9OR19PUFRT CisgICAgfTsKKyAgICBsaWJ4bF92Y3B1aW5mbyAqdmNwdWluZm87CisgICAgbGlieGxfYml0bWFw IGNwdW1hcF9oYXJkLCBjcHVtYXBfc29mdDs7CisgICAgbGlieGxfYml0bWFwICpzb2Z0ID0gJmNw dW1hcF9zb2Z0LCAqaGFyZCA9ICZjcHVtYXBfaGFyZDsKKyAgICB1aW50MzJfdCBkb21pZDsKKyAg ICAvKgorICAgICAqIGludCB3b3VsZCBiZSBlbm91Z2ggZm9yIHZjcHVpZCwgYnV0IHdlIGRvbid0 IHdhbnQgdG8KKyAgICAgKiBtZXNzIGFyb3VuZyByYW5nZSBjaGVja2luZyB0aGUgcmV0dXJuIHZh bHVlIG9mIHN0cnRvbCgpLgorICAgICAqLworICAgIGxvbmcgdmNwdWlkOworICAgIGNvbnN0IGNo YXIgKnZjcHUsICpoYXJkX3N0ciwgKnNvZnRfc3RyOworICAgIGNoYXIgKmVuZHB0cjsKKyAgICBp bnQgb3B0LCBuYl9jcHUsIG5iX3ZjcHUsIHJjID0gRVhJVF9GQUlMVVJFOworICAgIGJvb2wgZm9y Y2UgPSBmYWxzZTsKKworICAgIGxpYnhsX2JpdG1hcF9pbml0KCZjcHVtYXBfaGFyZCk7CisgICAg bGlieGxfYml0bWFwX2luaXQoJmNwdW1hcF9zb2Z0KTsKKworICAgIFNXSVRDSF9GT1JFQUNIX09Q VChvcHQsICJmIiwgb3B0cywgInZjcHUtcGluIiwgMykgeworICAgIGNhc2UgJ2YnOgorICAgICAg ICBmb3JjZSA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJy ZWFrOworICAgIH0KKworICAgIGRvbWlkID0geGZpbmRfZG9tYWluKGFyZ3Zbb3B0aW5kXSk7Cisg ICAgdmNwdSA9IGFyZ3Zbb3B0aW5kKzFdOworICAgIGhhcmRfc3RyID0gYXJndltvcHRpbmQrMl07 CisgICAgc29mdF9zdHIgPSAoYXJnYyA+IG9wdGluZCszKSA/IGFyZ3Zbb3B0aW5kKzNdIDogTlVM TDsKKworICAgIC8qIEZpZ3VyZSBvdXQgd2l0aCB3aGljaCB2Q1BVIHdlIGFyZSBkZWFsaW5nIHdp dGggKi8KKyAgICB2Y3B1aWQgPSBzdHJ0b2wodmNwdSwgJmVuZHB0ciwgMTApOworICAgIGlmICh2 Y3B1ID09IGVuZHB0ciB8fCB2Y3B1aWQgPCAwKSB7CisgICAgICAgIGlmIChzdHJjbXAodmNwdSwg ImFsbCIpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBJbnZhbGlkIGFy Z3VtZW50ICVzIGFzIFZDUFUuXG4iLCB2Y3B1KTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAg ICAgICB9CisgICAgICAgIGlmIChmb3JjZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs ICJFcnJvcjogLS1mb3JjZSBhbmQgJ2FsbCcgYXMgVkNQVSBub3QgYWxsb3dlZC5cbiIpOworICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgdmNwdWlkID0gLTE7CisgICAg fQorCisgICAgaWYgKGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmY3B1bWFwX2hhcmQsIDAp IHx8CisgICAgICAgIGxpYnhsX2NwdV9iaXRtYXBfYWxsb2MoY3R4LCAmY3B1bWFwX3NvZnQsIDAp KQorICAgICAgICBnb3RvIG91dDsKKworICAgIC8qCisgICAgICogU3ludGF4IGlzOiB4bCB2Y3B1 LXBpbiA8ZG9taWQ+IDx2Y3B1PiA8aGFyZD4gPHNvZnQ+CisgICAgICogV2Ugd2FudCB0byBoYW5k bGUgYWxsIHRoZSBmb2xsb3dpbmcgY2FzZXMgKCctJyBtZWFucworICAgICAqICJsZWF2ZSBpdCBh bG9uZSIpOgorICAgICAqICB4bCB2Y3B1LXBpbiAwIDMgMyw0CisgICAgICogIHhsIHZjcHUtcGlu IDAgMyAzLDQgLQorICAgICAqICB4bCB2Y3B1LXBpbiAwIDMgLSA2LTkKKyAgICAgKiAgeGwgdmNw dS1waW4gMCAzIDMsNCA2LTkKKyAgICAgKi8KKworICAgIC8qCisgICAgICogSGFyZCBhZmZpbml0 eSBpcyBhbHdheXMgcHJlc2VudC4gSG93ZXZlciwgaWYgaXQncyAiLSIsIGFsbCB3ZSBuZWVkCisg ICAgICogaXMgcGFzc2luZyBhIE5VTEwgcG9pbnRlciB0byB0aGUgbGlieGxfc2V0X3ZjcHVhZmZp bml0eSgpIGNhbGwgYmVsb3cuCisgICAgICovCisgICAgaWYgKCFzdHJjbXAoaGFyZF9zdHIsICIt IikpCisgICAgICAgIGhhcmQgPSBOVUxMOworICAgIGVsc2UgaWYgKHBhcnNlX2NwdXJhbmdlKGhh cmRfc3RyLCBoYXJkKSkKKyAgICAgICAgZ290byBvdXQ7CisgICAgLyoKKyAgICAgKiBTb2Z0IGFm ZmluaXR5IGlzIGhhbmRsZWQgc2ltaWxhcmx5LiBPbmx5IGRpZmZlcmVuY2U6IHdlIGFsc28gd2Fu dAorICAgICAqIHRvIHBhc3MgTlVMTCB0byBsaWJ4bF9zZXRfdmNwdWFmZmluaXR5KCkgaWYgaXQg aXMgbm90IHNwZWNpZmllZC4KKyAgICAgKi8KKyAgICBpZiAoYXJnYyA8PSBvcHRpbmQrMyB8fCAh c3RyY21wKHNvZnRfc3RyLCAiLSIpKQorICAgICAgICBzb2Z0ID0gTlVMTDsKKyAgICBlbHNlIGlm IChwYXJzZV9jcHVyYW5nZShzb2Z0X3N0ciwgc29mdCkpCisgICAgICAgIGdvdG8gb3V0OworCisg ICAgaWYgKGRyeXJ1bl9vbmx5KSB7CisgICAgICAgIG5iX2NwdSA9IGxpYnhsX2dldF9vbmxpbmVf Y3B1cyhjdHgpOworICAgICAgICBpZiAobmJfY3B1IDwgMCkgeworICAgICAgICAgICAgZnByaW50 ZihzdGRlcnIsICJsaWJ4bF9nZXRfb25saW5lX2NwdXMgZmFpbGVkLlxuIik7CisgICAgICAgICAg ICBnb3RvIG91dDsKKyAgICAgICAgfQorCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiY3B1bWFw OiAiKTsKKyAgICAgICAgaWYgKGhhcmQpCisgICAgICAgICAgICBwcmludF9iaXRtYXAoaGFyZC0+ bWFwLCBuYl9jcHUsIHN0ZG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZwcmludGYo c3Rkb3V0LCAiLSIpOworICAgICAgICBpZiAoc29mdCkgeworICAgICAgICAgICAgZnByaW50Zihz dGRvdXQsICIgIik7CisgICAgICAgICAgICBwcmludF9iaXRtYXAoc29mdC0+bWFwLCBuYl9jcHUs IHN0ZG91dCk7CisgICAgICAgIH0KKyAgICAgICAgZnByaW50ZihzdGRvdXQsICJcbiIpOworCisg ICAgICAgIGlmIChmZXJyb3Ioc3Rkb3V0KSB8fCBmZmx1c2goc3Rkb3V0KSkgeworICAgICAgICAg ICAgcGVycm9yKCJzdGRvdXQiKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAg ICAgICAgfQorCisgICAgICAgIHJjID0gRVhJVF9TVUNDRVNTOworICAgICAgICBnb3RvIG91dDsK KyAgICB9CisKKyAgICBpZiAoZm9yY2UpIHsKKyAgICAgICAgaWYgKGxpYnhsX3NldF92Y3B1YWZm aW5pdHlfZm9yY2UoY3R4LCBkb21pZCwgdmNwdWlkLCBoYXJkLCBzb2Z0KSkgeworICAgICAgICAg ICAgZnByaW50ZihzdGRlcnIsICJDb3VsZCBub3Qgc2V0IGFmZmluaXR5IGZvciB2Y3B1IGAlbGQn LlxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmNwdWlkKTsKKyAgICAgICAgICAgIGdvdG8gb3V0 OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKHZjcHVpZCAhPSAtMSkgeworICAgICAg ICBpZiAobGlieGxfc2V0X3ZjcHVhZmZpbml0eShjdHgsIGRvbWlkLCB2Y3B1aWQsIGhhcmQsIHNv ZnQpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBzZXQgYWZmaW5p dHkgZm9yIHZjcHUgYCVsZCcuXG4iLAorICAgICAgICAgICAgICAgICAgICB2Y3B1aWQpOworICAg ICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZiAo ISh2Y3B1aW5mbyA9IGxpYnhsX2xpc3RfdmNwdShjdHgsIGRvbWlkLCAmbmJfdmNwdSwgJm5iX2Nw dSkpKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2xpc3RfdmNwdSBmYWls ZWQuXG4iKTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgICAgIGlmIChs aWJ4bF9zZXRfdmNwdWFmZmluaXR5X2FsbChjdHgsIGRvbWlkLCBuYl92Y3B1LCBoYXJkLCBzb2Z0 KSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ291bGQgbm90IHNldCBhZmZpbml0eS5c biIpOworICAgICAgICBsaWJ4bF92Y3B1aW5mb19saXN0X2ZyZWUodmNwdWluZm8sIG5iX3ZjcHUp OworICAgIH0KKworICAgIHJjID0gRVhJVF9TVUNDRVNTOworIG91dDoKKyAgICBsaWJ4bF9iaXRt YXBfZGlzcG9zZSgmY3B1bWFwX3NvZnQpOworICAgIGxpYnhsX2JpdG1hcF9kaXNwb3NlKCZjcHVt YXBfaGFyZCk7CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZjcHVzZXQodWludDMy X3QgZG9taWQsIGNvbnN0IGNoYXIqIG5yX3ZjcHVzLCBpbnQgY2hlY2tfaG9zdCkKK3sKKyAgICBj aGFyICplbmRwdHI7CisgICAgdW5zaWduZWQgaW50IG1heF92Y3B1cywgaTsKKyAgICBsaWJ4bF9i aXRtYXAgY3B1bWFwOworICAgIGludCByYzsKKworICAgIGxpYnhsX2JpdG1hcF9pbml0KCZjcHVt YXApOworICAgIG1heF92Y3B1cyA9IHN0cnRvdWwobnJfdmNwdXMsICZlbmRwdHIsIDEwKTsKKyAg ICBpZiAobnJfdmNwdXMgPT0gZW5kcHRyKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy b3I6IEludmFsaWQgYXJndW1lbnQuXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisg ICAgLyoKKyAgICAgKiBNYXhpbXVtIGFtb3VudCBvZiB2Q1BVUyB0aGUgZ3Vlc3QgaXMgYWxsb3dl ZCB0byBzZXQgaXMgbGltaXRlZAorICAgICAqIGJ5IHRoZSBob3N0J3MgYW1vdW50IG9mIHBDUFVz LgorICAgICAqLworICAgIGlmIChjaGVja19ob3N0KSB7CisgICAgICAgIHVuc2lnbmVkIGludCBv bmxpbmVfdmNwdXMsIGhvc3RfY3B1ID0gbGlieGxfZ2V0X21heF9jcHVzKGN0eCk7CisgICAgICAg IGxpYnhsX2RvbWluZm8gZG9taW5mbzsKKworICAgICAgICBpZiAobGlieGxfZG9tYWluX2luZm8o Y3R4LCAmZG9taW5mbywgZG9taWQpKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAg b25saW5lX3ZjcHVzID0gZG9taW5mby52Y3B1X29ubGluZTsKKyAgICAgICAgbGlieGxfZG9taW5m b19kaXNwb3NlKCZkb21pbmZvKTsKKworICAgICAgICBpZiAobWF4X3ZjcHVzID4gb25saW5lX3Zj cHVzICYmIG1heF92Y3B1cyA+IGhvc3RfY3B1KSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgIllvdSBhcmUgb3ZlcmNvbW1taXR0aW5nISBZb3UgaGF2ZSAlZCBwaHlzaWNhbCIgXAorICAg ICAgICAgICAgICAgICAgICAiIENQVXMgYW5kIHdhbnQgJWQgdkNQVXMhIEFib3J0aW5nLCB1c2Ug LS1pZ25vcmUtaG9zdCB0byIgXAorICAgICAgICAgICAgICAgICAgICAiIGNvbnRpbnVlXG4iLCBo b3N0X2NwdSwgbWF4X3ZjcHVzKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9Cisg ICAgfQorICAgIHJjID0gbGlieGxfY3B1X2JpdG1hcF9hbGxvYyhjdHgsICZjcHVtYXAsIG1heF92 Y3B1cyk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibGlieGxfY3B1 X2JpdG1hcF9hbGxvYyBmYWlsZWQsIHJjOiAlZFxuIiwgcmMpOworICAgICAgICByZXR1cm4gMTsK KyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IG1heF92Y3B1czsgaSsrKQorICAgICAgICBsaWJ4 bF9iaXRtYXBfc2V0KCZjcHVtYXAsIGkpOworCisgICAgcmMgPSBsaWJ4bF9zZXRfdmNwdW9ubGlu ZShjdHgsIGRvbWlkLCAmY3B1bWFwKTsKKyAgICBpZiAocmMgPT0gRVJST1JfRE9NQUlOX05PVEZP VU5EKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRvbWFpbiAldSBkb2VzIG5vdCBleGlzdC5c biIsIGRvbWlkKTsKKyAgICBlbHNlIGlmIChyYykKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJs aWJ4bF9zZXRfdmNwdW9ubGluZSBmYWlsZWQgZG9taWQ9JXUgbWF4X3ZjcHVzPSVkLCIgXAorICAg ICAgICAgICAgICAgICIgcmM6ICVkXG4iLCBkb21pZCwgbWF4X3ZjcHVzLCByYyk7CisKKyAgICBs aWJ4bF9iaXRtYXBfZGlzcG9zZSgmY3B1bWFwKTsKKyAgICByZXR1cm4gcmMgPyAxIDogMDsKK30K KworaW50IG1haW5fdmNwdXNldChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgc3RhdGlj IHN0cnVjdCBvcHRpb24gb3B0c1tdID0geworICAgICAgICB7Imlnbm9yZS1ob3N0IiwgMCwgMCwg J2knfSwKKyAgICAgICAgQ09NTU9OX0xPTkdfT1BUUworICAgIH07CisgICAgaW50IG9wdCwgY2hl Y2tfaG9zdCA9IDE7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiaSIsIG9wdHMsICJ2 Y3B1LXNldCIsIDIpIHsKKyAgICBjYXNlICdpJzoKKyAgICAgICAgY2hlY2tfaG9zdCA9IDA7Cisg ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg IGlmICh2Y3B1c2V0KHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pLCBhcmd2W29wdGluZCArIDFd LCBjaGVja19ob3N0KSkKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKworICAgIHJldHVy biBFWElUX1NVQ0NFU1M7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBD CisgKiBjLWJhc2ljLW9mZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6 CisgKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcK aHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=