From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v3 09/11] fuzz/x86emul: update fuzzer Date: Wed, 1 Feb 2017 12:02:37 +0000 Message-ID: <20170201120239.13993-10-wei.liu2@citrix.com> References: <20170201120239.13993-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cYtcc-0007mU-9Z for xen-devel@lists.xenproject.org; Wed, 01 Feb 2017 12:02:46 +0000 In-Reply-To: <20170201120239.13993-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 , George Dunlap , Andrew Cooper , Ian Jackson , George Dunlap , Jan Beulich List-Id: xen-devel@lists.xenproject.org UHJvdmlkZSB0aGUgZnV6emVyIHdpdGggbW9yZSBvcHMsIGFuZCBtb3JlIHNvcGhpc3RpY2F0ZWQg aW5wdXQKc3RydWN0dXJlLgoKQmFzZWQgb24gYSBwYXRjaCBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkg QW5kcmV3IGFuZCBHZW9yZ2UuCgpTaWduZWQtb2ZmLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcu Y29vcGVyM0BjaXRyaXguY29tPgpTaWduZWQtb2ZmLWJ5OiBHZW9yZ2UgRHVubGFwIDxnZW9yZ2Uu ZHVubGFwQGNpdHJpeC5jb20+ClNpZ25lZC1vZmYtYnk6IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJp eC5jb20+Ci0tLQpDYzogSWFuIEphY2tzb24gPGlhbi5qYWNrc29uQGV1LmNpdHJpeC5jb20+CkNj OiBKYW4gQmV1bGljaCA8amJldWxpY2hAc3VzZS5jb20+CkNjOiBBbmRyZXcgQ29vcGVyIDxhbmRy ZXcuY29vcGVyM0BjaXRyaXguY29tPgpDYzogR2VvcmdlIER1bmxhcCA8Z2VvcmdlLmR1bmxhcEBl dS5jaXRyaXguY29tPgoKdjM6CjEuIEFkZHJlc3MgY29tbWVudHMgZnJvbSBKYW4KCnYyOgoxLiBB ZGRyZXNzIGNvbW1lbnRzIGZyb20gSmFuCjIuIFByb3ZpZGUgYXJjaGl0ZWN0dXJhbGx5IGNvcnJl Y3QgYmVoYXZpb3VyIGZvciByZXAgc3R1YgotLS0KIC4uLi94ODYtaW5zbi1lbXVsYXRvci1mdXp6 ZXIuYyAgICAgICAgICAgICAgICAgICAgIHwgNjYxICsrKysrKysrKysrKysrKysrKystLQogMSBm aWxlIGNoYW5nZWQsIDU5OSBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkKCmRpZmYgLS1n aXQgYS90b29scy9mdXp6L3g4Nl9pbnN0cnVjdGlvbl9lbXVsYXRvci94ODYtaW5zbi1lbXVsYXRv ci1mdXp6ZXIuYyBiL3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL3g4Ni1pbnNu LWVtdWxhdG9yLWZ1enplci5jCmluZGV4IDdkN2Y3MzE2NzcuLjRjNDA0Y2ViODEgMTAwNjQ0Ci0t LSBhL3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL3g4Ni1pbnNuLWVtdWxhdG9y LWZ1enplci5jCisrKyBiL3Rvb2xzL2Z1enoveDg2X2luc3RydWN0aW9uX2VtdWxhdG9yL3g4Ni1p bnNuLWVtdWxhdG9yLWZ1enplci5jCkBAIC00LDYgKzQsNyBAQAogI2luY2x1ZGUgPGludHR5cGVz Lmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUg PHN0ZGRlZi5oPgogI2luY2x1ZGUgPHN0ZGludC5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5j bHVkZSA8c3RkbGliLmg+CkBAIC0xNiwyNiArMTcsNzggQEAKIAogI2luY2x1ZGUgIng4Nl9lbXVs YXRlLmgiCiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIGRhdGFbNDA5Nl07CisjZGVmaW5lIE1TUl9J TkRFWF9NQVggMTYKKworI2RlZmluZSBTRUdfTlVNIHg4Nl9zZWdfbm9uZQorCitzdHJ1Y3QgaW5w dXRfc3RydWN0IHsKKyAgICB1bnNpZ25lZCBsb25nIGNyWzVdOworICAgIHVpbnQ2NF90IG1zcltN U1JfSU5ERVhfTUFYXTsKKyAgICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyByZWdzOworICAgIHN0cnVj dCBzZWdtZW50X3JlZ2lzdGVyIHNlZ21lbnRzW1NFR19OVU1dOworICAgIHVuc2lnbmVkIGxvbmcg b3B0aW9uczsKKyAgICB1bnNpZ25lZCBjaGFyIGRhdGFbNDA5Nl07Cit9IGlucHV0OworI2RlZmlu ZSBEQVRBX09GRlNFVCBvZmZzZXRvZihzdHJ1Y3QgaW5wdXRfc3RydWN0LCBkYXRhKQogc3RhdGlj IHVuc2lnbmVkIGludCBkYXRhX2luZGV4Owotc3RhdGljIHVuc2lnbmVkIGludCBkYXRhX21heDsK K3N0YXRpYyB1bnNpZ25lZCBpbnQgZGF0YV9udW07CisKKy8qCisgKiBSYW5kb21seSByZXR1cm4g c3VjY2VzcyBvciBmYWlsdXJlIHdoZW4gcHJvY2Vzc2luZyBkYXRhLiAgSWYKKyAqIGBleGNlcHRp b25gIGlzIGZhbHNlLCB0aGlzIGZ1bmN0aW9uIHR1cm5zIF9FWENFUFRJT04gdG8gX09LQVkuCisg Ki8KK2ludCBtYXliZV9mYWlsKGNvbnN0IGNoYXIgKndoeSwgYm9vbCBleGNlcHRpb24pCit7Cisg ICAgaW50IHJjOworCisgICAgaWYgKCBkYXRhX2luZGV4ID49IGRhdGFfbnVtICkKKyAgICAgICAg cmMgPSBYODZFTVVMX0VYQ0VQVElPTjsKKyAgICBlbHNlCisgICAgeworICAgICAgICAvKiBSYW5k b21seSByZXR1cm5zIHZhbHVlOgorICAgICAgICAgKiA1MCUgb2theQorICAgICAgICAgKiAyNSUg dW5oYW5kbGFibGUKKyAgICAgICAgICogMjUlIGV4Y2VwdGlvbgorICAgICAgICAgKi8KKyAgICAg ICAgaWYgKCBpbnB1dC5kYXRhW2RhdGFfaW5kZXhdID4gMHhjMCApCisgICAgICAgICAgICByYyA9 IFg4NkVNVUxfRVhDRVBUSU9OOworICAgICAgICBlbHNlIGlmICggaW5wdXQuZGF0YVtkYXRhX2lu ZGV4XSA+IDB4ODAgKQorICAgICAgICAgICAgcmMgPSBYODZFTVVMX1VOSEFORExFQUJMRTsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgcmMgPSBYODZFTVVMX09LQVk7CisgICAgICAgIGRhdGFf aW5kZXgrKzsKKyAgICB9CisKKyAgICBpZiAoIHJjID09IFg4NkVNVUxfRVhDRVBUSU9OICYmICFl eGNlcHRpb24gKQorICAgICAgICByYyA9IFg4NkVNVUxfT0tBWTsKKworICAgIHByaW50ZigibWF5 YmVfZmFpbCAlczogJWRcbiIsIHdoeSwgcmMpOworCisgICAgcmV0dXJuIHJjOworfQogCiBzdGF0 aWMgaW50IGRhdGFfcmVhZChjb25zdCBjaGFyICp3aHksIHZvaWQgKmRzdCwgdW5zaWduZWQgaW50 IGJ5dGVzKQogewogICAgIHVuc2lnbmVkIGludCBpOworICAgIGludCByYzsKIAotICAgIGlmICgg ZGF0YV9pbmRleCArIGJ5dGVzID4gZGF0YV9tYXggKQotICAgICAgICByZXR1cm4gWDg2RU1VTF9F WENFUFRJT047CisgICAgaWYgKCBkYXRhX2luZGV4ICsgYnl0ZXMgPiBkYXRhX251bSApCisgICAg ICAgIHJjID0gWDg2RU1VTF9FWENFUFRJT047CisgICAgZWxzZQorICAgICAgICByYyA9IG1heWJl X2ZhaWwod2h5LCB0cnVlKTsKIAotICAgIG1lbWNweShkc3QsICBkYXRhICsgZGF0YV9pbmRleCwg Ynl0ZXMpOwotICAgIGRhdGFfaW5kZXggKz0gYnl0ZXM7CisgICAgaWYgKCByYyA9PSBYODZFTVVM X09LQVkgKQorICAgIHsKKyAgICAgICAgbWVtY3B5KGRzdCwgIGlucHV0LmRhdGEgKyBkYXRhX2lu ZGV4LCBieXRlcyk7CisgICAgICAgIGRhdGFfaW5kZXggKz0gYnl0ZXM7CiAKLSAgICBwcmludGYo IiVzOiAiLCB3aHkpOwotICAgIGZvciAoIGkgPSAwOyBpIDwgYnl0ZXM7IGkrKyApCi0gICAgICAg IHByaW50ZigiICUwMngiLCAqKHVuc2lnbmVkIGNoYXIgKikoZHN0ICsgaSkpOwotICAgIHByaW50 ZigiXG4iKTsKKyAgICAgICAgcHJpbnRmKCIlczogIiwgd2h5KTsKKyAgICAgICAgZm9yICggaSA9 IDA7IGkgPCBieXRlczsgaSsrICkKKyAgICAgICAgICAgIHByaW50ZigiICUwMngiLCAqKHVuc2ln bmVkIGNoYXIgKikoZHN0ICsgaSkpOworICAgICAgICBwcmludGYoIlxuIik7CisgICAgfQogCi0g ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICByZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQg ZnV6el9yZWFkKApAQCAtNDgsMTQgKzEwMSwxMTIgQEAgc3RhdGljIGludCBmdXp6X3JlYWQoCiAg ICAgcmV0dXJuIGRhdGFfcmVhZCgicmVhZCIsIHBfZGF0YSwgYnl0ZXMpOwogfQogCi1zdGF0aWMg aW50IGZ1enpfZmV0Y2goCitzdGF0aWMgaW50IGZ1enpfcmVhZF9pbygKKyAgICB1bnNpZ25lZCBp bnQgcG9ydCwKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgdW5zaWduZWQgbG9uZyAqdmFs LAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBkYXRh X3JlYWQoInJlYWRfaW8iLCB2YWwsIGJ5dGVzKTsKK30KKworc3RhdGljIGludCBmdXp6X2luc25f ZmV0Y2goCiAgICAgdW5zaWduZWQgaW50IHNlZywKICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwK ICAgICB2b2lkICpwX2RhdGEsCiAgICAgdW5zaWduZWQgaW50IGJ5dGVzLAogICAgIHN0cnVjdCB4 ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQogewotICAgIHJldHVybiBkYXRhX3JlYWQoImZldGNoIiwg cF9kYXRhLCBieXRlcyk7CisgICAgcmV0dXJuIGRhdGFfcmVhZCgiaW5zbl9mZXRjaCIsIHBfZGF0 YSwgYnl0ZXMpOworfQorCitzdGF0aWMgaW50IF9mdXp6X3JlcF9yZWFkKGNvbnN0IGNoYXIgKndo eSwgdW5zaWduZWQgbG9uZyAqcmVwcykKK3sKKyAgICBpbnQgcmM7CisgICAgdW5zaWduZWQgbG9u ZyBieXRlc19yZWFkID0gMDsKKworICAgIHJjID0gZGF0YV9yZWFkKHdoeSwgJmJ5dGVzX3JlYWQs IHNpemVvZihieXRlc19yZWFkKSk7CisKKyAgICBpZiAoIGJ5dGVzX3JlYWQgPD0gKnJlcHMgKQor ICAgICAgICAqcmVwcyA9IGJ5dGVzX3JlYWQ7CisKKyAgICBzd2l0Y2ggKCByYyApCisgICAgewor ICAgIGNhc2UgWDg2RU1VTF9VTkhBTkRMRUFCTEU6CisgICAgICAgIC8qIE5vIHdvcmsgaXMgZG9u ZSBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgKnJlcHMgPSAwOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgorICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAg ICAgLyogSGFsdmUgdGhlIGFtb3VudCBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgKnJlcHMgLz0g MjsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX2Z1enpfcmVwX3dy aXRlKGNvbnN0IGNoYXIgKndoeSwgdW5zaWduZWQgbG9uZyAqcmVwcykKK3sKKyAgICBpbnQgcmMg PSBtYXliZV9mYWlsKHdoeSwgdHJ1ZSk7CisKKyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAg IGNhc2UgWDg2RU1VTF9VTkhBTkRMRUFCTEU6CisgICAgICAgIC8qIE5vIHdvcmsgaXMgZG9uZSBp biB0aGlzIGNhc2UgKi8KKyAgICAgICAgKnJlcHMgPSAwOworICAgICAgICBicmVhazsKKyAgICBj YXNlIFg4NkVNVUxfRVhDRVBUSU9OOgorICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAgICAg LyogSGFsdmUgdGhlIGFtb3VudCBpbiB0aGlzIGNhc2UgKi8KKyAgICAgICAgKnJlcHMgLz0gMjsK KyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZnV6el9yZXBfaW5zKAor ICAgIHVpbnQxNl90IHNyY19wb3J0LAorICAgIGVudW0geDg2X3NlZ21lbnQgZHN0X3NlZywKKyAg ICB1bnNpZ25lZCBsb25nIGRzdF9vZmZzZXQsCisgICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9y ZXAsCisgICAgdW5zaWduZWQgbG9uZyAqcmVwcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCkKK3sKKyAgICByZXR1cm4gX2Z1enpfcmVwX3JlYWQoInJlcF9pbnMiLCByZXBzKTsK K30KKworc3RhdGljIGludCBmdXp6X3JlcF9tb3ZzKAorICAgIGVudW0geDg2X3NlZ21lbnQgc3Jj X3NlZywKKyAgICB1bnNpZ25lZCBsb25nIHNyY19vZmZzZXQsCisgICAgZW51bSB4ODZfc2VnbWVu dCBkc3Rfc2VnLAorICAgIHVuc2lnbmVkIGxvbmcgZHN0X29mZnNldCwKKyAgICB1bnNpZ25lZCBp bnQgYnl0ZXNfcGVyX3JlcCwKKyAgICB1bnNpZ25lZCBsb25nICpyZXBzLAorICAgIHN0cnVjdCB4 ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHJldHVybiBfZnV6el9yZXBfcmVhZCgicmVw X21vdnMiLCByZXBzKTsKK30KKworc3RhdGljIGludCBmdXp6X3JlcF9vdXRzKAorICAgIGVudW0g eDg2X3NlZ21lbnQgc3JjX3NlZywKKyAgICB1bnNpZ25lZCBsb25nIHNyY19vZmZzZXQsCisgICAg dWludDE2X3QgZHN0X3BvcnQsCisgICAgdW5zaWduZWQgaW50IGJ5dGVzX3Blcl9yZXAsCisgICAg dW5zaWduZWQgbG9uZyAqcmVwcywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkK K3sKKyAgICByZXR1cm4gX2Z1enpfcmVwX3dyaXRlKCJyZXBfb3V0cyIsIHJlcHMpOworfQorCitz dGF0aWMgaW50IGZ1enpfcmVwX3N0b3MoCisgICAgdm9pZCAqcF9kYXRhLAorICAgIGVudW0geDg2 X3NlZ21lbnQgc2VnLAorICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgIHVuc2lnbmVkIGlu dCBieXRlc19wZXJfcmVwLAorICAgIHVuc2lnbmVkIGxvbmcgKnJlcHMsCisgICAgc3RydWN0IHg4 Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIF9mdXp6X3JlcF93cml0ZSgicmVw X3N0b3MiLCByZXBzKTsKIH0KIAogc3RhdGljIGludCBmdXp6X3dyaXRlKApAQCAtNjUsNyArMjE2 LDcgQEAgc3RhdGljIGludCBmdXp6X3dyaXRlKAogICAgIHVuc2lnbmVkIGludCBieXRlcywKICAg ICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKIHsKLSAgICByZXR1cm4gWDg2RU1VTF9P S0FZOworICAgIHJldHVybiBtYXliZV9mYWlsKCJ3cml0ZSIsIHRydWUpOwogfQogCiBzdGF0aWMg aW50IGZ1enpfY21weGNoZygKQEAgLTc2LDE4ICsyMjcsMjg1IEBAIHN0YXRpYyBpbnQgZnV6el9j bXB4Y2hnKAogICAgIHVuc2lnbmVkIGludCBieXRlcywKICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVf Y3R4dCAqY3R4dCkKIHsKLSAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworICAgIHJldHVybiBtYXli ZV9mYWlsKCJjbXB4Y2hnIiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el9pbnZscGcoCisg ICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisgICAg c3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIG1heWJlX2ZhaWwo ImludmxwZyIsIGZhbHNlKTsKK30KKworc3RhdGljIGludCBmdXp6X3diaW52ZCgKKyAgICBzdHJ1 Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICByZXR1cm4gbWF5YmVfZmFpbCgid2Jp bnZkIiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el93cml0ZV9pbygKKyAgICB1bnNpZ25l ZCBpbnQgcG9ydCwKKyAgICB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgdW5zaWduZWQgbG9uZyB2 YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgcmV0dXJuIG1h eWJlX2ZhaWwoIndyaXRlX2lvIiwgdHJ1ZSk7Cit9CisKK3N0YXRpYyBpbnQgZnV6el9yZWFkX3Nl Z21lbnQoCisgICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCisgICAgc3RydWN0IHNlZ21lbnRfcmVn aXN0ZXIgKnJlZywKKyAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBp bnQgcmM7CisKKyAgICBpZiAoIHNlZyA+PSBTRUdfTlVNICkKKyAgICAgICAgcmV0dXJuIFg4NkVN VUxfVU5IQU5ETEVBQkxFOworCisgICAgcmMgPSBtYXliZV9mYWlsKCJyZWFkX3NlZ21lbnQiLCB0 cnVlKTsKKworICAgIGlmICggcmMgPT0gWDg2RU1VTF9PS0FZICkKKyAgICAgICAgKnJlZyA9IGlu cHV0LnNlZ21lbnRzW3NlZ107CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgZnV6 el93cml0ZV9zZWdtZW50KAorICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAorICAgIGNvbnN0IHN0 cnVjdCBzZWdtZW50X3JlZ2lzdGVyICpyZWcsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQg KmN0eHQpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKCBzZWcgPj0gU0VHX05VTSApCisgICAg ICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKKworICAgIHJjID0gbWF5YmVfZmFpbCgi d3JpdGVfc2VnbWVudCIsIHRydWUpOworCisgICAgaWYgKCByYyA9PSBYODZFTVVMX09LQVkgKQor ICAgICAgICBpbnB1dC5zZWdtZW50c1tzZWddID0gKnJlZzsKKworICAgIHJldHVybiByYzsKK30K Kworc3RhdGljIGludCBmdXp6X3JlYWRfY3IoCisgICAgdW5zaWduZWQgaW50IHJlZywKKyAgICB1 bnNpZ25lZCBsb25nICp2YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7 CisgICAgaW50IHJjOworCisgICAgaWYgKCByZWcgPj0gQVJSQVlfU0laRShpbnB1dC5jcikgKQor ICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisKKyAgICByYyA9IG1heWJlX2Zh aWwoInJlYWRfY3IiLCB0cnVlKTsKKworICAgIGlmICggcmMgPT0gWDg2RU1VTF9PS0FZICkKKyAg ICAgICAgKnZhbCA9IGlucHV0LmNyW3JlZ107CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRp YyBpbnQgZnV6el93cml0ZV9jcigKKyAgICB1bnNpZ25lZCBpbnQgcmVnLAorICAgIHVuc2lnbmVk IGxvbmcgdmFsLAorICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIGlu dCByYzsKKworICAgIGlmICggcmVnID49IEFSUkFZX1NJWkUoaW5wdXQuY3IpICkKKyAgICAgICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOworCisgICAgcmMgPSBtYXliZV9mYWlsKCJ3cml0 ZV9jciIsIHRydWUpOworCisgICAgaWYgKCByYyA9PSBYODZFTVVMX09LQVkgKQorICAgICAgICBp bnB1dC5jcltyZWddID0gdmFsOworCisgICAgcmV0dXJuIHJjOworfQorCitlbnVtIHsKKyAgICBN U1JJX0lBMzJfU1lTRU5URVJfQ1MsCisgICAgTVNSSV9JQTMyX1NZU0VOVEVSX0VTUCwKKyAgICBN U1JJX0lBMzJfU1lTRU5URVJfRUlQLAorICAgIE1TUklfRUZFUiwKKyAgICBNU1JJX1NUQVIsCisg ICAgTVNSSV9MU1RBUiwKKyAgICBNU1JJX0NTVEFSLAorICAgIE1TUklfU1lTQ0FMTF9NQVNLCit9 OworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1zcl9pbmRleFtNU1JfSU5ERVhfTUFYXSA9 IHsKKyAgICBbTVNSSV9JQTMyX1NZU0VOVEVSX0NTXSAgPSBNU1JfSUEzMl9TWVNFTlRFUl9DUywK KyAgICBbTVNSSV9JQTMyX1NZU0VOVEVSX0VTUF0gPSBNU1JfSUEzMl9TWVNFTlRFUl9FU1AsCisg ICAgW01TUklfSUEzMl9TWVNFTlRFUl9FSVBdID0gTVNSX0lBMzJfU1lTRU5URVJfRUlQLAorICAg IFtNU1JJX0VGRVJdICAgICAgICAgICAgICA9IE1TUl9FRkVSLAorICAgIFtNU1JJX1NUQVJdICAg ICAgICAgICAgICA9IE1TUl9TVEFSLAorICAgIFtNU1JJX0xTVEFSXSAgICAgICAgICAgICA9IE1T Ul9MU1RBUiwKKyAgICBbTVNSSV9DU1RBUl0gICAgICAgICAgICAgPSBNU1JfQ1NUQVIsCisgICAg W01TUklfU1lTQ0FMTF9NQVNLXSAgICAgID0gTVNSX1NZU0NBTExfTUFTSworfTsKKworc3RhdGlj IGludCBfZnV6el9yZWFkX21zcigKKyAgICB1bnNpZ25lZCBpbnQgcmVnLAorICAgIHVpbnQ2NF90 ICp2YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdW5zaWdu ZWQgaW50IGlkeDsKKworICAgIHN3aXRjaCAoIHJlZyApCisgICAgeworICAgIGNhc2UgTVNSX1RT Q19BVVg6CisgICAgY2FzZSBNU1JfSUEzMl9UU0M6CisgICAgICAgIHJldHVybiBkYXRhX3JlYWQo InJlYWRfbXNyIiwgdmFsLCBzaXplb2YoKnZhbCkpOworICAgIGNhc2UgTVNSX0VGRVI6CisgICAg ICAgICp2YWwgPSBpbnB1dC5tc3JbTVNSSV9FRkVSXTsKKyAgICAgICAgKnZhbCAmPSB+RUZFUl9M TUE7CisgICAgICAgIGlmICggKCp2YWwgJiBFRkVSX0xNRSkgJiYgKGlucHV0LmNyWzRdICYgWDg2 X0NSNF9QQUUpICYmCisgICAgICAgICAgICAgKGlucHV0LmNyWzBdICYgWDg2X0NSMF9QRykgKQor ICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIlNldHRpbmcgRUZFUl9MTUFcbiIpOworICAg ICAgICAgICAgKnZhbCB8PSBFRkVSX0xNQTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gWDg2 RU1VTF9PS0FZOworICAgIH0KKworICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IE1TUl9JTkRFWF9N QVg7IGlkeCsrICkKKyAgICB7CisgICAgICAgIGlmICggbXNyX2luZGV4W2lkeF0gPT0gcmVnICkK KyAgICAgICAgeworICAgICAgICAgICAgKnZhbCA9IGlucHV0Lm1zcltpZHhdOworICAgICAgICAg ICAgcmV0dXJuIFg4NkVNVUxfT0tBWTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBY ODZFTVVMX0VYQ0VQVElPTjsKIH0KIAorc3RhdGljIGludCBmdXp6X3JlYWRfbXNyKAorICAgIHVu c2lnbmVkIGludCByZWcsCisgICAgdWludDY0X3QgKnZhbCwKKyAgICBzdHJ1Y3QgeDg2X2VtdWxh dGVfY3R4dCAqY3R4dCkgeworICAgIGludCByYzsKKworICAgIHJjID0gbWF5YmVfZmFpbCgicmVh ZF9tc3IiLCB0cnVlKTsKKyAgICBpZiAoIHJjICE9IFg4NkVNVUxfT0tBWSApCisgICAgICAgIHJl dHVybiByYzsKKworICAgIHJldHVybiBfZnV6el9yZWFkX21zcihyZWcsIHZhbCwgY3R4dCk7Cit9 CisKK3N0YXRpYyBpbnQgZnV6el93cml0ZV9tc3IoCisgICAgdW5zaWduZWQgaW50IHJlZywKKyAg ICB1aW50NjRfdCB2YWwsCisgICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7Cisg ICAgdW5zaWduZWQgaW50IGlkeDsKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IG1heWJlX2ZhaWwo IndyaXRlX21zIiwgdHJ1ZSk7CisgICAgaWYgKCByYyAhPSBYODZFTVVMX09LQVkgKQorICAgICAg ICByZXR1cm4gcmM7CisKKyAgICBzd2l0Y2ggKCByZWcgKQorICAgIHsKKyAgICBjYXNlIE1TUl9U U0NfQVVYOgorICAgIGNhc2UgTVNSX0lBMzJfVFNDOgorICAgICAgICByZXR1cm4gWDg2RU1VTF9P S0FZOworICAgIH0KKworICAgIGZvciAoIGlkeCA9IDA7IGlkeCA8IE1TUl9JTkRFWF9NQVg7IGlk eCsrICkKKyAgICB7CisgICAgICAgIGlmICggbXNyX2luZGV4W2lkeF0gPT0gcmVnICkKKyAgICAg ICAgeworICAgICAgICAgICAgaW5wdXQubXNyW2lkeF0gPSB2YWw7CisgICAgICAgICAgICByZXR1 cm4gWDg2RU1VTF9PS0FZOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFg4NkVNVUxf RVhDRVBUSU9OOworfQorCisjZGVmaW5lIFNFVChoKSAuaCA9IGZ1enpfIyNoCiBzdGF0aWMgc3Ry dWN0IHg4Nl9lbXVsYXRlX29wcyBmdXp6X2VtdWxvcHMgPSB7Ci0gICAgLnJlYWQgICAgICAgPSBm dXp6X3JlYWQsCi0gICAgLmluc25fZmV0Y2ggPSBmdXp6X2ZldGNoLAotICAgIC53cml0ZSAgICAg ID0gZnV6el93cml0ZSwKLSAgICAuY21weGNoZyAgICA9IGZ1enpfY21weGNoZywKLSAgICAuY3B1 aWQgICAgICA9IGVtdWxfdGVzdF9jcHVpZCwKLSAgICAucmVhZF9jciAgICA9IGVtdWxfdGVzdF9y ZWFkX2NyLAorICAgIFNFVChyZWFkKSwKKyAgICBTRVQoaW5zbl9mZXRjaCksCisgICAgU0VUKHdy aXRlKSwKKyAgICBTRVQoY21weGNoZyksCisgICAgU0VUKHJlcF9pbnMpLAorICAgIFNFVChyZXBf b3V0cyksCisgICAgU0VUKHJlcF9tb3ZzKSwKKyAgICBTRVQocmVwX3N0b3MpLAorICAgIFNFVChy ZWFkX3NlZ21lbnQpLAorICAgIFNFVCh3cml0ZV9zZWdtZW50KSwKKyAgICBTRVQocmVhZF9pbyks CisgICAgU0VUKHdyaXRlX2lvKSwKKyAgICBTRVQocmVhZF9jciksCisgICAgU0VUKHdyaXRlX2Ny KSwKKyAgICBTRVQocmVhZF9tc3IpLAorICAgIFNFVCh3cml0ZV9tc3IpLAorICAgIFNFVCh3Ymlu dmQpLAorICAgIFNFVChpbnZscGcpLAogICAgIC5nZXRfZnB1ICAgID0gZW11bF90ZXN0X2dldF9m cHUsCisgICAgLmNwdWlkICAgICAgPSBlbXVsX3Rlc3RfY3B1aWQsCiB9OworI3VuZGVmIFNFVAor CitzdGF0aWMgdm9pZCBzZXR1cF9mcHVfZXhjZXB0aW9uX2hhbmRsZXIodm9pZCkKK3sKKyAgICAv KiBGSVhNRSAtIGp1c3QgZGlzYWJsZSBleGNlcHRpb25zIGZvciBub3cgKi8KKyAgICB1bnNpZ25l ZCBsb25nIGE7CisKKyAgICBhc20gdm9sYXRpbGUgKCAiZm5jbGV4Iik7CisgICAgYSA9IDB4Mzdm OyAvKiBGQ1dfREVGQVVMVCBpbiBYZW4gKi8KKyAgICBhc20gdm9sYXRpbGUgKCAiZmxkY3cgJTAi IDo6ICJtIiAoYSkpOworICAgIGEgPSAweDFmODA7IC8qIE1YQ1NSX0RFRkFVTFQgaW4gWGVuICov CisgICAgYXNtIHZvbGF0aWxlICggImxkbXhjc3IgJTAiIDo6ICJtIiAoYSkgKTsKK30KKworc3Rh dGljIHZvaWQgZHVtcF9zdGF0ZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAg ICBzdHJ1Y3QgY3B1X3VzZXJfcmVncyAqcmVncyA9IGN0eHQtPnJlZ3M7CisgICAgdWludDY0X3Qg dmFsOworCisgICAgcHJpbnRmKCIgLS0gU3RhdGUgLS0gXG4iKTsKKyAgICBwcmludGYoImFkZHIg LyBzcCBzaXplOiAlZCAvICVkXG4iLCBjdHh0LT5hZGRyX3NpemUsIGN0eHQtPnNwX3NpemUpOwor ICAgIHByaW50ZigiIGNyMDogJWx4XG4iLCBpbnB1dC5jclswXSk7CisgICAgcHJpbnRmKCIgY3Iz OiAlbHhcbiIsIGlucHV0LmNyWzNdKTsKKyAgICBwcmludGYoIiBjcjQ6ICVseFxuIiwgaW5wdXQu Y3JbNF0pOworCisgICAgcHJpbnRmKCIgcmlwOiAlIlBSSXg2NCJcbiIsIHJlZ3MtPnJpcCk7CisK KyAgICBfZnV6el9yZWFkX21zcihNU1JfRUZFUiwgJnZhbCwgY3R4dCk7CisgICAgcHJpbnRmKCJF RkVSOiAlIlBSSXg2NCJcbiIsIHZhbCk7Cit9CisKK3N0YXRpYyBib29sIGxvbmdfbW9kZV9hY3Rp dmUoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgdWludDY0X3QgdmFsOwor CisgICAgaWYgKCBfZnV6el9yZWFkX21zcihNU1JfRUZFUiwgJnZhbCwgY3R4dCkgIT0gWDg2RU1V TF9PS0FZICkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHZhbCAmIEVGRVJf TE1BOworfQorCitzdGF0aWMgYm9vbCBpbl9sb25nbW9kZShzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4 dCAqY3R4dCkKK3sKKyAgICByZXR1cm4gbG9uZ19tb2RlX2FjdGl2ZShjdHh0KSAmJiBpbnB1dC5z ZWdtZW50c1t4ODZfc2VnX2NzXS5hdHRyLmZpZWxkcy5sOworfQorCitzdGF0aWMgdm9pZCBzZXRf c2l6ZXMoc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCit7CisgICAgaWYgKCBpbl9sb25n bW9kZShjdHh0KSApCisgICAgICAgIGN0eHQtPmFkZHJfc2l6ZSA9IGN0eHQtPnNwX3NpemUgPSA2 NDsKKyAgICBlbHNlCisgICAgeworICAgICAgICBjdHh0LT5hZGRyX3NpemUgPSBpbnB1dC5zZWdt ZW50c1t4ODZfc2VnX2NzXS5hdHRyLmZpZWxkcy5kYiA/IDMyIDogMTY7CisgICAgICAgIGN0eHQt PnNwX3NpemUgICA9IGlucHV0LnNlZ21lbnRzW3g4Nl9zZWdfc3NdLmF0dHIuZmllbGRzLmRiID8g MzIgOiAxNjsKKyAgICB9Cit9CiAKICNkZWZpbmUgQ0FOT05JQ0FMSVpFKHgpICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXApAQCAtMTAwLDEwICs1MTgsMTQ2IEBAIHN0YXRp YyBzdHJ1Y3QgeDg2X2VtdWxhdGVfb3BzIGZ1enpfZW11bG9wcyA9IHsKICAgICAgICAgKHgpID0g X3k7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUo IDAgKQogCi0jZGVmaW5lIEFERFJfU0laRV9TSElGVCA2MAotI2RlZmluZSBBRERSX1NJWkVfNjQg KDJVTEwgPDwgQUREUl9TSVpFX1NISUZUKQotI2RlZmluZSBBRERSX1NJWkVfMzIgKDFVTEwgPDwg QUREUl9TSVpFX1NISUZUKQotI2RlZmluZSBBRERSX1NJWkVfMTYgKDApCisvKiBFeHBlY3RzIGJp dG1hcCBhbmQgcmVncyB0byBiZSBkZWZpbmVkICovCisjZGVmaW5lIENBTk9OSUNBTElaRV9NQVlC RShyZWcpICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCAhKGJpdG1hcCAmICgxIDw8 IENBTk9OSUNBTElaRV8jI3JlZykpICkgICAgICBcCisgICAgICAgIENBTk9OSUNBTElaRShyZWdz LT5yZWcpOyAgICAgICAgICAgICAgICAgICAgICBcCisKK2VudW0geworICAgIEhPT0tfcmVhZCwK KyAgICBIT09LX2luc25fZmV0Y2gsCisgICAgSE9PS193cml0ZSwKKyAgICBIT09LX2NtcHhjaGcs CisgICAgSE9PS19yZXBfaW5zLAorICAgIEhPT0tfcmVwX291dHMsCisgICAgSE9PS19yZXBfbW92 cywKKyAgICBIT09LX3JlcF9zdG9zLAorICAgIEhPT0tfcmVhZF9zZWdtZW50LAorICAgIEhPT0tf d3JpdGVfc2VnbWVudCwKKyAgICBIT09LX3JlYWRfaW8sCisgICAgSE9PS193cml0ZV9pbywKKyAg ICBIT09LX3JlYWRfY3IsCisgICAgSE9PS193cml0ZV9jciwKKyAgICBIT09LX3JlYWRfZHIsCisg ICAgSE9PS193cml0ZV9kciwKKyAgICBIT09LX3JlYWRfbXNyLAorICAgIEhPT0tfd3JpdGVfbXNy LAorICAgIEhPT0tfd2JpbnZkLAorICAgIEhPT0tfY3B1aWQsCisgICAgSE9PS19pbmplY3RfaHdf ZXhjZXB0aW9uLAorICAgIEhPT0tfaW5qZWN0X3N3X2ludGVycnVwdCwKKyAgICBIT09LX2dldF9m cHUsCisgICAgSE9PS19wdXRfZnB1LAorICAgIEhPT0tfaW52bHBnLAorICAgIEhPT0tfdm1mdW5j LAorICAgIE9QVElPTl9zd2ludF9lbXVsYXRpb24sIC8qIFR3byBiaXRzICovCisgICAgQ0FOT05J Q0FMSVpFX3JpcCA9IE9QVElPTl9zd2ludF9lbXVsYXRpb24gKyAyLAorICAgIENBTk9OSUNBTEla RV9yc3AsCisgICAgQ0FOT05JQ0FMSVpFX3JicAorfTsKKworLyogRXhwZWN0cyBiaXRtYXAgdG8g YmUgZGVmaW5lZCAqLworI2RlZmluZSBNQVlCRV9ESVNBQkxFX0hPT0soaCkgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICBpZiAoIGJpdG1hcCAmICgxIDw8IEhPT0tfIyNoKSApICAgICAg ICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICBmdXp6X2VtdWxvcHMuaCA9IE5VTEw7ICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcHJpbnRmKCJEaXNhYmxpbmcgaG9vayAiI2giXG4i KTsgICAgICAgICAgICAgICBcCisgICAgfQorCitzdGF0aWMgdm9pZCBkaXNhYmxlX2hvb2tzKHZv aWQpCit7CisgICAgdW5zaWduZWQgbG9uZyBiaXRtYXAgPSBpbnB1dC5vcHRpb25zOworCisgICAg LyogU2VlIGFsc28gc2FuaXRpemVfaW5wdXQsIHNvbWUgaG9va3MgY2FuJ3QgYmUgZGlzYWJsZWQu ICovCisgICAgTUFZQkVfRElTQUJMRV9IT09LKHJlYWQpOworICAgIE1BWUJFX0RJU0FCTEVfSE9P SyhpbnNuX2ZldGNoKTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0sod3JpdGUpOworICAgIE1BWUJF X0RJU0FCTEVfSE9PSyhjbXB4Y2hnKTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0socmVwX2lucyk7 CisgICAgTUFZQkVfRElTQUJMRV9IT09LKHJlcF9vdXRzKTsKKyAgICBNQVlCRV9ESVNBQkxFX0hP T0socmVwX21vdnMpOworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyhyZXBfc3Rvcyk7CisgICAgTUFZ QkVfRElTQUJMRV9IT09LKHJlYWRfc2VnbWVudCk7CisgICAgTUFZQkVfRElTQUJMRV9IT09LKHdy aXRlX3NlZ21lbnQpOworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyhyZWFkX2lvKTsKKyAgICBNQVlC RV9ESVNBQkxFX0hPT0sod3JpdGVfaW8pOworICAgIE1BWUJFX0RJU0FCTEVfSE9PSyhyZWFkX2Ny KTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0sod3JpdGVfY3IpOworICAgIE1BWUJFX0RJU0FCTEVf SE9PSyhyZWFkX21zcik7CisgICAgTUFZQkVfRElTQUJMRV9IT09LKHdyaXRlX21zcik7CisgICAg TUFZQkVfRElTQUJMRV9IT09LKHdiaW52ZCk7CisgICAgTUFZQkVfRElTQUJMRV9IT09LKGNwdWlk KTsKKyAgICBNQVlCRV9ESVNBQkxFX0hPT0soZ2V0X2ZwdSk7CisgICAgTUFZQkVfRElTQUJMRV9I T09LKGludmxwZyk7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9zd2ludF9zdXBwb3J0KHN0cnVjdCB4 ODZfZW11bGF0ZV9jdHh0ICpjdHh0KQoreworICAgIHVuc2lnbmVkIGludCBzd2ludF9vcHQgPSAo aW5wdXQub3B0aW9ucyA+PiBPUFRJT05fc3dpbnRfZW11bGF0aW9uKSAmIDM7CisKKyAgICBzdGF0 aWMgY29uc3QgZW51bSB4ODZfc3dpbnRfZW11bGF0aW9uIG1hcFs0XSA9IHsKKyAgICAgICAgeDg2 X3N3aW50X2VtdWxhdGVfbm9uZSwKKyAgICAgICAgeDg2X3N3aW50X2VtdWxhdGVfbm9uZSwKKyAg ICAgICAgeDg2X3N3aW50X2VtdWxhdGVfaWNlYnAsCisgICAgICAgIHg4Nl9zd2ludF9lbXVsYXRl X2FsbCB9OworCisgICAgY3R4dC0+c3dpbnRfZW11bGF0ZSA9IG1hcFtzd2ludF9vcHRdOworfQor CisvKgorICogQ29uc3RyYWluIGlucHV0IHRvIGFyY2hpdGVjdHVyYWxseS1wb3NzaWJsZSBzdGF0 ZXMgd2hlcmUKKyAqIHRoZSBlbXVsYXRvciByZWxpZXMgb24gdGhlc2UKKyAqCisgKiBJbiBnZW5l cmFsIHdlIHdhbnQgdGhlIGVtdWxhdG9yIHRvIGJlIGFzIGFic29sdXRlbHkgcm9idXN0IGFzCisg KiBwb3NzaWJsZTsgd2hpY2ggbWVhbnMgdGhhdCB3ZSB3YW50IHRvIG1pbmltaXplIHRoZSBudW1i ZXIgb2YgdGhpbmdzCisgKiBpdCBhc3N1bWVzIGFib3V0IHRoZSBpbnB1dCBzdGF0ZS4gIFRlc2lu ZyB0aGlzIG1lYW5zIG1pbmltaXppbmcgYW5kCisgKiByZW1vdmluZyBhcyBtdWNoIG9mIHRoZSBp bnB1dCBjb25zdHJhaW50cyBhcyBwb3NzaWJsZS4KKyAqCisgKiBTbyB3ZSBvbmx5IGFkZCBjb25z dHJhaW50cyB0aGF0IChpbiBnZW5lcmFsKSBoYXZlIGJlZW4gcHJvdmVuIHRvCisgKiBjYXVzZSBj cmFzaGVzIGluIHRoZSBlbXVsYXRvci4KKyAqCisgKiBGb3IgZnV0dXJlIHJlZmVyZW5jZTogb3Ro ZXIgY29uc3RyYWludHMgd2hpY2ggbWlnaHQgYmUgbmVjZXNzYXJ5IGF0CisgKiBzb21lIHBvaW50 OgorICoKKyAqIC0gRUZFUi5MTUEgPT4gIUVGTEFHUy5OVAorICogLSBJbiBWTTg2IG1vZGUsIGZv cmNlIHNlZ21lbnQuLi4KKyAqICAtIC4uLmFjY2VzcyByaWdodHMgdG8gMHhmMworICogIC0gLi4u bGltaXRzIHRvIDB4ZmZmZgorICogIC0gLi4uYmFzZXMgdG8gYmVsb3cgMU1iLCAxNi1ieXRlIGFs aWduZWQKKyAqICAtIC4uLnNlbGVjdG9ycyB0byAoYmFzZSA+PiA0KQorICovCit2b2lkIHNhbml0 aXplX2lucHV0KHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KSB7CisgICAgc3RydWN0IGNw dV91c2VyX3JlZ3MgKnJlZ3MgPSAmaW5wdXQucmVnczsKKyAgICB1bnNpZ25lZCBsb25nIGJpdG1h cCA9IGlucHV0Lm9wdGlvbnM7CisKKyAgICAvKiBTb21lIGhvb2tzIGNhbid0IGJlIGRpc2FibGVk LiAqLworICAgIGlucHV0Lm9wdGlvbnMgJj0gfigoMTw8SE9PS19yZWFkKXwoMTw8SE9PS19pbnNu X2ZldGNoKSk7CisKKyAgICAvKiBaZXJvICdwcml2YXRlJyBlbnRyaWVzICovCisgICAgcmVncy0+ ZXJyb3JfY29kZSA9IDA7CisgICAgcmVncy0+ZW50cnlfdmVjdG9yID0gMDsKKworICAgIENBTk9O SUNBTElaRV9NQVlCRShyaXApOworICAgIENBTk9OSUNBTElaRV9NQVlCRShyc3ApOworICAgIENB Tk9OSUNBTElaRV9NQVlCRShyYnApOworCisgICAgLyoKKyAgICAgKiBDUjAuUEcgY2FuJ3QgYmUg c2V0IGlmIENSMC5QRSBpc24ndCBzZXQuICBTZXQgaXMgbW9yZSBpbnRlcmVzdGluZywgc28KKyAg ICAgKiBzZXQgUEUgaWYgUEcgaXMgc2V0LgorICAgICAqLworICAgIGlmICggaW5wdXQuY3JbMF0g JiBYODZfQ1IwX1BHICkKKyAgICAgICAgaW5wdXQuY3JbMF0gfD0gWDg2X0NSMF9QRTsKKworICAg IC8qIEVGTEFHUy5WTSBub3QgYXZhaWxhYmxlIGluIGxvbmcgbW9kZSAqLworICAgIGlmICggbG9u Z19tb2RlX2FjdGl2ZShjdHh0KSApCisgICAgICAgIHJlZ3MtPnJmbGFncyAmPSB+WDg2X0VGTEFH U19WTTsKKworICAgIC8qIEVGTEFHUy5WTSBpbXBsaWVzIDE2LWJpdCBtb2RlICovCisgICAgaWYg KCByZWdzLT5yZmxhZ3MgJiBYODZfRUZMQUdTX1ZNICkgeworICAgICAgICBpbnB1dC5zZWdtZW50 c1t4ODZfc2VnX2NzXS5hdHRyLmZpZWxkcy5kYiA9IDA7CisgICAgICAgIGlucHV0LnNlZ21lbnRz W3g4Nl9zZWdfc3NdLmF0dHIuZmllbGRzLmRiID0gMDsKKyAgICB9Cit9CiAKIGludCBMTFZNRnV6 emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4X3QgKmRhdGFfcCwgc2l6ZV90IHNpemUpCiB7CkBA IC0xMTQsMTAgKzY2OCw3IEBAIGludCBMTFZNRnV6emVyVGVzdE9uZUlucHV0KGNvbnN0IHVpbnQ4 X3QgKmRhdGFfcCwgc2l6ZV90IHNpemUpCiAgICAgICAgIC5hZGRyX3NpemUgPSA4ICogc2l6ZW9m KHZvaWQgKiksCiAgICAgICAgIC5zcF9zaXplID0gOCAqIHNpemVvZih2b2lkICopLAogICAgIH07 Ci0gICAgdW5zaWduZWQgaW50IG5yID0gMDsKICAgICBpbnQgcmM7Ci0gICAgdW5zaWduZWQgaW50 IHg7Ci0gICAgY29uc3QgdWludDhfdCAqcCA9IGRhdGFfcDsKIAogICAgIHN0YWNrX2V4ZWMgPSBl bXVsX3Rlc3RfbWFrZV9zdGFja19leGVjdXRhYmxlKCk7CiAgICAgaWYgKCAhc3RhY2tfZXhlYyAp CkBAIC0xMjcsNTIgKzY3OCwzOCBAQCBpbnQgTExWTUZ1enplclRlc3RPbmVJbnB1dChjb25zdCB1 aW50OF90ICpkYXRhX3AsIHNpemVfdCBzaXplKQogICAgIH0KIAogICAgIC8qIFJlc2V0IGFsbCBn bG9iYWwgc3RhdGUgdmFyaWFibGVzICovCi0gICAgbWVtc2V0KGRhdGEsIDAsIHNpemVvZihkYXRh KSk7CisgICAgbWVtc2V0KCZpbnB1dCwgMCwgc2l6ZW9mKGlucHV0KSk7CiAgICAgZGF0YV9pbmRl eCA9IDA7Ci0gICAgZGF0YV9tYXggPSAwOwotCi0gICAgbnIgPSBzaXplIDwgc2l6ZW9mKHJlZ3Mp ID8gc2l6ZSA6IHNpemVvZihyZWdzKTsKKyAgICBkYXRhX251bSA9IDA7CiAKLSAgICBtZW1jcHko JnJlZ3MsIHAsIG5yKTsKLSAgICBwICs9IHNpemVvZihyZWdzKTsKKyAgICBpZiAoIHNpemUgPD0g REFUQV9PRkZTRVQgKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJJbnB1dCB0b28gc21hbGxcbiIp OworICAgICAgICByZXR1cm4gMTsKKyAgICB9CiAKLSAgICBpZiAoIG5yIDwgc2l6ZSApCisgICAg aWYgKCBzaXplID4gc2l6ZW9mKGlucHV0KSApCiAgICAgewotICAgICAgICBtZW1jcHkoZGF0YSwg cCwgc2l6ZSAtIG5yKTsKLSAgICAgICAgZGF0YV9tYXggPSBzaXplIC0gbnI7CisgICAgICAgIHBy aW50ZigiSW5wdXQgdG9vIGxhcmdlXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCi0g ICAgY3R4dC5mb3JjZV93cml0ZWJhY2sgPSBmYWxzZTsKKyAgICBtZW1jcHkoJmlucHV0LCBkYXRh X3AsIHNpemUpOwogCi0gICAgLyogWmVybyAncHJpdmF0ZScgZmllbGRzICovCi0gICAgcmVncy5l cnJvcl9jb2RlID0gMDsKLSAgICByZWdzLmVudHJ5X3ZlY3RvciA9IDA7CisgICAgZGF0YV9udW0g PSBzaXplIC0gREFUQV9PRkZTRVQ7CiAKLSAgICAvKiBVc2UgdGhlIHVwcGVyIGJpdHMgb2YgcmVn cy5laXAgdG8gZGV0ZXJtaW5lIGFkZHJfc2l6ZSAqLwotICAgIHggPSAocmVncy5yaXAgPj4gQURE Ul9TSVpFX1NISUZUKSAmIDB4MzsKLSAgICBpZiAoIHggPT0gMyApCi0gICAgICAgIHggPSAyOwot ICAgIGN0eHQuYWRkcl9zaXplID0gMTYgPDwgeDsKLSAgICBwcmludGYoImFkZHJfc2l6ZTogJWRc biIsIGN0eHQuYWRkcl9zaXplKTsKKyAgICBzYW5pdGl6ZV9pbnB1dCgmY3R4dCk7CiAKLSAgICAv KiBVc2UgdGhlIHVwcGVyIGJpdCBvZiByZWdzLnJzcCB0byBkZXRlcm1pbmUgc3Bfc2l6ZSAoaWYg YXBwcm9wcmlhdGUpICovCi0gICAgaWYgKCBjdHh0LmFkZHJfc2l6ZSA9PSA2NCApCi0gICAgICAg IGN0eHQuc3Bfc2l6ZSA9IDY0OwotICAgIGVsc2UKLSAgICB7Ci0gICAgICAgIC8qIElmIGFkZHJf c2l6ZSBpc24ndCA2NC1iaXRzLCBzcF9zaXplIGNhbiBvbmx5IGJlIDE2IG9yIDMyIGJpdHMgKi8K LSAgICAgICAgeCA9IChyZWdzLnJzcCA+PiBBRERSX1NJWkVfU0hJRlQpICYgMHgxOwotICAgICAg ICBjdHh0LnNwX3NpemUgPSAxNiA8PCB4OwotICAgIH0KLSAgICBwcmludGYoInNwX3NpemU6ICVk XG4iLCBjdHh0LnNwX3NpemUpOwotICAgIENBTk9OSUNBTElaRShyZWdzLnJpcCk7Ci0gICAgQ0FO T05JQ0FMSVpFKHJlZ3MucnNwKTsKLSAgICBDQU5PTklDQUxJWkUocmVncy5yYnApOworICAgIGRp c2FibGVfaG9va3MoKTsKIAotICAgIC8qIFplcm8gYWxsIHNlZ21lbnRzIGZvciBub3cgKi8KLSAg ICByZWdzLmNzID0gcmVncy5zcyA9IHJlZ3MuZXMgPSByZWdzLmRzID0gcmVncy5mcyA9IHJlZ3Mu Z3MgPSAwOworICAgIHNldF9zd2ludF9zdXBwb3J0KCZjdHh0KTsKIAogICAgIGRvIHsKKyAgICAg ICAgc2V0dXBfZnB1X2V4Y2VwdGlvbl9oYW5kbGVyKCk7CisKKyAgICAgICAgc2V0X3NpemVzKCZj dHh0KTsKKyAgICAgICAgZHVtcF9zdGF0ZSgmY3R4dCk7CisKICAgICAgICAgcmMgPSB4ODZfZW11 bGF0ZSgmY3R4dCwgJmZ1enpfZW11bG9wcyk7CiAgICAgICAgIHByaW50ZigiRW11bGF0aW9uIHJl c3VsdDogJWRcbiIsIHJjKTsKICAgICB9IHdoaWxlICggcmMgPT0gWDg2RU1VTF9PS0FZICk7Ci0t IAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8v bGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK