From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 27/29] xl: split out save/restore related code Date: Fri, 24 Feb 2017 16:13:12 +0000 Message-ID: <20170224161314.22154-28-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-0006Z1-Sq for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:39 +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 QWRkIHNvbWUgZnVuY3Rpb24gZGVjbGFyYXRpb25zIHRvIHhsLmggYmVjYXVzZSB0aGV5IGFyZSBu b3cgbmVlZGVkIGluCm11bHRpcGxlIGZpbGVzLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2Vp LmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94bC9NYWtlZmlsZSAgICAgICAgIHwgICAyICst CiB0b29scy94bC94bC5oICAgICAgICAgICAgIHwgICA2ICsKIHRvb2xzL3hsL3hsX2NtZGltcGwu YyAgICAgfCAyMjcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xz L3hsL3hsX3NhdmVyZXN0b3JlLmMgfCAyNzMgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCAyODAgaW5zZXJ0aW9ucygrKSwgMjI4 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3hsL3hsX3NhdmVyZXN0b3Jl LmMKCmRpZmYgLS1naXQgYS90b29scy94bC9NYWtlZmlsZSBiL3Rvb2xzL3hsL01ha2VmaWxlCmlu ZGV4IDBmOTY2Njg0YmUuLjk5ODJiOTM2YzQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL01ha2VmaWxl CisrKyBiL3Rvb2xzL3hsL01ha2VmaWxlCkBAIC0yMCw3ICsyMCw3IEBAIFhMX09CSlMgKz0geGxf dG1lbS5vIHhsX3BhcnNlLm8geGxfY3B1cG9vbC5vIHhsX2ZsYXNrLm8KIFhMX09CSlMgKz0geGxf dnRwbS5vIHhsX2Jsb2NrLm8geGxfbmljLm8geGxfdXNiLm8KIFhMX09CSlMgKz0geGxfc2NoZWQu byB4bF9wY2kubyB4bF92Y3B1Lm8geGxfY2QubyB4bF9tZW0ubwogWExfT0JKUyArPSB4bF9wc3Iu byB4bF9pbmZvLm8geGxfY29uc29sZS5vIHhsX21pc2MubwotWExfT0JKUyArPSB4bF92bWNvbnRy b2wubworWExfT0JKUyArPSB4bF92bWNvbnRyb2wubyB4bF9zYXZlcmVzdG9yZS5vCiAKICQoWExf T0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW50b29sbG9nKQogJChYTF9PQkpTKTogQ0ZM QUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZmIC0tZ2l0IGEvdG9vbHMveGwveGwuaCBiL3Rvb2xzL3hs L3hsLmgKaW5kZXggNjJkMDEwMDc2Yi4uNjViODljZTcxNyAxMDA2NDQKLS0tIGEvdG9vbHMveGwv eGwuaAorKysgYi90b29scy94bC94bC5oCkBAIC05Niw2ICs5NiwxMiBAQCBzdHJ1Y3Qgc2F2ZV9m aWxlX2hlYWRlciB7CiAKICNkZWZpbmUgU0FWRUZJTEVfQllURU9SREVSX1ZBTFVFICgodWludDMy X3QpMHgwMTAyMDMwNFVMKQogCit2b2lkIHNhdmVfZG9tYWluX2NvcmVfYmVnaW4odWludDMyX3Qg ZG9taWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3ZlcnJpZGVf Y29uZmlnX2ZpbGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqKmNvbmZp Z19kYXRhX3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjb25maWdfbGVuX3Ip Owordm9pZCBzYXZlX2RvbWFpbl9jb3JlX3dyaXRlY29uZmlnKGludCBmZCwgY29uc3QgY2hhciAq c291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3Qg KmNvbmZpZ19kYXRhLCBpbnQgY29uZmlnX2xlbik7CiAKIC8qCiAgKiBUaGUgeGwgcHJvY2VzcyBz aG91bGQgYWx3YXlzIHJldHVybiBlaXRoZXIgRVhJVF9TVUNDRVNTIG9yCmRpZmYgLS1naXQgYS90 b29scy94bC94bF9jbWRpbXBsLmMgYi90b29scy94bC94bF9jbWRpbXBsLmMKaW5kZXggYjNhMTdk NWZhNi4uYzQxYWUzMTgxNCAxMDA2NDQKLS0tIGEvdG9vbHMveGwveGxfY21kaW1wbC5jCisrKyBi L3Rvb2xzL3hsL3hsX2NtZGltcGwuYwpAQCAtOTksMTMzICs5OSw2IEBAIHZvaWQgaGVscChjb25z dCBjaGFyICpjb21tYW5kKQogfQogCiAjaWZuZGVmIExJQlhMX0hBVkVfTk9fU1VTUEVORF9SRVNV TUUKLXN0YXRpYyB2b2lkIHNhdmVfZG9tYWluX2NvcmVfYmVnaW4odWludDMyX3QgZG9taWQsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm92ZXJyaWRlX2Nv bmZpZ19maWxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICoq Y29uZmlnX2RhdGFfciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpj b25maWdfbGVuX3IpCi17Ci0gICAgaW50IHJjOwotICAgIGxpYnhsX2RvbWFpbl9jb25maWcgZF9j b25maWc7Ci0gICAgY2hhciAqY29uZmlnX2MgPSAwOwotCi0gICAgLyogY29uZmlndXJhdGlvbiBm aWxlIGluIG9wdGlvbmFsIGRhdGE6ICovCi0KLSAgICBsaWJ4bF9kb21haW5fY29uZmlnX2luaXQo JmRfY29uZmlnKTsKLQotICAgIGlmIChvdmVycmlkZV9jb25maWdfZmlsZSkgewotICAgICAgICB2 b2lkICpjb25maWdfdiA9IDA7Ci0gICAgICAgIHJjID0gbGlieGxfcmVhZF9maWxlX2NvbnRlbnRz KGN0eCwgb3ZlcnJpZGVfY29uZmlnX2ZpbGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICZjb25maWdfdiwgY29uZmlnX2xlbl9yKTsKLSAgICAgICAgaWYgKHJjKSB7Ci0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byByZWFkIG92ZXJyaWRkZW4gY29u ZmlnIGZpbGVcbiIpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9 Ci0gICAgICAgIHBhcnNlX2NvbmZpZ19kYXRhKG92ZXJyaWRlX2NvbmZpZ19maWxlLCBjb25maWdf diwgKmNvbmZpZ19sZW5fciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgJmRfY29uZmlnKTsK LSAgICAgICAgZnJlZShjb25maWdfdik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmMgPSBsaWJ4 bF9yZXRyaWV2ZV9kb21haW5fY29uZmlndXJhdGlvbihjdHgsIGRvbWlkLCAmZF9jb25maWcpOwot ICAgICAgICBpZiAocmMpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRv IHJldHJpZXZlIGRvbWFpbiBjb25maWd1cmF0aW9uXG4iKTsKLSAgICAgICAgICAgIGV4aXQoRVhJ VF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGNvbmZpZ19jID0gbGlieGxfZG9t YWluX2NvbmZpZ190b19qc29uKGN0eCwgJmRfY29uZmlnKTsKLSAgICBpZiAoIWNvbmZpZ19jKSB7 Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5hYmxlIHRvIGNvbnZlcnQgY29uZmlnIGZpbGUg dG8gSlNPTlxuIik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0gICAgKmNv bmZpZ19kYXRhX3IgPSAodWludDhfdCAqKWNvbmZpZ19jOwotICAgICpjb25maWdfbGVuX3IgPSBz dHJsZW4oY29uZmlnX2MpICsgMTsgLyogaW5jbHVkaW5nIHRyYWlsaW5nICdcMCcgKi8KLQotICAg IGxpYnhsX2RvbWFpbl9jb25maWdfZGlzcG9zZSgmZF9jb25maWcpOwotfQotCi1zdGF0aWMgdm9p ZCBzYXZlX2RvbWFpbl9jb3JlX3dyaXRlY29uZmlnKGludCBmZCwgY29uc3QgY2hhciAqc291cmNl LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNvbmZp Z19kYXRhLCBpbnQgY29uZmlnX2xlbikKLXsKLSAgICBzdHJ1Y3Qgc2F2ZV9maWxlX2hlYWRlciBo ZHI7Ci0gICAgdWludDhfdCAqb3B0ZGF0YV9iZWdpbjsKLSAgICB1bmlvbiB7IHVpbnQzMl90IHUz MjsgY2hhciBiWzRdOyB9IHUzMmJ1ZjsKLQotICAgIG1lbXNldCgmaGRyLCAwLCBzaXplb2YoaGRy KSk7Ci0gICAgbWVtY3B5KGhkci5tYWdpYywgc2F2ZWZpbGVoZWFkZXJfbWFnaWMsIHNpemVvZiho ZHIubWFnaWMpKTsKLSAgICBoZHIuYnl0ZW9yZGVyID0gU0FWRUZJTEVfQllURU9SREVSX1ZBTFVF OwotICAgIGhkci5tYW5kYXRvcnlfZmxhZ3MgPSBYTF9NQU5EQVRPUllfRkxBR19TVFJFQU12MjsK LQotICAgIG9wdGRhdGFfYmVnaW49IDA7Ci0KLSNkZWZpbmUgQUREX09QVERBVEEocHRyLCBsZW4p ICh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgaWYg KChsZW4pKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgIGhkci5vcHRpb25hbF9kYXRhX2xlbiArPSAobGVuKTsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIG9wdGRhdGFfYmVnaW4gPSB4cmVh bGxvYyhvcHRkYXRhX2JlZ2luLCBoZHIub3B0aW9uYWxfZGF0YV9sZW4pOyBcCi0gICAgICAgIG1l bWNweShvcHRkYXRhX2JlZ2luICsgaGRyLm9wdGlvbmFsX2RhdGFfbGVuIC0gKGxlbiksICAgICAg ICAgICBcCi0gICAgICAgICAgICAgICAocHRyKSwgKGxlbikpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAg ICAgICAgICAgICAgIH0pCi0KLSAgICB1MzJidWYudTMyID0gY29uZmlnX2xlbjsKLSAgICBBRERf T1BUREFUQSh1MzJidWYuYiwgICAgNCk7Ci0gICAgQUREX09QVERBVEEoY29uZmlnX2RhdGEsIGNv bmZpZ19sZW4pOwotICAgIGlmIChjb25maWdfbGVuKQotICAgICAgICBoZHIubWFuZGF0b3J5X2Zs YWdzIHw9IFhMX01BTkRBVE9SWV9GTEFHX0pTT047Ci0KLSAgICAvKiB0aGF0J3MgdGhlIG9wdGlv bmFsIGRhdGEgKi8KLQotICAgIENIS19FUlJOT1ZBTChsaWJ4bF93cml0ZV9leGFjdGx5KAotICAg ICAgICAgICAgICAgICAgICAgY3R4LCBmZCwgJmhkciwgc2l6ZW9mKGhkciksIHNvdXJjZSwgImhl YWRlciIpKTsKLSAgICBDSEtfRVJSTk9WQUwobGlieGxfd3JpdGVfZXhhY3RseSgKLSAgICAgICAg ICAgICAgICAgICAgIGN0eCwgZmQsIG9wdGRhdGFfYmVnaW4sIGhkci5vcHRpb25hbF9kYXRhX2xl biwKLSAgICAgICAgICAgICAgICAgICAgIHNvdXJjZSwgImhlYWRlciIpKTsKLQotICAgIGZyZWUo b3B0ZGF0YV9iZWdpbik7Ci0KLSAgICBmcHJpbnRmKHN0ZGVyciwgIlNhdmluZyB0byAlcyBuZXcg eGwgZm9ybWF0IChpbmZvIgotICAgICAgICAgICAgIiAweCUiUFJJeDMyIi8weCUiUFJJeDMyIi8l IlBSSXUzMiIpXG4iLAotICAgICAgICAgICAgc291cmNlLCBoZHIubWFuZGF0b3J5X2ZsYWdzLCBo ZHIub3B0aW9uYWxfZmxhZ3MsCi0gICAgICAgICAgICBoZHIub3B0aW9uYWxfZGF0YV9sZW4pOwot fQotCi1zdGF0aWMgaW50IHNhdmVfZG9tYWluKHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICpm aWxlbmFtZSwgaW50IGNoZWNrcG9pbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IGxlYXZlcGF1c2VkLCBjb25zdCBjaGFyICpvdmVycmlkZV9jb25maWdfZmlsZSkKLXsKLSAgICBp bnQgZmQ7Ci0gICAgdWludDhfdCAqY29uZmlnX2RhdGE7Ci0gICAgaW50IGNvbmZpZ19sZW47Ci0K LSAgICBzYXZlX2RvbWFpbl9jb3JlX2JlZ2luKGRvbWlkLCBvdmVycmlkZV9jb25maWdfZmlsZSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICZjb25maWdfZGF0YSwgJmNvbmZpZ19sZW4pOwot Ci0gICAgaWYgKCFjb25maWdfbGVuKSB7Ci0gICAgICAgIGZwdXRzKCIgU2F2ZWZpbGUgd2lsbCBu b3QgY29udGFpbiB4bCBkb21haW4gY29uZmlnXG4iLCBzdGRlcnIpOwotICAgIH0KLQotICAgIGZk ID0gb3BlbihmaWxlbmFtZSwgT19XUk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjQ0KTsKLSAgICBp ZiAoZmQgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gdGVt cCBmaWxlICVzIGZvciB3cml0aW5nXG4iLCBmaWxlbmFtZSk7Ci0gICAgICAgIGV4aXQoRVhJVF9G QUlMVVJFKTsKLSAgICB9Ci0KLSAgICBzYXZlX2RvbWFpbl9jb3JlX3dyaXRlY29uZmlnKGZkLCBm aWxlbmFtZSwgY29uZmlnX2RhdGEsIGNvbmZpZ19sZW4pOwotCi0gICAgaW50IHJjID0gbGlieGxf ZG9tYWluX3N1c3BlbmQoY3R4LCBkb21pZCwgZmQsIDAsIE5VTEwpOwotICAgIGNsb3NlKGZkKTsK LQotICAgIGlmIChyYyA8IDApIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8g c2F2ZSBkb21haW4sIHJlc3VtaW5nIGRvbWFpblxuIik7Ci0gICAgICAgIGxpYnhsX2RvbWFpbl9y ZXN1bWUoY3R4LCBkb21pZCwgMSwgMCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKGxlYXZlcGF1c2Vk IHx8IGNoZWNrcG9pbnQpIHsKLSAgICAgICAgaWYgKGxlYXZlcGF1c2VkKQotICAgICAgICAgICAg bGlieGxfZG9tYWluX3BhdXNlKGN0eCwgZG9taWQpOwotICAgICAgICBsaWJ4bF9kb21haW5fcmVz dW1lKGN0eCwgZG9taWQsIDEsIDApOwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIGxpYnhsX2Rv bWFpbl9kZXN0cm95KGN0eCwgZG9taWQsIDApOwotCi0gICAgZXhpdChyYyA8IDAgPyBFWElUX0ZB SUxVUkUgOiBFWElUX1NVQ0NFU1MpOwotfQogCiBzdGF0aWMgcGlkX3QgY3JlYXRlX21pZ3JhdGlv bl9jaGlsZChjb25zdCBjaGFyICpydW5lLCBpbnQgKnNlbmRfZmQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyZWN2X2ZkKQpAQCAtNjY3LDc0ICs1NDAsNiBA QCBzdGF0aWMgdm9pZCBtaWdyYXRlX3JlY2VpdmUoaW50IGRlYnVnLCBpbnQgZGFlbW9uaXplLCBp bnQgbW9uaXRvciwKICAgICBleGl0KEVYSVRfU1VDQ0VTUyk7CiB9CiAKLWludCBtYWluX3Jlc3Rv cmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGNvbnN0IGNoYXIgKmNoZWNrcG9pbnRf ZmlsZSA9IE5VTEw7Ci0gICAgY29uc3QgY2hhciAqY29uZmlnX2ZpbGUgPSBOVUxMOwotICAgIHN0 cnVjdCBkb21haW5fY3JlYXRlIGRvbV9pbmZvOwotICAgIGludCBwYXVzZWQgPSAwLCBkZWJ1ZyA9 IDAsIGRhZW1vbml6ZSA9IDEsIG1vbml0b3IgPSAxLAotICAgICAgICBjb25zb2xlX2F1dG9jb25u ZWN0ID0gMCwgdm5jID0gMCwgdm5jYXV0b3Bhc3MgPSAwOwotICAgIGludCBvcHQsIHJjOwotICAg IHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKLSAgICAgICAgeyJ2bmN2aWV3ZXIiLCAw LCAwLCAnVid9LAotICAgICAgICB7InZuY3ZpZXdlci1hdXRvcGFzcyIsIDAsIDAsICdBJ30sCi0g ICAgICAgIENPTU1PTl9MT05HX09QVFMKLSAgICB9OwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BU KG9wdCwgIkZjcGRlVkEiLCBvcHRzLCAicmVzdG9yZSIsIDEpIHsKLSAgICBjYXNlICdjJzoKLSAg ICAgICAgY29uc29sZV9hdXRvY29ubmVjdCA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2Ug J3AnOgotICAgICAgICBwYXVzZWQgPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdkJzoK LSAgICAgICAgZGVidWcgPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdGJzoKLSAgICAg ICAgZGFlbW9uaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnZSc6Ci0gICAgICAg IGRhZW1vbml6ZSA9IDA7Ci0gICAgICAgIG1vbml0b3IgPSAwOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlICdWJzoKLSAgICAgICAgdm5jID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAn QSc6Ci0gICAgICAgIHZuYyA9IHZuY2F1dG9wYXNzID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAg fQotCi0gICAgaWYgKGFyZ2Mtb3B0aW5kID09IDEpIHsKLSAgICAgICAgY2hlY2twb2ludF9maWxl ID0gYXJndltvcHRpbmRdOwotICAgIH0gZWxzZSBpZiAoYXJnYy1vcHRpbmQgPT0gMikgewotICAg ICAgICBjb25maWdfZmlsZSA9IGFyZ3Zbb3B0aW5kXTsKLSAgICAgICAgY2hlY2twb2ludF9maWxl ID0gYXJndltvcHRpbmQgKyAxXTsKLSAgICB9IGVsc2UgewotICAgICAgICBoZWxwKCJyZXN0b3Jl Iik7Ci0gICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgbWVtc2V0KCZk b21faW5mbywgMCwgc2l6ZW9mKGRvbV9pbmZvKSk7Ci0gICAgZG9tX2luZm8uZGVidWcgPSBkZWJ1 ZzsKLSAgICBkb21faW5mby5kYWVtb25pemUgPSBkYWVtb25pemU7Ci0gICAgZG9tX2luZm8ubW9u aXRvciA9IG1vbml0b3I7Ci0gICAgZG9tX2luZm8ucGF1c2VkID0gcGF1c2VkOwotICAgIGRvbV9p bmZvLmNvbmZpZ19maWxlID0gY29uZmlnX2ZpbGU7Ci0gICAgZG9tX2luZm8ucmVzdG9yZV9maWxl ID0gY2hlY2twb2ludF9maWxlOwotICAgIGRvbV9pbmZvLm1pZ3JhdGVfZmQgPSAtMTsKLSAgICBk b21faW5mby5zZW5kX2JhY2tfZmQgPSAtMTsKLSAgICBkb21faW5mby52bmMgPSB2bmM7Ci0gICAg ZG9tX2luZm8udm5jYXV0b3Bhc3MgPSB2bmNhdXRvcGFzczsKLSAgICBkb21faW5mby5jb25zb2xl X2F1dG9jb25uZWN0ID0gY29uc29sZV9hdXRvY29ubmVjdDsKLQotICAgIHJjID0gY3JlYXRlX2Rv bWFpbigmZG9tX2luZm8pOwotICAgIGlmIChyYyA8IDApCi0gICAgICAgIHJldHVybiBFWElUX0ZB SUxVUkU7Ci0KLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwotfQogCiBpbnQgbWFpbl9taWdyYXRl X3JlY2VpdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogewpAQCAtNzg1LDM4ICs1OTAsNiBAQCBp bnQgbWFpbl9taWdyYXRlX3JlY2VpdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHJldHVy biBFWElUX1NVQ0NFU1M7CiB9CiAKLWludCBtYWluX3NhdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2 KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGNvbnN0IGNoYXIgKmZpbGVuYW1lOwotICAg IGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSA9IE5VTEw7Ci0gICAgaW50IGNoZWNrcG9pbnQg PSAwOwotICAgIGludCBsZWF2ZXBhdXNlZCA9IDA7Ci0gICAgaW50IG9wdDsKLQotICAgIFNXSVRD SF9GT1JFQUNIX09QVChvcHQsICJjcCIsIE5VTEwsICJzYXZlIiwgMikgewotICAgIGNhc2UgJ2Mn OgotICAgICAgICBjaGVja3BvaW50ID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAncCc6 Ci0gICAgICAgIGxlYXZlcGF1c2VkID0gMTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAg aWYgKGFyZ2Mtb3B0aW5kID4gMykgewotICAgICAgICBoZWxwKCJzYXZlIik7Ci0gICAgICAgIHJl dHVybiBFWElUX0ZBSUxVUkU7Ci0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJn dltvcHRpbmRdKTsKLSAgICBmaWxlbmFtZSA9IGFyZ3Zbb3B0aW5kICsgMV07Ci0gICAgaWYgKCBh cmdjIC0gb3B0aW5kID49IDMgKQotICAgICAgICBjb25maWdfZmlsZW5hbWUgPSBhcmd2W29wdGlu ZCArIDJdOwotCi0gICAgc2F2ZV9kb21haW4oZG9taWQsIGZpbGVuYW1lLCBjaGVja3BvaW50LCBs ZWF2ZXBhdXNlZCwgY29uZmlnX2ZpbGVuYW1lKTsKLSAgICByZXR1cm4gRVhJVF9TVUNDRVNTOwot fQotCiBpbnQgbWFpbl9taWdyYXRlKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKICAgICB1aW50 MzJfdCBkb21pZDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3NhdmVyZXN0b3JlLmMgYi90b29s cy94bC94bF9zYXZlcmVzdG9yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAuLjkxOGMxODlhZjAKLS0tIC9kZXYvbnVsbAorKysgYi90b29scy94bC94bF9zYXZlcmVzdG9y ZS5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogQ29weXJpZ2h0IDIwMDktMjAxNyBDaXRyaXgg THRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBz b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIu MSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNlcHRpb24gb24gbGlua2luZyBkZXNjcmli ZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBp biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAq IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICov CisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisjaW5jbHVkZSA8 c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K KyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1 bmlzdGQuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSA8bGlieGxfdXRpbHMuaD4K KyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAieGxf dXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgorCisjaWZuZGVmIExJQlhMX0hBVkVfTk9f U1VTUEVORF9SRVNVTUUKKwordm9pZCBzYXZlX2RvbWFpbl9jb3JlX2JlZ2luKHVpbnQzMl90IGRv bWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm92ZXJyaWRlX2Nv bmZpZ19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKipjb25maWdf ZGF0YV9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqY29uZmlnX2xlbl9yKQor eworICAgIGludCByYzsKKyAgICBsaWJ4bF9kb21haW5fY29uZmlnIGRfY29uZmlnOworICAgIGNo YXIgKmNvbmZpZ19jID0gMDsKKworICAgIC8qIGNvbmZpZ3VyYXRpb24gZmlsZSBpbiBvcHRpb25h bCBkYXRhOiAqLworCisgICAgbGlieGxfZG9tYWluX2NvbmZpZ19pbml0KCZkX2NvbmZpZyk7CisK KyAgICBpZiAob3ZlcnJpZGVfY29uZmlnX2ZpbGUpIHsKKyAgICAgICAgdm9pZCAqY29uZmlnX3Yg PSAwOworICAgICAgICByYyA9IGxpYnhsX3JlYWRfZmlsZV9jb250ZW50cyhjdHgsIG92ZXJyaWRl X2NvbmZpZ19maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29u ZmlnX3YsIGNvbmZpZ19sZW5fcik7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ1bmFibGUgdG8gcmVhZCBvdmVycmlkZGVuIGNvbmZpZyBmaWxlXG4iKTsK KyAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICAgICAgfQorICAgICAgICBwYXJz ZV9jb25maWdfZGF0YShvdmVycmlkZV9jb25maWdfZmlsZSwgY29uZmlnX3YsICpjb25maWdfbGVu X3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZkX2NvbmZpZyk7CisgICAgICAgIGZyZWUo Y29uZmlnX3YpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJjID0gbGlieGxfcmV0cmlldmVfZG9t YWluX2NvbmZpZ3VyYXRpb24oY3R4LCBkb21pZCwgJmRfY29uZmlnKTsKKyAgICAgICAgaWYgKHJj KSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVuYWJsZSB0byByZXRyaWV2ZSBkb21h aW4gY29uZmlndXJhdGlvblxuIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBjb25maWdfYyA9IGxpYnhsX2RvbWFpbl9jb25maWdfdG9f anNvbihjdHgsICZkX2NvbmZpZyk7CisgICAgaWYgKCFjb25maWdfYykgeworICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInVuYWJsZSB0byBjb252ZXJ0IGNvbmZpZyBmaWxlIHRvIEpTT05cbiIpOwor ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgICpjb25maWdfZGF0YV9yID0g KHVpbnQ4X3QgKiljb25maWdfYzsKKyAgICAqY29uZmlnX2xlbl9yID0gc3RybGVuKGNvbmZpZ19j KSArIDE7IC8qIGluY2x1ZGluZyB0cmFpbGluZyAnXDAnICovCisKKyAgICBsaWJ4bF9kb21haW5f Y29uZmlnX2Rpc3Bvc2UoJmRfY29uZmlnKTsKK30KKwordm9pZCBzYXZlX2RvbWFpbl9jb3JlX3dy aXRlY29uZmlnKGludCBmZCwgY29uc3QgY2hhciAqc291cmNlLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmNvbmZpZ19kYXRhLCBpbnQgY29uZmlnX2xl bikKK3sKKyAgICBzdHJ1Y3Qgc2F2ZV9maWxlX2hlYWRlciBoZHI7CisgICAgdWludDhfdCAqb3B0 ZGF0YV9iZWdpbjsKKyAgICB1bmlvbiB7IHVpbnQzMl90IHUzMjsgY2hhciBiWzRdOyB9IHUzMmJ1 ZjsKKworICAgIG1lbXNldCgmaGRyLCAwLCBzaXplb2YoaGRyKSk7CisgICAgbWVtY3B5KGhkci5t YWdpYywgc2F2ZWZpbGVoZWFkZXJfbWFnaWMsIHNpemVvZihoZHIubWFnaWMpKTsKKyAgICBoZHIu Ynl0ZW9yZGVyID0gU0FWRUZJTEVfQllURU9SREVSX1ZBTFVFOworICAgIGhkci5tYW5kYXRvcnlf ZmxhZ3MgPSBYTF9NQU5EQVRPUllfRkxBR19TVFJFQU12MjsKKworICAgIG9wdGRhdGFfYmVnaW49 IDA7CisKKyNkZWZpbmUgQUREX09QVERBVEEocHRyLCBsZW4pICh7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChsZW4pKSB7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGhk ci5vcHRpb25hbF9kYXRhX2xlbiArPSAobGVuKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgIG9wdGRhdGFfYmVnaW4gPSB4cmVhbGxvYyhvcHRkYXRhX2JlZ2luLCBo ZHIub3B0aW9uYWxfZGF0YV9sZW4pOyBcCisgICAgICAgIG1lbWNweShvcHRkYXRhX2JlZ2luICsg aGRyLm9wdGlvbmFsX2RhdGFfbGVuIC0gKGxlbiksICAgICAgICAgICBcCisgICAgICAgICAgICAg ICAocHRyKSwgKGxlbikpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIH0pCisKKyAg ICB1MzJidWYudTMyID0gY29uZmlnX2xlbjsKKyAgICBBRERfT1BUREFUQSh1MzJidWYuYiwgICAg NCk7CisgICAgQUREX09QVERBVEEoY29uZmlnX2RhdGEsIGNvbmZpZ19sZW4pOworICAgIGlmIChj b25maWdfbGVuKQorICAgICAgICBoZHIubWFuZGF0b3J5X2ZsYWdzIHw9IFhMX01BTkRBVE9SWV9G TEFHX0pTT047CisKKyAgICAvKiB0aGF0J3MgdGhlIG9wdGlvbmFsIGRhdGEgKi8KKworICAgIENI S19FUlJOT1ZBTChsaWJ4bF93cml0ZV9leGFjdGx5KAorICAgICAgICAgICAgICAgICAgICAgY3R4 LCBmZCwgJmhkciwgc2l6ZW9mKGhkciksIHNvdXJjZSwgImhlYWRlciIpKTsKKyAgICBDSEtfRVJS Tk9WQUwobGlieGxfd3JpdGVfZXhhY3RseSgKKyAgICAgICAgICAgICAgICAgICAgIGN0eCwgZmQs IG9wdGRhdGFfYmVnaW4sIGhkci5vcHRpb25hbF9kYXRhX2xlbiwKKyAgICAgICAgICAgICAgICAg ICAgIHNvdXJjZSwgImhlYWRlciIpKTsKKworICAgIGZyZWUob3B0ZGF0YV9iZWdpbik7CisKKyAg ICBmcHJpbnRmKHN0ZGVyciwgIlNhdmluZyB0byAlcyBuZXcgeGwgZm9ybWF0IChpbmZvIgorICAg ICAgICAgICAgIiAweCUiUFJJeDMyIi8weCUiUFJJeDMyIi8lIlBSSXUzMiIpXG4iLAorICAgICAg ICAgICAgc291cmNlLCBoZHIubWFuZGF0b3J5X2ZsYWdzLCBoZHIub3B0aW9uYWxfZmxhZ3MsCisg ICAgICAgICAgICBoZHIub3B0aW9uYWxfZGF0YV9sZW4pOworfQorCitzdGF0aWMgaW50IHNhdmVf ZG9tYWluKHVpbnQzMl90IGRvbWlkLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGNoZWNrcG9p bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlYXZlcGF1c2VkLCBjb25zdCBj aGFyICpvdmVycmlkZV9jb25maWdfZmlsZSkKK3sKKyAgICBpbnQgZmQ7CisgICAgdWludDhfdCAq Y29uZmlnX2RhdGE7CisgICAgaW50IGNvbmZpZ19sZW47CisKKyAgICBzYXZlX2RvbWFpbl9jb3Jl X2JlZ2luKGRvbWlkLCBvdmVycmlkZV9jb25maWdfZmlsZSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICZjb25maWdfZGF0YSwgJmNvbmZpZ19sZW4pOworCisgICAgaWYgKCFjb25maWdfbGVu KSB7CisgICAgICAgIGZwdXRzKCIgU2F2ZWZpbGUgd2lsbCBub3QgY29udGFpbiB4bCBkb21haW4g Y29uZmlnXG4iLCBzdGRlcnIpOworICAgIH0KKworICAgIGZkID0gb3BlbihmaWxlbmFtZSwgT19X Uk9OTFl8T19DUkVBVHxPX1RSVU5DLCAwNjQ0KTsKKyAgICBpZiAoZmQgPCAwKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIG9wZW4gdGVtcCBmaWxlICVzIGZvciB3cml0aW5n XG4iLCBmaWxlbmFtZSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAg ICBzYXZlX2RvbWFpbl9jb3JlX3dyaXRlY29uZmlnKGZkLCBmaWxlbmFtZSwgY29uZmlnX2RhdGEs IGNvbmZpZ19sZW4pOworCisgICAgaW50IHJjID0gbGlieGxfZG9tYWluX3N1c3BlbmQoY3R4LCBk b21pZCwgZmQsIDAsIE5VTEwpOworICAgIGNsb3NlKGZkKTsKKworICAgIGlmIChyYyA8IDApIHsK KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gc2F2ZSBkb21haW4sIHJlc3VtaW5n IGRvbWFpblxuIik7CisgICAgICAgIGxpYnhsX2RvbWFpbl9yZXN1bWUoY3R4LCBkb21pZCwgMSwg MCk7CisgICAgfQorICAgIGVsc2UgaWYgKGxlYXZlcGF1c2VkIHx8IGNoZWNrcG9pbnQpIHsKKyAg ICAgICAgaWYgKGxlYXZlcGF1c2VkKQorICAgICAgICAgICAgbGlieGxfZG9tYWluX3BhdXNlKGN0 eCwgZG9taWQpOworICAgICAgICBsaWJ4bF9kb21haW5fcmVzdW1lKGN0eCwgZG9taWQsIDEsIDAp OworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGxpYnhsX2RvbWFpbl9kZXN0cm95KGN0eCwgZG9t aWQsIDApOworCisgICAgZXhpdChyYyA8IDAgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1Mp OworfQorCitpbnQgbWFpbl9yZXN0b3JlKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBj b25zdCBjaGFyICpjaGVja3BvaW50X2ZpbGUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmNvbmZp Z19maWxlID0gTlVMTDsKKyAgICBzdHJ1Y3QgZG9tYWluX2NyZWF0ZSBkb21faW5mbzsKKyAgICBp bnQgcGF1c2VkID0gMCwgZGVidWcgPSAwLCBkYWVtb25pemUgPSAxLCBtb25pdG9yID0gMSwKKyAg ICAgICAgY29uc29sZV9hdXRvY29ubmVjdCA9IDAsIHZuYyA9IDAsIHZuY2F1dG9wYXNzID0gMDsK KyAgICBpbnQgb3B0LCByYzsKKyAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7Cisg ICAgICAgIHsidm5jdmlld2VyIiwgMCwgMCwgJ1YnfSwKKyAgICAgICAgeyJ2bmN2aWV3ZXItYXV0 b3Bhc3MiLCAwLCAwLCAnQSd9LAorICAgICAgICBDT01NT05fTE9OR19PUFRTCisgICAgfTsKKwor ICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICJGY3BkZVZBIiwgb3B0cywgInJlc3RvcmUiLCAx KSB7CisgICAgY2FzZSAnYyc6CisgICAgICAgIGNvbnNvbGVfYXV0b2Nvbm5lY3QgPSAxOworICAg ICAgICBicmVhazsKKyAgICBjYXNlICdwJzoKKyAgICAgICAgcGF1c2VkID0gMTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAnZCc6CisgICAgICAgIGRlYnVnID0gMTsKKyAgICAgICAgYnJlYWs7 CisgICAgY2FzZSAnRic6CisgICAgICAgIGRhZW1vbml6ZSA9IDA7CisgICAgICAgIGJyZWFrOwor ICAgIGNhc2UgJ2UnOgorICAgICAgICBkYWVtb25pemUgPSAwOworICAgICAgICBtb25pdG9yID0g MDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnVic6CisgICAgICAgIHZuYyA9IDE7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgJ0EnOgorICAgICAgICB2bmMgPSB2bmNhdXRvcGFzcyA9IDE7 CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChhcmdjLW9wdGluZCA9PSAxKSB7Cisg ICAgICAgIGNoZWNrcG9pbnRfZmlsZSA9IGFyZ3Zbb3B0aW5kXTsKKyAgICB9IGVsc2UgaWYgKGFy Z2Mtb3B0aW5kID09IDIpIHsKKyAgICAgICAgY29uZmlnX2ZpbGUgPSBhcmd2W29wdGluZF07Cisg ICAgICAgIGNoZWNrcG9pbnRfZmlsZSA9IGFyZ3Zbb3B0aW5kICsgMV07CisgICAgfSBlbHNlIHsK KyAgICAgICAgaGVscCgicmVzdG9yZSIpOworICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOwor ICAgIH0KKworICAgIG1lbXNldCgmZG9tX2luZm8sIDAsIHNpemVvZihkb21faW5mbykpOworICAg IGRvbV9pbmZvLmRlYnVnID0gZGVidWc7CisgICAgZG9tX2luZm8uZGFlbW9uaXplID0gZGFlbW9u aXplOworICAgIGRvbV9pbmZvLm1vbml0b3IgPSBtb25pdG9yOworICAgIGRvbV9pbmZvLnBhdXNl ZCA9IHBhdXNlZDsKKyAgICBkb21faW5mby5jb25maWdfZmlsZSA9IGNvbmZpZ19maWxlOworICAg IGRvbV9pbmZvLnJlc3RvcmVfZmlsZSA9IGNoZWNrcG9pbnRfZmlsZTsKKyAgICBkb21faW5mby5t aWdyYXRlX2ZkID0gLTE7CisgICAgZG9tX2luZm8uc2VuZF9iYWNrX2ZkID0gLTE7CisgICAgZG9t X2luZm8udm5jID0gdm5jOworICAgIGRvbV9pbmZvLnZuY2F1dG9wYXNzID0gdm5jYXV0b3Bhc3M7 CisgICAgZG9tX2luZm8uY29uc29sZV9hdXRvY29ubmVjdCA9IGNvbnNvbGVfYXV0b2Nvbm5lY3Q7 CisKKyAgICByYyA9IGNyZWF0ZV9kb21haW4oJmRvbV9pbmZvKTsKKyAgICBpZiAocmMgPCAwKQor ICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsK K30KKworaW50IG1haW5fc2F2ZShpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMy X3QgZG9taWQ7CisgICAgY29uc3QgY2hhciAqZmlsZW5hbWU7CisgICAgY29uc3QgY2hhciAqY29u ZmlnX2ZpbGVuYW1lID0gTlVMTDsKKyAgICBpbnQgY2hlY2twb2ludCA9IDA7CisgICAgaW50IGxl YXZlcGF1c2VkID0gMDsKKyAgICBpbnQgb3B0OworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9w dCwgImNwIiwgTlVMTCwgInNhdmUiLCAyKSB7CisgICAgY2FzZSAnYyc6CisgICAgICAgIGNoZWNr cG9pbnQgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdwJzoKKyAgICAgICAgbGVhdmVw YXVzZWQgPSAxOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoYXJnYy1vcHRpbmQg PiAzKSB7CisgICAgICAgIGhlbHAoInNhdmUiKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVS RTsKKyAgICB9CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAg IGZpbGVuYW1lID0gYXJndltvcHRpbmQgKyAxXTsKKyAgICBpZiAoIGFyZ2MgLSBvcHRpbmQgPj0g MyApCisgICAgICAgIGNvbmZpZ19maWxlbmFtZSA9IGFyZ3Zbb3B0aW5kICsgMl07CisKKyAgICBz YXZlX2RvbWFpbihkb21pZCwgZmlsZW5hbWUsIGNoZWNrcG9pbnQsIGxlYXZlcGF1c2VkLCBjb25m aWdfZmlsZW5hbWUpOworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9CisKKyNlbmRpZiAvKiBM SUJYTF9IQVZFX05PX1NVU1BFTkRfUkVTVU1FICovCisKKworCisvKgorICogTG9jYWwgdmFyaWFi bGVzOgorICogbW9kZTogQworICogYy1iYXNpYy1vZmZzZXQ6IDQKKyAqIGluZGVudC10YWJzLW1v ZGU6IG5pbAorICogRW5kOgorICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK