From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 28/29] xl: split out migration related code Date: Fri, 24 Feb 2017 16:13:13 +0000 Message-ID: <20170224161314.22154-29-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1chIY2-0006sN-ET for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:46 +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 SW5jbHVkZSBDT0xPIC8gUmVtdXMgY29kZSBiZWNhdXNlIHRoZXkgYXJlIGJ1aWx0IG9uIHRvcCBv ZiB0aGUgZXhpc3RpbmcKbWlncmF0aW9uIHByb3RvY29sLgoKU2lnbmVkLW9mZi1ieTogV2VpIExp dSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94bC9NYWtlZmlsZSAgICAgfCAgIDIg Ky0KIHRvb2xzL3hsL3hsX2NtZGltcGwuYyB8IDcxNSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogdG9vbHMveGwveGxfbWlncmF0ZS5jIHwgNzU0ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNo YW5nZWQsIDc1NSBpbnNlcnRpb25zKCspLCA3MTYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgdG9vbHMveGwveGxfbWlncmF0ZS5jCgpkaWZmIC0tZ2l0IGEvdG9vbHMveGwvTWFrZWZp bGUgYi90b29scy94bC9NYWtlZmlsZQppbmRleCA5OTgyYjkzNmM0Li44YzMwZmRjZjllIDEwMDY0 NAotLS0gYS90b29scy94bC9NYWtlZmlsZQorKysgYi90b29scy94bC9NYWtlZmlsZQpAQCAtMjAs NyArMjAsNyBAQCBYTF9PQkpTICs9IHhsX3RtZW0ubyB4bF9wYXJzZS5vIHhsX2NwdXBvb2wubyB4 bF9mbGFzay5vCiBYTF9PQkpTICs9IHhsX3Z0cG0ubyB4bF9ibG9jay5vIHhsX25pYy5vIHhsX3Vz Yi5vCiBYTF9PQkpTICs9IHhsX3NjaGVkLm8geGxfcGNpLm8geGxfdmNwdS5vIHhsX2NkLm8geGxf bWVtLm8KIFhMX09CSlMgKz0geGxfcHNyLm8geGxfaW5mby5vIHhsX2NvbnNvbGUubyB4bF9taXNj Lm8KLVhMX09CSlMgKz0geGxfdm1jb250cm9sLm8geGxfc2F2ZXJlc3RvcmUubworWExfT0JKUyAr PSB4bF92bWNvbnRyb2wubyB4bF9zYXZlcmVzdG9yZS5vIHhsX21pZ3JhdGUubwogCiAkKFhMX09C SlMpOiBDRkxBR1MgKz0gJChDRkxBR1NfbGlieGVudG9vbGxvZykKICQoWExfT0JKUyk6IENGTEFH UyArPSAkKENGTEFHU19YTCkKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYyBiL3Rv b2xzL3hsL3hsX2NtZGltcGwuYwppbmRleCBjNDFhZTMxODE0Li5iZDdmOGVkYjBhIDEwMDY0NAot LS0gYS90b29scy94bC94bF9jbWRpbXBsLmMKKysrIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCkBA IC05OCw3MjEgKzk4LDYgQEAgdm9pZCBoZWxwKGNvbnN0IGNoYXIgKmNvbW1hbmQpCiAgICAgfQog fQogCi0jaWZuZGVmIExJQlhMX0hBVkVfTk9fU1VTUEVORF9SRVNVTUUKLQotc3RhdGljIHBpZF90 IGNyZWF0ZV9taWdyYXRpb25fY2hpbGQoY29uc3QgY2hhciAqcnVuZSwgaW50ICpzZW5kX2ZkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcmVjdl9mZCkKLXsK LSAgICBpbnQgc2VuZHBpcGVbMl0sIHJlY3ZwaXBlWzJdOwotICAgIHBpZF90IGNoaWxkOwotCi0g ICAgaWYgKCFydW5lIHx8ICFzZW5kX2ZkIHx8ICFyZWN2X2ZkKQotICAgICAgICByZXR1cm4gLTE7 Ci0KLSAgICBNVVNUKCBsaWJ4bF9waXBlKGN0eCwgc2VuZHBpcGUpICk7Ci0gICAgTVVTVCggbGli eGxfcGlwZShjdHgsIHJlY3ZwaXBlKSApOwotCi0gICAgY2hpbGQgPSB4bF9mb3JrKGNoaWxkX21p Z3JhdGlvbiwgIm1pZ3JhdGlvbiB0cmFuc3BvcnQgcHJvY2VzcyIpOwotCi0gICAgaWYgKCFjaGls ZCkgewotICAgICAgICBkdXAyKHNlbmRwaXBlWzBdLCAwKTsKLSAgICAgICAgZHVwMihyZWN2cGlw ZVsxXSwgMSk7Ci0gICAgICAgIGNsb3NlKHNlbmRwaXBlWzBdKTsgY2xvc2Uoc2VuZHBpcGVbMV0p OwotICAgICAgICBjbG9zZShyZWN2cGlwZVswXSk7IGNsb3NlKHJlY3ZwaXBlWzFdKTsKLSAgICAg ICAgZXhlY2xwKCJzaCIsInNoIiwiLWMiLHJ1bmUsKGNoYXIqKTApOwotICAgICAgICBwZXJyb3Io ImZhaWxlZCB0byBleGVjIHNoIik7Ci0gICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9 Ci0KLSAgICBjbG9zZShzZW5kcGlwZVswXSk7Ci0gICAgY2xvc2UocmVjdnBpcGVbMV0pOwotICAg ICpzZW5kX2ZkID0gc2VuZHBpcGVbMV07Ci0gICAgKnJlY3ZfZmQgPSByZWN2cGlwZVswXTsKLQot ICAgIC8qIGlmIHJlY2VpdmVyIGRpZXMsIHdlIGdldCBhbiBlcnJvciBhbmQgY2FuIGNsZWFuIHVw Ci0gICAgICAgcmF0aGVyIHRoYW4ganVzdCBkeWluZyAqLwotICAgIHNpZ25hbChTSUdQSVBFLCBT SUdfSUdOKTsKLQotICAgIHJldHVybiBjaGlsZDsKLX0KLQotc3RhdGljIGludCBtaWdyYXRlX3Jl YWRfZml4ZWRtZXNzYWdlKGludCBmZCwgY29uc3Qgdm9pZCAqbXNnLCBpbnQgbXNnc3osCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqd2hhdCwgY29uc3Qg Y2hhciAqcnVuZSkgewotICAgIGNoYXIgYnVmW21zZ3N6XTsKLSAgICBjb25zdCBjaGFyICpzdHJl YW07Ci0gICAgaW50IHJjOwotCi0gICAgc3RyZWFtID0gcnVuZSA/ICJtaWdyYXRpb24gcmVjZWl2 ZXIgc3RyZWFtIiA6ICJtaWdyYXRpb24gc3RyZWFtIjsKLSAgICByYyA9IGxpYnhsX3JlYWRfZXhh Y3RseShjdHgsIGZkLCBidWYsIG1zZ3N6LCBzdHJlYW0sIHdoYXQpOwotICAgIGlmIChyYykgcmV0 dXJuIDE7Ci0KLSAgICBpZiAobWVtY21wKGJ1ZiwgbXNnLCBtc2dzeikpIHsKLSAgICAgICAgZnBy aW50ZihzdGRlcnIsICIlcyBjb250YWluZWQgdW5leHBlY3RlZCBkYXRhIGluc3RlYWQgb2YgJXNc biIsCi0gICAgICAgICAgICAgICAgc3RyZWFtLCB3aGF0KTsKLSAgICAgICAgaWYgKHJ1bmUpCi0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIihjb21tYW5kIHJ1biB3YXM6ICVzIClcbiIsIHJ1 bmUpOwotICAgICAgICByZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRp YyB2b2lkIG1pZ3JhdGlvbl9jaGlsZF9yZXBvcnQoaW50IHJlY3ZfZmQpIHsKLSAgICBwaWRfdCBj aGlsZDsKLSAgICBpbnQgc3RhdHVzLCBzcjsKLSAgICBzdHJ1Y3QgdGltZXZhbCBub3csIHdhaXR1 bnRpbCwgdGltZW91dDsKLSAgICBzdGF0aWMgY29uc3Qgc3RydWN0IHRpbWV2YWwgcG9sbGludGVy dmFsID0geyAwLCAxMDAwIH07IC8qIDFtcyAqLwotCi0gICAgaWYgKCF4bF9jaGlsZF9waWQoY2hp bGRfbWlncmF0aW9uKSkgcmV0dXJuOwotCi0gICAgQ0hLX1NZU0NBTEwoZ2V0dGltZW9mZGF5KCZ3 YWl0dW50aWwsIDApKTsKLSAgICB3YWl0dW50aWwudHZfc2VjICs9IDI7Ci0KLSAgICBmb3IgKDs7 KSB7Ci0gICAgICAgIHBpZF90IG1pZ3JhdGlvbl9jaGlsZCA9IHhsX2NoaWxkX3BpZChjaGlsZF9t aWdyYXRpb24pOwotICAgICAgICBjaGlsZCA9IHhsX3dhaXRwaWQoY2hpbGRfbWlncmF0aW9uLCAm c3RhdHVzLCBXTk9IQU5HKTsKLQotICAgICAgICBpZiAoY2hpbGQgPT0gbWlncmF0aW9uX2NoaWxk KSB7Ci0gICAgICAgICAgICBpZiAoc3RhdHVzKQotICAgICAgICAgICAgICAgIHhsX3JlcG9ydF9j aGlsZF9leGl0c3RhdHVzKFhUTF9JTkZPLCBjaGlsZF9taWdyYXRpb24sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWlncmF0aW9uX2NoaWxkLCBzdGF0dXMpOwot ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkID09IC0xKSB7 Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIndhaXQgZm9yIG1pZ3JhdGlvbiBjaGlsZCBb JWxkXSBmYWlsZWQ6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAobG9uZyltaWdyYXRpb25f Y2hpbGQsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot ICAgICAgICBhc3NlcnQoY2hpbGQgPT0gMCk7Ci0KLSAgICAgICAgQ0hLX1NZU0NBTEwoZ2V0dGlt ZW9mZGF5KCZub3csIDApKTsKLSAgICAgICAgaWYgKHRpbWVyY21wKCZub3csICZ3YWl0dW50aWws ID4pKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiBjaGlsZCBbJWxk XSBub3QgZXhpdGluZywgbm8gbG9uZ2VyIgotICAgICAgICAgICAgICAgICAgICAiIHdhaXRpbmcg KGV4aXQgc3RhdHVzIHdpbGwgYmUgdW5yZXBvcnRlZClcbiIsCi0gICAgICAgICAgICAgICAgICAg IChsb25nKW1pZ3JhdGlvbl9jaGlsZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot ICAgICAgICB0aW1lcnN1Yigmd2FpdHVudGlsLCAmbm93LCAmdGltZW91dCk7Ci0KLSAgICAgICAg aWYgKHJlY3ZfZmQgPj0gMCkgewotICAgICAgICAgICAgZmRfc2V0IHJlYWRmZHMsIGV4Y2VwdGZk czsKLSAgICAgICAgICAgIEZEX1pFUk8oJnJlYWRmZHMpOwotICAgICAgICAgICAgRkRfWkVSTygm ZXhjZXB0ZmRzKTsKLSAgICAgICAgICAgIEZEX1NFVChyZWN2X2ZkLCAmcmVhZGZkcyk7Ci0gICAg ICAgICAgICBGRF9TRVQocmVjdl9mZCwgJmV4Y2VwdGZkcyk7Ci0gICAgICAgICAgICBzciA9IHNl bGVjdChyZWN2X2ZkKzEsICZyZWFkZmRzLDAsJmV4Y2VwdGZkcywgJnRpbWVvdXQpOwotICAgICAg ICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKHRpbWVyY21wKCZ0aW1lb3V0LCAmcG9sbGludGVy dmFsLCA+KSkKLSAgICAgICAgICAgICAgICB0aW1lb3V0ID0gcG9sbGludGVydmFsOwotICAgICAg ICAgICAgc3IgPSBzZWxlY3QoMCwwLDAsMCwgJnRpbWVvdXQpOwotICAgICAgICB9Ci0gICAgICAg IGlmIChzciA+IDApIHsKLSAgICAgICAgICAgIHJlY3ZfZmQgPSAtMTsKLSAgICAgICAgfSBlbHNl IGlmIChzciA9PSAwKSB7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3IgPT0gLTEpIHsKLSAgICAgICAg ICAgIGlmIChlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJy LCAibWlncmF0aW9uIGNoaWxkIFslbGRdIGV4aXQgd2FpdCBzZWxlY3QiCi0gICAgICAgICAgICAg ICAgICAgICAgICAiIGZhaWxlZCB1bmV4cGVjdGVkbHk6ICVzXG4iLAotICAgICAgICAgICAgICAg ICAgICAgICAgKGxvbmcpbWlncmF0aW9uX2NoaWxkLCBzdHJlcnJvcihlcnJubykpOwotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi1z dGF0aWMgdm9pZCBtaWdyYXRlX2RvX3ByZWFtYmxlKGludCBzZW5kX2ZkLCBpbnQgcmVjdl9mZCwg cGlkX3QgY2hpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQ4X3QgKmNv bmZpZ19kYXRhLCBpbnQgY29uZmlnX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciAqcnVuZSkKLXsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAgaWYgKHNlbmRf ZmQgPCAwIHx8IHJlY3ZfZmQgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibWlncmF0 ZV9kb19wcmVhbWJsZTogaW52YWxpZCBmaWxlIGRlc2NyaXB0b3JzXG4iKTsKLSAgICAgICAgZXhp dChFWElUX0ZBSUxVUkUpOwotICAgIH0KLQotICAgIHJjID0gbWlncmF0ZV9yZWFkX2ZpeGVkbWVz c2FnZShyZWN2X2ZkLCBtaWdyYXRlX3JlY2VpdmVyX2Jhbm5lciwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pZ3JhdGVfcmVjZWl2ZXJfYmFubmVyKS0xLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYmFubmVyIiwgcnVuZSk7Ci0gICAgaWYg KHJjKSB7Ci0gICAgICAgIGNsb3NlKHNlbmRfZmQpOwotICAgICAgICBtaWdyYXRpb25fY2hpbGRf cmVwb3J0KHJlY3ZfZmQpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQotCi0g ICAgc2F2ZV9kb21haW5fY29yZV93cml0ZWNvbmZpZyhzZW5kX2ZkLCAibWlncmF0aW9uIHN0cmVh bSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfZGF0YSwgY29uZmln X2xlbik7Ci0KLX0KLQotc3RhdGljIHZvaWQgbWlncmF0ZV9kb21haW4odWludDMyX3QgZG9taWQs IGNvbnN0IGNoYXIgKnJ1bmUsIGludCBkZWJ1ZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKm92ZXJyaWRlX2NvbmZpZ19maWxlKQotewotICAgIHBpZF90IGNoaWxkID0g LTE7Ci0gICAgaW50IHJjOwotICAgIGludCBzZW5kX2ZkID0gLTEsIHJlY3ZfZmQgPSAtMTsKLSAg ICBjaGFyICphd2F5X2RvbW5hbWU7Ci0gICAgY2hhciByY19idWY7Ci0gICAgdWludDhfdCAqY29u ZmlnX2RhdGE7Ci0gICAgaW50IGNvbmZpZ19sZW4sIGZsYWdzID0gTElCWExfU1VTUEVORF9MSVZF OwotCi0gICAgc2F2ZV9kb21haW5fY29yZV9iZWdpbihkb21pZCwgb3ZlcnJpZGVfY29uZmlnX2Zp bGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAmY29uZmlnX2RhdGEsICZjb25maWdfbGVu KTsKLQotICAgIGlmICghY29uZmlnX2xlbikgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5v IGNvbmZpZyBmaWxlIHN0b3JlZCBmb3IgcnVubmluZyBkb21haW4gYW5kICIKLSAgICAgICAgICAg ICAgICAibm9uZSBzdXBwbGllZCAtIGNhbm5vdCBtaWdyYXRlLlxuIik7Ci0gICAgICAgIGV4aXQo RVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBjaGlsZCA9IGNyZWF0ZV9taWdyYXRpb25fY2hp bGQocnVuZSwgJnNlbmRfZmQsICZyZWN2X2ZkKTsKLQotICAgIG1pZ3JhdGVfZG9fcHJlYW1ibGUo c2VuZF9mZCwgcmVjdl9mZCwgY2hpbGQsIGNvbmZpZ19kYXRhLCBjb25maWdfbGVuLAotICAgICAg ICAgICAgICAgICAgICAgICAgcnVuZSk7Ci0KLSAgICB4dGxfc3RkaW9zdHJlYW1fYWRqdXN0X2Zs YWdzKGxvZ2dlciwgWFRMX1NURElPU1RSRUFNX0hJREVfUFJPR1JFU1MsIDApOwotCi0gICAgaWYg KGRlYnVnKQotICAgICAgICBmbGFncyB8PSBMSUJYTF9TVVNQRU5EX0RFQlVHOwotICAgIHJjID0g bGlieGxfZG9tYWluX3N1c3BlbmQoY3R4LCBkb21pZCwgc2VuZF9mZCwgZmxhZ3MsIE5VTEwpOwot ICAgIGlmIChyYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiBzZW5kZXI6 IGxpYnhsX2RvbWFpbl9zdXNwZW5kIGZhaWxlZCIKLSAgICAgICAgICAgICAgICAiIChyYz0lZClc biIsIHJjKTsKLSAgICAgICAgaWYgKHJjID09IEVSUk9SX0dVRVNUX1RJTUVET1VUKQotICAgICAg ICAgICAgZ290byBmYWlsZWRfc3VzcGVuZDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZ290 byBmYWlsZWRfcmVzdW1lOwotICAgIH0KLQotICAgIC8vZnByaW50ZihzdGRlcnIsICJtaWdyYXRp b24gc2VuZGVyOiBUcmFuc2ZlciBjb21wbGV0ZS5cbiIpOwotICAgIC8vIFNob3VsZCBvbmx5IGJl IHByaW50ZWQgd2hlbiBkZWJ1Z2dpbmcgYXMgaXQncyBhIGJpdCBtZXNzeSB3aXRoCi0gICAgLy8g cHJvZ3Jlc3MgaW5kaWNhdGlvbi4KLQotICAgIHJjID0gbWlncmF0ZV9yZWFkX2ZpeGVkbWVzc2Fn ZShyZWN2X2ZkLCBtaWdyYXRlX3JlY2VpdmVyX3JlYWR5LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2YobWlncmF0ZV9yZWNlaXZlcl9yZWFkeSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJyZWFkeSBtZXNzYWdlIiwgcnVuZSk7Ci0gICAgaWYg KHJjKSBnb3RvIGZhaWxlZF9yZXN1bWU7Ci0KLSAgICB4dGxfc3RkaW9zdHJlYW1fYWRqdXN0X2Zs YWdzKGxvZ2dlciwgMCwgWFRMX1NURElPU1RSRUFNX0hJREVfUFJPR1JFU1MpOwotCi0gICAgLyog cmlnaHQsIGF0IHRoaXMgcG9pbnQgd2UgYXJlIGFib3V0IGdpdmUgdGhlIGRlc3RpbmF0aW9uCi0g ICAgICogcGVybWlzc2lvbiB0byByZW5hbWUgYW5kIHJlc3VtZSwgc28gd2UgbXVzdCBmaXJzdCBy ZW5hbWUgdGhlCi0gICAgICogZG9tYWluIGF3YXkgb3Vyc2VsdmVzICovCi0KLSAgICBmcHJpbnRm KHN0ZGVyciwgIm1pZ3JhdGlvbiBzZW5kZXI6IFRhcmdldCBoYXMgYWNrbm93bGVkZ2VkIHRyYW5z ZmVyLlxuIik7Ci0KLSAgICBpZiAoY29tbW9uX2RvbW5hbWUpIHsKLSAgICAgICAgeGFzcHJpbnRm KCZhd2F5X2RvbW5hbWUsICIlcy0tbWlncmF0ZWRhd2F5IiwgY29tbW9uX2RvbW5hbWUpOwotICAg ICAgICByYyA9IGxpYnhsX2RvbWFpbl9yZW5hbWUoY3R4LCBkb21pZCwgY29tbW9uX2RvbW5hbWUs IGF3YXlfZG9tbmFtZSk7Ci0gICAgICAgIGlmIChyYykgZ290byBmYWlsZWRfcmVzdW1lOwotICAg IH0KLQotICAgIC8qIHBvaW50IG9mIG5vIHJldHVybiAtIGFzIHNvb24gYXMgd2UgaGF2ZSB0cmll ZCB0byBzYXkKLSAgICAgKiAiZ28iIHRvIHRoZSByZWNlaXZlciwgaXQncyBub3Qgc2FmZSB0byBj YXJyeSBvbi4gIFdlIGxlYXZlCi0gICAgICogdGhlIGRvbWFpbiByZW5hbWVkIHRvICVzLS1taWdy YXRlZGF3YXkgaW4gY2FzZSB0aGF0J3MgaGVscGZ1bC4KLSAgICAgKi8KLQotICAgIGZwcmludGYo c3RkZXJyLCAibWlncmF0aW9uIHNlbmRlcjogR2l2aW5nIHRhcmdldCBwZXJtaXNzaW9uIHRvIHN0 YXJ0LlxuIik7Ci0KLSAgICByYyA9IGxpYnhsX3dyaXRlX2V4YWN0bHkoY3R4LCBzZW5kX2ZkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWdyYXRlX3Blcm1pc3Npb25fdG9fZ28sCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWdyYXRlX3Blcm1pc3Npb25fdG9f Z28pLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlncmF0aW9uIHN0cmVhbSIsICJH TyBtZXNzYWdlIik7Ci0gICAgaWYgKHJjKSBnb3RvIGZhaWxlZF9iYWRseTsKLQotICAgIHJjID0g bWlncmF0ZV9yZWFkX2ZpeGVkbWVzc2FnZShyZWN2X2ZkLCBtaWdyYXRlX3JlcG9ydCwKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pZ3JhdGVfcmVwb3J0KSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MvZmFpbHVyZSByZXBvcnQg bWVzc2FnZSIsIHJ1bmUpOwotICAgIGlmIChyYykgZ290byBmYWlsZWRfYmFkbHk7Ci0KLSAgICBy YyA9IGxpYnhsX3JlYWRfZXhhY3RseShjdHgsIHJlY3ZfZmQsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnJjX2J1ZiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlncmF0 aW9uIGFjayBzdHJlYW0iLCAic3VjY2Vzcy9mYWlsdXJlIHN0YXR1cyIpOwotICAgIGlmIChyYykg Z290byBmYWlsZWRfYmFkbHk7Ci0KLSAgICBpZiAocmNfYnVmKSB7Ci0gICAgICAgIGZwcmludGYo c3RkZXJyLCAibWlncmF0aW9uIHNlbmRlcjogVGFyZ2V0IHJlcG9ydHMgc3RhcnR1cCBmYWlsdXJl IgotICAgICAgICAgICAgICAgICIgKHN0YXR1cyBjb2RlICVkKS5cbiIsIHJjX2J1Zik7Ci0KLSAg ICAgICAgcmMgPSBtaWdyYXRlX3JlYWRfZml4ZWRtZXNzYWdlKHJlY3ZfZmQsIG1pZ3JhdGVfcGVy bWlzc2lvbl90b19nbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNp emVvZihtaWdyYXRlX3Blcm1pc3Npb25fdG9fZ28pLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgInBlcm1pc3Npb24gZm9yIHNlbmRlciB0byByZXN1bWUiLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVuZSk7Ci0gICAgICAgIGlmIChyYykg Z290byBmYWlsZWRfYmFkbHk7Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24g c2VuZGVyOiBUcnlpbmcgdG8gcmVzdW1lIGF0IG91ciBlbmQuXG4iKTsKLQotICAgICAgICBpZiAo Y29tbW9uX2RvbW5hbWUpIHsKLSAgICAgICAgICAgIGxpYnhsX2RvbWFpbl9yZW5hbWUoY3R4LCBk b21pZCwgYXdheV9kb21uYW1lLCBjb21tb25fZG9tbmFtZSk7Ci0gICAgICAgIH0KLSAgICAgICAg cmMgPSBsaWJ4bF9kb21haW5fcmVzdW1lKGN0eCwgZG9taWQsIDEsIDApOwotICAgICAgICBpZiAo IXJjKSBmcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiBzZW5kZXI6IFJlc3VtZWQgT0suXG4iKTsK LQotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk1pZ3JhdGlvbiBmYWlsZWQgZHVlIHRvIHByb2Js ZW1zIGF0IHRhcmdldC5cbiIpOwotICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7Ci0gICAgfQot Ci0gICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gc2VuZGVyOiBUYXJnZXQgcmVwb3J0cyBz dWNjZXNzZnVsIHN0YXJ0dXAuXG4iKTsKLSAgICBsaWJ4bF9kb21haW5fZGVzdHJveShjdHgsIGRv bWlkLCAwKTsgLyogYmFuZyEgKi8KLSAgICBmcHJpbnRmKHN0ZGVyciwgIk1pZ3JhdGlvbiBzdWNj ZXNzZnVsLlxuIik7Ci0gICAgZXhpdChFWElUX1NVQ0NFU1MpOwotCi0gZmFpbGVkX3N1c3BlbmQ6 Ci0gICAgY2xvc2Uoc2VuZF9mZCk7Ci0gICAgbWlncmF0aW9uX2NoaWxkX3JlcG9ydChyZWN2X2Zk KTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk1pZ3JhdGlvbiBmYWlsZWQsIGZhaWxlZCB0byBzdXNw ZW5kIGF0IHNlbmRlci5cbiIpOwotICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLQotIGZhaWxlZF9y ZXN1bWU6Ci0gICAgY2xvc2Uoc2VuZF9mZCk7Ci0gICAgbWlncmF0aW9uX2NoaWxkX3JlcG9ydChy ZWN2X2ZkKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIk1pZ3JhdGlvbiBmYWlsZWQsIHJlc3VtaW5n IGF0IHNlbmRlci5cbiIpOwotICAgIGxpYnhsX2RvbWFpbl9yZXN1bWUoY3R4LCBkb21pZCwgMSwg MCk7Ci0gICAgZXhpdChFWElUX0ZBSUxVUkUpOwotCi0gZmFpbGVkX2JhZGx5OgotICAgIGZwcmlu dGYoc3RkZXJyLAotICIqKiBNaWdyYXRpb24gZmFpbGVkIGR1cmluZyBmaW5hbCBoYW5kc2hha2Ug KipcbiIKLSAiRG9tYWluIHN0YXRlIGlzIG5vdyB1bmRlZmluZWQgIVxuIgotICJQbGVhc2UgQ0hF Q0sgQVQgQk9USCBFTkRTIGZvciBydW5uaW5nIGluc3RhbmNlcywgYmVmb3JlIHJlbmFtaW5nIGFu ZFxuIgotICIgcmVzdW1pbmcgYXQgbW9zdCBvbmUgaW5zdGFuY2UuICBUd28gc2ltdWx0YW5lb3Vz IGluc3RhbmNlcyBvZiB0aGUgZG9tYWluXG4iCi0gIiB3b3VsZCBwcm9iYWJseSByZXN1bHQgaW4g U0VWRVJFIERBVEEgTE9TUyBhbmQgaXQgaXMgbm93IHlvdXJcbiIKLSAiIHJlc3BvbnNpYmlsaXR5 IHRvIGF2b2lkIHRoYXQuICBTb3JyeS5cbiIpOwotCi0gICAgY2xvc2Uoc2VuZF9mZCk7Ci0gICAg bWlncmF0aW9uX2NoaWxkX3JlcG9ydChyZWN2X2ZkKTsKLSAgICBleGl0KEVYSVRfRkFJTFVSRSk7 Ci19Ci0KLXN0YXRpYyB2b2lkIG1pZ3JhdGVfcmVjZWl2ZShpbnQgZGVidWcsIGludCBkYWVtb25p emUsIGludCBtb25pdG9yLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwYXVzZV9h ZnRlcl9taWdyYXRpb24sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHNlbmRfZmQs IGludCByZWN2X2ZkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnhsX2NoZWNrcG9p bnRlZF9zdHJlYW0gY2hlY2twb2ludGVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo YXIgKmNvbG9fcHJveHlfc2NyaXB0KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGludCBy YywgcmMyOwotICAgIGNoYXIgcmNfYnVmOwotICAgIGNoYXIgKm1pZ3JhdGlvbl9kb21uYW1lOwot ICAgIHN0cnVjdCBkb21haW5fY3JlYXRlIGRvbV9pbmZvOwotCi0gICAgc2lnbmFsKFNJR1BJUEUs IFNJR19JR04pOwotICAgIC8qIGlmIHdlIGdldCBTSUdQSVBFIHdlJ2QgcmF0aGVyIGp1c3QgaGF2 ZSBpdCBhcyBhbiBlcnJvciAqLwotCi0gICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFy Z2V0OiBSZWFkeSB0byByZWNlaXZlIGRvbWFpbi5cbiIpOwotCi0gICAgQ0hLX0VSUk5PVkFMKGxp YnhsX3dyaXRlX2V4YWN0bHkoCi0gICAgICAgICAgICAgICAgICAgICBjdHgsIHNlbmRfZmQsIG1p Z3JhdGVfcmVjZWl2ZXJfYmFubmVyLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pZ3Jh dGVfcmVjZWl2ZXJfYmFubmVyKS0xLAotICAgICAgICAgICAgICAgICAgICAgIm1pZ3JhdGlvbiBh Y2sgc3RyZWFtIiwgImJhbm5lciIpICk7Ci0KLSAgICBtZW1zZXQoJmRvbV9pbmZvLCAwLCBzaXpl b2YoZG9tX2luZm8pKTsKLSAgICBkb21faW5mby5kZWJ1ZyA9IGRlYnVnOwotICAgIGRvbV9pbmZv LmRhZW1vbml6ZSA9IGRhZW1vbml6ZTsKLSAgICBkb21faW5mby5tb25pdG9yID0gbW9uaXRvcjsK LSAgICBkb21faW5mby5wYXVzZWQgPSAxOwotICAgIGRvbV9pbmZvLm1pZ3JhdGVfZmQgPSByZWN2 X2ZkOwotICAgIGRvbV9pbmZvLnNlbmRfYmFja19mZCA9IHNlbmRfZmQ7Ci0gICAgZG9tX2luZm8u bWlncmF0aW9uX2RvbW5hbWVfciA9ICZtaWdyYXRpb25fZG9tbmFtZTsKLSAgICBkb21faW5mby5j aGVja3BvaW50ZWRfc3RyZWFtID0gY2hlY2twb2ludGVkOwotICAgIGRvbV9pbmZvLmNvbG9fcHJv eHlfc2NyaXB0ID0gY29sb19wcm94eV9zY3JpcHQ7Ci0KLSAgICByYyA9IGNyZWF0ZV9kb21haW4o JmRvbV9pbmZvKTsKLSAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAi bWlncmF0aW9uIHRhcmdldDogRG9tYWluIGNyZWF0aW9uIGZhaWxlZCIKLSAgICAgICAgICAgICAg ICAiIChjb2RlICVkKS5cbiIsIHJjKTsKLSAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAg IH0KLQotICAgIGRvbWlkID0gcmM7Ci0KLSAgICBzd2l0Y2ggKGNoZWNrcG9pbnRlZCkgewotICAg IGNhc2UgTElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9SRU1VUzoKLSAgICBjYXNlIExJQlhMX0NI RUNLUE9JTlRFRF9TVFJFQU1fQ09MTzoKLSAgICB7Ci0gICAgICAgIGNvbnN0IGNoYXIgKmhhID0g Y2hlY2twb2ludGVkID09IExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fQ09MTyA/Ci0gICAgICAg ICAgICAgICAgICAgICAgICAgIkNPTE8iIDogIlJlbXVzIjsKLSAgICAgICAgLyogSWYgd2UgYXJl IGhlcmUsIGl0IG1lYW5zIHRoYXQgdGhlIHNlbmRlciAocHJpbWFyeSkgaGFzIGNyYXNoZWQuCi0g ICAgICAgICAqIFRPRE86IFNwbGl0LUJyYWluIENoZWNrLgotICAgICAgICAgKi8KLSAgICAgICAg ZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0OiAlcyBGYWlsb3ZlciBmb3IgZG9tYWlu ICV1XG4iLAotICAgICAgICAgICAgICAgIGhhLCBkb21pZCk7Ci0KLSAgICAgICAgLyoKLSAgICAg ICAgICogSWYgZG9tYWluIHJlbmFtaW5nIGZhaWxzLCBsZXRzIGp1c3QgY29udGludWUgKGFzIHdl IG5lZWQgdGhlIGRvbWFpbgotICAgICAgICAgKiB0byBiZSB1cCAmIGRvbSBuYW1lcyBtYXkgbm90 IG1hdHRlciBtdWNoLCBhcyBsb25nIGFzIGl0cyByZWFjaGFibGUKLSAgICAgICAgICogb3ZlciBu ZXR3b3JrKS4KLSAgICAgICAgICoKLSAgICAgICAgICogSWYgZG9tYWluIHVucGF1c2luZyBmYWls cywgZGVzdHJveSBkb21haW4gPyBPciBpcyBpdCBiZXR0ZXIgdG8gaGF2ZQotICAgICAgICAgKiBh IGNvbnNpc3RlbnQgY29weSBvZiB0aGUgZG9tYWluIChtZW1vcnksIGNwdSBzdGF0ZSwgZGlzaykK LSAgICAgICAgICogb24gYXRsZWFzdCBvbmUgcGh5c2ljYWwgaG9zdCA/IFJpZ2h0IG5vdywgbGV0 cyBqdXN0IGxlYXZlIHRoZSBkb21haW4KLSAgICAgICAgICogYXMgaXMgYW5kIGxldCB0aGUgQWRt aW5pc3RyYXRvciBkZWNpZGUgKG9yIHRyb3VibGVzaG9vdCkuCi0gICAgICAgICAqLwotICAgICAg ICBpZiAobWlncmF0aW9uX2RvbW5hbWUpIHsKLSAgICAgICAgICAgIHJjID0gbGlieGxfZG9tYWlu X3JlbmFtZShjdHgsIGRvbWlkLCBtaWdyYXRpb25fZG9tbmFtZSwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb21tb25fZG9tbmFtZSk7Ci0gICAgICAgICAgICBpZiAocmMp Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0ICglcyk6 ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVuYW1lIGRvbWFpbiBmcm9t ICVzIHRvICVzOiVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaGEsIG1pZ3JhdGlvbl9k b21uYW1lLCBjb21tb25fZG9tbmFtZSwgcmMpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGNo ZWNrcG9pbnRlZCA9PSBMSUJYTF9DSEVDS1BPSU5URURfU1RSRUFNX0NPTE8pCi0gICAgICAgICAg ICAvKiBUaGUgZ3Vlc3QgaXMgcnVubmluZyBhZnRlciBmYWlsb3ZlciBpbiBDT0xPIG1vZGUgKi8K LSAgICAgICAgICAgIGV4aXQocmMgPyAtRVJST1JfRkFJTDogMCk7Ci0KLSAgICAgICAgcmMgPSBs aWJ4bF9kb21haW5fdW5wYXVzZShjdHgsIGRvbWlkKTsKLSAgICAgICAgaWYgKHJjKQotICAgICAg ICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0ICglcyk6ICIKLSAgICAgICAg ICAgICAgICAgICAgIkZhaWxlZCB0byB1bnBhdXNlIGRvbWFpbiAlcyAoaWQ6ICV1KTolZFxuIiwK LSAgICAgICAgICAgICAgICAgICAgaGEsIGNvbW1vbl9kb21uYW1lLCBkb21pZCwgcmMpOwotCi0g ICAgICAgIGV4aXQocmMgPyBFWElUX0ZBSUxVUkUgOiBFWElUX1NVQ0NFU1MpOwotICAgIH0KLSAg ICBkZWZhdWx0OgotICAgICAgICAvKiBkbyBub3RoaW5nICovCi0gICAgICAgIGJyZWFrOwotICAg IH0KLQotICAgIGZwcmludGYoc3RkZXJyLCAibWlncmF0aW9uIHRhcmdldDogVHJhbnNmZXIgY29t cGxldGUsIgotICAgICAgICAgICAgIiByZXF1ZXN0aW5nIHBlcm1pc3Npb24gdG8gc3RhcnQgZG9t YWluLlxuIik7Ci0KLSAgICByYyA9IGxpYnhsX3dyaXRlX2V4YWN0bHkoY3R4LCBzZW5kX2ZkLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWdyYXRlX3JlY2VpdmVyX3JlYWR5LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWlncmF0ZV9yZWNlaXZlcl9yZWFkeSks Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWdyYXRpb24gYWNrIHN0cmVhbSIsICJy ZWFkeSBtZXNzYWdlIik7Ci0gICAgaWYgKHJjKSBleGl0KEVYSVRfRkFJTFVSRSk7Ci0KLSAgICBy YyA9IG1pZ3JhdGVfcmVhZF9maXhlZG1lc3NhZ2UocmVjdl9mZCwgbWlncmF0ZV9wZXJtaXNzaW9u X3RvX2dvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWlncmF0 ZV9wZXJtaXNzaW9uX3RvX2dvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IkdPIG1lc3NhZ2UiLCAwKTsKLSAgICBpZiAocmMpIGdvdG8gcGVyaGFwc19kZXN0cm95X25vdGlm eV9yYzsKLQotICAgIGZwcmludGYoc3RkZXJyLCAibWlncmF0aW9uIHRhcmdldDogR290IHBlcm1p c3Npb24sIHN0YXJ0aW5nIGRvbWFpbi5cbiIpOwotCi0gICAgaWYgKG1pZ3JhdGlvbl9kb21uYW1l KSB7Ci0gICAgICAgIHJjID0gbGlieGxfZG9tYWluX3JlbmFtZShjdHgsIGRvbWlkLCBtaWdyYXRp b25fZG9tbmFtZSwgY29tbW9uX2RvbW5hbWUpOwotICAgICAgICBpZiAocmMpIGdvdG8gcGVyaGFw c19kZXN0cm95X25vdGlmeV9yYzsKLSAgICB9Ci0KLSAgICBpZiAoIXBhdXNlX2FmdGVyX21pZ3Jh dGlvbikgewotICAgICAgICByYyA9IGxpYnhsX2RvbWFpbl91bnBhdXNlKGN0eCwgZG9taWQpOwot ICAgICAgICBpZiAocmMpIGdvdG8gcGVyaGFwc19kZXN0cm95X25vdGlmeV9yYzsKLSAgICB9Ci0K LSAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiB0YXJnZXQ6IERvbWFpbiBzdGFydGVkIHN1 Y2Nlc3NzZnVsbHkuXG4iKTsKLSAgICByYyA9IDA7Ci0KLSBwZXJoYXBzX2Rlc3Ryb3lfbm90aWZ5 X3JjOgotICAgIHJjMiA9IGxpYnhsX3dyaXRlX2V4YWN0bHkoY3R4LCBzZW5kX2ZkLAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbWlncmF0ZV9yZXBvcnQsIHNpemVvZihtaWdyYXRlX3Jl cG9ydCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlncmF0aW9uIGFjayBzdHJl YW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MvZmFpbHVyZSByZXBv cnQiKTsKLSAgICBpZiAocmMyKSBleGl0KEVYSVRfRkFJTFVSRSk7Ci0KLSAgICByY19idWYgPSAt cmM7Ci0gICAgYXNzZXJ0KCEhcmNfYnVmID09ICEhcmMpOwotICAgIHJjMiA9IGxpYnhsX3dyaXRl X2V4YWN0bHkoY3R4LCBzZW5kX2ZkLCAmcmNfYnVmLCAxLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIm1pZ3JhdGlvbiBhY2sgc3RyZWFtIiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJzdWNjZXNzL2ZhaWx1cmUgY29kZSIpOwotICAgIGlmIChyYzIpIGV4aXQoRVhJVF9G QUlMVVJFKTsKLQotICAgIGlmIChyYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3Jh dGlvbiB0YXJnZXQ6IEZhaWx1cmUsIGRlc3Ryb3lpbmcgb3VyIGNvcHkuXG4iKTsKLQotICAgICAg ICByYzIgPSBsaWJ4bF9kb21haW5fZGVzdHJveShjdHgsIGRvbWlkLCAwKTsKLSAgICAgICAgaWYg KHJjMikgewotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0OiBG YWlsZWQgdG8gZGVzdHJveSBvdXIgY29weSIKLSAgICAgICAgICAgICAgICAgICAgIiAoY29kZSAl ZCkuXG4iLCByYzIpOwotICAgICAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwotICAgICAgICB9 Ci0KLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0OiBDbGVhbnVwIE9L LCBncmFudGluZyBzZW5kZXIiCi0gICAgICAgICAgICAgICAgIiBwZXJtaXNzaW9uIHRvIHJlc3Vt ZS5cbiIpOwotCi0gICAgICAgIHJjMiA9IGxpYnhsX3dyaXRlX2V4YWN0bHkoY3R4LCBzZW5kX2Zk LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pZ3JhdGVfcGVybWlzc2lvbl90 b19nbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWlncmF0ZV9w ZXJtaXNzaW9uX3RvX2dvKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWln cmF0aW9uIGFjayBzdHJlYW0iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJw ZXJtaXNzaW9uIHRvIHNlbmRlciB0byBoYXZlIGRvbWFpbiBiYWNrIik7Ci0gICAgICAgIGlmIChy YzIpIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICB9Ci0KLSAgICBleGl0KEVYSVRfU1VDQ0VTUyk7 Ci19Ci0KLQotaW50IG1haW5fbWlncmF0ZV9yZWNlaXZlKGludCBhcmdjLCBjaGFyICoqYXJndikK LXsKLSAgICBpbnQgZGVidWcgPSAwLCBkYWVtb25pemUgPSAxLCBtb25pdG9yID0gMSwgcGF1c2Vf YWZ0ZXJfbWlncmF0aW9uID0gMDsKLSAgICBsaWJ4bF9jaGVja3BvaW50ZWRfc3RyZWFtIGNoZWNr cG9pbnRlZCA9IExJQlhMX0NIRUNLUE9JTlRFRF9TVFJFQU1fTk9ORTsKLSAgICBpbnQgb3B0Owot ICAgIGNoYXIgKnNjcmlwdCA9IE5VTEw7Ci0gICAgc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0c1td ID0gewotICAgICAgICB7ImNvbG8iLCAwLCAwLCAweDEwMH0sCi0gICAgICAgIC8qIEl0IGlzIGEg c2hhbWUgdGhhdCB0aGUgbWFuYWdlbWVudCBjb2RlIGZvciBkaXNrIGlzIG5vdCBoZXJlLiAqLwot ICAgICAgICB7ImNvbG9mdC1zY3JpcHQiLCAxLCAwLCAweDIwMH0sCi0gICAgICAgIENPTU1PTl9M T05HX09QVFMKLSAgICB9OwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIkZlZHJwIiwg b3B0cywgIm1pZ3JhdGUtcmVjZWl2ZSIsIDApIHsKLSAgICBjYXNlICdGJzoKLSAgICAgICAgZGFl bW9uaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnZSc6Ci0gICAgICAgIGRhZW1v bml6ZSA9IDA7Ci0gICAgICAgIG1vbml0b3IgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNl ICdkJzoKLSAgICAgICAgZGVidWcgPSAxOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdyJzoK LSAgICAgICAgY2hlY2twb2ludGVkID0gTElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9SRU1VUzsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDEwMDoKLSAgICAgICAgY2hlY2twb2ludGVkID0g TElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9DT0xPOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IDB4MjAwOgotICAgICAgICBzY3JpcHQgPSBvcHRhcmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNh c2UgJ3AnOgotICAgICAgICBwYXVzZV9hZnRlcl9taWdyYXRpb24gPSAxOwotICAgICAgICBicmVh azsKLSAgICB9Ci0KLSAgICBpZiAoYXJnYy1vcHRpbmQgIT0gMCkgewotICAgICAgICBoZWxwKCJt aWdyYXRlLXJlY2VpdmUiKTsKLSAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKLSAgICB9Ci0g ICAgbWlncmF0ZV9yZWNlaXZlKGRlYnVnLCBkYWVtb25pemUsIG1vbml0b3IsIHBhdXNlX2FmdGVy X21pZ3JhdGlvbiwKLSAgICAgICAgICAgICAgICAgICAgU1RET1VUX0ZJTEVOTywgU1RESU5fRklM RU5PLAotICAgICAgICAgICAgICAgICAgICBjaGVja3BvaW50ZWQsIHNjcmlwdCk7Ci0KLSAgICBy ZXR1cm4gRVhJVF9TVUNDRVNTOwotfQotCi1pbnQgbWFpbl9taWdyYXRlKGludCBhcmdjLCBjaGFy ICoqYXJndikKLXsKLSAgICB1aW50MzJfdCBkb21pZDsKLSAgICBjb25zdCBjaGFyICpjb25maWdf ZmlsZW5hbWUgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgKnNzaF9jb21tYW5kID0gInNzaCI7Ci0g ICAgY2hhciAqcnVuZSA9IE5VTEw7Ci0gICAgY2hhciAqaG9zdDsKLSAgICBpbnQgb3B0LCBkYWVt b25pemUgPSAxLCBtb25pdG9yID0gMSwgZGVidWcgPSAwLCBwYXVzZV9hZnRlcl9taWdyYXRpb24g PSAwOwotICAgIHN0YXRpYyBzdHJ1Y3Qgb3B0aW9uIG9wdHNbXSA9IHsKLSAgICAgICAgeyJkZWJ1 ZyIsIDAsIDAsIDB4MTAwfSwKLSAgICAgICAgeyJsaXZlIiwgMCwgMCwgMHgyMDB9LAotICAgICAg ICBDT01NT05fTE9OR19PUFRTCi0gICAgfTsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQs ICJGQzpzOmVwIiwgb3B0cywgIm1pZ3JhdGUiLCAyKSB7Ci0gICAgY2FzZSAnQyc6Ci0gICAgICAg IGNvbmZpZ19maWxlbmFtZSA9IG9wdGFyZzsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAncyc6 Ci0gICAgICAgIHNzaF9jb21tYW5kID0gb3B0YXJnOwotICAgICAgICBicmVhazsKLSAgICBjYXNl ICdGJzoKLSAgICAgICAgZGFlbW9uaXplID0gMDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAn ZSc6Ci0gICAgICAgIGRhZW1vbml6ZSA9IDA7Ci0gICAgICAgIG1vbml0b3IgPSAwOwotICAgICAg ICBicmVhazsKLSAgICBjYXNlICdwJzoKLSAgICAgICAgcGF1c2VfYWZ0ZXJfbWlncmF0aW9uID0g MTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAweDEwMDogLyogLS1kZWJ1ZyAqLwotICAgICAg ICBkZWJ1ZyA9IDE7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgMHgyMDA6IC8qIC0tbGl2ZSAq LwotICAgICAgICAvKiBpZ25vcmVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggeG0gKi8KLSAgICAg ICAgYnJlYWs7Ci0gICAgfQotCi0gICAgZG9taWQgPSB4ZmluZF9kb21haW4oYXJndltvcHRpbmRd KTsKLSAgICBob3N0ID0gYXJndltvcHRpbmQgKyAxXTsKLQotICAgIGJvb2wgcGFzc190dHlfYXJn ID0gcHJvZ3Jlc3NfdXNlX2NyIHx8IChpc2F0dHkoMikgPiAwKTsKLQotICAgIGlmICghc3NoX2Nv bW1hbmRbMF0pIHsKLSAgICAgICAgcnVuZT0gaG9zdDsKLSAgICB9IGVsc2UgewotICAgICAgICBj aGFyIHZlcmJvc2VfYnVmW21pbm1zZ2xldmVsX2RlZmF1bHQrM107Ci0gICAgICAgIGludCB2ZXJi b3NlX2xlbjsKLSAgICAgICAgdmVyYm9zZV9idWZbMF0gPSAnICc7Ci0gICAgICAgIHZlcmJvc2Vf YnVmWzFdID0gJy0nOwotICAgICAgICBtZW1zZXQodmVyYm9zZV9idWYrMiwgJ3YnLCBtaW5tc2ds ZXZlbF9kZWZhdWx0KTsKLSAgICAgICAgdmVyYm9zZV9idWZbc2l6ZW9mKHZlcmJvc2VfYnVmKS0x XSA9IDA7Ci0gICAgICAgIGlmIChtaW5tc2dsZXZlbCA9PSBtaW5tc2dsZXZlbF9kZWZhdWx0KSB7 Ci0gICAgICAgICAgICB2ZXJib3NlX2xlbiA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg ICAgICB2ZXJib3NlX2xlbiA9IChtaW5tc2dsZXZlbF9kZWZhdWx0IC0gbWlubXNnbGV2ZWwpICsg MjsKLSAgICAgICAgfQotICAgICAgICB4YXNwcmludGYoJnJ1bmUsICJleGVjICVzICVzIHhsJXMl LipzIG1pZ3JhdGUtcmVjZWl2ZSVzJXMlcyIsCi0gICAgICAgICAgICAgICAgICBzc2hfY29tbWFu ZCwgaG9zdCwKLSAgICAgICAgICAgICAgICAgIHBhc3NfdHR5X2FyZyA/ICIgLXQiIDogIiIsCi0g ICAgICAgICAgICAgICAgICB2ZXJib3NlX2xlbiwgdmVyYm9zZV9idWYsCi0gICAgICAgICAgICAg ICAgICBkYWVtb25pemUgPyAiIiA6ICIgLWUiLAotICAgICAgICAgICAgICAgICAgZGVidWcgPyAi IC1kIiA6ICIiLAotICAgICAgICAgICAgICAgICAgcGF1c2VfYWZ0ZXJfbWlncmF0aW9uID8gIiAt cCIgOiAiIik7Ci0gICAgfQotCi0gICAgbWlncmF0ZV9kb21haW4oZG9taWQsIHJ1bmUsIGRlYnVn LCBjb25maWdfZmlsZW5hbWUpOwotICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Ci19Ci0jZW5kaWYK LQotI2lmbmRlZiBMSUJYTF9IQVZFX05PX1NVU1BFTkRfUkVTVU1FCi1pbnQgbWFpbl9yZW11cyhp bnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgdWludDMyX3QgZG9taWQ7Ci0gICAgaW50IG9w dCwgcmMsIGRhZW1vbml6ZSA9IDE7Ci0gICAgY29uc3QgY2hhciAqc3NoX2NvbW1hbmQgPSAic3No IjsKLSAgICBjaGFyICpob3N0ID0gTlVMTCwgKnJ1bmUgPSBOVUxMOwotICAgIGxpYnhsX2RvbWFp bl9yZW11c19pbmZvIHJfaW5mbzsKLSAgICBpbnQgc2VuZF9mZCA9IC0xLCByZWN2X2ZkID0gLTE7 Ci0gICAgcGlkX3QgY2hpbGQgPSAtMTsKLSAgICB1aW50OF90ICpjb25maWdfZGF0YTsKLSAgICBp bnQgY29uZmlnX2xlbjsKLQotICAgIG1lbXNldCgmcl9pbmZvLCAwLCBzaXplb2YobGlieGxfZG9t YWluX3JlbXVzX2luZm8pKTsKLQotICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICJGYnVuZGk6 czpOOmVjIiwgTlVMTCwgInJlbXVzIiwgMikgewotICAgIGNhc2UgJ2knOgotICAgICAgICByX2lu Zm8uaW50ZXJ2YWwgPSBhdG9pKG9wdGFyZyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ0Yn OgotICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmcl9pbmZvLmFsbG93X3Vuc2FmZSwgdHJ1ZSk7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2InOgotICAgICAgICBsaWJ4bF9kZWZib29sX3Nl dCgmcl9pbmZvLmJsYWNraG9sZSwgdHJ1ZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ3Un OgotICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmcl9pbmZvLmNvbXByZXNzaW9uLCBmYWxzZSk7 Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ24nOgotICAgICAgICBsaWJ4bF9kZWZib29sX3Nl dCgmcl9pbmZvLm5ldGJ1ZiwgZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdOJzoK LSAgICAgICAgcl9pbmZvLm5ldGJ1ZnNjcmlwdCA9IG9wdGFyZzsKLSAgICAgICAgYnJlYWs7Ci0g ICAgY2FzZSAnZCc6Ci0gICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZyX2luZm8uZGlza2J1Ziwg ZmFsc2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdzJzoKLSAgICAgICAgc3NoX2NvbW1h bmQgPSBvcHRhcmc7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgJ2UnOgotICAgICAgICBkYWVt b25pemUgPSAwOwotICAgICAgICBicmVhazsKLSAgICBjYXNlICdjJzoKLSAgICAgICAgbGlieGxf ZGVmYm9vbF9zZXQoJnJfaW5mby5jb2xvLCB0cnVlKTsKLSAgICB9Ci0KLSAgICBkb21pZCA9IHhm aW5kX2RvbWFpbihhcmd2W29wdGluZF0pOwotICAgIGhvc3QgPSBhcmd2W29wdGluZCArIDFdOwot Ci0gICAgLyogRGVmYXVsdHMgKi8KLSAgICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJnJfaW5m by5ibGFja2hvbGUsIGZhbHNlKTsKLSAgICBsaWJ4bF9kZWZib29sX3NldGRlZmF1bHQoJnJfaW5m by5jb2xvLCBmYWxzZSk7Ci0gICAgaWYgKCFsaWJ4bF9kZWZib29sX3ZhbChyX2luZm8uY29sbykg JiYgIXJfaW5mby5pbnRlcnZhbCkKLSAgICAgICAgcl9pbmZvLmludGVydmFsID0gMjAwOwotCi0g ICAgaWYgKGxpYnhsX2RlZmJvb2xfdmFsKHJfaW5mby5jb2xvKSkgewotICAgICAgICBpZiAocl9p bmZvLmludGVydmFsIHx8IGxpYnhsX2RlZmJvb2xfdmFsKHJfaW5mby5ibGFja2hvbGUpIHx8Ci0g ICAgICAgICAgICAhbGlieGxfZGVmYm9vbF9pc19kZWZhdWx0KHJfaW5mby5uZXRidWYpIHx8Ci0g ICAgICAgICAgICAhbGlieGxfZGVmYm9vbF9pc19kZWZhdWx0KHJfaW5mby5kaXNrYnVmKSkgewot ICAgICAgICAgICAgcGVycm9yKCJvcHRpb24gLWMgaXMgY29uZmxpY3Qgd2l0aCAtaSwgLWQsIC1u IG9yIC1iIik7Ci0gICAgICAgICAgICBleGl0KC0xKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm IChsaWJ4bF9kZWZib29sX2lzX2RlZmF1bHQocl9pbmZvLmNvbXByZXNzaW9uKSkgewotICAgICAg ICAgICAgcGVycm9yKCJDT0xPIGNhbid0IGJlIHVzZWQgd2l0aCBtZW1vcnkgY29tcHJlc3Npb24u ICIKLSAgICAgICAgICAgICAgICAgICAiRGlzYWJsZSBtZW1vcnkgY2hlY2twb2ludCBjb21wcmVz c2lvbiBub3cuLi4iKTsKLSAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0KCZyX2luZm8uY29t cHJlc3Npb24sIGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghcl9pbmZvLm5l dGJ1ZnNjcmlwdCkgewotICAgICAgICBpZiAobGlieGxfZGVmYm9vbF92YWwocl9pbmZvLmNvbG8p KQotICAgICAgICAgICAgcl9pbmZvLm5ldGJ1ZnNjcmlwdCA9IGRlZmF1bHRfY29sb19wcm94eV9z Y3JpcHQ7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHJfaW5mby5uZXRidWZzY3JpcHQgPSBk ZWZhdWx0X3JlbXVzX25ldGJ1ZnNjcmlwdDsKLSAgICB9Ci0KLSAgICBpZiAobGlieGxfZGVmYm9v bF92YWwocl9pbmZvLmJsYWNraG9sZSkpIHsKLSAgICAgICAgc2VuZF9mZCA9IG9wZW4oIi9kZXYv bnVsbCIsIE9fUkRXUiwgMDY0NCk7Ci0gICAgICAgIGlmIChzZW5kX2ZkIDwgMCkgewotICAgICAg ICAgICAgcGVycm9yKCJmYWlsZWQgdG8gb3BlbiAvZGV2L251bGwiKTsKLSAgICAgICAgICAgIGV4 aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0KLSAgICAgICAgaWYg KCFzc2hfY29tbWFuZFswXSkgewotICAgICAgICAgICAgcnVuZSA9IGhvc3Q7Ci0gICAgICAgIH0g ZWxzZSB7Ci0gICAgICAgICAgICBpZiAoIWxpYnhsX2RlZmJvb2xfdmFsKHJfaW5mby5jb2xvKSkg ewotICAgICAgICAgICAgICAgIHhhc3ByaW50ZigmcnVuZSwgImV4ZWMgJXMgJXMgeGwgbWlncmF0 ZS1yZWNlaXZlICVzICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgc3NoX2NvbW1hbmQs IGhvc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICItciIsCi0gICAgICAgICAgICAgICAg ICAgICAgICAgIGRhZW1vbml6ZSA/ICIiIDogIiAtZSIpOwotICAgICAgICAgICAgfSBlbHNlIHsK LSAgICAgICAgICAgICAgICB4YXNwcmludGYoJnJ1bmUsICJleGVjICVzICVzIHhsIG1pZ3JhdGUt cmVjZWl2ZSAlcyAlcyAlcyAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNzaF9jb21t YW5kLCBob3N0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAiLS1jb2xvIiwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgcl9pbmZvLm5ldGJ1ZnNjcmlwdCA/ICItLWNvbG9mdC1zY3JpcHQi IDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHJfaW5mby5uZXRidWZzY3JpcHQgPyBy X2luZm8ubmV0YnVmc2NyaXB0IDogIiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGRhZW1v bml6ZSA/ICIiIDogIiAtZSIpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg c2F2ZV9kb21haW5fY29yZV9iZWdpbihkb21pZCwgTlVMTCwgJmNvbmZpZ19kYXRhLCAmY29uZmln X2xlbik7Ci0KLSAgICAgICAgaWYgKCFjb25maWdfbGVuKSB7Ci0gICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIk5vIGNvbmZpZyBmaWxlIHN0b3JlZCBmb3IgcnVubmluZyBkb21haW4gYW5kICIK LSAgICAgICAgICAgICAgICAgICAgIm5vbmUgc3VwcGxpZWQgLSBjYW5ub3Qgc3RhcnQgcmVtdXMu XG4iKTsKLSAgICAgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKLSAgICAgICAgfQotCi0gICAg ICAgIGNoaWxkID0gY3JlYXRlX21pZ3JhdGlvbl9jaGlsZChydW5lLCAmc2VuZF9mZCwgJnJlY3Zf ZmQpOwotCi0gICAgICAgIG1pZ3JhdGVfZG9fcHJlYW1ibGUoc2VuZF9mZCwgcmVjdl9mZCwgY2hp bGQsIGNvbmZpZ19kYXRhLCBjb25maWdfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IHJ1bmUpOwotCi0gICAgICAgIGlmIChzc2hfY29tbWFuZFswXSkKLSAgICAgICAgICAgIGZyZWUo cnVuZSk7Ci0gICAgfQotCi0gICAgLyogUG9pbnQgb2Ygbm8gcmV0dXJuICovCi0gICAgcmMgPSBs aWJ4bF9kb21haW5fcmVtdXNfc3RhcnQoY3R4LCAmcl9pbmZvLCBkb21pZCwgc2VuZF9mZCwgcmVj dl9mZCwgMCk7Ci0KLSAgICAvKiBjaGVjayBpZiB0aGUgZG9tYWluIGV4aXN0cy4gVXNlciBtYXkg aGF2ZSB4bCBkZXN0cm95ZWQgdGhlCi0gICAgICogZG9tYWluIHRvIGZvcmNlIGZhaWxvdmVyCi0g ICAgICovCi0gICAgaWYgKGxpYnhsX2RvbWFpbl9pbmZvKGN0eCwgMCwgZG9taWQpKSB7Ci0gICAg ICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IFByaW1hcnkgZG9tYWluIGhhcyBiZWVuIGRlc3Ryb3ll ZC5cbiIsCi0gICAgICAgICAgICAgICAgbGlieGxfZGVmYm9vbF92YWwocl9pbmZvLmNvbG8pID8g IkNPTE8iIDogIlJlbXVzIik7Ci0gICAgICAgIGNsb3NlKHNlbmRfZmQpOwotICAgICAgICByZXR1 cm4gRVhJVF9TVUNDRVNTOwotICAgIH0KLQotICAgIC8qIElmIHdlIGFyZSBoZXJlLCBpdCBtZWFu cyByZW11cyBzZXR1cC9kb21haW4gc3VzcGVuZC9iYWNrdXAgaGFzCi0gICAgICogZmFpbGVkLiBU cnkgdG8gcmVzdW1lIHRoZSBkb21haW4gYW5kIGV4aXQgZ3JhY2VmdWxseS4KLSAgICAgKiBUT0RP OiBTcGxpdC1CcmFpbiBjaGVjay4KLSAgICAgKi8KLSAgICBpZiAocmMgPT0gRVJST1JfR1VFU1Rf VElNRURPVVQpCi0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIHN1c3BlbmQgZG9t YWluIGF0IHByaW1hcnkuXG4iKTsKLSAgICBlbHNlIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIs ICIlczogQmFja3VwIGZhaWxlZD8gcmVzdW1pbmcgZG9tYWluIGF0IHByaW1hcnkuXG4iLAotICAg ICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKHJfaW5mby5jb2xvKSA/ICJDT0xPIiA6ICJS ZW11cyIpOwotICAgICAgICBsaWJ4bF9kb21haW5fcmVzdW1lKGN0eCwgZG9taWQsIDEsIDApOwot ICAgIH0KLQotICAgIGNsb3NlKHNlbmRfZmQpOwotICAgIHJldHVybiBFWElUX0ZBSUxVUkU7Ci19 Ci0jZW5kaWYKLQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIG1vZGU6IEMKZGlmZiAtLWdp dCBhL3Rvb2xzL3hsL3hsX21pZ3JhdGUuYyBiL3Rvb2xzL3hsL3hsX21pZ3JhdGUuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi42YjVkZmYyZDFhCi0tLSAvZGV2L251bGwK KysrIGIvdG9vbHMveGwveGxfbWlncmF0ZS5jCkBAIC0wLDAgKzEsNzU0IEBACisvKgorICogQ29w eXJpZ2h0IDIwMDktMjAxNyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAqCisg KiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg YW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0d2Fy ZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBleGNl cHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRoaXMg cHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg PGludHR5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4K KyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdXRzbmFtZS5oPgorI2luY2x1 ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2luY2x1ZGUgPGxpYnhsLmg+Cisj aW5jbHVkZSA8bGlieGxfdXRpbHMuaD4KKyNpbmNsdWRlIDxsaWJ4bHV0aWwuaD4KKworI2luY2x1 ZGUgInhsLmgiCisjaW5jbHVkZSAieGxfdXRpbHMuaCIKKyNpbmNsdWRlICJ4bF9wYXJzZS5oIgor CitleHRlcm4gY29uc3QgY2hhciAqY29tbW9uX2RvbW5hbWU7CisKKyNpZm5kZWYgTElCWExfSEFW RV9OT19TVVNQRU5EX1JFU1VNRQorCitzdGF0aWMgcGlkX3QgY3JlYXRlX21pZ3JhdGlvbl9jaGls ZChjb25zdCBjaGFyICpydW5lLCBpbnQgKnNlbmRfZmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50ICpyZWN2X2ZkKQoreworICAgIGludCBzZW5kcGlwZVsyXSwg cmVjdnBpcGVbMl07CisgICAgcGlkX3QgY2hpbGQ7CisKKyAgICBpZiAoIXJ1bmUgfHwgIXNlbmRf ZmQgfHwgIXJlY3ZfZmQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIE1VU1QoIGxpYnhsX3Bp cGUoY3R4LCBzZW5kcGlwZSkgKTsKKyAgICBNVVNUKCBsaWJ4bF9waXBlKGN0eCwgcmVjdnBpcGUp ICk7CisKKyAgICBjaGlsZCA9IHhsX2ZvcmsoY2hpbGRfbWlncmF0aW9uLCAibWlncmF0aW9uIHRy YW5zcG9ydCBwcm9jZXNzIik7CisKKyAgICBpZiAoIWNoaWxkKSB7CisgICAgICAgIGR1cDIoc2Vu ZHBpcGVbMF0sIDApOworICAgICAgICBkdXAyKHJlY3ZwaXBlWzFdLCAxKTsKKyAgICAgICAgY2xv c2Uoc2VuZHBpcGVbMF0pOyBjbG9zZShzZW5kcGlwZVsxXSk7CisgICAgICAgIGNsb3NlKHJlY3Zw aXBlWzBdKTsgY2xvc2UocmVjdnBpcGVbMV0pOworICAgICAgICBleGVjbHAoInNoIiwic2giLCIt YyIscnVuZSwoY2hhciopMCk7CisgICAgICAgIHBlcnJvcigiZmFpbGVkIHRvIGV4ZWMgc2giKTsK KyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKworICAgIGNsb3NlKHNlbmRwaXBl WzBdKTsKKyAgICBjbG9zZShyZWN2cGlwZVsxXSk7CisgICAgKnNlbmRfZmQgPSBzZW5kcGlwZVsx XTsKKyAgICAqcmVjdl9mZCA9IHJlY3ZwaXBlWzBdOworCisgICAgLyogaWYgcmVjZWl2ZXIgZGll cywgd2UgZ2V0IGFuIGVycm9yIGFuZCBjYW4gY2xlYW4gdXAKKyAgICAgICByYXRoZXIgdGhhbiBq dXN0IGR5aW5nICovCisgICAgc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOworCisgICAgcmV0dXJu IGNoaWxkOworfQorCitzdGF0aWMgaW50IG1pZ3JhdGVfcmVhZF9maXhlZG1lc3NhZ2UoaW50IGZk LCBjb25zdCB2b2lkICptc2csIGludCBtc2dzeiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICp3aGF0LCBjb25zdCBjaGFyICpydW5lKSB7CisgICAgY2hh ciBidWZbbXNnc3pdOworICAgIGNvbnN0IGNoYXIgKnN0cmVhbTsKKyAgICBpbnQgcmM7CisKKyAg ICBzdHJlYW0gPSBydW5lID8gIm1pZ3JhdGlvbiByZWNlaXZlciBzdHJlYW0iIDogIm1pZ3JhdGlv biBzdHJlYW0iOworICAgIHJjID0gbGlieGxfcmVhZF9leGFjdGx5KGN0eCwgZmQsIGJ1ZiwgbXNn c3osIHN0cmVhbSwgd2hhdCk7CisgICAgaWYgKHJjKSByZXR1cm4gMTsKKworICAgIGlmIChtZW1j bXAoYnVmLCBtc2csIG1zZ3N6KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGNvbnRh aW5lZCB1bmV4cGVjdGVkIGRhdGEgaW5zdGVhZCBvZiAlc1xuIiwKKyAgICAgICAgICAgICAgICBz dHJlYW0sIHdoYXQpOworICAgICAgICBpZiAocnVuZSkKKyAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiKGNvbW1hbmQgcnVuIHdhczogJXMgKVxuIiwgcnVuZSk7CisgICAgICAgIHJldHVybiAx OworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWlncmF0aW9uX2NoaWxk X3JlcG9ydChpbnQgcmVjdl9mZCkgeworICAgIHBpZF90IGNoaWxkOworICAgIGludCBzdGF0dXMs IHNyOworICAgIHN0cnVjdCB0aW1ldmFsIG5vdywgd2FpdHVudGlsLCB0aW1lb3V0OworICAgIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgdGltZXZhbCBwb2xsaW50ZXJ2YWwgPSB7IDAsIDEwMDAgfTsgLyog MW1zICovCisKKyAgICBpZiAoIXhsX2NoaWxkX3BpZChjaGlsZF9taWdyYXRpb24pKSByZXR1cm47 CisKKyAgICBDSEtfU1lTQ0FMTChnZXR0aW1lb2ZkYXkoJndhaXR1bnRpbCwgMCkpOworICAgIHdh aXR1bnRpbC50dl9zZWMgKz0gMjsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgcGlkX3QgbWln cmF0aW9uX2NoaWxkID0geGxfY2hpbGRfcGlkKGNoaWxkX21pZ3JhdGlvbik7CisgICAgICAgIGNo aWxkID0geGxfd2FpdHBpZChjaGlsZF9taWdyYXRpb24sICZzdGF0dXMsIFdOT0hBTkcpOworCisg ICAgICAgIGlmIChjaGlsZCA9PSBtaWdyYXRpb25fY2hpbGQpIHsKKyAgICAgICAgICAgIGlmIChz dGF0dXMpCisgICAgICAgICAgICAgICAgeGxfcmVwb3J0X2NoaWxkX2V4aXRzdGF0dXMoWFRMX0lO Rk8sIGNoaWxkX21pZ3JhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBtaWdyYXRpb25fY2hpbGQsIHN0YXR1cyk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICBpZiAoY2hpbGQgPT0gLTEpIHsKKyAgICAgICAgICAgIGZwcmludGYo c3RkZXJyLCAid2FpdCBmb3IgbWlncmF0aW9uIGNoaWxkIFslbGRdIGZhaWxlZDogJXNcbiIsCisg ICAgICAgICAgICAgICAgICAgIChsb25nKW1pZ3JhdGlvbl9jaGlsZCwgc3RyZXJyb3IoZXJybm8p KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGFzc2VydChjaGlsZCA9 PSAwKTsKKworICAgICAgICBDSEtfU1lTQ0FMTChnZXR0aW1lb2ZkYXkoJm5vdywgMCkpOworICAg ICAgICBpZiAodGltZXJjbXAoJm5vdywgJndhaXR1bnRpbCwgPikpIHsKKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAibWlncmF0aW9uIGNoaWxkIFslbGRdIG5vdCBleGl0aW5nLCBubyBsb25n ZXIiCisgICAgICAgICAgICAgICAgICAgICIgd2FpdGluZyAoZXhpdCBzdGF0dXMgd2lsbCBiZSB1 bnJlcG9ydGVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpbWlncmF0aW9uX2NoaWxk KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHRpbWVyc3ViKCZ3YWl0 dW50aWwsICZub3csICZ0aW1lb3V0KTsKKworICAgICAgICBpZiAocmVjdl9mZCA+PSAwKSB7Cisg ICAgICAgICAgICBmZF9zZXQgcmVhZGZkcywgZXhjZXB0ZmRzOworICAgICAgICAgICAgRkRfWkVS TygmcmVhZGZkcyk7CisgICAgICAgICAgICBGRF9aRVJPKCZleGNlcHRmZHMpOworICAgICAgICAg ICAgRkRfU0VUKHJlY3ZfZmQsICZyZWFkZmRzKTsKKyAgICAgICAgICAgIEZEX1NFVChyZWN2X2Zk LCAmZXhjZXB0ZmRzKTsKKyAgICAgICAgICAgIHNyID0gc2VsZWN0KHJlY3ZfZmQrMSwgJnJlYWRm ZHMsMCwmZXhjZXB0ZmRzLCAmdGltZW91dCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICBpZiAodGltZXJjbXAoJnRpbWVvdXQsICZwb2xsaW50ZXJ2YWwsID4pKQorICAgICAgICAgICAg ICAgIHRpbWVvdXQgPSBwb2xsaW50ZXJ2YWw7CisgICAgICAgICAgICBzciA9IHNlbGVjdCgwLDAs MCwwLCAmdGltZW91dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHNyID4gMCkgeworICAgICAg ICAgICAgcmVjdl9mZCA9IC0xOworICAgICAgICB9IGVsc2UgaWYgKHNyID09IDApIHsKKyAgICAg ICAgfSBlbHNlIGlmIChzciA9PSAtMSkgeworICAgICAgICAgICAgaWYgKGVycm5vICE9IEVJTlRS KSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gY2hpbGQgWyVs ZF0gZXhpdCB3YWl0IHNlbGVjdCIKKyAgICAgICAgICAgICAgICAgICAgICAgICIgZmFpbGVkIHVu ZXhwZWN0ZWRseTogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyltaWdyYXRp b25fY2hpbGQsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1pZ3JhdGVfZG9f cHJlYW1ibGUoaW50IHNlbmRfZmQsIGludCByZWN2X2ZkLCBwaWRfdCBjaGlsZCwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAqY29uZmlnX2RhdGEsIGludCBjb25maWdf bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpydW5lKQor eworICAgIGludCByYyA9IDA7CisKKyAgICBpZiAoc2VuZF9mZCA8IDAgfHwgcmVjdl9mZCA8IDAp IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRlX2RvX3ByZWFtYmxlOiBpbnZhbGlk IGZpbGUgZGVzY3JpcHRvcnNcbiIpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAg fQorCisgICAgcmMgPSBtaWdyYXRlX3JlYWRfZml4ZWRtZXNzYWdlKHJlY3ZfZmQsIG1pZ3JhdGVf cmVjZWl2ZXJfYmFubmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXpl b2YobWlncmF0ZV9yZWNlaXZlcl9iYW5uZXIpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJiYW5uZXIiLCBydW5lKTsKKyAgICBpZiAocmMpIHsKKyAgICAgICAgY2xvc2Uo c2VuZF9mZCk7CisgICAgICAgIG1pZ3JhdGlvbl9jaGlsZF9yZXBvcnQocmVjdl9mZCk7CisgICAg ICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBzYXZlX2RvbWFpbl9jb3JlX3dy aXRlY29uZmlnKHNlbmRfZmQsICJtaWdyYXRpb24gc3RyZWFtIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbmZpZ19kYXRhLCBjb25maWdfbGVuKTsKKworfQorCitzdGF0aWMg dm9pZCBtaWdyYXRlX2RvbWFpbih1aW50MzJfdCBkb21pZCwgY29uc3QgY2hhciAqcnVuZSwgaW50 IGRlYnVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3ZlcnJpZGVf Y29uZmlnX2ZpbGUpCit7CisgICAgcGlkX3QgY2hpbGQgPSAtMTsKKyAgICBpbnQgcmM7CisgICAg aW50IHNlbmRfZmQgPSAtMSwgcmVjdl9mZCA9IC0xOworICAgIGNoYXIgKmF3YXlfZG9tbmFtZTsK KyAgICBjaGFyIHJjX2J1ZjsKKyAgICB1aW50OF90ICpjb25maWdfZGF0YTsKKyAgICBpbnQgY29u ZmlnX2xlbiwgZmxhZ3MgPSBMSUJYTF9TVVNQRU5EX0xJVkU7CisKKyAgICBzYXZlX2RvbWFpbl9j b3JlX2JlZ2luKGRvbWlkLCBvdmVycmlkZV9jb25maWdfZmlsZSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICZjb25maWdfZGF0YSwgJmNvbmZpZ19sZW4pOworCisgICAgaWYgKCFjb25maWdf bGVuKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTm8gY29uZmlnIGZpbGUgc3RvcmVkIGZv ciBydW5uaW5nIGRvbWFpbiBhbmQgIgorICAgICAgICAgICAgICAgICJub25lIHN1cHBsaWVkIC0g Y2Fubm90IG1pZ3JhdGUuXG4iKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0K KworICAgIGNoaWxkID0gY3JlYXRlX21pZ3JhdGlvbl9jaGlsZChydW5lLCAmc2VuZF9mZCwgJnJl Y3ZfZmQpOworCisgICAgbWlncmF0ZV9kb19wcmVhbWJsZShzZW5kX2ZkLCByZWN2X2ZkLCBjaGls ZCwgY29uZmlnX2RhdGEsIGNvbmZpZ19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBydW5l KTsKKworICAgIHh0bF9zdGRpb3N0cmVhbV9hZGp1c3RfZmxhZ3MobG9nZ2VyLCBYVExfU1RESU9T VFJFQU1fSElERV9QUk9HUkVTUywgMCk7CisKKyAgICBpZiAoZGVidWcpCisgICAgICAgIGZsYWdz IHw9IExJQlhMX1NVU1BFTkRfREVCVUc7CisgICAgcmMgPSBsaWJ4bF9kb21haW5fc3VzcGVuZChj dHgsIGRvbWlkLCBzZW5kX2ZkLCBmbGFncywgTlVMTCk7CisgICAgaWYgKHJjKSB7CisgICAgICAg IGZwcmludGYoc3RkZXJyLCAibWlncmF0aW9uIHNlbmRlcjogbGlieGxfZG9tYWluX3N1c3BlbmQg ZmFpbGVkIgorICAgICAgICAgICAgICAgICIgKHJjPSVkKVxuIiwgcmMpOworICAgICAgICBpZiAo cmMgPT0gRVJST1JfR1VFU1RfVElNRURPVVQpCisgICAgICAgICAgICBnb3RvIGZhaWxlZF9zdXNw ZW5kOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnb3RvIGZhaWxlZF9yZXN1bWU7CisgICAg fQorCisgICAgLy9mcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiBzZW5kZXI6IFRyYW5zZmVyIGNv bXBsZXRlLlxuIik7CisgICAgLy8gU2hvdWxkIG9ubHkgYmUgcHJpbnRlZCB3aGVuIGRlYnVnZ2lu ZyBhcyBpdCdzIGEgYml0IG1lc3N5IHdpdGgKKyAgICAvLyBwcm9ncmVzcyBpbmRpY2F0aW9uLgor CisgICAgcmMgPSBtaWdyYXRlX3JlYWRfZml4ZWRtZXNzYWdlKHJlY3ZfZmQsIG1pZ3JhdGVfcmVj ZWl2ZXJfcmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZiht aWdyYXRlX3JlY2VpdmVyX3JlYWR5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgInJlYWR5IG1lc3NhZ2UiLCBydW5lKTsKKyAgICBpZiAocmMpIGdvdG8gZmFpbGVkX3Jlc3Vt ZTsKKworICAgIHh0bF9zdGRpb3N0cmVhbV9hZGp1c3RfZmxhZ3MobG9nZ2VyLCAwLCBYVExfU1RE SU9TVFJFQU1fSElERV9QUk9HUkVTUyk7CisKKyAgICAvKiByaWdodCwgYXQgdGhpcyBwb2ludCB3 ZSBhcmUgYWJvdXQgZ2l2ZSB0aGUgZGVzdGluYXRpb24KKyAgICAgKiBwZXJtaXNzaW9uIHRvIHJl bmFtZSBhbmQgcmVzdW1lLCBzbyB3ZSBtdXN0IGZpcnN0IHJlbmFtZSB0aGUKKyAgICAgKiBkb21h aW4gYXdheSBvdXJzZWx2ZXMgKi8KKworICAgIGZwcmludGYoc3RkZXJyLCAibWlncmF0aW9uIHNl bmRlcjogVGFyZ2V0IGhhcyBhY2tub3dsZWRnZWQgdHJhbnNmZXIuXG4iKTsKKworICAgIGlmIChj b21tb25fZG9tbmFtZSkgeworICAgICAgICB4YXNwcmludGYoJmF3YXlfZG9tbmFtZSwgIiVzLS1t aWdyYXRlZGF3YXkiLCBjb21tb25fZG9tbmFtZSk7CisgICAgICAgIHJjID0gbGlieGxfZG9tYWlu X3JlbmFtZShjdHgsIGRvbWlkLCBjb21tb25fZG9tbmFtZSwgYXdheV9kb21uYW1lKTsKKyAgICAg ICAgaWYgKHJjKSBnb3RvIGZhaWxlZF9yZXN1bWU7CisgICAgfQorCisgICAgLyogcG9pbnQgb2Yg bm8gcmV0dXJuIC0gYXMgc29vbiBhcyB3ZSBoYXZlIHRyaWVkIHRvIHNheQorICAgICAqICJnbyIg dG8gdGhlIHJlY2VpdmVyLCBpdCdzIG5vdCBzYWZlIHRvIGNhcnJ5IG9uLiAgV2UgbGVhdmUKKyAg ICAgKiB0aGUgZG9tYWluIHJlbmFtZWQgdG8gJXMtLW1pZ3JhdGVkYXdheSBpbiBjYXNlIHRoYXQn cyBoZWxwZnVsLgorICAgICAqLworCisgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gc2Vu ZGVyOiBHaXZpbmcgdGFyZ2V0IHBlcm1pc3Npb24gdG8gc3RhcnQuXG4iKTsKKworICAgIHJjID0g bGlieGxfd3JpdGVfZXhhY3RseShjdHgsIHNlbmRfZmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1pZ3JhdGVfcGVybWlzc2lvbl90b19nbywKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc2l6ZW9mKG1pZ3JhdGVfcGVybWlzc2lvbl90b19nbyksCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICJtaWdyYXRpb24gc3RyZWFtIiwgIkdPIG1lc3NhZ2UiKTsKKyAgICBpZiAo cmMpIGdvdG8gZmFpbGVkX2JhZGx5OworCisgICAgcmMgPSBtaWdyYXRlX3JlYWRfZml4ZWRtZXNz YWdlKHJlY3ZfZmQsIG1pZ3JhdGVfcmVwb3J0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplb2YobWlncmF0ZV9yZXBvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAic3VjY2Vzcy9mYWlsdXJlIHJlcG9ydCBtZXNzYWdlIiwgcnVuZSk7CisgICAg aWYgKHJjKSBnb3RvIGZhaWxlZF9iYWRseTsKKworICAgIHJjID0gbGlieGxfcmVhZF9leGFjdGx5 KGN0eCwgcmVjdl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcmNfYnVmLCAxLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWdyYXRpb24gYWNrIHN0cmVhbSIsICJzdWNj ZXNzL2ZhaWx1cmUgc3RhdHVzIik7CisgICAgaWYgKHJjKSBnb3RvIGZhaWxlZF9iYWRseTsKKwor ICAgIGlmIChyY19idWYpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gc2Vu ZGVyOiBUYXJnZXQgcmVwb3J0cyBzdGFydHVwIGZhaWx1cmUiCisgICAgICAgICAgICAgICAgIiAo c3RhdHVzIGNvZGUgJWQpLlxuIiwgcmNfYnVmKTsKKworICAgICAgICByYyA9IG1pZ3JhdGVfcmVh ZF9maXhlZG1lc3NhZ2UocmVjdl9mZCwgbWlncmF0ZV9wZXJtaXNzaW9uX3RvX2dvLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pZ3JhdGVfcGVybWlzc2lv bl90b19nbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGVybWlz c2lvbiBmb3Igc2VuZGVyIHRvIHJlc3VtZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBydW5lKTsKKyAgICAgICAgaWYgKHJjKSBnb3RvIGZhaWxlZF9iYWRseTsKKwor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiBzZW5kZXI6IFRyeWluZyB0byByZXN1 bWUgYXQgb3VyIGVuZC5cbiIpOworCisgICAgICAgIGlmIChjb21tb25fZG9tbmFtZSkgeworICAg ICAgICAgICAgbGlieGxfZG9tYWluX3JlbmFtZShjdHgsIGRvbWlkLCBhd2F5X2RvbW5hbWUsIGNv bW1vbl9kb21uYW1lKTsKKyAgICAgICAgfQorICAgICAgICByYyA9IGxpYnhsX2RvbWFpbl9yZXN1 bWUoY3R4LCBkb21pZCwgMSwgMCk7CisgICAgICAgIGlmICghcmMpIGZwcmludGYoc3RkZXJyLCAi bWlncmF0aW9uIHNlbmRlcjogUmVzdW1lZCBPSy5cbiIpOworCisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiTWlncmF0aW9uIGZhaWxlZCBkdWUgdG8gcHJvYmxlbXMgYXQgdGFyZ2V0LlxuIik7Cisg ICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZGVyciwg Im1pZ3JhdGlvbiBzZW5kZXI6IFRhcmdldCByZXBvcnRzIHN1Y2Nlc3NmdWwgc3RhcnR1cC5cbiIp OworICAgIGxpYnhsX2RvbWFpbl9kZXN0cm95KGN0eCwgZG9taWQsIDApOyAvKiBiYW5nISAqLwor ICAgIGZwcmludGYoc3RkZXJyLCAiTWlncmF0aW9uIHN1Y2Nlc3NmdWwuXG4iKTsKKyAgICBleGl0 KEVYSVRfU1VDQ0VTUyk7CisKKyBmYWlsZWRfc3VzcGVuZDoKKyAgICBjbG9zZShzZW5kX2ZkKTsK KyAgICBtaWdyYXRpb25fY2hpbGRfcmVwb3J0KHJlY3ZfZmQpOworICAgIGZwcmludGYoc3RkZXJy LCAiTWlncmF0aW9uIGZhaWxlZCwgZmFpbGVkIHRvIHN1c3BlbmQgYXQgc2VuZGVyLlxuIik7Cisg ICAgZXhpdChFWElUX0ZBSUxVUkUpOworCisgZmFpbGVkX3Jlc3VtZToKKyAgICBjbG9zZShzZW5k X2ZkKTsKKyAgICBtaWdyYXRpb25fY2hpbGRfcmVwb3J0KHJlY3ZfZmQpOworICAgIGZwcmludGYo c3RkZXJyLCAiTWlncmF0aW9uIGZhaWxlZCwgcmVzdW1pbmcgYXQgc2VuZGVyLlxuIik7CisgICAg bGlieGxfZG9tYWluX3Jlc3VtZShjdHgsIGRvbWlkLCAxLCAwKTsKKyAgICBleGl0KEVYSVRfRkFJ TFVSRSk7CisKKyBmYWlsZWRfYmFkbHk6CisgICAgZnByaW50ZihzdGRlcnIsCisgIioqIE1pZ3Jh dGlvbiBmYWlsZWQgZHVyaW5nIGZpbmFsIGhhbmRzaGFrZSAqKlxuIgorICJEb21haW4gc3RhdGUg aXMgbm93IHVuZGVmaW5lZCAhXG4iCisgIlBsZWFzZSBDSEVDSyBBVCBCT1RIIEVORFMgZm9yIHJ1 bm5pbmcgaW5zdGFuY2VzLCBiZWZvcmUgcmVuYW1pbmcgYW5kXG4iCisgIiByZXN1bWluZyBhdCBt b3N0IG9uZSBpbnN0YW5jZS4gIFR3byBzaW11bHRhbmVvdXMgaW5zdGFuY2VzIG9mIHRoZSBkb21h aW5cbiIKKyAiIHdvdWxkIHByb2JhYmx5IHJlc3VsdCBpbiBTRVZFUkUgREFUQSBMT1NTIGFuZCBp dCBpcyBub3cgeW91clxuIgorICIgcmVzcG9uc2liaWxpdHkgdG8gYXZvaWQgdGhhdC4gIFNvcnJ5 LlxuIik7CisKKyAgICBjbG9zZShzZW5kX2ZkKTsKKyAgICBtaWdyYXRpb25fY2hpbGRfcmVwb3J0 KHJlY3ZfZmQpOworICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKK30KKworc3RhdGljIHZvaWQgbWln cmF0ZV9yZWNlaXZlKGludCBkZWJ1ZywgaW50IGRhZW1vbml6ZSwgaW50IG1vbml0b3IsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhdXNlX2FmdGVyX21pZ3JhdGlvbiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2VuZF9mZCwgaW50IHJlY3ZfZmQsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGlieGxfY2hlY2twb2ludGVkX3N0cmVhbSBjaGVja3BvaW50 ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29sb19wcm94eV9zY3JpcHQp Cit7CisgICAgdWludDMyX3QgZG9taWQ7CisgICAgaW50IHJjLCByYzI7CisgICAgY2hhciByY19i dWY7CisgICAgY2hhciAqbWlncmF0aW9uX2RvbW5hbWU7CisgICAgc3RydWN0IGRvbWFpbl9jcmVh dGUgZG9tX2luZm87CisKKyAgICBzaWduYWwoU0lHUElQRSwgU0lHX0lHTik7CisgICAgLyogaWYg d2UgZ2V0IFNJR1BJUEUgd2UnZCByYXRoZXIganVzdCBoYXZlIGl0IGFzIGFuIGVycm9yICovCisK KyAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiB0YXJnZXQ6IFJlYWR5IHRvIHJlY2VpdmUg ZG9tYWluLlxuIik7CisKKyAgICBDSEtfRVJSTk9WQUwobGlieGxfd3JpdGVfZXhhY3RseSgKKyAg ICAgICAgICAgICAgICAgICAgIGN0eCwgc2VuZF9mZCwgbWlncmF0ZV9yZWNlaXZlcl9iYW5uZXIs CisgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWlncmF0ZV9yZWNlaXZlcl9iYW5uZXIpLTEs CisgICAgICAgICAgICAgICAgICAgICAibWlncmF0aW9uIGFjayBzdHJlYW0iLCAiYmFubmVyIikg KTsKKworICAgIG1lbXNldCgmZG9tX2luZm8sIDAsIHNpemVvZihkb21faW5mbykpOworICAgIGRv bV9pbmZvLmRlYnVnID0gZGVidWc7CisgICAgZG9tX2luZm8uZGFlbW9uaXplID0gZGFlbW9uaXpl OworICAgIGRvbV9pbmZvLm1vbml0b3IgPSBtb25pdG9yOworICAgIGRvbV9pbmZvLnBhdXNlZCA9 IDE7CisgICAgZG9tX2luZm8ubWlncmF0ZV9mZCA9IHJlY3ZfZmQ7CisgICAgZG9tX2luZm8uc2Vu ZF9iYWNrX2ZkID0gc2VuZF9mZDsKKyAgICBkb21faW5mby5taWdyYXRpb25fZG9tbmFtZV9yID0g Jm1pZ3JhdGlvbl9kb21uYW1lOworICAgIGRvbV9pbmZvLmNoZWNrcG9pbnRlZF9zdHJlYW0gPSBj aGVja3BvaW50ZWQ7CisgICAgZG9tX2luZm8uY29sb19wcm94eV9zY3JpcHQgPSBjb2xvX3Byb3h5 X3NjcmlwdDsKKworICAgIHJjID0gY3JlYXRlX2RvbWFpbigmZG9tX2luZm8pOworICAgIGlmIChy YyA8IDApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0OiBEb21h aW4gY3JlYXRpb24gZmFpbGVkIgorICAgICAgICAgICAgICAgICIgKGNvZGUgJWQpLlxuIiwgcmMp OworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorCisgICAgZG9taWQgPSByYzsK KworICAgIHN3aXRjaCAoY2hlY2twb2ludGVkKSB7CisgICAgY2FzZSBMSUJYTF9DSEVDS1BPSU5U RURfU1RSRUFNX1JFTVVTOgorICAgIGNhc2UgTElCWExfQ0hFQ0tQT0lOVEVEX1NUUkVBTV9DT0xP OgorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciAqaGEgPSBjaGVja3BvaW50ZWQgPT0gTElCWExf Q0hFQ0tQT0lOVEVEX1NUUkVBTV9DT0xPID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ09M TyIgOiAiUmVtdXMiOworICAgICAgICAvKiBJZiB3ZSBhcmUgaGVyZSwgaXQgbWVhbnMgdGhhdCB0 aGUgc2VuZGVyIChwcmltYXJ5KSBoYXMgY3Jhc2hlZC4KKyAgICAgICAgICogVE9ETzogU3BsaXQt QnJhaW4gQ2hlY2suCisgICAgICAgICAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1pZ3Jh dGlvbiB0YXJnZXQ6ICVzIEZhaWxvdmVyIGZvciBkb21haW4gJXVcbiIsCisgICAgICAgICAgICAg ICAgaGEsIGRvbWlkKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBJZiBkb21haW4gcmVuYW1p bmcgZmFpbHMsIGxldHMganVzdCBjb250aW51ZSAoYXMgd2UgbmVlZCB0aGUgZG9tYWluCisgICAg ICAgICAqIHRvIGJlIHVwICYgZG9tIG5hbWVzIG1heSBub3QgbWF0dGVyIG11Y2gsIGFzIGxvbmcg YXMgaXRzIHJlYWNoYWJsZQorICAgICAgICAgKiBvdmVyIG5ldHdvcmspLgorICAgICAgICAgKgor ICAgICAgICAgKiBJZiBkb21haW4gdW5wYXVzaW5nIGZhaWxzLCBkZXN0cm95IGRvbWFpbiA/IE9y IGlzIGl0IGJldHRlciB0byBoYXZlCisgICAgICAgICAqIGEgY29uc2lzdGVudCBjb3B5IG9mIHRo ZSBkb21haW4gKG1lbW9yeSwgY3B1IHN0YXRlLCBkaXNrKQorICAgICAgICAgKiBvbiBhdGxlYXN0 IG9uZSBwaHlzaWNhbCBob3N0ID8gUmlnaHQgbm93LCBsZXRzIGp1c3QgbGVhdmUgdGhlIGRvbWFp bgorICAgICAgICAgKiBhcyBpcyBhbmQgbGV0IHRoZSBBZG1pbmlzdHJhdG9yIGRlY2lkZSAob3Ig dHJvdWJsZXNob290KS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChtaWdyYXRpb25fZG9tbmFt ZSkgeworICAgICAgICAgICAgcmMgPSBsaWJ4bF9kb21haW5fcmVuYW1lKGN0eCwgZG9taWQsIG1p Z3JhdGlvbl9kb21uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bW1vbl9kb21uYW1lKTsKKyAgICAgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiB0YXJnZXQgKCVzKTogIgorICAgICAgICAgICAgICAgICAg ICAgICAgIkZhaWxlZCB0byByZW5hbWUgZG9tYWluIGZyb20gJXMgdG8gJXM6JWRcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICBoYSwgbWlncmF0aW9uX2RvbW5hbWUsIGNvbW1vbl9kb21uYW1l LCByYyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoY2hlY2twb2ludGVkID09IExJQlhMX0NI RUNLUE9JTlRFRF9TVFJFQU1fQ09MTykKKyAgICAgICAgICAgIC8qIFRoZSBndWVzdCBpcyBydW5u aW5nIGFmdGVyIGZhaWxvdmVyIGluIENPTE8gbW9kZSAqLworICAgICAgICAgICAgZXhpdChyYyA/ IC1FUlJPUl9GQUlMOiAwKTsKKworICAgICAgICByYyA9IGxpYnhsX2RvbWFpbl91bnBhdXNlKGN0 eCwgZG9taWQpOworICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg Im1pZ3JhdGlvbiB0YXJnZXQgKCVzKTogIgorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRv IHVucGF1c2UgZG9tYWluICVzIChpZDogJXUpOiVkXG4iLAorICAgICAgICAgICAgICAgICAgICBo YSwgY29tbW9uX2RvbW5hbWUsIGRvbWlkLCByYyk7CisKKyAgICAgICAgZXhpdChyYyA/IEVYSVRf RkFJTFVSRSA6IEVYSVRfU1VDQ0VTUyk7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIC8q IGRvIG5vdGhpbmcgKi8KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZnByaW50ZihzdGRl cnIsICJtaWdyYXRpb24gdGFyZ2V0OiBUcmFuc2ZlciBjb21wbGV0ZSwiCisgICAgICAgICAgICAi IHJlcXVlc3RpbmcgcGVybWlzc2lvbiB0byBzdGFydCBkb21haW4uXG4iKTsKKworICAgIHJjID0g bGlieGxfd3JpdGVfZXhhY3RseShjdHgsIHNlbmRfZmQsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1pZ3JhdGVfcmVjZWl2ZXJfcmVhZHksCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHNpemVvZihtaWdyYXRlX3JlY2VpdmVyX3JlYWR5KSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIm1pZ3JhdGlvbiBhY2sgc3RyZWFtIiwgInJlYWR5IG1lc3NhZ2UiKTsKKyAgICBp ZiAocmMpIGV4aXQoRVhJVF9GQUlMVVJFKTsKKworICAgIHJjID0gbWlncmF0ZV9yZWFkX2ZpeGVk bWVzc2FnZShyZWN2X2ZkLCBtaWdyYXRlX3Blcm1pc3Npb25fdG9fZ28sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWdyYXRlX3Blcm1pc3Npb25fdG9fZ28pLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR08gbWVzc2FnZSIsIDApOworICAg IGlmIChyYykgZ290byBwZXJoYXBzX2Rlc3Ryb3lfbm90aWZ5X3JjOworCisgICAgZnByaW50Zihz dGRlcnIsICJtaWdyYXRpb24gdGFyZ2V0OiBHb3QgcGVybWlzc2lvbiwgc3RhcnRpbmcgZG9tYWlu LlxuIik7CisKKyAgICBpZiAobWlncmF0aW9uX2RvbW5hbWUpIHsKKyAgICAgICAgcmMgPSBsaWJ4 bF9kb21haW5fcmVuYW1lKGN0eCwgZG9taWQsIG1pZ3JhdGlvbl9kb21uYW1lLCBjb21tb25fZG9t bmFtZSk7CisgICAgICAgIGlmIChyYykgZ290byBwZXJoYXBzX2Rlc3Ryb3lfbm90aWZ5X3JjOwor ICAgIH0KKworICAgIGlmICghcGF1c2VfYWZ0ZXJfbWlncmF0aW9uKSB7CisgICAgICAgIHJjID0g bGlieGxfZG9tYWluX3VucGF1c2UoY3R4LCBkb21pZCk7CisgICAgICAgIGlmIChyYykgZ290byBw ZXJoYXBzX2Rlc3Ryb3lfbm90aWZ5X3JjOworICAgIH0KKworICAgIGZwcmludGYoc3RkZXJyLCAi bWlncmF0aW9uIHRhcmdldDogRG9tYWluIHN0YXJ0ZWQgc3VjY2Vzc3NmdWxseS5cbiIpOworICAg IHJjID0gMDsKKworIHBlcmhhcHNfZGVzdHJveV9ub3RpZnlfcmM6CisgICAgcmMyID0gbGlieGxf d3JpdGVfZXhhY3RseShjdHgsIHNlbmRfZmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtaWdyYXRlX3JlcG9ydCwgc2l6ZW9mKG1pZ3JhdGVfcmVwb3J0KSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJtaWdyYXRpb24gYWNrIHN0cmVhbSIsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAic3VjY2Vzcy9mYWlsdXJlIHJlcG9ydCIpOworICAgIGlmIChyYzIpIGV4 aXQoRVhJVF9GQUlMVVJFKTsKKworICAgIHJjX2J1ZiA9IC1yYzsKKyAgICBhc3NlcnQoISFyY19i dWYgPT0gISFyYyk7CisgICAgcmMyID0gbGlieGxfd3JpdGVfZXhhY3RseShjdHgsIHNlbmRfZmQs ICZyY19idWYsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWlncmF0aW9uIGFj ayBzdHJlYW0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1Y2Nlc3MvZmFpbHVy ZSBjb2RlIik7CisgICAgaWYgKHJjMikgZXhpdChFWElUX0ZBSUxVUkUpOworCisgICAgaWYgKHJj KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibWlncmF0aW9uIHRhcmdldDogRmFpbHVyZSwg ZGVzdHJveWluZyBvdXIgY29weS5cbiIpOworCisgICAgICAgIHJjMiA9IGxpYnhsX2RvbWFpbl9k ZXN0cm95KGN0eCwgZG9taWQsIDApOworICAgICAgICBpZiAocmMyKSB7CisgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgIm1pZ3JhdGlvbiB0YXJnZXQ6IEZhaWxlZCB0byBkZXN0cm95IG91ciBj b3B5IgorICAgICAgICAgICAgICAgICAgICAiIChjb2RlICVkKS5cbiIsIHJjMik7CisgICAgICAg ICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgIm1pZ3JhdGlvbiB0YXJnZXQ6IENsZWFudXAgT0ssIGdyYW50aW5nIHNlbmRlciIKKyAg ICAgICAgICAgICAgICAiIHBlcm1pc3Npb24gdG8gcmVzdW1lLlxuIik7CisKKyAgICAgICAgcmMy ID0gbGlieGxfd3JpdGVfZXhhY3RseShjdHgsIHNlbmRfZmQsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbWlncmF0ZV9wZXJtaXNzaW9uX3RvX2dvLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWdyYXRlX3Blcm1pc3Npb25fdG9fZ28pLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtaWdyYXRpb24gYWNrIHN0cmVhbSIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBlcm1pc3Npb24gdG8gc2VuZGVyIHRv IGhhdmUgZG9tYWluIGJhY2siKTsKKyAgICAgICAgaWYgKHJjMikgZXhpdChFWElUX0ZBSUxVUkUp OworICAgIH0KKworICAgIGV4aXQoRVhJVF9TVUNDRVNTKTsKK30KKworCitpbnQgbWFpbl9taWdy YXRlX3JlY2VpdmUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBkZWJ1ZyA9IDAs IGRhZW1vbml6ZSA9IDEsIG1vbml0b3IgPSAxLCBwYXVzZV9hZnRlcl9taWdyYXRpb24gPSAwOwor ICAgIGxpYnhsX2NoZWNrcG9pbnRlZF9zdHJlYW0gY2hlY2twb2ludGVkID0gTElCWExfQ0hFQ0tQ T0lOVEVEX1NUUkVBTV9OT05FOworICAgIGludCBvcHQ7CisgICAgY2hhciAqc2NyaXB0ID0gTlVM TDsKKyAgICBzdGF0aWMgc3RydWN0IG9wdGlvbiBvcHRzW10gPSB7CisgICAgICAgIHsiY29sbyIs IDAsIDAsIDB4MTAwfSwKKyAgICAgICAgLyogSXQgaXMgYSBzaGFtZSB0aGF0IHRoZSBtYW5hZ2Vt ZW50IGNvZGUgZm9yIGRpc2sgaXMgbm90IGhlcmUuICovCisgICAgICAgIHsiY29sb2Z0LXNjcmlw dCIsIDEsIDAsIDB4MjAwfSwKKyAgICAgICAgQ09NTU9OX0xPTkdfT1BUUworICAgIH07CisKKyAg ICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiRmVkcnAiLCBvcHRzLCAibWlncmF0ZS1yZWNlaXZl IiwgMCkgeworICAgIGNhc2UgJ0YnOgorICAgICAgICBkYWVtb25pemUgPSAwOworICAgICAgICBi cmVhazsKKyAgICBjYXNlICdlJzoKKyAgICAgICAgZGFlbW9uaXplID0gMDsKKyAgICAgICAgbW9u aXRvciA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2QnOgorICAgICAgICBkZWJ1ZyA9 IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3InOgorICAgICAgICBjaGVja3BvaW50ZWQg PSBMSUJYTF9DSEVDS1BPSU5URURfU1RSRUFNX1JFTVVTOworICAgICAgICBicmVhazsKKyAgICBj YXNlIDB4MTAwOgorICAgICAgICBjaGVja3BvaW50ZWQgPSBMSUJYTF9DSEVDS1BPSU5URURfU1RS RUFNX0NPTE87CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgyMDA6CisgICAgICAgIHNjcmlw dCA9IG9wdGFyZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAncCc6CisgICAgICAgIHBhdXNl X2FmdGVyX21pZ3JhdGlvbiA9IDE7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmIChh cmdjLW9wdGluZCAhPSAwKSB7CisgICAgICAgIGhlbHAoIm1pZ3JhdGUtcmVjZWl2ZSIpOworICAg ICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgIH0KKyAgICBtaWdyYXRlX3JlY2VpdmUoZGVi dWcsIGRhZW1vbml6ZSwgbW9uaXRvciwgcGF1c2VfYWZ0ZXJfbWlncmF0aW9uLAorICAgICAgICAg ICAgICAgICAgICBTVERPVVRfRklMRU5PLCBTVERJTl9GSUxFTk8sCisgICAgICAgICAgICAgICAg ICAgIGNoZWNrcG9pbnRlZCwgc2NyaXB0KTsKKworICAgIHJldHVybiBFWElUX1NVQ0NFU1M7Cit9 CisKK2ludCBtYWluX21pZ3JhdGUoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIHVpbnQz Ml90IGRvbWlkOworICAgIGNvbnN0IGNoYXIgKmNvbmZpZ19maWxlbmFtZSA9IE5VTEw7CisgICAg Y29uc3QgY2hhciAqc3NoX2NvbW1hbmQgPSAic3NoIjsKKyAgICBjaGFyICpydW5lID0gTlVMTDsK KyAgICBjaGFyICpob3N0OworICAgIGludCBvcHQsIGRhZW1vbml6ZSA9IDEsIG1vbml0b3IgPSAx LCBkZWJ1ZyA9IDAsIHBhdXNlX2FmdGVyX21pZ3JhdGlvbiA9IDA7CisgICAgc3RhdGljIHN0cnVj dCBvcHRpb24gb3B0c1tdID0geworICAgICAgICB7ImRlYnVnIiwgMCwgMCwgMHgxMDB9LAorICAg ICAgICB7ImxpdmUiLCAwLCAwLCAweDIwMH0sCisgICAgICAgIENPTU1PTl9MT05HX09QVFMKKyAg ICB9OworCisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIkZDOnM6ZXAiLCBvcHRzLCAibWln cmF0ZSIsIDIpIHsKKyAgICBjYXNlICdDJzoKKyAgICAgICAgY29uZmlnX2ZpbGVuYW1lID0gb3B0 YXJnOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdzJzoKKyAgICAgICAgc3NoX2NvbW1hbmQg PSBvcHRhcmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ0YnOgorICAgICAgICBkYWVtb25p emUgPSAwOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdlJzoKKyAgICAgICAgZGFlbW9uaXpl ID0gMDsKKyAgICAgICAgbW9uaXRvciA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3An OgorICAgICAgICBwYXVzZV9hZnRlcl9taWdyYXRpb24gPSAxOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIDB4MTAwOiAvKiAtLWRlYnVnICovCisgICAgICAgIGRlYnVnID0gMTsKKyAgICAgICAg YnJlYWs7CisgICAgY2FzZSAweDIwMDogLyogLS1saXZlICovCisgICAgICAgIC8qIGlnbm9yZWQg Zm9yIGNvbXBhdGliaWxpdHkgd2l0aCB4bSAqLworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg ICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworICAgIGhvc3QgPSBhcmd2W29w dGluZCArIDFdOworCisgICAgYm9vbCBwYXNzX3R0eV9hcmcgPSBwcm9ncmVzc191c2VfY3IgfHwg KGlzYXR0eSgyKSA+IDApOworCisgICAgaWYgKCFzc2hfY29tbWFuZFswXSkgeworICAgICAgICBy dW5lPSBob3N0OworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgdmVyYm9zZV9idWZbbWlubXNn bGV2ZWxfZGVmYXVsdCszXTsKKyAgICAgICAgaW50IHZlcmJvc2VfbGVuOworICAgICAgICB2ZXJi b3NlX2J1ZlswXSA9ICcgJzsKKyAgICAgICAgdmVyYm9zZV9idWZbMV0gPSAnLSc7CisgICAgICAg IG1lbXNldCh2ZXJib3NlX2J1ZisyLCAndicsIG1pbm1zZ2xldmVsX2RlZmF1bHQpOworICAgICAg ICB2ZXJib3NlX2J1ZltzaXplb2YodmVyYm9zZV9idWYpLTFdID0gMDsKKyAgICAgICAgaWYgKG1p bm1zZ2xldmVsID09IG1pbm1zZ2xldmVsX2RlZmF1bHQpIHsKKyAgICAgICAgICAgIHZlcmJvc2Vf bGVuID0gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZlcmJvc2VfbGVuID0gKG1p bm1zZ2xldmVsX2RlZmF1bHQgLSBtaW5tc2dsZXZlbCkgKyAyOworICAgICAgICB9CisgICAgICAg IHhhc3ByaW50ZigmcnVuZSwgImV4ZWMgJXMgJXMgeGwlcyUuKnMgbWlncmF0ZS1yZWNlaXZlJXMl cyVzIiwKKyAgICAgICAgICAgICAgICAgIHNzaF9jb21tYW5kLCBob3N0LAorICAgICAgICAgICAg ICAgICAgcGFzc190dHlfYXJnID8gIiAtdCIgOiAiIiwKKyAgICAgICAgICAgICAgICAgIHZlcmJv c2VfbGVuLCB2ZXJib3NlX2J1ZiwKKyAgICAgICAgICAgICAgICAgIGRhZW1vbml6ZSA/ICIiIDog IiAtZSIsCisgICAgICAgICAgICAgICAgICBkZWJ1ZyA/ICIgLWQiIDogIiIsCisgICAgICAgICAg ICAgICAgICBwYXVzZV9hZnRlcl9taWdyYXRpb24gPyAiIC1wIiA6ICIiKTsKKyAgICB9CisKKyAg ICBtaWdyYXRlX2RvbWFpbihkb21pZCwgcnVuZSwgZGVidWcsIGNvbmZpZ19maWxlbmFtZSk7Cisg ICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KKworaW50IG1haW5fcmVtdXMoaW50IGFyZ2MsIGNo YXIgKiphcmd2KQoreworICAgIHVpbnQzMl90IGRvbWlkOworICAgIGludCBvcHQsIHJjLCBkYWVt b25pemUgPSAxOworICAgIGNvbnN0IGNoYXIgKnNzaF9jb21tYW5kID0gInNzaCI7CisgICAgY2hh ciAqaG9zdCA9IE5VTEwsICpydW5lID0gTlVMTDsKKyAgICBsaWJ4bF9kb21haW5fcmVtdXNfaW5m byByX2luZm87CisgICAgaW50IHNlbmRfZmQgPSAtMSwgcmVjdl9mZCA9IC0xOworICAgIHBpZF90 IGNoaWxkID0gLTE7CisgICAgdWludDhfdCAqY29uZmlnX2RhdGE7CisgICAgaW50IGNvbmZpZ19s ZW47CisKKyAgICBtZW1zZXQoJnJfaW5mbywgMCwgc2l6ZW9mKGxpYnhsX2RvbWFpbl9yZW11c19p bmZvKSk7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiRmJ1bmRpOnM6TjplYyIsIE5V TEwsICJyZW11cyIsIDIpIHsKKyAgICBjYXNlICdpJzoKKyAgICAgICAgcl9pbmZvLmludGVydmFs ID0gYXRvaShvcHRhcmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdGJzoKKyAgICAgICAg bGlieGxfZGVmYm9vbF9zZXQoJnJfaW5mby5hbGxvd191bnNhZmUsIHRydWUpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlICdiJzoKKyAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnJfaW5mby5i bGFja2hvbGUsIHRydWUpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICd1JzoKKyAgICAgICAg bGlieGxfZGVmYm9vbF9zZXQoJnJfaW5mby5jb21wcmVzc2lvbiwgZmFsc2UpOworICAgICAgICBi cmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgICAgbGlieGxfZGVmYm9vbF9zZXQoJnJfaW5mby5u ZXRidWYsIGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTic6CisgICAgICAgIHJf aW5mby5uZXRidWZzY3JpcHQgPSBvcHRhcmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2Qn OgorICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmcl9pbmZvLmRpc2tidWYsIGZhbHNlKTsKKyAg ICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgICAgIHNzaF9jb21tYW5kID0gb3B0YXJn OworICAgICAgICBicmVhazsKKyAgICBjYXNlICdlJzoKKyAgICAgICAgZGFlbW9uaXplID0gMDsK KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnYyc6CisgICAgICAgIGxpYnhsX2RlZmJvb2xfc2V0 KCZyX2luZm8uY29sbywgdHJ1ZSk7CisgICAgfQorCisgICAgZG9taWQgPSB4ZmluZF9kb21haW4o YXJndltvcHRpbmRdKTsKKyAgICBob3N0ID0gYXJndltvcHRpbmQgKyAxXTsKKworICAgIC8qIERl ZmF1bHRzICovCisgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZyX2luZm8uYmxhY2tob2xl LCBmYWxzZSk7CisgICAgbGlieGxfZGVmYm9vbF9zZXRkZWZhdWx0KCZyX2luZm8uY29sbywgZmFs c2UpOworICAgIGlmICghbGlieGxfZGVmYm9vbF92YWwocl9pbmZvLmNvbG8pICYmICFyX2luZm8u aW50ZXJ2YWwpCisgICAgICAgIHJfaW5mby5pbnRlcnZhbCA9IDIwMDsKKworICAgIGlmIChsaWJ4 bF9kZWZib29sX3ZhbChyX2luZm8uY29sbykpIHsKKyAgICAgICAgaWYgKHJfaW5mby5pbnRlcnZh bCB8fCBsaWJ4bF9kZWZib29sX3ZhbChyX2luZm8uYmxhY2tob2xlKSB8fAorICAgICAgICAgICAg IWxpYnhsX2RlZmJvb2xfaXNfZGVmYXVsdChyX2luZm8ubmV0YnVmKSB8fAorICAgICAgICAgICAg IWxpYnhsX2RlZmJvb2xfaXNfZGVmYXVsdChyX2luZm8uZGlza2J1ZikpIHsKKyAgICAgICAgICAg IHBlcnJvcigib3B0aW9uIC1jIGlzIGNvbmZsaWN0IHdpdGggLWksIC1kLCAtbiBvciAtYiIpOwor ICAgICAgICAgICAgZXhpdCgtMSk7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGlieGxfZGVm Ym9vbF9pc19kZWZhdWx0KHJfaW5mby5jb21wcmVzc2lvbikpIHsKKyAgICAgICAgICAgIHBlcnJv cigiQ09MTyBjYW4ndCBiZSB1c2VkIHdpdGggbWVtb3J5IGNvbXByZXNzaW9uLiAiCisgICAgICAg ICAgICAgICAgICAgIkRpc2FibGUgbWVtb3J5IGNoZWNrcG9pbnQgY29tcHJlc3Npb24gbm93Li4u Iik7CisgICAgICAgICAgICBsaWJ4bF9kZWZib29sX3NldCgmcl9pbmZvLmNvbXByZXNzaW9uLCBm YWxzZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIXJfaW5mby5uZXRidWZzY3JpcHQp IHsKKyAgICAgICAgaWYgKGxpYnhsX2RlZmJvb2xfdmFsKHJfaW5mby5jb2xvKSkKKyAgICAgICAg ICAgIHJfaW5mby5uZXRidWZzY3JpcHQgPSBkZWZhdWx0X2NvbG9fcHJveHlfc2NyaXB0OworICAg ICAgICBlbHNlCisgICAgICAgICAgICByX2luZm8ubmV0YnVmc2NyaXB0ID0gZGVmYXVsdF9yZW11 c19uZXRidWZzY3JpcHQ7CisgICAgfQorCisgICAgaWYgKGxpYnhsX2RlZmJvb2xfdmFsKHJfaW5m by5ibGFja2hvbGUpKSB7CisgICAgICAgIHNlbmRfZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JE V1IsIDA2NDQpOworICAgICAgICBpZiAoc2VuZF9mZCA8IDApIHsKKyAgICAgICAgICAgIHBlcnJv cigiZmFpbGVkIHRvIG9wZW4gL2Rldi9udWxsIik7CisgICAgICAgICAgICBleGl0KEVYSVRfRkFJ TFVSRSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworCisgICAgICAgIGlmICghc3NoX2NvbW1h bmRbMF0pIHsKKyAgICAgICAgICAgIHJ1bmUgPSBob3N0OworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgaWYgKCFsaWJ4bF9kZWZib29sX3ZhbChyX2luZm8uY29sbykpIHsKKyAgICAgICAg ICAgICAgICB4YXNwcmludGYoJnJ1bmUsICJleGVjICVzICVzIHhsIG1pZ3JhdGUtcmVjZWl2ZSAl cyAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNzaF9jb21tYW5kLCBob3N0LAorICAg ICAgICAgICAgICAgICAgICAgICAgICAiLXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBk YWVtb25pemUgPyAiIiA6ICIgLWUiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg ICAgICAgeGFzcHJpbnRmKCZydW5lLCAiZXhlYyAlcyAlcyB4bCBtaWdyYXRlLXJlY2VpdmUgJXMg JXMgJXMgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hfY29tbWFuZCwgaG9zdCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIi0tY29sbyIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgIHJfaW5mby5uZXRidWZzY3JpcHQgPyAiLS1jb2xvZnQtc2NyaXB0IiA6ICIiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICByX2luZm8ubmV0YnVmc2NyaXB0ID8gcl9pbmZvLm5ldGJ1 ZnNjcmlwdCA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkYWVtb25pemUgPyAiIiA6 ICIgLWUiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNhdmVfZG9tYWlu X2NvcmVfYmVnaW4oZG9taWQsIE5VTEwsICZjb25maWdfZGF0YSwgJmNvbmZpZ19sZW4pOworCisg ICAgICAgIGlmICghY29uZmlnX2xlbikgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJO byBjb25maWcgZmlsZSBzdG9yZWQgZm9yIHJ1bm5pbmcgZG9tYWluIGFuZCAiCisgICAgICAgICAg ICAgICAgICAgICJub25lIHN1cHBsaWVkIC0gY2Fubm90IHN0YXJ0IHJlbXVzLlxuIik7CisgICAg ICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgICAgIH0KKworICAgICAgICBjaGlsZCA9 IGNyZWF0ZV9taWdyYXRpb25fY2hpbGQocnVuZSwgJnNlbmRfZmQsICZyZWN2X2ZkKTsKKworICAg ICAgICBtaWdyYXRlX2RvX3ByZWFtYmxlKHNlbmRfZmQsIHJlY3ZfZmQsIGNoaWxkLCBjb25maWdf ZGF0YSwgY29uZmlnX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBydW5lKTsKKwor ICAgICAgICBpZiAoc3NoX2NvbW1hbmRbMF0pCisgICAgICAgICAgICBmcmVlKHJ1bmUpOworICAg IH0KKworICAgIC8qIFBvaW50IG9mIG5vIHJldHVybiAqLworICAgIHJjID0gbGlieGxfZG9tYWlu X3JlbXVzX3N0YXJ0KGN0eCwgJnJfaW5mbywgZG9taWQsIHNlbmRfZmQsIHJlY3ZfZmQsIDApOwor CisgICAgLyogY2hlY2sgaWYgdGhlIGRvbWFpbiBleGlzdHMuIFVzZXIgbWF5IGhhdmUgeGwgZGVz dHJveWVkIHRoZQorICAgICAqIGRvbWFpbiB0byBmb3JjZSBmYWlsb3ZlcgorICAgICAqLworICAg IGlmIChsaWJ4bF9kb21haW5faW5mbyhjdHgsIDAsIGRvbWlkKSkgeworICAgICAgICBmcHJpbnRm KHN0ZGVyciwgIiVzOiBQcmltYXJ5IGRvbWFpbiBoYXMgYmVlbiBkZXN0cm95ZWQuXG4iLAorICAg ICAgICAgICAgICAgIGxpYnhsX2RlZmJvb2xfdmFsKHJfaW5mby5jb2xvKSA/ICJDT0xPIiA6ICJS ZW11cyIpOworICAgICAgICBjbG9zZShzZW5kX2ZkKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfU1VD Q0VTUzsKKyAgICB9CisKKyAgICAvKiBJZiB3ZSBhcmUgaGVyZSwgaXQgbWVhbnMgcmVtdXMgc2V0 dXAvZG9tYWluIHN1c3BlbmQvYmFja3VwIGhhcworICAgICAqIGZhaWxlZC4gVHJ5IHRvIHJlc3Vt ZSB0aGUgZG9tYWluIGFuZCBleGl0IGdyYWNlZnVsbHkuCisgICAgICogVE9ETzogU3BsaXQtQnJh aW4gY2hlY2suCisgICAgICovCisgICAgaWYgKHJjID09IEVSUk9SX0dVRVNUX1RJTUVET1VUKQor ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBzdXNwZW5kIGRvbWFpbiBhdCBwcmlt YXJ5LlxuIik7CisgICAgZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IEJhY2t1 cCBmYWlsZWQ/IHJlc3VtaW5nIGRvbWFpbiBhdCBwcmltYXJ5LlxuIiwKKyAgICAgICAgICAgICAg ICBsaWJ4bF9kZWZib29sX3ZhbChyX2luZm8uY29sbykgPyAiQ09MTyIgOiAiUmVtdXMiKTsKKyAg ICAgICAgbGlieGxfZG9tYWluX3Jlc3VtZShjdHgsIGRvbWlkLCAxLCAwKTsKKyAgICB9CisKKyAg ICBjbG9zZShzZW5kX2ZkKTsKKyAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworfQorI2VuZGlmCisK KworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIG1vZGU6IEMKKyAqIGMtYmFzaWMtb2Zmc2V0 OiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVuZDoKKyAqLwotLSAKMi4xMS4wCgoK X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVs IG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5v cmcveGVuLWRldmVsCg==