From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v6 8/9] x86/mm: move PV code to pv/mm.c Date: Tue, 13 Feb 2018 20:04:07 +0000 Message-ID: <20180213200408.5463-9-wei.liu2@citrix.com> References: <20180213200408.5463-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1elgpH-0006fY-Uh for xen-devel@lists.xenproject.org; Tue, 13 Feb 2018 20:05:16 +0000 In-Reply-To: <20180213200408.5463-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org VGhlIGZvbGxvd2luZyBjb2RlIGlzIG1vdmVkOgoKMS4gUFYgTU1VIGh5cGVyY2FsbCBoYW5kbGVy cwoyLiBQViBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHN1Y2ggYXM6CiAgIDIuMSB7Z2V0LHB1dH1f cGFnZV9mcm9tX2x7MiwzLDR9ZQogICAyLjIgcHZfe2FsbG9jLGZyZWV9X3BhZ2VfdHlwZQozLiBB bGwgaGVscGVyIGZ1bmN0aW9ucyBmb3IgdGhlIGFib3ZlCgpUaGUgbDFlIGZ1bmN0aW9ucyBjYW4n dCBiZSBtb3ZlZCBiZWNhdXNlIHRoZXkgYXJlIG5lZWRlZCBieSBzaGFkb3cKY29kZSBhcyB3ZWxs LgoKUHVyZSBjb2RlIG1vdmVtZW50LgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJA Y2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvbW0uYyAgICB8IDI2MjAgKystLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4Ni9wdi9t bS5jIHwgMjQ1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiAyIGZpbGVzIGNoYW5nZWQsIDI1NDAgaW5zZXJ0aW9ucygrKSwgMjUzMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5jCmluZGV4 IGUwMDQzNTBlODMuLjBiNWZkMTk5YTQgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9tbS5jCisr KyBiL3hlbi9hcmNoL3g4Ni9tbS5jCkBAIC01MzksMjE4ICs1MzksNiBAQCBjb25zdCBjaGFyIF9f c2VjdGlvbigiLmJzcy5wYWdlX2FsaWduZWQuY29uc3QiKSBfX2FsaWduZWQoUEFHRV9TSVpFKQog ICAgIHplcm9fcGFnZVtQQUdFX1NJWkVdOwogCiAKLXN0YXRpYyBpbnQgYWxsb2Nfc2VnZGVzY19w YWdlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgY29uc3Qgc3RydWN0IGRvbWFpbiAq b3duZXIgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICBzdHJ1Y3QgZGVzY19zdHJ1Y3QgKmRl c2NzID0gX19tYXBfZG9tYWluX3BhZ2UocGFnZSk7Ci0gICAgdW5zaWduZWQgaTsKLQotICAgIGZv ciAoIGkgPSAwOyBpIDwgNTEyOyBpKysgKQotICAgICAgICBpZiAoIHVubGlrZWx5KCFjaGVja19k ZXNjcmlwdG9yKG93bmVyLCAmZGVzY3NbaV0pKSApCi0gICAgICAgICAgICBicmVhazsKLQotICAg IHVubWFwX2RvbWFpbl9wYWdlKGRlc2NzKTsKLQotICAgIHJldHVybiBpID09IDUxMiA/IDAgOiAt RUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKAotICAg IG1mbl90IG1mbiwgdW5zaWduZWQgbG9uZyB0eXBlLCBzdHJ1Y3QgZG9tYWluICpkLAotICAgIGlu dCBwYXJ0aWFsLCBpbnQgcHJlZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZSA9IG1mbl90b19wYWdlKG1mbik7Ci0gICAgaW50IHJjOwotCi0gICAgaWYgKCBsaWtlbHkocGFy dGlhbCA+PSAwKSAmJgotICAgICAgICAgdW5saWtlbHkoIWdldF9wYWdlX2Zyb21fbWZuKG1mbiwg ZCkpICkKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0KLSAgICByYyA9IChwcmVlbXB0aWJsZSA/ Ci0gICAgICAgICAgZ2V0X3BhZ2VfdHlwZV9wcmVlbXB0aWJsZShwYWdlLCB0eXBlKSA6Ci0gICAg ICAgICAgKGdldF9wYWdlX3R5cGUocGFnZSwgdHlwZSkgPyAwIDogLUVJTlZBTCkpOwotCi0gICAg aWYgKCB1bmxpa2VseShyYykgJiYgcGFydGlhbCA+PSAwICYmCi0gICAgICAgICAoIXByZWVtcHRp YmxlIHx8IHBhZ2UgIT0gY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUpICkKLSAgICAgICAg cHV0X3BhZ2UocGFnZSk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyB2b2lkIHB1dF9k YXRhX3BhZ2UoCi0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHdyaXRlYWJsZSkKLXsK LSAgICBpZiAoIHdyaXRlYWJsZSApCi0gICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwot ICAgIGVsc2UKLSAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci19Ci0KLSNpZmRlZiBDT05GSUdfUFZf TElORUFSX1BUCi0KLXN0YXRpYyBib29sIGluY19saW5lYXJfZW50cmllcyhzdHJ1Y3QgcGFnZV9p bmZvICpwZykKLXsKLSAgICB0eXBlb2YocGctPmxpbmVhcl9wdF9jb3VudCkgbmMgPSByZWFkX2F0 b21pYygmcGctPmxpbmVhcl9wdF9jb3VudCksIG9jOwotCi0gICAgZG8gewotICAgICAgICAvKgot ICAgICAgICAgKiBUaGUgY2hlY2sgYmVsb3cgY2hlY2tzIGZvciB0aGUgImxpbmVhciB1c2UiIGNv dW50IGJlaW5nIG5vbi16ZXJvCi0gICAgICAgICAqIGFzIHdlbGwgYXMgb3ZlcmZsb3cuICBTaWdu ZWQgaW50ZWdlciBvdmVyZmxvdyBpcyB1bmRlZmluZWQgYmVoYXZpb3IKLSAgICAgICAgICogYWNj b3JkaW5nIHRvIHRoZSBDIHNwZWMuICBIb3dldmVyLCBhcyBsb25nIGFzIGxpbmVhcl9wdF9jb3Vu dCBpcwotICAgICAgICAgKiBzbWFsbGVyIGluIHNpemUgdGhhbiAnaW50JywgdGhlIGFyaXRobWV0 aWMgb3BlcmF0aW9uIG9mIHRoZQotICAgICAgICAgKiBpbmNyZW1lbnQgYmVsb3cgd29uJ3Qgb3Zl cmZsb3c7IHJhdGhlciB0aGUgcmVzdWx0IHdpbGwgYmUgdHJ1bmNhdGVkCi0gICAgICAgICAqIHdo ZW4gc3RvcmVkLiAgRW5zdXJlIHRoYXQgdGhpcyBpcyBhbHdheXMgdHJ1ZS4KLSAgICAgICAgICov Ci0gICAgICAgIEJVSUxEX0JVR19PTihzaXplb2YobmMpID49IHNpemVvZihpbnQpKTsKLSAgICAg ICAgb2MgPSBuYysrOwotICAgICAgICBpZiAoIG5jIDw9IDAgKQotICAgICAgICAgICAgcmV0dXJu IGZhbHNlOwotICAgICAgICBuYyA9IGNtcHhjaGcoJnBnLT5saW5lYXJfcHRfY291bnQsIG9jLCBu Yyk7Ci0gICAgfSB3aGlsZSAoIG9jICE9IG5jICk7Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot c3RhdGljIHZvaWQgZGVjX2xpbmVhcl9lbnRyaWVzKHN0cnVjdCBwYWdlX2luZm8gKnBnKQotewot ICAgIHR5cGVvZihwZy0+bGluZWFyX3B0X2NvdW50KSBvYzsKLQotICAgIG9jID0gYXJjaF9mZXRj aF9hbmRfYWRkKCZwZy0+bGluZWFyX3B0X2NvdW50LCAtMSk7Ci0gICAgQVNTRVJUKG9jID4gMCk7 Ci19Ci0KLXN0YXRpYyBib29sIGluY19saW5lYXJfdXNlcyhzdHJ1Y3QgcGFnZV9pbmZvICpwZykK LXsKLSAgICB0eXBlb2YocGctPmxpbmVhcl9wdF9jb3VudCkgbmMgPSByZWFkX2F0b21pYygmcGct PmxpbmVhcl9wdF9jb3VudCksIG9jOwotCi0gICAgZG8gewotICAgICAgICAvKiBTZWUgdGhlIHJl c3BlY3RpdmUgY29tbWVudCBpbiBpbmNfbGluZWFyX2VudHJpZXMoKS4gKi8KLSAgICAgICAgQlVJ TERfQlVHX09OKHNpemVvZihuYykgPj0gc2l6ZW9mKGludCkpOwotICAgICAgICBvYyA9IG5jLS07 Ci0gICAgICAgIGlmICggbmMgPj0gMCApCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg ICAgIG5jID0gY21weGNoZygmcGctPmxpbmVhcl9wdF9jb3VudCwgb2MsIG5jKTsKLSAgICB9IHdo aWxlICggb2MgIT0gbmMgKTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBk ZWNfbGluZWFyX3VzZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGcpCi17Ci0gICAgdHlwZW9mKHBnLT5s aW5lYXJfcHRfY291bnQpIG9jOwotCi0gICAgb2MgPSBhcmNoX2ZldGNoX2FuZF9hZGQoJnBnLT5s aW5lYXJfcHRfY291bnQsIDEpOwotICAgIEFTU0VSVChvYyA8IDApOwotfQotCi0vKgotICogV2Ug YWxsb3cgcm9vdCB0YWJsZXMgdG8gbWFwIGVhY2ggb3RoZXIgKGEuay5hLiBsaW5lYXIgcGFnZSB0 YWJsZXMpLiBJdAotICogbmVlZHMgc29tZSBzcGVjaWFsIGNhcmUgd2l0aCByZWZlcmVuY2UgY291 bnRzIGFuZCBhY2Nlc3MgcGVybWlzc2lvbnM6Ci0gKiAgMS4gVGhlIG1hcHBpbmcgZW50cnkgbXVz dCBiZSByZWFkLW9ubHksIG9yIHRoZSBndWVzdCBtYXkgZ2V0IHdyaXRlIGFjY2VzcwotICogICAg IHRvIGl0cyBvd24gUFRFcy4KLSAqICAyLiBXZSBtdXN0IG9ubHkgYnVtcCB0aGUgcmVmZXJlbmNl IGNvdW50cyBmb3IgYW4gKmFscmVhZHkgdmFsaWRhdGVkKgotICogICAgIEwyIHRhYmxlLCBvciB3 ZSBjYW4gZW5kIHVwIGluIGEgZGVhZGxvY2sgaW4gZ2V0X3BhZ2VfdHlwZSgpIGJ5IHdhaXRpbmcK LSAqICAgICBvbiBhIHZhbGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZCB0byBjb21wbGV0ZSB0aGF0 IHZhbGlkYXRpb24uCi0gKiAgMy4gV2Ugb25seSBuZWVkIHRvIGluY3JlbWVudCB0aGUgcmVmZXJl bmNlIGNvdW50cyBmb3IgdGhlIG1hcHBlZCBwYWdlCi0gKiAgICAgZnJhbWUgaWYgaXQgaXMgbWFw cGVkIGJ5IGEgZGlmZmVyZW50IHJvb3QgdGFibGUuIFRoaXMgaXMgc3VmZmljaWVudCBhbmQKLSAq ICAgICBhbHNvIG5lY2Vzc2FyeSB0byBhbGxvdyB2YWxpZGF0aW9uIG9mIGEgcm9vdCB0YWJsZSBt YXBwaW5nIGl0c2VsZi4KLSAqLwotc3RhdGljIGJvb2wgX19yZWFkX21vc3RseSBvcHRfcHZfbGlu ZWFyX3B0ID0gdHJ1ZTsKLWJvb2xlYW5fcGFyYW0oInB2LWxpbmVhci1wdCIsIG9wdF9wdl9saW5l YXJfcHQpOwotCi0jZGVmaW5lIGRlZmluZV9nZXRfbGluZWFyX3BhZ2V0YWJsZShsZXZlbCkgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotc3RhdGljIGludCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdl dF8jI2xldmVsIyNfbGluZWFyX3BhZ2V0YWJsZSggICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgbGV2ZWwjI19wZ2VudHJ5X3QgcGRlLCB1bnNpZ25lZCBs b25nIHBkZV9wZm4sIHN0cnVjdCBkb21haW4gKmQpICAgICAgICAgXAoteyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICB1bnNpZ25lZCBsb25nIHgsIHk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgdW5zaWduZWQgbG9uZyBwZm47ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICBpZiAoICFvcHRfcHZfbGluZWFyX3B0ICkgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgIkF0dGVtcHQgdG8gY3Jl YXRlIGxpbmVhciBwLnQuIChmZWF0dXJlIGRpc2FibGVkKVxuIik7ICAgICBcCi0gICAgICAgIHJl dHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgaWYgKCAobGV2ZWwjI2VfZ2V0X2ZsYWdzKHBkZSkgJiBfUEFHRV9SVykgKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAotICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIGNyZWF0ZSBsaW5lYXIgcC50LiB3 aXRoIHdyaXRlIHBlcm1zXG4iKTsgICAgICAgXAotICAgICAgICByZXR1cm4gMDsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggKHBmbiA9IGxl dmVsIyNlX2dldF9wZm4ocGRlKSkgIT0gcGRlX3BmbiApICAgICAgICAgICAgICAgICAgICAgICAg IFwKLSAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Us ICpwdHBnID0gbWZuX3RvX3BhZ2UoX21mbihwZGVfcGZuKSk7ICAgICAgICAgXAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBwYWdlIHRhYmxlIGJlbG9uZ3Mg dG8gdGhlIGNvcnJlY3QgZG9tYWluLiAqLyAgICAgICBcCi0gICAgICAgIGlmICggdW5saWtlbHko cGFnZV9nZXRfb3duZXIocHRwZykgIT0gZCkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIC8qIE1h a2Ugc3VyZSB0aGUgbWFwcGVkIGZyYW1lIGJlbG9uZ3MgdG8gdGhlIGNvcnJlY3QgZG9tYWluLiAq LyAgICAgXAotICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9tZm4oX21mbihwZm4pLCBkKTsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCB1bmxpa2VseSghcGFn ZSkgKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg ICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLyogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCi0gICAgICAgICAqIEVuc3VyZSB0aGF0IHRoZSBtYXBwZWQgZnJhbWUgaXMgYW4gYWxyZWFk eS12YWxpZGF0ZWQgcGFnZSB0YWJsZSAgXAotICAgICAgICAgKiBhbmQgaXMgbm90IGl0c2VsZiBo YXZpbmcgbGluZWFyIGVudHJpZXMsIGFzIHdlbGwgYXMgdGhhdCB0aGUgICAgIFwKLSAgICAgICAg ICogY29udGFpbmluZyBwYWdlIHRhYmxlIGlzIG5vdCBpc2VsZiBpbiB1c2UgYXMgYSBsaW5lYXIg cGFnZSB0YWJsZSBcCi0gICAgICAgICAqIGVsc2V3aGVyZS4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgKiBJZiBzbywgYXRv bWljYWxseSBpbmNyZW1lbnQgdGhlIGNvdW50IChjaGVja2luZyBmb3Igb3ZlcmZsb3cpLiAgIFwK LSAgICAgICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGlmICggIWluY19saW5lYXJfZW50cmllcyhw dHBnKSApICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKLSAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICByZXR1cm4gMDsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAg ICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKCAhaW5jX2xpbmVhcl91c2VzKHBhZ2UpICkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAotICAgICAgICAgICAgZGVjX2xpbmVhcl9lbnRyaWVzKHB0cGcpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAg ICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgeSA9IHBhZ2UtPnUu aW51c2UudHlwZV9pbmZvOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgeCA9IHk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAg IGlmICggdW5saWtlbHkoKHggJiBQR1RfY291bnRfbWFzaykgPT0gUEdUX2NvdW50X21hc2spIHx8 ICAgICAgICBcCi0gICAgICAgICAgICAgICAgIHVubGlrZWx5KCh4ICYgKFBHVF90eXBlX21hc2t8 UEdUX3ZhbGlkYXRlZCkpICE9ICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAg ICAoUEdUXyMjbGV2ZWwjI19wYWdlX3RhYmxlfFBHVF92YWxpZGF0ZWQpKSApICAgICAgIFwKLSAg ICAgICAgICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZGVjX2xpbmVhcl91c2VzKHBhZ2Up OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg IGRlY19saW5lYXJfZW50cmllcyhwdHBnKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKLSAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHdoaWxlICggKHkg PSBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgeCArIDEpKSAhPSB4ICk7ICAg XAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgcmV0dXJu IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotfQotCi0jZWxzZSAvKiBDT05GSUdfUFZfTElORUFSX1BUICovCi0KLSNkZWZp bmUgZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGxldmVsKSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLXN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLWdldF8jI2xldmVsIyNfbGluZWFyX3BhZ2V0 YWJsZSggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAg bGV2ZWwjI19wZ2VudHJ5X3QgcGRlLCB1bnNpZ25lZCBsb25nIHBkZV9wZm4sIHN0cnVjdCBkb21h aW4gKmQpIFwKLXsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLX0KLQotc3RhdGlj IHZvaWQgZGVjX2xpbmVhcl91c2VzKHN0cnVjdCBwYWdlX2luZm8gKnBnKQotewotICAgIEFTU0VS VChwZy0+bGluZWFyX3B0X2NvdW50ID09IDApOwotfQotCi1zdGF0aWMgdm9pZCBkZWNfbGluZWFy X2VudHJpZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGcpCi17Ci0gICAgQVNTRVJUKHBnLT5saW5lYXJf cHRfY291bnQgPT0gMCk7Ci19Ci0KLSNlbmRpZiAvKiBDT05GSUdfUFZfTElORUFSX1BUICovCi0K IGJvb2wgaXNfaW9tZW1fcGFnZShtZm5fdCBtZm4pCiB7CiAgICAgc3RydWN0IHBhZ2VfaW5mbyAq cGFnZTsKQEAgLTEwMzksMTA0ICs4MjcsNiBAQCBnZXRfcGFnZV9mcm9tX2wxZSgKICAgICByZXR1 cm4gLUVCVVNZOwogfQogCi0KLS8qIE5CLiBWaXJ0dWFsIGFkZHJlc3MgJ2wyZScgbWFwcyB0byBh IG1hY2hpbmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3BmbicuICovCi0vKgotICogZ2V0X3BhZ2Vf ZnJvbV9sMmUgcmV0dXJuczoKLSAqICAgMSA9PiBwYWdlIG5vdCBwcmVzZW50Ci0gKiAgIDAgPT4g c3VjY2VzcwotICogIDwwID0+IGVycm9yIGNvZGUKLSAqLwotZGVmaW5lX2dldF9saW5lYXJfcGFn ZXRhYmxlKGwyKTsKLXN0YXRpYyBpbnQKLWdldF9wYWdlX2Zyb21fbDJlKAotICAgIGwyX3BnZW50 cnlfdCBsMmUsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkKQotewotICAgIHVu c2lnbmVkIGxvbmcgbWZuID0gbDJlX2dldF9wZm4obDJlKTsKLSAgICBpbnQgcmM7Ci0KLSAgICBp ZiAoICEobDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFJFU0VOVCkgKQotICAgICAgICByZXR1 cm4gMTsKLQotICAgIGlmICggdW5saWtlbHkoKGwyZV9nZXRfZmxhZ3MobDJlKSAmIEwyX0RJU0FM TE9XX01BU0spKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJh ZCBMMiBmbGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICAgbDJlX2dldF9mbGFncyhsMmUpICYg TDJfRElTQUxMT1dfTUFTSyk7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAg IHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oX21mbihtZm4pLCBQR1RfbDFfcGFnZV90 YWJsZSwgZCwgMCwgMCk7Ci0gICAgaWYgKCB1bmxpa2VseShyYyA9PSAtRUlOVkFMKSAmJiBnZXRf bDJfbGluZWFyX3BhZ2V0YWJsZShsMmUsIHBmbiwgZCkgKQotICAgICAgICByYyA9IDA7Ci0KLSAg ICByZXR1cm4gcmM7Ci19Ci0KLQotLyoKLSAqIGdldF9wYWdlX2Zyb21fbDNlIHJldHVybnM6Ci0g KiAgIDEgPT4gcGFnZSBub3QgcHJlc2VudAotICogICAwID0+IHN1Y2Nlc3MKLSAqICA8MCA9PiBl cnJvciBjb2RlCi0gKi8KLWRlZmluZV9nZXRfbGluZWFyX3BhZ2V0YWJsZShsMyk7Ci1zdGF0aWMg aW50Ci1nZXRfcGFnZV9mcm9tX2wzZSgKLSAgICBsM19wZ2VudHJ5X3QgbDNlLCB1bnNpZ25lZCBs b25nIHBmbiwgc3RydWN0IGRvbWFpbiAqZCwgaW50IHBhcnRpYWwpCi17Ci0gICAgaW50IHJjOwot Ci0gICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1BSRVNFTlQpICkKLSAgICAg ICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoIHVubGlrZWx5KChsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBs M19kaXNhbGxvd19tYXNrKGQpKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJCYWQgTDMgZmxhZ3MgJXhcbiIsCi0gICAgICAgICAgICAgICAgIGwzZV9nZXRfZmxh Z3MobDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsK LSAgICB9Ci0KLSAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKAotICAgICAgICBs M2VfZ2V0X21mbihsM2UpLCBQR1RfbDJfcGFnZV90YWJsZSwgZCwgcGFydGlhbCwgMSk7Ci0gICAg aWYgKCB1bmxpa2VseShyYyA9PSAtRUlOVkFMKSAmJgotICAgICAgICAgIWlzX3B2XzMyYml0X2Rv bWFpbihkKSAmJgotICAgICAgICAgZ2V0X2wzX2xpbmVhcl9wYWdldGFibGUobDNlLCBwZm4sIGQp ICkKLSAgICAgICAgcmMgPSAwOwotCi0gICAgcmV0dXJuIHJjOwotfQotCi0vKgotICogZ2V0X3Bh Z2VfZnJvbV9sNGUgcmV0dXJuczoKLSAqICAgMSA9PiBwYWdlIG5vdCBwcmVzZW50Ci0gKiAgIDAg PT4gc3VjY2VzcwotICogIDwwID0+IGVycm9yIGNvZGUKLSAqLwotZGVmaW5lX2dldF9saW5lYXJf cGFnZXRhYmxlKGw0KTsKLXN0YXRpYyBpbnQKLWdldF9wYWdlX2Zyb21fbDRlKAotICAgIGw0X3Bn ZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLCBpbnQgcGFy dGlhbCkKLXsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoICEobDRlX2dldF9mbGFncyhsNGUpICYg X1BBR0VfUFJFU0VOVCkgKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmICggdW5saWtlbHko KGw0ZV9nZXRfZmxhZ3MobDRlKSAmIEw0X0RJU0FMTE9XX01BU0spKSApCi0gICAgewotICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMNCBmbGFncyAleFxuIiwKLSAgICAgICAg ICAgICAgICAgbDRlX2dldF9mbGFncyhsNGUpICYgTDRfRElTQUxMT1dfTUFTSyk7Ci0gICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJv bV9tZm4oCi0gICAgICAgIGw0ZV9nZXRfbWZuKGw0ZSksIFBHVF9sM19wYWdlX3RhYmxlLCBkLCBw YXJ0aWFsLCAxKTsKLSAgICBpZiAoIHVubGlrZWx5KHJjID09IC1FSU5WQUwpICYmIGdldF9sNF9s aW5lYXJfcGFnZXRhYmxlKGw0ZSwgcGZuLCBkKSApCi0gICAgICAgIHJjID0gMDsKLQotICAgIHJl dHVybiByYzsKLX0KLQogdm9pZCBwdXRfcGFnZV9mcm9tX2wxZShsMV9wZ2VudHJ5X3QgbDFlLCBz dHJ1Y3QgZG9tYWluICpsMWVfb3duZXIpCiB7CiAgICAgdW5zaWduZWQgbG9uZyAgICAgcGZuID0g bDFlX2dldF9wZm4obDFlKTsKQEAgLTExOTksMzA2ICs4ODksNiBAQCB2b2lkIHB1dF9wYWdlX2Zy b21fbDFlKGwxX3BnZW50cnlfdCBsMWUsIHN0cnVjdCBkb21haW4gKmwxZV9vd25lcikKICAgICB9 CiB9CiAKLQotLyoKLSAqIE5CLiBWaXJ0dWFsIGFkZHJlc3MgJ2wyZScgbWFwcyB0byBhIG1hY2hp bmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3BmbicuCi0gKiBOb3RlIGFsc28gdGhhdCB0aGlzIGF1 dG9tYXRpY2FsbHkgZGVhbHMgY29ycmVjdGx5IHdpdGggbGluZWFyIHAudC4ncy4KLSAqLwotc3Rh dGljIGludCBwdXRfcGFnZV9mcm9tX2wyZShsMl9wZ2VudHJ5X3QgbDJlLCB1bnNpZ25lZCBsb25n IHBmbikKLXsKLSAgICBpZiAoICEobDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFJFU0VOVCkg fHwgKGwyZV9nZXRfcGZuKGwyZSkgPT0gcGZuKSApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAg aWYgKCBsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QU0UgKQotICAgIHsKLSAgICAgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZSA9IGwyZV9nZXRfcGFnZShsMmUpOwotICAgICAgICB1bnNpZ25l ZCBpbnQgaTsKLQotICAgICAgICBmb3IgKCBpID0gMDsgaSA8ICgxdSA8PCBQQUdFVEFCTEVfT1JE RVIpOyBpKyssIHBhZ2UrKyApCi0gICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsK LSAgICB9Ci0gICAgZWxzZQotICAgIHsKLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcgPSBs MmVfZ2V0X3BhZ2UobDJlKTsKLSAgICAgICAgaW50IHJjID0gcHV0X3BhZ2VfdHlwZV9wdHBnKHBn LCBtZm5fdG9fcGFnZShfbWZuKHBmbikpKTsKLQotICAgICAgICBBU1NFUlQoIXJjKTsKLSAgICAg ICAgcHV0X3BhZ2UocGcpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgaW50 IHB1dF9wYWdlX2Zyb21fbDNlKGwzX3BnZW50cnlfdCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFydGlhbCwgYm9vbCBkZWZlcikKLXsK LSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZzsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoICEobDNl X2dldF9mbGFncyhsM2UpICYgX1BBR0VfUFJFU0VOVCkgfHwgKGwzZV9nZXRfcGZuKGwzZSkgPT0g cGZuKSApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2Zs YWdzKGwzZSkgJiBfUEFHRV9QU0UpICkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbWZu ID0gbDNlX2dldF9wZm4obDNlKTsKLSAgICAgICAgaW50IHdyaXRlYWJsZSA9IGwzZV9nZXRfZmxh Z3MobDNlKSAmIF9QQUdFX1JXOwotCi0gICAgICAgIEFTU0VSVCghKG1mbiAmICgoMVVMIDw8IChM M19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKSkpOwotICAgICAgICBkbyB7Ci0g ICAgICAgICAgICBwdXRfZGF0YV9wYWdlKG1mbl90b19wYWdlKF9tZm4obWZuKSksIHdyaXRlYWJs ZSk7Ci0gICAgICAgIH0gd2hpbGUgKCArK21mbiAmICgoMVVMIDw8IChMM19QQUdFVEFCTEVfU0hJ RlQgLSBQQUdFX1NISUZUKSkgLSAxKSApOwotCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQot ICAgIHBnID0gbDNlX2dldF9wYWdlKGwzZSk7Ci0KLSAgICBpZiAoIHVubGlrZWx5KHBhcnRpYWwg PiAwKSApCi0gICAgewotICAgICAgICBBU1NFUlQoIWRlZmVyKTsKLSAgICAgICAgcmV0dXJuIHB1 dF9wYWdlX3R5cGVfcHRwZ19wcmVlbXB0aWJsZShwZywgbWZuX3RvX3BhZ2UoX21mbihwZm4pKSk7 Ci0gICAgfQotCi0gICAgaWYgKCBkZWZlciApCi0gICAgewotICAgICAgICBjdXJyZW50LT5hcmNo Lm9sZF9ndWVzdF9wdHBnID0gbWZuX3RvX3BhZ2UoX21mbihwZm4pKTsKLSAgICAgICAgY3VycmVu dC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwZzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQot Ci0gICAgcmMgPSBwdXRfcGFnZV90eXBlX3B0cGdfcHJlZW1wdGlibGUocGcsIG1mbl90b19wYWdl KF9tZm4ocGZuKSkpOwotICAgIGlmICggbGlrZWx5KCFyYykgKQotICAgICAgICBwdXRfcGFnZShw Zyk7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLXN0YXRpYyBpbnQgcHV0X3BhZ2VfZnJvbV9sNGUo bDRfcGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGludCBwYXJ0aWFsLCBib29sIGRlZmVyKQotewotICAgIGludCByYyA9IDE7Ci0K LSAgICBpZiAoIChsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBfUEFHRV9QUkVTRU5UKSAmJgotICAgICAg ICAgKGw0ZV9nZXRfcGZuKGw0ZSkgIT0gcGZuKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcGFn ZV9pbmZvICpwZyA9IGw0ZV9nZXRfcGFnZShsNGUpOwotCi0gICAgICAgIGlmICggdW5saWtlbHko cGFydGlhbCA+IDApICkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKCFkZWZlcik7Ci0g ICAgICAgICAgICByZXR1cm4gcHV0X3BhZ2VfdHlwZV9wdHBnX3ByZWVtcHRpYmxlKHBnLCBtZm5f dG9fcGFnZShfbWZuKHBmbikpKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICggZGVmZXIgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF9wdHBnID0gbWZu X3RvX3BhZ2UoX21mbihwZm4pKTsKLSAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0 X3RhYmxlID0gcGc7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0gICAgICAg IHJjID0gcHV0X3BhZ2VfdHlwZV9wdHBnX3ByZWVtcHRpYmxlKHBnLCBtZm5fdG9fcGFnZShfbWZu KHBmbikpKTsKLSAgICAgICAgaWYgKCBsaWtlbHkoIXJjKSApCi0gICAgICAgICAgICBwdXRfcGFn ZShwZyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50IGFsbG9jX2wx X3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9 IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIGwxX3BnZW50cnlfdCAgKnBsMWU7Ci0gICAgdW5z aWduZWQgaW50ICAgaTsKLSAgICBpbnQgICAgICAgICAgICByZXQgPSAwOwotCi0gICAgcGwxZSA9 IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdF VEFCTEVfRU5UUklFUzsgaSsrICkKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAoIHJldCA9IGdldF9w YWdlX2Zyb21fbDFlKHBsMWVbaV0sIGQsIGQsIGwxX2Rpc2FsbG93X21hc2soZCkpICkKLSAgICAg ICAgewotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICBj YXNlIDA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBfUEFHRV9SVyAuLi4gX1BB R0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgotICAgICAgICAgICAgQVNTRVJUKCEocmV0ICYgfihf UEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7Ci0gICAgICAgICAgICBsMWVfZmxpcF9mbGFn cyhwbDFlW2ldLCByZXQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAg ICBwbDFlW2ldID0gYWRqdXN0X2d1ZXN0X2wxZShwbDFlW2ldLCBkKTsKLSAgICB9Ci0KLSAgICB1 bm1hcF9kb21haW5fcGFnZShwbDFlKTsKLSAgICByZXR1cm4gMDsKLQotIGZhaWw6Ci0gICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wxX3RhYmxlOiBzbG90ICUj eFxuIiwgaSk7Ci0gICAgd2hpbGUgKCBpLS0gPiAwICkKLSAgICAgICAgcHV0X3BhZ2VfZnJvbV9s MWUocGwxZVtpXSwgZCk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKLSAgICByZXR1 cm4gcmV0OwotfQotCi1zdGF0aWMgaW50IGNyZWF0ZV9wYWVfeGVuX21hcHBpbmdzKHN0cnVjdCBk b21haW4gKmQsIGwzX3BnZW50cnlfdCAqcGwzZSkKLXsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpw YWdlOwotICAgIGwzX3BnZW50cnlfdCAgICAgbDNlMzsKLQotICAgIGlmICggIWlzX3B2XzMyYml0 X2RvbWFpbihkKSApCi0gICAgICAgIHJldHVybiAxOwotCi0gICAgcGwzZSA9IChsM19wZ2VudHJ5 X3QgKikoKHVuc2lnbmVkIGxvbmcpcGwzZSAmIFBBR0VfTUFTSyk7Ci0KLSAgICAvKiAzcmQgTDMg c2xvdCBjb250YWlucyBMMiB3aXRoIFhlbi1wcml2YXRlIG1hcHBpbmdzLiBJdCAqbXVzdCogZXhp c3QuICovCi0gICAgbDNlMyA9IHBsM2VbM107Ci0gICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MobDNl MykgJiBfUEFHRV9QUkVTRU5UKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgIlBBRSBMMyAzcmQgc2xvdCBpcyBlbXB0eVxuIik7Ci0gICAgICAgIHJldHVybiAwOwot ICAgIH0KLQotICAgIC8qCi0gICAgICogVGhlIFhlbi1wcml2YXRlIG1hcHBpbmdzIGluY2x1ZGUg bGluZWFyIG1hcHBpbmdzLiBUaGUgTDIgdGh1cyBjYW5ub3QKLSAgICAgKiBiZSBzaGFyZWQgYnkg bXVsdGlwbGUgTDMgdGFibGVzLiBUaGUgdGVzdCBoZXJlIGlzIGFkZXF1YXRlIGJlY2F1c2U6Ci0g ICAgICogIDEuIENhbm5vdCBhcHBlYXIgaW4gc2xvdHMgIT0gMyBiZWNhdXNlIGdldF9wYWdlX3R5 cGUoKSBjaGVja3MgdGhlCi0gICAgICogICAgIFBHVF9wYWVfeGVuX2wyIGZsYWcsIHdoaWNoIGlz IGFzc2VydGVkIGlmZiB0aGUgTDIgYXBwZWFycyBpbiBzbG90IDMKLSAgICAgKiAgMi4gQ2Fubm90 IGFwcGVhciBpbiBhbm90aGVyIHBhZ2UgdGFibGUncyBMMzoKLSAgICAgKiAgICAgYS4gYWxsb2Nf bDNfdGFibGUoKSBjYWxscyB0aGlzIGZ1bmN0aW9uIGFuZCB0aGlzIGNoZWNrIHdpbGwgZmFpbAot ICAgICAqICAgICBiLiBtb2RfbDNfZW50cnkoKSBkaXNhbGxvd3MgdXBkYXRlcyB0byBzbG90IDMg aW4gYW4gZXhpc3RpbmcgdGFibGUKLSAgICAgKi8KLSAgICBwYWdlID0gbDNlX2dldF9wYWdlKGwz ZTMpOwotICAgIEJVR19PTihwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9waW5uZWQpOwot ICAgIEJVR19PTigocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgPT0g MCk7Ci0gICAgQlVHX09OKCEocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfcGFlX3hlbl9s MikpOwotICAgIGlmICggKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX2NvdW50X21hc2sp ICE9IDEgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJQQUUgTDMg M3JkIHNsb3QgaXMgc2hhcmVkXG4iKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg cmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyBpbnQgYWxsb2NfbDJfdGFibGUoc3RydWN0IHBhZ2VfaW5m byAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgcHJlZW1wdGlibGUpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVy KHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2Up KTsKLSAgICBsMl9wZ2VudHJ5X3QgICpwbDJlOwotICAgIHVuc2lnbmVkIGludCAgIGk7Ci0gICAg aW50ICAgICAgICAgICAgcmMgPSAwOwotCi0gICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZu KHBmbikpOwotCi0gICAgZm9yICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDJf UEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIHByZWVtcHRpYmxl ICYmIGkgPiBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcwotICAgICAgICAgICAgICYmIGh5cGVyY2Fs bF9wcmVlbXB0X2NoZWNrKCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBwYWdlLT5ucl92YWxp ZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAg IGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCAhaXNfZ3Vlc3RfbDJfc2xvdChkLCB0 eXBlLCBpKSB8fAotICAgICAgICAgICAgIChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0s IHBmbiwgZCkpID4gMCApCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIHJj IDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAi RmFpbHVyZSBpbiBhbGxvY19sMl90YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAgICAgICAg d2hpbGUgKCBpLS0gPiAwICkKLSAgICAgICAgICAgICAgICBpZiAoIGlzX2d1ZXN0X2wyX3Nsb3Qo ZCwgdHlwZSwgaSkgKQotICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wyZShwbDJl W2ldLCBwZm4pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBwbDJl W2ldID0gYWRqdXN0X2d1ZXN0X2wyZShwbDJlW2ldLCBkKTsKLSAgICB9Ci0KLSAgICBpZiAoIHJj ID49IDAgJiYgKHR5cGUgJiBQR1RfcGFlX3hlbl9sMikgKQotICAgICAgICBpbml0X3hlbl9wYWVf bDJfc2xvdHMocGwyZSwgZCk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDJlKTsKLSAgICBy ZXR1cm4gcmMgPiAwID8gMCA6IHJjOwotfQotCi1zdGF0aWMgaW50IGFsbG9jX2wzX3RhYmxlKHN0 cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0 X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZu KHBhZ2UpKTsKLSAgICBsM19wZ2VudHJ5X3QgICpwbDNlOwotICAgIHVuc2lnbmVkIGludCAgIGk7 Ci0gICAgaW50ICAgICAgICAgICAgcmMgPSAwLCBwYXJ0aWFsID0gcGFnZS0+cGFydGlhbF9wdGU7 Ci0KLSAgICBwbDNlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7Ci0KLSAgICAvKgotICAg ICAqIFBBRSBndWVzdHMgYWxsb2NhdGUgZnVsbCBwYWdlcywgYnV0IGFyZW4ndCByZXF1aXJlZCB0 byBpbml0aWFsaXplCi0gICAgICogbW9yZSB0aGFuIHRoZSBmaXJzdCBmb3VyIGVudHJpZXM7IHdo ZW4gcnVubmluZyBpbiBjb21wYXRpYmlsaXR5Ci0gICAgICogbW9kZSwgaG93ZXZlciwgdGhlIGZ1 bGwgcGFnZSBpcyB2aXNpYmxlIHRvIHRoZSBNTVUsIGFuZCBoZW5jZSBhbGwKLSAgICAgKiA1MTIg ZW50cmllcyBtdXN0IGJlIHZhbGlkL3ZlcmlmaWVkLCB3aGljaCBpcyBtb3N0IGVhc2lseSBhY2hp ZXZlZAotICAgICAqIGJ5IGNsZWFyaW5nIHRoZW0gb3V0LgotICAgICAqLwotICAgIGlmICggaXNf cHZfMzJiaXRfZG9tYWluKGQpICkKLSAgICAgICAgbWVtc2V0KHBsM2UgKyA0LCAwLCAoTDNfUEFH RVRBQkxFX0VOVFJJRVMgLSA0KSAqIHNpemVvZigqcGwzZSkpOwotCi0gICAgZm9yICggaSA9IHBh Z2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDNfUEFHRVRBQkxFX0VOVFJJRVM7Ci0gICAgICAg ICAgaSsrLCBwYXJ0aWFsID0gMCApCi0gICAgewotICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2Rv bWFpbihkKSAmJiAoaSA9PSAzKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggIShsM2Vf Z2V0X2ZsYWdzKHBsM2VbaV0pICYgX1BBR0VfUFJFU0VOVCkgfHwKLSAgICAgICAgICAgICAgICAg KGwzZV9nZXRfZmxhZ3MocGwzZVtpXSkgJiBsM19kaXNhbGxvd19tYXNrKGQpKSApCi0gICAgICAg ICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg IHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oCi0gICAgICAgICAgICAgICAgICAgIGwz ZV9nZXRfbWZuKHBsM2VbaV0pLAotICAgICAgICAgICAgICAgICAgICBQR1RfbDJfcGFnZV90YWJs ZSB8IFBHVF9wYWVfeGVuX2wyLCBkLCBwYXJ0aWFsLCAxKTsKLSAgICAgICAgfQotICAgICAgICBl bHNlIGlmICggKHJjID0gZ2V0X3BhZ2VfZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBkLCBwYXJ0aWFs KSkgPiAwICkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICggcmMgPT0gLUVS RVNUQVJUICkKLSAgICAgICAgewotICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMg PSBpOwotICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7Ci0gICAg ICAgIH0KLSAgICAgICAgZWxzZSBpZiAoIHJjID09IC1FSU5UUiAmJiBpICkKLSAgICAgICAgewot ICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAgICAgICAgcGFn ZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAg IH0KLSAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg cGwzZVtpXSA9IGFkanVzdF9ndWVzdF9sM2UocGwzZVtpXSwgZCk7Ci0gICAgfQotCi0gICAgaWYg KCByYyA+PSAwICYmICFjcmVhdGVfcGFlX3hlbl9tYXBwaW5ncyhkLCBwbDNlKSApCi0gICAgICAg IHJjID0gLUVJTlZBTDsKLSAgICBpZiAoIHJjIDwgMCAmJiByYyAhPSAtRVJFU1RBUlQgJiYgcmMg IT0gLUVJTlRSICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFp bHVyZSBpbiBhbGxvY19sM190YWJsZTogc2xvdCAlI3hcbiIsIGkpOwotICAgICAgICBpZiAoIGkg KQotICAgICAgICB7Ci0gICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0g ICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7Ci0gICAgICAgICAgICBjdXJyZW50LT5h cmNoLm9sZF9ndWVzdF9wdHBnID0gTlVMTDsKLSAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xk X2d1ZXN0X3RhYmxlID0gcGFnZTsKLSAgICAgICAgfQotICAgICAgICB3aGlsZSAoIGktLSA+IDAg KQotICAgICAgICAgICAgcGwzZVtpXSA9IHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsK LSAgICB9Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDNlKTsKLSAgICByZXR1cm4gcmMgPiAw ID8gMCA6IHJjOwotfQotCiB2b2lkIGluaXRfeGVuX3BhZV9sMl9zbG90cyhsMl9wZ2VudHJ5X3Qg KmwydCwgY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBtZW1jcHkoJmwydFtDT01QQVRf TDJfUEFHRVRBQkxFX0ZJUlNUX1hFTl9TTE9UKGQpXSwKQEAgLTE2MTMsMTg2ICsxMDAzLDYgQEAg dm9pZCB6YXBfcm9fbXB0KG1mbl90IG1mbikKICAgICB1bm1hcF9kb21haW5fcGFnZShsNHRhYik7 CiB9CiAKLXN0YXRpYyBpbnQgYWxsb2NfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7Ci0gICAgdW5z aWduZWQgbG9uZyAgcGZuID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOwotICAgIGw0X3BnZW50 cnlfdCAgKnBsNGUgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihwZm4pKTsKLSAgICB1bnNpZ25lZCBp bnQgICBpOwotICAgIGludCAgICAgICAgICAgIHJjID0gMCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRp YWxfcHRlOwotCi0gICAgZm9yICggaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDRf UEFHRVRBQkxFX0VOVFJJRVM7Ci0gICAgICAgICAgaSsrLCBwYXJ0aWFsID0gMCApCi0gICAgewot ICAgICAgICBpZiAoICFpc19ndWVzdF9sNF9zbG90KGQsIGkpIHx8Ci0gICAgICAgICAgICAgKHJj ID0gZ2V0X3BhZ2VfZnJvbV9sNGUocGw0ZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAwICkKLSAg ICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKLSAg ICAgICAgewotICAgICAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAgICAg ICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IDE7Ci0gICAgICAgIH0KLSAgICAg ICAgZWxzZSBpZiAoIHJjIDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmICggcmMgIT0g LUVJTlRSICkKLSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAiRmFpbHVyZSBpbiBhbGxvY19sNF90YWJsZTogc2xvdCAlI3hc biIsIGkpOwotICAgICAgICAgICAgaWYgKCBpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7Ci0gICAgICAgICAgICAgICAgcGFnZS0+ cGFydGlhbF9wdGUgPSAwOwotICAgICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKLSAg ICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICAgICAgZWxzZQot ICAgICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50LT5hcmNo Lm9sZF9ndWVzdF90YWJsZSApCi0gICAgICAgICAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxp ZGF0ZWRfcHRlcysrOwotICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVz dF9wdHBnID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vl c3RfdGFibGUgPSBwYWdlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAg ICAgfQotICAgICAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsNGUpOwotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICB9Ci0K LSAgICAgICAgcGw0ZVtpXSA9IGFkanVzdF9ndWVzdF9sNGUocGw0ZVtpXSwgZCk7Ci0gICAgfQot Ci0gICAgaWYgKCByYyA+PSAwICkKLSAgICB7Ci0gICAgICAgIGluaXRfeGVuX2w0X3Nsb3RzKHBs NGUsIF9tZm4ocGZuKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgZCwgSU5WQUxJRF9NRk4s IFZNX0FTU0lTVChkLCBtMnBfc3RyaWN0KSk7Ci0gICAgICAgIGF0b21pY19pbmMoJmQtPmFyY2gu cHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKLSAgICAgICAgcmMgPSAwOwotICAgIH0KLSAgICB1bm1h cF9kb21haW5fcGFnZShwbDRlKTsKLQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIHZvaWQg ZnJlZV9sMV90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQotewotICAgIHN0cnVjdCBkb21h aW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7Ci0g ICAgdW5zaWduZWQgaW50ICBpOwotCi0gICAgcGwxZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2Up OwotCi0gICAgZm9yICggaSA9IDA7IGkgPCBMMV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkKLSAg ICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUocGwxZVtpXSwgZCk7Ci0KLSAgICB1bm1hcF9kb21haW5f cGFnZShwbDFlKTsKLX0KLQotCi1zdGF0aWMgaW50IGZyZWVfbDJfdGFibGUoc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSwgaW50IHByZWVtcHRpYmxlKQotewotICAgIHN0cnVjdCBkb21haW4gKmQgPSBw YWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNpZ25lZCBsb25nIHBmbiA9IG1mbl94KHBhZ2Vf dG9fbWZuKHBhZ2UpKTsKLSAgICBsMl9wZ2VudHJ5X3QgKnBsMmU7Ci0gICAgdW5zaWduZWQgaW50 ICBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgLSAxOwotICAgIGludCBlcnIgPSAwOwotCi0g ICAgcGwyZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOwotCi0gICAgQVNTRVJUKHBhZ2Ut Pm5yX3ZhbGlkYXRlZF9wdGVzKTsKLSAgICBkbyB7Ci0gICAgICAgIGlmICggaXNfZ3Vlc3RfbDJf c2xvdChkLCBwYWdlLT51LmludXNlLnR5cGVfaW5mbywgaSkgJiYKLSAgICAgICAgICAgICBwdXRf cGFnZV9mcm9tX2wyZShwbDJlW2ldLCBwZm4pID09IDAgJiYKLSAgICAgICAgICAgICBwcmVlbXB0 aWJsZSAmJiBpICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkgKQotICAgICAgICB7Ci0gICAg ICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKLSAgICAgICAgICAgZXJyID0gLUVS RVNUQVJUOwotICAgICAgICB9Ci0gICAgfSB3aGlsZSAoICFlcnIgJiYgaS0tICk7Ci0KLSAgICB1 bm1hcF9kb21haW5fcGFnZShwbDJlKTsKLQotICAgIGlmICggIWVyciApCi0gICAgICAgIHBhZ2Ut PnUuaW51c2UudHlwZV9pbmZvICY9IH5QR1RfcGFlX3hlbl9sMjsKLQotICAgIHJldHVybiBlcnI7 Ci19Ci0KLXN0YXRpYyBpbnQgZnJlZV9sM190YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQot ewotICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKLSAgICB1bnNp Z25lZCBsb25nIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKTsKLSAgICBsM19wZ2VudHJ5 X3QgKnBsM2U7Ci0gICAgaW50IHJjID0gMCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOwot ICAgIHVuc2lnbmVkIGludCAgaSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzIC0gIXBhcnRpYWw7 Ci0KLSAgICBwbDNlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7Ci0KLSAgICBkbyB7Ci0g ICAgICAgIHJjID0gcHV0X3BhZ2VfZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBwYXJ0aWFsLCAwKTsK LSAgICAgICAgaWYgKCByYyA8IDAgKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIHBhcnRp YWwgPSAwOwotICAgICAgICBpZiAoIHJjID4gMCApCi0gICAgICAgICAgICBjb250aW51ZTsKLSAg ICAgICAgcGwzZVtpXSA9IHVuYWRqdXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKLSAgICB9IHdo aWxlICggaS0tICk7Ci0KLSAgICB1bm1hcF9kb21haW5fcGFnZShwbDNlKTsKLQotICAgIGlmICgg cmMgPT0gLUVSRVNUQVJUICkKLSAgICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVz ID0gaTsKLSAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOwotICAgIH0K LSAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICYmIGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUyAt IDEgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKLSAg ICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOwotICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAg ICB9Ci0gICAgcmV0dXJuIHJjID4gMCA/IDAgOiByYzsKLX0KLQotc3RhdGljIGludCBmcmVlX2w0 X3RhYmxlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9 IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gbWZuX3gocGFn ZV90b19tZm4ocGFnZSkpOwotICAgIGw0X3BnZW50cnlfdCAqcGw0ZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKHBmbikpOwotICAgIGludCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0 ZTsKLSAgICB1bnNpZ25lZCBpbnQgIGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0 aWFsOwotCi0gICAgZG8gewotICAgICAgICBpZiAoIGlzX2d1ZXN0X2w0X3Nsb3QoZCwgaSkgKQot ICAgICAgICAgICAgcmMgPSBwdXRfcGFnZV9mcm9tX2w0ZShwbDRlW2ldLCBwZm4sIHBhcnRpYWws IDApOwotICAgICAgICBpZiAoIHJjIDwgMCApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg cGFydGlhbCA9IDA7Ci0gICAgfSB3aGlsZSAoIGktLSApOwotCi0gICAgaWYgKCByYyA9PSAtRVJF U1RBUlQgKQotICAgIHsKLSAgICAgICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOwotICAg ICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IHBhcnRpYWwgPzogLTE7Ci0gICAgfQotICAgIGVsc2Ug aWYgKCByYyA9PSAtRUlOVFIgJiYgaSA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTIC0gMSApCi0gICAg ewotICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGkgKyAxOwotICAgICAgICBwYWdl LT5wYXJ0aWFsX3B0ZSA9IDA7Ci0gICAgICAgIHJjID0gLUVSRVNUQVJUOwotICAgIH0KLQotICAg IHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwotCi0gICAgaWYgKCByYyA+PSAwICkKLSAgICB7Ci0g ICAgICAgIGF0b21pY19kZWMoJmQtPmFyY2gucHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKLSAgICAg ICAgcmMgPSAwOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQogI2lmbmRlZiBOREVCVUcK IC8qCiAgKiBXZSBtdXN0IG5ldmVyIGNhbGwgX3B1dF9wYWdlX3R5cGUoKSB3aGlsZSBob2xkaW5n IGEgcGFnZV9sb2NrKCkgZm9yCkBAIC0xODc2LDMwOSArMTA4Niw2IEBAIHZvaWQgcGFnZV91bmxv Y2soc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKICAgICBjdXJyZW50X2xvY2tlZF9wYWdlX3NldChO VUxMKTsKIH0KIAotLyoKLSAqIFBURSBmbGFncyB0aGF0IGEgZ3Vlc3QgbWF5IGNoYW5nZSB3aXRo b3V0IHJlLXZhbGlkYXRpbmcgdGhlIFBURS4KLSAqIEFsbCBvdGhlciBiaXRzIGFmZmVjdCB0cmFu c2xhdGlvbiwgY2FjaGluZywgb3IgWGVuJ3Mgc2FmZXR5LgotICovCi0jZGVmaW5lIEZBU1RQQVRI X0ZMQUdfV0hJVEVMSVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICAoX1BBR0VfTlhfQklUIHwgX1BBR0VfQVZBSUxfSElHSCB8IF9QQUdFX0FWQUlMIHwgX1BBR0Vf R0xPQkFMIHwgXAotICAgICBfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfVVNF UikKLQotLyogVXBkYXRlIHRoZSBMMSBlbnRyeSBhdCBwbDFlIHRvIG5ldyB2YWx1ZSBubDFlLiAq Lwotc3RhdGljIGludCBtb2RfbDFfZW50cnkobDFfcGdlbnRyeV90ICpwbDFlLCBsMV9wZ2VudHJ5 X3QgbmwxZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZ2wxbWZuLCBp bnQgcHJlc2VydmVfYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqcHRf dmNwdSwgc3RydWN0IGRvbWFpbiAqcGdfZG9tKQotewotICAgIGwxX3BnZW50cnlfdCBvbDFlOwot ICAgIHN0cnVjdCBkb21haW4gKnB0X2RvbSA9IHB0X3ZjcHUtPmRvbWFpbjsKLSAgICBpbnQgcmMg PSAwOwotCi0gICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZvbDFlLCBwbDFlLCBz aXplb2Yob2wxZSkpICE9IDApICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBBU1NF UlQoIXBhZ2luZ19tb2RlX3JlZmNvdW50cyhwdF9kb20pKTsKLQotICAgIGlmICggbDFlX2dldF9m bGFncyhubDFlKSAmIF9QQUdFX1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X2ZsYWdz KG5sMWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20pKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwxIGZsYWdzICV4XG4iLAotICAgICAg ICAgICAgICAgICAgICBsMWVfZ2V0X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9k b20pKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAg LyogVHJhbnNsYXRlIGZvcmVpZ24gZ3Vlc3QgYWRkcmVzcy4gKi8KLSAgICAgICAgaWYgKCBwYWdp bmdfbW9kZV90cmFuc2xhdGUocGdfZG9tKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHAybV90 eXBlX3QgcDJtdDsKLSAgICAgICAgICAgIHAybV9xdWVyeV90IHEgPSBsMWVfZ2V0X2ZsYWdzKG5s MWUpICYgX1BBR0VfUlcgPwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAyTV9BTExPQyB8 IFAyTV9VTlNIQVJFIDogUDJNX0FMTE9DOwotCi0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2Vf ZnJvbV9nZm4ocGdfZG9tLCBsMWVfZ2V0X3BmbihubDFlKSwgJnAybXQsIHEpOwotCi0gICAgICAg ICAgICBpZiAoIHAybV9pc19wYWdlZChwMm10KSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg ICAgICAgaWYgKCBwYWdlICkKLSAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0g ICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUocGdfZG9tLCBsMWVfZ2V0X3Bm bihubDFlKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0gICAgICAgICAgICB9 Ci0KLSAgICAgICAgICAgIGlmICggcDJtdCA9PSBwMm1fcmFtX3BhZ2luZ19pbiAmJiAhcGFnZSAp Ci0gICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9FTlQ7Ci0KLSAgICAgICAgICAgIC8qIERpZCBv dXIgYXR0ZW1wdCB0byB1bnNoYXJlIGZhaWw/ICovCi0gICAgICAgICAgICBpZiAoIChxICYgUDJN X1VOU0hBUkUpICYmIHAybV9pc19zaGFyZWQocDJtdCkgKQotICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgIC8qIFdlIGNvdWxkIG5vdCBoYXZlIG9idGFpbmVkIGEgcGFnZSByZWYuICovCi0g ICAgICAgICAgICAgICAgQVNTRVJUKCFwYWdlKTsKLSAgICAgICAgICAgICAgICAvKiBBbmQgbWVt X3NoYXJpbmdfbm90aWZ5IGhhcyBhbHJlYWR5IGJlZW4gY2FsbGVkLiAqLwotICAgICAgICAgICAg ICAgIHJldHVybiAtRU5PTUVNOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoICFw YWdlICkKLSAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAgICAgIG5sMWUg PSBsMWVfZnJvbV9wYWdlKHBhZ2UsIGwxZV9nZXRfZmxhZ3MobmwxZSkpOwotICAgICAgICB9Ci0K LSAgICAgICAgLyogRmFzdCBwYXRoIGZvciBzdWZmaWNpZW50bHktc2ltaWxhciBtYXBwaW5ncy4g Ki8KLSAgICAgICAgaWYgKCAhbDFlX2hhc19jaGFuZ2VkKG9sMWUsIG5sMWUsIH5GQVNUUEFUSF9G TEFHX1dISVRFTElTVCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBubDFlID0gYWRqdXN0X2d1 ZXN0X2wxZShubDFlLCBwdF9kb20pOwotICAgICAgICAgICAgcmMgPSBVUERBVEVfRU5UUlkobDEs IHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByZXNlcnZlX2FkKTsKLSAgICAgICAgICAgIGlmICggcGFnZSApCi0gICAgICAg ICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVC VVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICggcmMgPSBnZXRfcGFnZV9mcm9tX2wx ZShubDFlLCBwdF9kb20sIHBnX2RvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsMV9kaXNhbGxvd19tYXNrKHB0X2RvbSkpICkKLSAgICAgICAgewotICAgICAgICBk ZWZhdWx0OgotICAgICAgICAgICAgaWYgKCBwYWdlICkKLSAgICAgICAgICAgICAgICBwdXRfcGFn ZShwYWdlKTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgY2FzZSAwOgotICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgX1BBR0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFHRV9D QUNIRV9BVFRSUzoKLSAgICAgICAgICAgIEFTU0VSVCghKHJjICYgfihfUEFHRV9SVyB8IFBBR0Vf Q0FDSEVfQVRUUlMpKSk7Ci0gICAgICAgICAgICBsMWVfZmxpcF9mbGFncyhubDFlLCByYyk7Ci0g ICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAg ICBpZiAoIHBhZ2UgKQotICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0KLSAgICAgICAgbmwx ZSA9IGFkanVzdF9ndWVzdF9sMWUobmwxZSwgcHRfZG9tKTsKLSAgICAgICAgaWYgKCB1bmxpa2Vs eSghVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHB0X3ZjcHUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKLSAgICAg ICAgewotICAgICAgICAgICAgb2wxZSA9IG5sMWU7Ci0gICAgICAgICAgICByYyA9IC1FQlVTWTsK LSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShs MSwgcGwxZSwgb2wxZSwgbmwxZSwgZ2wxbWZuLCBwdF92Y3B1LAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAgIHsKLSAgICAgICAgcmV0dXJu IC1FQlVTWTsKLSAgICB9Ci0KLSAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBwdF9kb20pOwot ICAgIHJldHVybiByYzsKLX0KLQotCi0vKiBVcGRhdGUgdGhlIEwyIGVudHJ5IGF0IHBsMmUgdG8g bmV3IHZhbHVlIG5sMmUuIHBsMmUgaXMgd2l0aGluIGZyYW1lIHBmbi4gKi8KLXN0YXRpYyBpbnQg bW9kX2wyX2VudHJ5KGwyX3BnZW50cnlfdCAqcGwyZSwKLSAgICAgICAgICAgICAgICAgICAgICAg IGwyX3BnZW50cnlfdCBubDJlLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9u ZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJlc2VydmVfYWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNwdSkKLXsKLSAgICBsMl9wZ2VudHJ5X3Qg b2wyZTsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOwotICAgIHN0cnVjdCBw YWdlX2luZm8gKmwycGcgPSBtZm5fdG9fcGFnZShfbWZuKHBmbikpOwotICAgIHVuc2lnbmVkIGxv bmcgdHlwZSA9IGwycGctPnUuaW51c2UudHlwZV9pbmZvOwotICAgIGludCByYyA9IDA7Ci0KLSAg ICBpZiAoIHVubGlrZWx5KCFpc19ndWVzdF9sMl9zbG90KGQsIHR5cGUsIHBnZW50cnlfcHRyX3Rv X3Nsb3QocGwyZSkpKSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywg IkwyIHVwZGF0ZSBpbiBYZW4tcHJpdmF0ZSBhcmVhLCBzbG90ICUjbHhcbiIsCi0gICAgICAgICAg ICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocGwyZSkpOwotICAgICAgICByZXR1cm4gLUVQRVJN OwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wyZSwgcGwy ZSwgc2l6ZW9mKG9sMmUpKSAhPSAwKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAg aWYgKCBsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgX1BBR0VfUFJFU0VOVCApCi0gICAgewotICAgICAg ICBpZiAoIHVubGlrZWx5KGwyZV9nZXRfZmxhZ3MobmwyZSkgJiBMMl9ESVNBTExPV19NQVNLKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwy IGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsMmVfZ2V0X2ZsYWdzKG5sMmUpICYg TDJfRElTQUxMT1dfTUFTSyk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICAgICAg fQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3VmZmljaWVudGx5LXNpbWlsYXIgbWFwcGlu Z3MuICovCi0gICAgICAgIGlmICggIWwyZV9oYXNfY2hhbmdlZChvbDJlLCBubDJlLCB+RkFTVFBB VEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewotICAgICAgICAgICAgbmwyZSA9IGFkanVz dF9ndWVzdF9sMmUobmwyZSwgZCk7Ci0gICAgICAgICAgICBpZiAoIFVQREFURV9FTlRSWShsMiwg cGwyZSwgb2wyZSwgbmwyZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCkgKQotICAgICAgICAgICAg ICAgIHJldHVybiAwOwotICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgfQotCi0g ICAgICAgIGlmICggdW5saWtlbHkoKHJjID0gZ2V0X3BhZ2VfZnJvbV9sMmUobmwyZSwgcGZuLCBk KSkgPCAwKSApCi0gICAgICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgbmwyZSA9IGFkanVz dF9ndWVzdF9sMmUobmwyZSwgZCk7Ci0gICAgICAgIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRS WShsMiwgcGwyZSwgb2wyZSwgbmwyZSwgcGZuLCB2Y3B1LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG9s MmUgPSBubDJlOwotICAgICAgICAgICAgcmMgPSAtRUJVU1k7Ci0gICAgICAgIH0KLSAgICB9Ci0g ICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDIsIHBsMmUsIG9sMmUsIG5sMmUs IHBmbiwgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2 ZV9hZCkpICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgcHV0 X3BhZ2VfZnJvbV9sMmUob2wyZSwgcGZuKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8qIFVwZGF0 ZSB0aGUgTDMgZW50cnkgYXQgcGwzZSB0byBuZXcgdmFsdWUgbmwzZS4gcGwzZSBpcyB3aXRoaW4g ZnJhbWUgcGZuLiAqLwotc3RhdGljIGludCBtb2RfbDNfZW50cnkobDNfcGdlbnRyeV90ICpwbDNl LAotICAgICAgICAgICAgICAgICAgICAgICAgbDNfcGdlbnRyeV90IG5sM2UsCi0gICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwKLSAgICAgICAgICAgICAgICAgICAgICAg IGludCBwcmVzZXJ2ZV9hZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICp2 Y3B1KQotewotICAgIGwzX3BnZW50cnlfdCBvbDNlOwotICAgIHN0cnVjdCBkb21haW4gKmQgPSB2 Y3B1LT5kb21haW47Ci0gICAgaW50IHJjID0gMDsKLQotICAgIC8qCi0gICAgICogRGlzYWxsb3cg dXBkYXRlcyB0byBmaW5hbCBMMyBzbG90LiBJdCBjb250YWlucyBYZW4gbWFwcGluZ3MsIGFuZCBp dAotICAgICAqIHdvdWxkIGJlIGEgcGFpbiB0byBlbnN1cmUgdGhleSByZW1haW4gY29udGludW91 c2x5IHZhbGlkIHRocm91Z2hvdXQuCi0gICAgICovCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21h aW4oZCkgJiYgKHBnZW50cnlfcHRyX3RvX3Nsb3QocGwzZSkgPj0gMykgKQotICAgICAgICByZXR1 cm4gLUVJTlZBTDsKLQotICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wzZSwg cGwzZSwgc2l6ZW9mKG9sM2UpKSAhPSAwKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0g ICAgaWYgKCBsM2VfZ2V0X2ZsYWdzKG5sM2UpICYgX1BBR0VfUFJFU0VOVCApCi0gICAgewotICAg ICAgICBpZiAoIHVubGlrZWx5KGwzZV9nZXRfZmxhZ3MobmwzZSkgJiBsM19kaXNhbGxvd19tYXNr KGQpKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAi QmFkIEwzIGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsM2VfZ2V0X2ZsYWdzKG5s M2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSk7Ci0gICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsK LSAgICAgICAgfQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3VmZmljaWVudGx5LXNpbWls YXIgbWFwcGluZ3MuICovCi0gICAgICAgIGlmICggIWwzZV9oYXNfY2hhbmdlZChvbDNlLCBubDNl LCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewotICAgICAgICAgICAgbmwz ZSA9IGFkanVzdF9ndWVzdF9sM2UobmwzZSwgZCk7Ci0gICAgICAgICAgICByYyA9IFVQREFURV9F TlRSWShsMywgcGwzZSwgb2wzZSwgbmwzZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCk7Ci0gICAg ICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVGQVVMVDsKLSAgICAgICAgfQotCi0gICAgICAgIHJj ID0gZ2V0X3BhZ2VfZnJvbV9sM2UobmwzZSwgcGZuLCBkLCAwKTsKLSAgICAgICAgaWYgKCB1bmxp a2VseShyYyA8IDApICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgcmMgPSAwOwot Ci0gICAgICAgIG5sM2UgPSBhZGp1c3RfZ3Vlc3RfbDNlKG5sM2UsIGQpOwotICAgICAgICBpZiAo IHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAg ICAgICB7Ci0gICAgICAgICAgICBvbDNlID0gbmwzZTsKLSAgICAgICAgICAgIHJjID0gLUVGQVVM VDsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRS WShsMywgcGwzZSwgb2wzZSwgbmwzZSwgcGZuLCB2Y3B1LAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC1F RkFVTFQ7Ci0gICAgfQotCi0gICAgaWYgKCBsaWtlbHkocmMgPT0gMCkgKQotICAgICAgICBpZiAo ICFjcmVhdGVfcGFlX3hlbl9tYXBwaW5ncyhkLCBwbDNlKSApCi0gICAgICAgICAgICBCVUcoKTsK LQotICAgIHB1dF9wYWdlX2Zyb21fbDNlKG9sM2UsIHBmbiwgMCwgMSk7Ci0gICAgcmV0dXJuIHJj OwotfQotCi0vKiBVcGRhdGUgdGhlIEw0IGVudHJ5IGF0IHBsNGUgdG8gbmV3IHZhbHVlIG5sNGUu IHBsNGUgaXMgd2l0aGluIGZyYW1lIHBmbi4gKi8KLXN0YXRpYyBpbnQgbW9kX2w0X2VudHJ5KGw0 X3BnZW50cnlfdCAqcGw0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGw0X3BnZW50cnlfdCBu bDRlLAotICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAg ICAgICAgICAgICAgICAgICBpbnQgcHJlc2VydmVfYWQsCi0gICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdmNwdSAqdmNwdSkKLXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9t YWluOwotICAgIGw0X3BnZW50cnlfdCBvbDRlOwotICAgIGludCByYyA9IDA7Ci0KLSAgICBpZiAo IHVubGlrZWx5KCFpc19ndWVzdF9sNF9zbG90KGQsIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkp KSApCi0gICAgewotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkw0IHVwZGF0ZSBp biBYZW4tcHJpdmF0ZSBhcmVhLCBzbG90ICUjbHhcbiIsCi0gICAgICAgICAgICAgICAgIHBnZW50 cnlfcHRyX3RvX3Nsb3QocGw0ZSkpOwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0K LSAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sNGUsIHBsNGUsIHNpemVvZihv bDRlKSkgIT0gMCkgKQotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGlmICggbDRlX2dl dF9mbGFncyhubDRlKSAmIF9QQUdFX1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAgaWYgKCB1bmxp a2VseShsNGVfZ2V0X2ZsYWdzKG5sNGUpICYgTDRfRElTQUxMT1dfTUFTSykgKQotICAgICAgICB7 Ci0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMNCBmbGFncyAleFxu IiwKLSAgICAgICAgICAgICAgICAgICAgbDRlX2dldF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9X X01BU0spOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAg ICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLwotICAg ICAgICBpZiAoICFsNGVfaGFzX2NoYW5nZWQob2w0ZSwgbmw0ZSwgfkZBU1RQQVRIX0ZMQUdfV0hJ VEVMSVNUKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIG5sNGUgPSBhZGp1c3RfZ3Vlc3RfbDRl KG5sNGUsIGQpOwotICAgICAgICAgICAgcmMgPSBVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUs IG5sNGUsIHBmbiwgdmNwdSwgcHJlc2VydmVfYWQpOwotICAgICAgICAgICAgcmV0dXJuIHJjID8g MCA6IC1FRkFVTFQ7Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IGdldF9wYWdlX2Zyb21fbDRl KG5sNGUsIHBmbiwgZCwgMCk7Ci0gICAgICAgIGlmICggdW5saWtlbHkocmMgPCAwKSApCi0gICAg ICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIHJjID0gMDsKLQotICAgICAgICBubDRlID0gYWRq dXN0X2d1ZXN0X2w0ZShubDRlLCBkKTsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VO VFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKLSAgICAgICAgewotICAgICAgICAgICAg b2w0ZSA9IG5sNGU7Ci0gICAgICAgICAgICByYyA9IC1FRkFVTFQ7Ci0gICAgICAgIH0KLSAgICB9 Ci0gICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlkobDQsIHBsNGUsIG9sNGUsIG5s NGUsIHBmbiwgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVz ZXJ2ZV9hZCkpICkKLSAgICB7Ci0gICAgICAgIHJldHVybiAtRUZBVUxUOwotICAgIH0KLQotICAg IHB1dF9wYWdlX2Zyb21fbDRlKG9sNGUsIHBmbiwgMCwgMSk7Ci0gICAgcmV0dXJuIHJjOwotfQot CiBzdGF0aWMgaW50IGNsZWFudXBfcGFnZV9jYWNoZWF0dHIoc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZSkKIHsKICAgICB1bnNpZ25lZCBpbnQgY2FjaGVhdHRyID0KQEAgLTIyNjAsMjIyICsxMTY3LDI3 IEBAIGludCBnZXRfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCBzdHJ1Y3QgZG9tYWluICpk b21haW4pCiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qCi0gKiBTcGVjaWFsIHZlcnNpb24gb2YgZ2V0 X3BhZ2UoKSB0byBiZSB1c2VkIGV4Y2x1c2l2ZWx5IHdoZW4KLSAqIC0gYSBwYWdlIGlzIGtub3du IHRvIGFscmVhZHkgaGF2ZSBhIG5vbi16ZXJvIHJlZmVyZW5jZSBjb3VudAotICogLSB0aGUgcGFn ZSBkb2VzIG5vdCBuZWVkIGl0cyBvd25lciB0byBiZSBjaGVja2VkCi0gKiAtIGl0IHdpbGwgbm90 IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3aXRob3V0IGRyb3BwaW5nIHRoZSB0aHVzCi0gKiAg IGFjcXVpcmVkIHJlZmVyZW5jZSBhZ2Fpbi4KLSAqIER1ZSB0byBnZXRfcGFnZSgpIHJlc2Vydmlu ZyBvbmUgcmVmZXJlbmNlLCB0aGlzIGNhbGwgY2Fubm90IGZhaWwuCi0gKi8KLXN0YXRpYyB2b2lk IGdldF9wYWdlX2xpZ2h0KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCi17Ci0gICAgdW5zaWduZWQg bG9uZyB4LCBueCwgeSA9IHBhZ2UtPmNvdW50X2luZm87Ci0KLSAgICBkbyB7Ci0gICAgICAgIHgg ID0geTsKLSAgICAgICAgbnggPSB4ICsgMTsKLSAgICAgICAgQlVHX09OKCEoeCAmIFBHQ19jb3Vu dF9tYXNrKSk7IC8qIE5vdCBhbGxvY2F0ZWQ/ICovCi0gICAgICAgIEJVR19PTighKG54ICYgUEdD X2NvdW50X21hc2spKTsgLyogT3ZlcmZsb3c/ICovCi0gICAgICAgIHkgPSBjbXB4Y2hnKCZwYWdl LT5jb3VudF9pbmZvLCB4LCBueCk7Ci0gICAgfQotICAgIHdoaWxlICggdW5saWtlbHkoeSAhPSB4 KSApOwotfQotCi1pbnQgcHZfYWxsb2NfcGFnZV90eXBlKHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Us IHVuc2lnbmVkIGxvbmcgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0 aWJsZSkKK3N0YXRpYyBpbnQgX3B1dF9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwg Ym9vbCBwcmVlbXB0aWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcHRwZykKIHsKLSAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVy KHBhZ2UpOwotICAgIGludCByYzsKKyAgICB1bnNpZ25lZCBsb25nIG54LCB4LCB5ID0gcGFnZS0+ dS5pbnVzZS50eXBlX2luZm87CiAKLSAgICAvKiBBIHBhZ2UgdGFibGUgaXMgZGlydGllZCB3aGVu IGl0cyB0eXBlIGNvdW50IGJlY29tZXMgbm9uLXplcm8uICovCi0gICAgaWYgKCBsaWtlbHkob3du ZXIgIT0gTlVMTCkgKQotICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShvd25lciwgcGFnZV90b19t Zm4ocGFnZSkpOworICAgIEFTU0VSVChjdXJyZW50X2xvY2tlZF9wYWdlX25lX2NoZWNrKHBhZ2Up KTsKIAotICAgIHN3aXRjaCAoIHR5cGUgJiBQR1RfdHlwZV9tYXNrICkKKyAgICBmb3IgKCA7IDsg KQogICAgIHsKLSAgICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgotICAgICAgICByYyA9IGFsbG9j X2wxX3RhYmxlKHBhZ2UpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBHVF9sMl9wYWdlX3Rh YmxlOgotICAgICAgICByYyA9IGFsbG9jX2wyX3RhYmxlKHBhZ2UsIHR5cGUsIHByZWVtcHRpYmxl KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDNfcGFnZV90YWJsZToKLSAgICAgICAg QVNTRVJUKHByZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sM190YWJsZShwYWdlKTsK LSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKLSAgICAgICAgQVNT RVJUKHByZWVtcHRpYmxlKTsKLSAgICAgICAgcmMgPSBhbGxvY19sNF90YWJsZShwYWdlKTsKLSAg ICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQR1Rfc2VnX2Rlc2NfcGFnZToKLSAgICAgICAgcmMgPSBh bGxvY19zZWdkZXNjX3BhZ2UocGFnZSk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g ICAgICAgIHByaW50aygiQmFkIHR5cGUgaW4gJXMgJWx4IHQ9JSIgUFJ0eXBlX2luZm8gIiBjPSVs eFxuIiwgX19mdW5jX18sCi0gICAgICAgICAgICAgICB0eXBlLCBwYWdlLT51LmludXNlLnR5cGVf aW5mbywKLSAgICAgICAgICAgICAgIHBhZ2UtPmNvdW50X2luZm8pOwotICAgICAgICByYyA9IC1F SU5WQUw7Ci0gICAgICAgIEJVRygpOwotICAgIH0KKyAgICAgICAgeCAgPSB5OworICAgICAgICBu eCA9IHggLSAxOwogCi0gICAgLyogTm8gbmVlZCBmb3IgYXRvbWljIHVwZGF0ZSBvZiB0eXBlX2lu Zm8gaGVyZTogbm9vbmUgZWxzZSB1cGRhdGVzIGl0LiAqLwotICAgIHNtcF93bWIoKTsKLSAgICBz d2l0Y2ggKCByYyApCi0gICAgewotICAgIGNhc2UgMDoKLSAgICAgICAgcGFnZS0+dS5pbnVzZS50 eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRlZDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAtRUlO VFI6Ci0gICAgICAgIEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJgotICAgICAgICAg ICAgICAgIChQR1RfY291bnRfbWFza3xQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgPT0gMSk7 Ci0gICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICY9IH5QR1RfY291bnRfbWFzazsKLSAg ICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgQVNTRVJUKHJjIDwgMCk7Ci0gICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRXJyb3Igd2hpbGUgdmFsaWRhdGluZyBtZm4g JSIgUFJJX21mbgotICAgICAgICAgICAgICAgICAiIChwZm4gJSIgUFJJX3BmbiAiKSBmb3IgdHlw ZSAlIiBQUnR5cGVfaW5mbwotICAgICAgICAgICAgICAgICAiOiBjYWY9JTA4bHggdGFmPSUiIFBS dHlwZV9pbmZvICJcbiIsCi0gICAgICAgICAgICAgICAgIG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2Up KSwKLSAgICAgICAgICAgICAgICAgZ2V0X2dwZm5fZnJvbV9tZm4obWZuX3gocGFnZV90b19tZm4o cGFnZSkpKSwKLSAgICAgICAgICAgICAgICAgdHlwZSwgcGFnZS0+Y291bnRfaW5mbywgcGFnZS0+ dS5pbnVzZS50eXBlX2luZm8pOwotICAgICAgICBpZiAoIHBhZ2UgIT0gY3VycmVudC0+YXJjaC5v bGRfZ3Vlc3RfdGFibGUgKQotICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSAw OwotICAgICAgICBlbHNlCisgICAgICAgIEFTU0VSVCgoeCAmIFBHVF9jb3VudF9tYXNrKSAhPSAw KTsKKworICAgICAgICBzd2l0Y2ggKCBueCAmIChQR1RfbG9ja2VkIHwgUEdUX2NvdW50X21hc2sp ICkKICAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5m byAmCi0gICAgICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFzayB8IFBHVF92YWxpZGF0ZWQp KSA9PSAxKTsKLSAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgIGdldF9wYWdlX2xpZ2h0 KHBhZ2UpOwotICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3BhcnRp YWw7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwot fQotCi0KLWludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNp Z25lZCBsb25nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0aWJsZSkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwotICAg IHVuc2lnbmVkIGxvbmcgZ21mbjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIGxpa2VseShvd25l ciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQotICAg IHsKLSAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBjb3Vu dCBiZWNvbWVzIHplcm8uICovCi0gICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVyLCBwYWdl X3RvX21mbihwYWdlKSk7Ci0KLSAgICAgICAgQVNTRVJUKCFzaGFkb3dfbW9kZV9yZWZjb3VudHMo b3duZXIpKTsKLQotICAgICAgICBnbWZuID0gbWZuX3RvX2dtZm4ob3duZXIsIG1mbl94KHBhZ2Vf dG9fbWZuKHBhZ2UpKSk7Ci0gICAgICAgIEFTU0VSVChWQUxJRF9NMlAoZ21mbikpOwotICAgICAg ICAvKiBQYWdlIHNoYXJpbmcgbm90IHN1cHBvcnRlZCBmb3Igc2hhZG93ZWQgZG9tYWlucyAqLwot ICAgICAgICBpZighU0hBUkVEX00yUChnbWZuKSkKLSAgICAgICAgICAgIHNoYWRvd19yZW1vdmVf YWxsX3NoYWRvd3Mob3duZXIsIF9tZm4oZ21mbikpOwotICAgIH0KLQotICAgIGlmICggISh0eXBl ICYgUEdUX3BhcnRpYWwpICkKLSAgICB7Ci0gICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVz ID0gMVUgPDwgUEFHRVRBQkxFX09SREVSOwotICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7 Ci0gICAgfQotCi0gICAgc3dpdGNoICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQotICAgIHsKLSAg ICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgotICAgICAgICBmcmVlX2wxX3RhYmxlKHBhZ2UpOwot ICAgICAgICByYyA9IDA7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUEdUX2wyX3BhZ2VfdGFi bGU6Ci0gICAgICAgIHJjID0gZnJlZV9sMl90YWJsZShwYWdlLCBwcmVlbXB0aWJsZSk7Ci0gICAg ICAgIGJyZWFrOwotICAgIGNhc2UgUEdUX2wzX3BhZ2VfdGFibGU6Ci0gICAgICAgIEFTU0VSVChw cmVlbXB0aWJsZSk7Ci0gICAgICAgIHJjID0gZnJlZV9sM190YWJsZShwYWdlKTsKLSAgICAgICAg YnJlYWs7Ci0gICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKLSAgICAgICAgQVNTRVJUKHByZWVt cHRpYmxlKTsKLSAgICAgICAgcmMgPSBmcmVlX2w0X3RhYmxlKHBhZ2UpOwotICAgICAgICBicmVh azsKLSAgICBkZWZhdWx0OgotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgInR5cGUg JSIgUFJ0eXBlX2luZm8gIiBtZm4gJSIgUFJJX21mbiAiXG4iLAotICAgICAgICAgICAgICAgICB0 eXBlLCBtZm5feChwYWdlX3RvX21mbihwYWdlKSkpOwotICAgICAgICByYyA9IC1FSU5WQUw7Ci0g ICAgICAgIEJVRygpOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotdm9pZCBwdl9kZWNf bGluZWFyX3B0KHN0cnVjdCBwYWdlX2luZm8gKnB0cGcsIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2Us Ci0gICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB0eXBlKQotewotICAgIGlmICgg cHRwZyAmJiBQR1RfdHlwZV9lcXVhbCh0eXBlLCBwdHBnLT51LmludXNlLnR5cGVfaW5mbykgKQot ICAgIHsKLSAgICAgICAgQVNTRVJUKGlzX3B2X2RvbWFpbihwYWdlX2dldF9vd25lcihwYWdlKSkp OwotICAgICAgICBBU1NFUlQoaXNfcHZfZG9tYWluKHBhZ2VfZ2V0X293bmVyKHB0cGcpKSk7Ci0K LSAgICAgICAgZGVjX2xpbmVhcl91c2VzKHBhZ2UpOwotICAgICAgICBkZWNfbGluZWFyX2VudHJp ZXMocHRwZyk7Ci0gICAgfQotfQotCi1pbnQgcHZfcHV0X2ZpbmFsX3BhZ2VfdHlwZShzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICBib29sIHByZWVtcHRpYmxlLCBzdHJ1Y3QgcGFnZV9pbmZvICpwdHBnKQotewotICAg IGludCByYyA9IHB2X2ZyZWVfcGFnZV90eXBlKHBhZ2UsIHR5cGUsIHByZWVtcHRpYmxlKTsKLQot ICAgIC8qIE5vIG5lZWQgZm9yIGF0b21pYyB1cGRhdGUgb2YgdHlwZV9pbmZvIGhlcmU6IG5vb25l IGVsc2UgdXBkYXRlcyBpdC4gKi8KLSAgICBpZiAoIHJjID09IDAgKQotICAgIHsKLSAgICAgICAg cHZfZGVjX2xpbmVhcl9wdChwdHBnLCBwYWdlLCB0eXBlKTsKLSAgICAgICAgQVNTRVJUKCFwYWdl LT5saW5lYXJfcHRfY291bnQgfHwgcGFnZV9nZXRfb3duZXIocGFnZSktPmlzX2R5aW5nKTsKLSAg ICAgICAgc2V0X3RsYmZsdXNoX3RpbWVzdGFtcChwYWdlKTsKLSAgICAgICAgc21wX3dtYigpOwot ICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mby0tOwotICAgIH0KLSAgICBlbHNlIGlmICgg cmMgPT0gLUVJTlRSICkKLSAgICB7Ci0gICAgICAgIEFTU0VSVCgocGFnZS0+dS5pbnVzZS50eXBl X2luZm8gJgotICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFza3xQR1RfdmFsaWRhdGVkfFBH VF9wYXJ0aWFsKSkgPT0gMSk7Ci0gICAgICAgIHNtcF93bWIoKTsKLSAgICAgICAgcGFnZS0+dS5p bnVzZS50eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRlZDsKLSAgICB9Ci0gICAgZWxzZQotICAgIHsK LSAgICAgICAgQlVHX09OKHJjICE9IC1FUkVTVEFSVCk7Ci0gICAgICAgIHNtcF93bWIoKTsKLSAg ICAgICAgZ2V0X3BhZ2VfbGlnaHQocGFnZSk7Ci0gICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9p bmZvIHw9IFBHVF9wYXJ0aWFsOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGlj IGludCBfcHV0X3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCBib29sIHByZWVtcHRp YmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwdHBnKQot ewotICAgIHVuc2lnbmVkIGxvbmcgbngsIHgsIHkgPSBwYWdlLT51LmludXNlLnR5cGVfaW5mbzsK LQotICAgIEFTU0VSVChjdXJyZW50X2xvY2tlZF9wYWdlX25lX2NoZWNrKHBhZ2UpKTsKLQotICAg IGZvciAoIDsgOyApCi0gICAgewotICAgICAgICB4ICA9IHk7Ci0gICAgICAgIG54ID0geCAtIDE7 Ci0KLSAgICAgICAgQVNTRVJUKCh4ICYgUEdUX2NvdW50X21hc2spICE9IDApOwotCi0gICAgICAg IHN3aXRjaCAoIG54ICYgKFBHVF9sb2NrZWQgfCBQR1RfY291bnRfbWFzaykgKQotICAgICAgICB7 Ci0gICAgICAgIGNhc2UgMDoKLSAgICAgICAgICAgIGlmICggdW5saWtlbHkoKG54ICYgUEdUX3R5 cGVfbWFzaykgPD0gUEdUX2w0X3BhZ2VfdGFibGUpICYmCi0gICAgICAgICAgICAgICAgIGxpa2Vs eShueCAmIChQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgKQotICAgICAgICAgICAgewotICAg ICAgICAgICAgICAgIGludCByYzsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgaWYgKCB1 bmxpa2VseSgobnggJiBQR1RfdHlwZV9tYXNrKSA8PSBQR1RfbDRfcGFnZV90YWJsZSkgJiYKKyAg ICAgICAgICAgICAgICAgbGlrZWx5KG54ICYgKFBHVF92YWxpZGF0ZWR8UEdUX3BhcnRpYWwpKSAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50IHJjOwogCiAgICAgICAgICAgICAg ICAgLyoKICAgICAgICAgICAgICAgICAgKiBPbmx5IFBWIGd1ZXN0cyBjYW4gZW50ZXIgdGhpcyBi cmFuY2guIEhBUCBndWVzdHMKQEAgLTI4MTcsMTE0MSArMTUyOSwxMDEgQEAgaW50IHZjcHVfZGVz dHJveV9wYWdldGFibGVzKHN0cnVjdCB2Y3B1ICp2KQogICAgIHJldHVybiByYyAhPSAtRUlOVFIg PyByYyA6IC1FUkVTVEFSVDsKIH0KIAotaW50IG5ld19ndWVzdF9jcjMobWZuX3QgbWZuKQoraW50 IGRvbmF0ZV9wYWdlKAorICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBwYWdlX2luZm8gKnBh Z2UsIHVuc2lnbmVkIGludCBtZW1mbGFncykKIHsKLSAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1 cnJlbnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IGN1cnItPmRvbWFpbjsKLSAgICBpbnQgcmM7 Ci0gICAgbWZuX3Qgb2xkX2Jhc2VfbWZuOwotCi0gICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4o ZCkgKQotICAgIHsKLSAgICAgICAgbWZuX3QgZ3RfbWZuID0gcGFnZXRhYmxlX2dldF9tZm4oY3Vy ci0+YXJjaC5ndWVzdF90YWJsZSk7Ci0gICAgICAgIGw0X3BnZW50cnlfdCAqcGw0ZSA9IG1hcF9k b21haW5fcGFnZShndF9tZm4pOwotCi0gICAgICAgIHJjID0gbW9kX2w0X2VudHJ5KHBsNGUsCi0g ICAgICAgICAgICAgICAgICAgICAgICAgIGw0ZV9mcm9tX21mbihtZm4sCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX1JXIHwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9VU0VSIHwgX1BBR0Vf QUNDRVNTRUQpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWZuX3goZ3RfbWZuKSwgMCwg Y3Vycik7Ci0gICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwotICAgICAgICBzd2l0Y2gg KCByYyApCi0gICAgICAgIHsKLSAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgYnJlYWs7Ci0g ICAgICAgIGNhc2UgLUVJTlRSOgotICAgICAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAg IHJldHVybiAtRVJFU1RBUlQ7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJFcnJvciB3aGlsZSBpbnN0 YWxsaW5nIG5ldyBjb21wYXQgYmFzZXB0ciAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAgICAg ICAgICAgICBtZm5feChtZm4pKTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgfQot Ci0gICAgICAgIHB2X2Rlc3Ryb3lfbGR0KGN1cnIpOyAvKiBVbmNvbmRpdGlvbmFsIFRMQiBmbHVz aCBsYXRlci4gKi8KLSAgICAgICAgd3JpdGVfcHRiYXNlKGN1cnIpOwotCi0gICAgICAgIHJldHVy biAwOwotICAgIH0KLQotICAgIHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKLSAgICBp ZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIG9sZF9iYXNlX21m biA9IHBhZ2V0YWJsZV9nZXRfbWZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGUpOwotICAgIC8qCi0g ICAgICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gZ2V0dGluZyByZXN0YXJ0 ZWQgYWZ0ZXIgdGhlCi0gICAgICogcHJldmlvdXMgYXR0ZW1wdCBnb3QgcHJlZW1wdGVkIGluIHRo ZSBwdXQtb2xkLU1GTiBwaGFzZS4KLSAgICAgKi8KLSAgICBpZiAoIG1mbl9lcShvbGRfYmFzZV9t Zm4sIG1mbikgKQotICAgIHsKLSAgICAgICAgd3JpdGVfcHRiYXNlKGN1cnIpOwotICAgICAgICBy ZXR1cm4gMDsKLSAgICB9Ci0KLSAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKG1m biwgUEdUX3Jvb3RfcGFnZV90YWJsZSwgZCwgMCwgMSk7Ci0gICAgc3dpdGNoICggcmMgKQotICAg IHsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgLUVJTlRSOgotICAgIGNh c2UgLUVSRVNUQVJUOgotICAgICAgICByZXR1cm4gLUVSRVNUQVJUOwotICAgIGRlZmF1bHQ6Ci0g ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAiRXJyb3Ig d2hpbGUgaW5zdGFsbGluZyBuZXcgYmFzZXB0ciAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAg ICAgICAgIG1mbl94KG1mbikpOwotICAgICAgICByZXR1cm4gcmM7Ci0gICAgfQotCi0gICAgcHZf ZGVzdHJveV9sZHQoY3Vycik7IC8qIFVuY29uZGl0aW9uYWwgVExCIGZsdXNoIGxhdGVyLiAqLwot Ci0gICAgaWYgKCAhVk1fQVNTSVNUKGQsIG0ycF9zdHJpY3QpICYmICFwYWdpbmdfbW9kZV9yZWZj b3VudHMoZCkgKQotICAgICAgICBmaWxsX3JvX21wdChtZm4pOwotICAgIGN1cnItPmFyY2guZ3Vl c3RfdGFibGUgPSBwYWdldGFibGVfZnJvbV9tZm4obWZuKTsKLSAgICB1cGRhdGVfY3IzKGN1cnIp OwotCi0gICAgd3JpdGVfcHRiYXNlKGN1cnIpOwotCi0gICAgaWYgKCBsaWtlbHkobWZuX3gob2xk X2Jhc2VfbWZuKSAhPSAwKSApCi0gICAgewotICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdl ID0gbWZuX3RvX3BhZ2Uob2xkX2Jhc2VfbWZuKTsKLQotICAgICAgICBpZiAoIHBhZ2luZ19tb2Rl X3JlZmNvdW50cyhkKSApCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgZWxz ZQotICAgICAgICAgICAgc3dpdGNoICggcmMgPSBwdXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJs ZShwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAg ICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3Vn aCAqLwotICAgICAgICAgICAgY2FzZSAtRVJFU1RBUlQ6Ci0gICAgICAgICAgICAgICAgY3Vyci0+ YXJjaC5vbGRfZ3Vlc3RfcHRwZyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5v bGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBCVUdfT04ocmMpOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotICAgIH0KKyAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpv d25lciA9IGRvbV94ZW47CiAKLSAgICByZXR1cm4gcmM7Ci19CisgICAgc3Bpbl9sb2NrKCZkLT5w YWdlX2FsbG9jX2xvY2spOwogCi1zdGF0aWMgc3RydWN0IGRvbWFpbiAqZ2V0X3BnX293bmVyKGRv bWlkX3QgZG9taWQpCi17Ci0gICAgc3RydWN0IGRvbWFpbiAqcGdfb3duZXIgPSBOVUxMLCAqY3Vy ciA9IGN1cnJlbnQtPmRvbWFpbjsKKyAgICBpZiAoIGlzX3hlbl9oZWFwX3BhZ2UocGFnZSkgfHwg KChvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSAhPSBOVUxMKSApCisgICAgICAgIGdvdG8g ZmFpbDsKIAotICAgIGlmICggbGlrZWx5KGRvbWlkID09IERPTUlEX1NFTEYpICkKLSAgICB7Ci0g ICAgICAgIHBnX293bmVyID0gcmN1X2xvY2tfY3VycmVudF9kb21haW4oKTsKLSAgICAgICAgZ290 byBvdXQ7Ci0gICAgfQorICAgIGlmICggZC0+aXNfZHlpbmcgKQorICAgICAgICBnb3RvIGZhaWw7 CiAKLSAgICBpZiAoIHVubGlrZWx5KGRvbWlkID09IGN1cnItPmRvbWFpbl9pZCkgKQotICAgIHsK LSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJDYW5ub3Qgc3BlY2lmeSBpdHNlbGYg YXMgZm9yZWlnbiBkb21haW5cbiIpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9CisgICAgaWYg KCBwYWdlLT5jb3VudF9pbmZvICYgfihQR0NfYWxsb2NhdGVkIHwgMSkgKQorICAgICAgICBnb3Rv IGZhaWw7CiAKLSAgICBzd2l0Y2ggKCBkb21pZCApCisgICAgaWYgKCAhKG1lbWZsYWdzICYgTUVN Rl9ub19yZWZjb3VudCkgKQogICAgIHsKLSAgICBjYXNlIERPTUlEX0lPOgotICAgICAgICBwZ19v d25lciA9IHJjdV9sb2NrX2RvbWFpbihkb21faW8pOwotICAgICAgICBicmVhazsKLSAgICBjYXNl IERPTUlEX1hFTjoKLSAgICAgICAgcGdfb3duZXIgPSByY3VfbG9ja19kb21haW4oZG9tX3hlbik7 Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICggKHBnX293bmVyID0g cmN1X2xvY2tfZG9tYWluX2J5X2lkKGRvbWlkKSkgPT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiVW5rbm93biBkb21haW4gZCVkXG4iLCBk b21pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKKyAg ICAgICAgaWYgKCBkLT50b3RfcGFnZXMgPj0gZC0+bWF4X3BhZ2VzICkKKyAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICAgICAgZG9tYWluX2FkanVzdF90b3RfcGFnZXMoZCwgMSk7CiAgICAgfQog Ci0gb3V0OgotICAgIHJldHVybiBwZ19vd25lcjsKLX0KLQotc3RhdGljIHZvaWQgcHV0X3BnX293 bmVyKHN0cnVjdCBkb21haW4gKnBnX293bmVyKQotewotICAgIHJjdV91bmxvY2tfZG9tYWluKHBn X293bmVyKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgdmNwdW1hc2tfdG9fcGNwdW1hc2soCi0g ICAgc3RydWN0IGRvbWFpbiAqZCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShjb25zdF92b2lkKSBi bWFwLCBjcHVtYXNrX3QgKnBtYXNrKQotewotICAgIHVuc2lnbmVkIGludCB2Y3B1X2lkLCB2Y3B1 X2JpYXMsIG9mZnM7Ci0gICAgdW5zaWduZWQgbG9uZyB2bWFzazsKLSAgICBzdHJ1Y3QgdmNwdSAq djsKLSAgICBib29sIGlzX25hdGl2ZSA9ICFpc19wdl8zMmJpdF9kb21haW4oZCk7Ci0KLSAgICBj cHVtYXNrX2NsZWFyKHBtYXNrKTsKLSAgICBmb3IgKCB2bWFzayA9IDAsIG9mZnMgPSAwOyA7ICsr b2ZmcyApCi0gICAgewotICAgICAgICB2Y3B1X2JpYXMgPSBvZmZzICogKGlzX25hdGl2ZSA/IEJJ VFNfUEVSX0xPTkcgOiAzMik7Ci0gICAgICAgIGlmICggdmNwdV9iaWFzID49IGQtPm1heF92Y3B1 cyApCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICBwYWdlLT5jb3VudF9pbmZvID0gUEdDX2Fs bG9jYXRlZCB8IDE7CisgICAgcGFnZV9zZXRfb3duZXIocGFnZSwgZCk7CisgICAgcGFnZV9saXN0 X2FkZF90YWlsKHBhZ2UsJmQtPnBhZ2VfbGlzdCk7CiAKLSAgICAgICAgaWYgKCB1bmxpa2VseShp c19uYXRpdmUgPwotICAgICAgICAgICAgICAgICAgICAgIGNvcHlfZnJvbV9ndWVzdF9vZmZzZXQo JnZtYXNrLCBibWFwLCBvZmZzLCAxKSA6Ci0gICAgICAgICAgICAgICAgICAgICAgY29weV9mcm9t X2d1ZXN0X29mZnNldCgodW5zaWduZWQgaW50ICopJnZtYXNrLCBibWFwLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmcywgMSkpICkKLSAgICAgICAgewot ICAgICAgICAgICAgY3B1bWFza19jbGVhcihwbWFzayk7Ci0gICAgICAgICAgICByZXR1cm4gLUVG QVVMVDsKLSAgICAgICAgfQorICAgIHNwaW5fdW5sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwor ICAgIHJldHVybiAwOwogCi0gICAgICAgIHdoaWxlICggdm1hc2sgKQotICAgICAgICB7Ci0gICAg ICAgICAgICB2Y3B1X2lkID0gZmluZF9maXJzdF9zZXRfYml0KHZtYXNrKTsKLSAgICAgICAgICAg IHZtYXNrICY9IH4oMVVMIDw8IHZjcHVfaWQpOwotICAgICAgICAgICAgdmNwdV9pZCArPSB2Y3B1 X2JpYXM7Ci0gICAgICAgICAgICBpZiAoICh2Y3B1X2lkID49IGQtPm1heF92Y3B1cykgKQotICAg ICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKCAoKHYgPSBkLT52Y3B1W3Zj cHVfaWRdKSAhPSBOVUxMKSAmJiB2Y3B1X2NwdV9kaXJ0eSh2KSApCi0gICAgICAgICAgICAgICAg X19jcHVtYXNrX3NldF9jcHUodi0+ZGlydHlfY3B1LCBwbWFzayk7Ci0gICAgICAgIH0KLSAgICB9 CisgZmFpbDoKKyAgICBzcGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKKyAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBkb25hdGUgbWZuICUiIFBSSV9tZm4KKyAgICAgICAg ICAgICAiIHRvIGQlZCAob3duZXIgZCVkKSBjYWY9JTA4bHggdGFmPSUiIFBSdHlwZV9pbmZvICJc biIsCisgICAgICAgICAgICAgbWZuX3gocGFnZV90b19tZm4ocGFnZSkpLCBkLT5kb21haW5faWQs CisgICAgICAgICAgICAgb3duZXIgPyBvd25lci0+ZG9tYWluX2lkIDogRE9NSURfSU5WQUxJRCwK KyAgICAgICAgICAgICBwYWdlLT5jb3VudF9pbmZvLCBwYWdlLT51LmludXNlLnR5cGVfaW5mbyk7 CisgICAgcmV0dXJuIC1FSU5WQUw7CiB9CiAKLWxvbmcgZG9fbW11ZXh0X29wKAotICAgIFhFTl9H VUVTVF9IQU5ETEVfUEFSQU0obW11ZXh0X29wX3QpIHVvcHMsCi0gICAgdW5zaWduZWQgaW50IGNv dW50LAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odWludCkgcGRvbmUsCi0gICAgdW5zaWdu ZWQgaW50IGZvcmVpZ25kb20pCitpbnQgc3RlYWxfcGFnZSgKKyAgICBzdHJ1Y3QgZG9tYWluICpk LCBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MpCiB7Ci0gICAg c3RydWN0IG1tdWV4dF9vcCBvcDsKLSAgICB1bnNpZ25lZCBsb25nIHR5cGU7Ci0gICAgdW5zaWdu ZWQgaW50IGksIGRvbmUgPSAwOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsKLSAg ICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBzdHJ1Y3QgZG9tYWlu ICpwZ19vd25lcjsKLSAgICBpbnQgcmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKGN1cnIpOwotCi0g ICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgIHsKLSAgICAgICAgaWYgKCBsaWtlbHkocmMgPT0g LUVSRVNUQVJUKSApCi0gICAgICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0 aW9uKAotICAgICAgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGki LCB1b3BzLCBjb3VudCwgcGRvbmUsCi0gICAgICAgICAgICAgICAgICAgICBmb3JlaWduZG9tKTsK LSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoY291bnQgPT0g TU1VX1VQREFURV9QUkVFTVBURUQpICYmCi0gICAgICAgICBsaWtlbHkoZ3Vlc3RfaGFuZGxlX2lz X251bGwodW9wcykpICkKLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNlZSB0aGUgY3Vy ci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgcmVsYXRlZAotICAgICAgICAgKiBoeXBlcmNhbGxfY3Jl YXRlX2NvbnRpbnVhdGlvbigpIGJlbG93LgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIChp bnQpZm9yZWlnbmRvbTsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KGNvdW50ICYgTU1VX1VQ REFURV9QUkVFTVBURUQpICkKLSAgICB7Ci0gICAgICAgIGNvdW50ICY9IH5NTVVfVVBEQVRFX1BS RUVNUFRFRDsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRv bmUpKSApCi0gICAgICAgICAgICAodm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUsIHBkb25lLCAx KTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3RvX21tdWV4dF9v cCk7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1b3BzLCBjb3VudCkp ICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBpZiAoIChwZ19vd25lciA9IGdldF9w Z19vd25lcihmb3JlaWduZG9tKSkgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAtRVNSQ0g7Ci0K LSAgICBpZiAoICFpc19wdl9kb21haW4ocGdfb3duZXIpICkKLSAgICB7Ci0gICAgICAgIHB1dF9w Z19vd25lcihwZ19vd25lcik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAg IHJjID0geHNtX21tdWV4dF9vcChYU01fVEFSR0VULCBjdXJyZCwgcGdfb3duZXIpOwotICAgIGlm ICggcmMgKQotICAgIHsKLSAgICAgICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsKLSAgICAgICAg cmV0dXJuIHJjOwotICAgIH0KLQotICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCi0g ICAgewotICAgICAgICBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8IChpICYmIGh5 cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgcmMgPSAt RVJFU1RBUlQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIHVuc2lnbmVkIGxv bmcgeCwgeTsKKyAgICBib29sIGRyb3BfZG9tX3JlZiA9IGZhbHNlOworICAgIGNvbnN0IHN0cnVj dCBkb21haW4gKm93bmVyID0gZG9tX3hlbjsKIAotICAgICAgICBpZiAoIHVubGlrZWx5KF9fY29w eV9mcm9tX2d1ZXN0KCZvcCwgdW9wcywgMSkgIT0gMCkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICByYyA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQorICAgIGlmICgg cGFnaW5nX21vZGVfZXh0ZXJuYWwoZCkgKQorICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CiAK LSAgICAgICAgaWYgKCBpc19odm1fZG9tYWluKGN1cnJkKSApCi0gICAgICAgIHsKLSAgICAgICAg ICAgIHN3aXRjaCAoIG9wLmNtZCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICBjYXNlIE1N VUVYVF9QSU5fTDFfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDJfVEFCTEU6 Ci0gICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDNfVEFCTEU6Ci0gICAgICAgICAgICBjYXNl IE1NVUVYVF9QSU5fTDRfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1NVUVYVF9VTlBJTl9UQUJM RToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0g ICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICBzcGluX2xvY2soJmQtPnBhZ2VfYWxsb2NfbG9j ayk7CiAKLSAgICAgICAgcmMgPSAwOworICAgIGlmICggaXNfeGVuX2hlYXBfcGFnZShwYWdlKSB8 fCAoKG93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSkpICE9IGQpICkKKyAgICAgICAgZ290byBm YWlsOwogCi0gICAgICAgIHN3aXRjaCAoIG9wLmNtZCApCi0gICAgICAgIHsKLSAgICAgICAgICAg IHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgICAgICAgICBwMm1fdHlwZV90IHAybXQ7Cisg ICAgLyoKKyAgICAgKiBXZSByZXF1aXJlIHRoZXJlIGlzIGp1c3Qgb25lIHJlZmVyZW5jZSAoUEdD X2FsbG9jYXRlZCkuIFdlIHRlbXBvcmFyaWx5CisgICAgICogZHJvcCB0aGlzIHJlZmVyZW5jZSBu b3cgc28gdGhhdCB3ZSBjYW4gc2FmZWx5IHN3aXp6bGUgdGhlIG93bmVyLgorICAgICAqLworICAg IHkgPSBwYWdlLT5jb3VudF9pbmZvOworICAgIGRvIHsKKyAgICAgICAgeCA9IHk7CisgICAgICAg IGlmICggKHggJiAoUEdDX2NvdW50X21hc2t8UEdDX2FsbG9jYXRlZCkpICE9ICgxIHwgUEdDX2Fs bG9jYXRlZCkgKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB5ID0gY21weGNoZygm cGFnZS0+Y291bnRfaW5mbywgeCwgeCAmIH5QR0NfY291bnRfbWFzayk7CisgICAgfSB3aGlsZSAo IHkgIT0geCApOwogCi0gICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MMV9UQUJMRToKLSAgICAgICAg ICAgIHR5cGUgPSBQR1RfbDFfcGFnZV90YWJsZTsKLSAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7 CisgICAgLyoKKyAgICAgKiBXaXRoIHRoZSBzb2xlIHJlZmVyZW5jZSBkcm9wcGVkIHRlbXBvcmFy aWx5LCBuby1vbmUgY2FuIHVwZGF0ZSB0eXBlCisgICAgICogaW5mb3JtYXRpb24uIFR5cGUgY291 bnQgYWxzbyBuZWVkcyB0byBiZSB6ZXJvIGluIHRoaXMgY2FzZSwgYnV0IGUuZy4KKyAgICAgKiBQ R1Rfc2VnX2Rlc2NfcGFnZSBtYXkgc3RpbGwgaGF2ZSBQR1RfdmFsaWRhdGVkIHNldCwgd2hpY2gg d2UgbmVlZCB0bworICAgICAqIGNsZWFyIGJlZm9yZSB0cmFuc2ZlcnJpbmcgb3duZXJzaGlwIChh cyB2YWxpZGF0aW9uIGNyaXRlcmlhIHZhcnkKKyAgICAgKiBkZXBlbmRpbmcgb24gZG9tYWluIHR5 cGUpLgorICAgICAqLworICAgIEJVR19PTihwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIChQR1Rf Y291bnRfbWFzayB8IFBHVF9sb2NrZWQgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQR1RfcGlubmVkKSk7CisgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSAwOwog Ci0gICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MMl9UQUJMRToKLSAgICAgICAgICAgIHR5cGUgPSBQ R1RfbDJfcGFnZV90YWJsZTsKLSAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7CisgICAgLyogU3dp enpsZSB0aGUgb3duZXIgdGhlbiByZWluc3RhdGUgdGhlIFBHQ19hbGxvY2F0ZWQgcmVmZXJlbmNl LiAqLworICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIE5VTEwpOworICAgIHkgPSBwYWdlLT5jb3Vu dF9pbmZvOworICAgIGRvIHsKKyAgICAgICAgeCA9IHk7CisgICAgICAgIEJVR19PTigoeCAmIChQ R0NfY291bnRfbWFza3xQR0NfYWxsb2NhdGVkKSkgIT0gUEdDX2FsbG9jYXRlZCk7CisgICAgfSB3 aGlsZSAoICh5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwgeCB8IDEpKSAhPSB4ICk7 CiAKLSAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wzX1RBQkxFOgotICAgICAgICAgICAgdHlwZSA9 IFBHVF9sM19wYWdlX3RhYmxlOwotICAgICAgICAgICAgZ290byBwaW5fcGFnZTsKKyAgICAvKiBV bmxpbmsgZnJvbSBvcmlnaW5hbCBvd25lci4gKi8KKyAgICBpZiAoICEobWVtZmxhZ3MgJiBNRU1G X25vX3JlZmNvdW50KSAmJiAhZG9tYWluX2FkanVzdF90b3RfcGFnZXMoZCwgLTEpICkKKyAgICAg ICAgZHJvcF9kb21fcmVmID0gdHJ1ZTsKKyAgICBwYWdlX2xpc3RfZGVsKHBhZ2UsICZkLT5wYWdl X2xpc3QpOwogCi0gICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MNF9UQUJMRToKLSAgICAgICAgICAg IGlmICggaXNfcHZfMzJiaXRfZG9tYWluKHBnX293bmVyKSApCi0gICAgICAgICAgICAgICAgYnJl YWs7Ci0gICAgICAgICAgICB0eXBlID0gUEdUX2w0X3BhZ2VfdGFibGU7Ci0KLSAgICAgICAgcGlu X3BhZ2U6Ci0gICAgICAgICAgICAvKiBJZ25vcmUgcGlubmluZyBvZiBpbnZhbGlkIHBhZ2luZyBs ZXZlbHMuICovCi0gICAgICAgICAgICBpZiAoIChvcC5jbWQgLSBNTVVFWFRfUElOX0wxX1RBQkxF KSA+IChDT05GSUdfUEFHSU5HX0xFVkVMUyAtIDEpICkKLSAgICAgICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHMocGdfb3duZXIpICkKLSAg ICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21f Z2ZuKHBnX293bmVyLCBvcC5hcmcxLm1mbiwgTlVMTCwgUDJNX0FMTE9DKTsKLSAgICAgICAgICAg IGlmICggdW5saWtlbHkoIXBhZ2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy YyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg ICAgICAgICAgIHJjID0gZ2V0X3BhZ2VfdHlwZV9wcmVlbXB0aWJsZShwYWdlLCB0eXBlKTsKLSAg ICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICBpZiAoIHJjID09IC1FSU5UUiApCi0gICAgICAgICAgICAgICAgICAgIHJjID0gLUVSRVNU QVJUOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKCByYyAhPSAtRVJFU1RBUlQgKQotICAgICAg ICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIkVycm9yICVkIHdoaWxlIHBpbm5pbmcgbWZuICUiIFBSSV9tZm4gIlxuIiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2Up KSk7Ci0gICAgICAgICAgICAgICAgaWYgKCBwYWdlICE9IGN1cnItPmFyY2gub2xkX2d1ZXN0X3Rh YmxlICkKLSAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHJjID0geHNtX21lbW9yeV9w aW5fcGFnZShYU01fSE9PSywgY3VycmQsIHBnX293bmVyLCBwYWdlKTsKLSAgICAgICAgICAgIGlm ICggIXJjICYmIHVubGlrZWx5KHRlc3RfYW5kX3NldF9iaXQoX1BHVF9waW5uZWQsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYWdlLT51LmludXNl LnR5cGVfaW5mbykpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAibWZuICUiIFBSSV9tZm4g IiBhbHJlYWR5IHBpbm5lZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtZm5feChwYWdl X3RvX21mbihwYWdlKSkpOwotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAg ICAgIH0KLQotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgICAg IGdvdG8gcGluX2Ryb3A7Ci0KLSAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4g aXRzIHBpbiBzdGF0dXMgaXMgc2V0LiAqLwotICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHko cGdfb3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKLQotICAgICAgICAgICAgLyogV2UgY2FuIHJh Y2UgZG9tYWluIGRlc3RydWN0aW9uIChkb21haW5fcmVsaW5xdWlzaF9yZXNvdXJjZXMpLiAqLwot ICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwZ19vd25lciAhPSBjdXJyZCkgKQotICAgICAgICAg ICAgewotICAgICAgICAgICAgICAgIGJvb2wgZHJvcF9yZWY7Ci0KLSAgICAgICAgICAgICAgICBz cGluX2xvY2soJnBnX293bmVyLT5wYWdlX2FsbG9jX2xvY2spOwotICAgICAgICAgICAgICAgIGRy b3BfcmVmID0gKHBnX293bmVyLT5pc19keWluZyAmJgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRlc3RfYW5kX2NsZWFyX2JpdChfUEdUX3Bpbm5lZCwKLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKSk7Ci0g ICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBnX293bmVyLT5wYWdlX2FsbG9jX2xvY2spOwot ICAgICAgICAgICAgICAgIGlmICggZHJvcF9yZWYgKQotICAgICAgICAgICAgICAgIHsKLSAgICAg ICAgcGluX2Ryb3A6Ci0gICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PSBQR1RfbDFfcGFn ZV90YWJsZSApCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdl KTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF9wdHBnID0gTlVMTDsKLSAg ICAgICAgICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0gcGFnZTsK LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX1VOUElOX1RBQkxFOgot ICAgICAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHMocGdfb3duZXIpICkKLSAgICAg ICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2Zu KHBnX293bmVyLCBvcC5hcmcxLm1mbiwgTlVMTCwgUDJNX0FMTE9DKTsKLSAgICAgICAgICAgIGlm ICggdW5saWtlbHkoIXBhZ2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZHBy aW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAibWZuICUiIFBS SV9tZm4gIiBiYWQsIG9yIGJhZCBvd25lciBkJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgb3AuYXJnMS5tZm4sIHBnX293bmVyLT5kb21haW5faWQpOwotICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgaWYgKCAhdGVzdF9hbmRfY2xlYXJfYml0KF9QR1RfcGlubmVkLCAmcGFnZS0+dS5p bnVzZS50eXBlX2luZm8pICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfcGFn ZShwYWdlKTsKLSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAibWZuICUiIFBSSV9tZm4gIiBub3QgcGlubmVkXG4iLCBvcC5h cmcxLm1mbik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAg IGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBzd2l0Y2ggKCByYyA9IHB1dF9w YWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAg ICAgIGNhc2UgLUVJTlRSOgotICAgICAgICAgICAgY2FzZSAtRVJFU1RBUlQ6Ci0gICAgICAgICAg ICAgICAgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfcHRwZyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAg Y3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwotICAgICAgICAgICAgICAgIHJjID0g MDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg ICAgICAgICAgQlVHX09OKHJjKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotCi0gICAgICAgICAgICAvKiBBIHBhZ2Ug aXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVzIGlzIGNsZWFyZWQuICovCi0gICAgICAgICAg ICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgcGFnZV90b19tZm4ocGFnZSkpOwotICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfTkVXX0JBU0VQVFI6Ci0gICAgICAg ICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCi0gICAgICAgICAgICAgICAg cmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVf dHJhbnNsYXRlKGN1cnJkKSkgKQotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAg ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IG5ld19ndWVzdF9jcjMoX21mbihvcC5h cmcxLm1mbikpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfTkVX X1VTRVJfQkFTRVBUUjogewotICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBvbGRfbWZuOwotCi0g ICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCi0gICAgICAgICAg ICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHkocGFnaW5n X21vZGVfdHJhbnNsYXRlKGN1cnJkKSkgKQotICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsK LSAgICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAgICAgICBicmVhazsK LQotICAgICAgICAgICAgb2xkX21mbiA9IHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vl c3RfdGFibGVfdXNlcik7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBw YXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gZ2V0dGluZyByZXN0YXJ0ZWQgYWZ0ZXIgdGhlCi0g ICAgICAgICAgICAgKiBwcmV2aW91cyBhdHRlbXB0IGdvdCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1v bGQtTUZOIHBoYXNlLgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoIG9sZF9tZm4g PT0gb3AuYXJnMS5tZm4gKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBp ZiAoIG9wLmFyZzEubWZuICE9IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJj ID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oCi0gICAgICAgICAgICAgICAgICAgIF9tZm4o b3AuYXJnMS5tZm4pLCBQR1Rfcm9vdF9wYWdlX3RhYmxlLCBjdXJyZCwgMCwgMSk7Ci0KLSAgICAg ICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAgICAgICAgICAgewotICAgICAg ICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5UUiApCi0gICAgICAgICAgICAgICAgICAgICAg ICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHJjICE9IC1F UkVTVEFSVCApCi0gICAgICAgICAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciAlZCBpbnN0YWxsaW5n IG5ldyBtZm4gJSIgUFJJX21mbiAiXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcmMsIG9wLmFyZzEubWZuKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg ICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKCBWTV9BU1NJU1QoY3VycmQsIG0ycF9z dHJpY3QpICkKLSAgICAgICAgICAgICAgICAgICAgemFwX3JvX21wdChfbWZuKG9wLmFyZzEubWZu KSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGN1cnItPmFyY2guZ3Vlc3RfdGFibGVf dXNlciA9IHBhZ2V0YWJsZV9mcm9tX3BmbihvcC5hcmcxLm1mbik7Ci0KLSAgICAgICAgICAgIGlm ICggb2xkX21mbiAhPSAwICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwYWdlID0g bWZuX3RvX3BhZ2UoX21mbihvbGRfbWZuKSk7Ci0KLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCBy YyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKLSAgICAgICAgICAgICAg ICB7Ci0gICAgICAgICAgICAgICAgY2FzZSAtRUlOVFI6Ci0gICAgICAgICAgICAgICAgICAgIHJj ID0gLUVSRVNUQVJUOwotICAgICAgICAgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLwotICAg ICAgICAgICAgICAgIGNhc2UgLUVSRVNUQVJUOgotICAgICAgICAgICAgICAgICAgICBjdXJyLT5h cmNoLm9sZF9ndWVzdF9wdHBnID0gTlVMTDsKLSAgICAgICAgICAgICAgICAgICAgY3Vyci0+YXJj aC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg ICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgICBCVUdfT04ocmMpOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg ICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNTVVF WFRfVExCX0ZMVVNIX0xPQ0FMOgotICAgICAgICAgICAgaWYgKCBsaWtlbHkoY3VycmQgPT0gcGdf b3duZXIpICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKLSAgICAgICAgICAg IGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGJyZWFrOwot Ci0gICAgICAgIGNhc2UgTU1VRVhUX0lOVkxQR19MT0NBTDoKLSAgICAgICAgICAgIGlmICggdW5s aWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsK LSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwYWdpbmdfaW52bHBnKGN1cnIsIG9w LmFyZzEubGluZWFyX2FkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBN TVVFWFRfVExCX0ZMVVNIX01VTFRJOgotICAgICAgICBjYXNlIE1NVUVYVF9JTlZMUEdfTVVMVEk6 Ci0gICAgICAgIHsKLSAgICAgICAgICAgIGNwdW1hc2tfdCAqbWFzayA9IHRoaXNfY3B1KHNjcmF0 Y2hfY3B1bWFzayk7Ci0KLSAgICAgICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3du ZXIpICkKLSAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYg KCB1bmxpa2VseSh2Y3B1bWFza190b19wY3B1bWFzayhjdXJyZCwKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3Vlc3RfaGFuZGxlX3RvX3BhcmFtKG9wLmFyZzIudmNwdW1hc2ss Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb25zdF92b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzaykp ICkKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICBpZiAoIHVubGlr ZWx5KHJjKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICggb3Au Y21kID09IE1NVUVYVF9UTEJfRkxVU0hfTVVMVEkgKQotICAgICAgICAgICAgICAgIGZsdXNoX3Rs Yl9tYXNrKG1hc2spOwotICAgICAgICAgICAgZWxzZSBpZiAoIF9fYWRkcl9vayhvcC5hcmcxLmxp bmVhcl9hZGRyKSApCi0gICAgICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKG1hc2ssIG9w LmFyZzEubGluZWFyX2FkZHIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAg ICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfQUxMOgotICAgICAgICAgICAgaWYgKCBsaWtlbHko Y3VycmQgPT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhjdXJy ZC0+ZGlydHlfY3B1bWFzayk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMg PSAtRVBFUk07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9JTlZM UEdfQUxMOgotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQot ICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIF9fYWRk cl9vayhvcC5hcmcxLmxpbmVhcl9hZGRyKSApCi0gICAgICAgICAgICAgICAgZmx1c2hfdGxiX29u ZV9tYXNrKGN1cnJkLT5kaXJ0eV9jcHVtYXNrLCBvcC5hcmcxLmxpbmVhcl9hZGRyKTsKLSAgICAg ICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX0ZMVVNIX0NBQ0hFOgotICAgICAg ICAgICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAg IHJjID0gLUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFjYWNoZV9mbHVz aF9wZXJtaXR0ZWQoY3VycmQpKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUFDQ0VTOwotICAg ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHdiaW52ZCgpOwotICAgICAgICAgICAgYnJl YWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfRkxVU0hfQ0FDSEVfR0xPQkFMOgotICAgICAgICAg ICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJj ID0gLUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIGxpa2VseShjYWNoZV9mbHVzaF9wZXJt aXR0ZWQoY3VycmQpKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGNwdTsKLSAgICAgICAgICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3Jh dGNoX2NwdW1hc2spOwotCi0gICAgICAgICAgICAgICAgY3B1bWFza19jbGVhcihtYXNrKTsKLSAg ICAgICAgICAgICAgICBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkKLSAgICAgICAgICAgICAgICAg ICAgaWYgKCAhY3B1bWFza19pbnRlcnNlY3RzKG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwZXJfY3B1KGNwdV9zaWJsaW5nX21hc2ssIGNwdSkpICkK LSAgICAgICAgICAgICAgICAgICAgICAgIF9fY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7Ci0g ICAgICAgICAgICAgICAgZmx1c2hfbWFzayhtYXNrLCBGTFVTSF9DQUNIRSk7Ci0gICAgICAgICAg ICB9Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAg ICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfU0VUX0xEVDoKLSAgICAgICAg ewotICAgICAgICAgICAgdW5zaWduZWQgaW50IGVudHMgPSBvcC5hcmcyLm5yX2VudHM7Ci0gICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHB0ciA9IGVudHMgPyBvcC5hcmcxLmxpbmVhcl9hZGRyIDog MDsKLQotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQotICAg ICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIHBhZ2luZ19t b2RlX2V4dGVybmFsKGN1cnJkKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAg ICAgICAgICAgZWxzZSBpZiAoICgocHRyICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB8fCAhX19h ZGRyX29rKHB0cikgfHwKLSAgICAgICAgICAgICAgICAgICAgICAoZW50cyA+IDgxOTIpICkKLSAg ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAiQmFkIGFyZ3MgdG8gU0VUX0xEVDogcHRyPSVseCwgZW50 cz0leFxuIiwgcHRyLCBlbnRzKTsKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAg ICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmICggKGN1cnItPmFyY2gucHZfdmNwdS5sZHRf ZW50cyAhPSBlbnRzKSB8fAotICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5hcmNoLnB2X3Zj cHUubGR0X2Jhc2UgIT0gcHRyKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYg KCBwdl9kZXN0cm95X2xkdChjdXJyKSApCi0gICAgICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9s b2NhbCgpOwotCi0gICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9iYXNlID0g cHRyOwotICAgICAgICAgICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5sZHRfZW50cyA9IGVudHM7 Ci0gICAgICAgICAgICAgICAgbG9hZF9MRFQoY3Vycik7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTU1VRVhUX0NMRUFSX1BBR0U6 Ci0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzEu bWZuLCAmcDJtdCwgUDJNX0FMTE9DKTsKLSAgICAgICAgICAgIGlmICggdW5saWtlbHkocDJtdCAh PSBwMm1fcmFtX3J3KSAmJiBwYWdlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBw dXRfcGFnZShwYWdlKTsKLSAgICAgICAgICAgICAgICBwYWdlID0gTlVMTDsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIGlmICggIXBhZ2UgfHwgIWdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3dy aXRhYmxlX3BhZ2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBpZiAoIHBhZ2Ug KQotICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3Ig Y2xlYXJpbmcgbWZuICUiIFBSSV9tZm4gIlxuIiwgb3AuYXJnMS5tZm4pOwotICAgICAgICAgICAg ICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K LQotICAgICAgICAgICAgLyogQSBwYWdlIGlzIGRpcnRpZWQgd2hlbiBpdCdzIGJlaW5nIGNsZWFy ZWQuICovCi0gICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgcGFnZV90b19t Zm4ocGFnZSkpOwotCi0gICAgICAgICAgICBjbGVhcl9kb21haW5fcGFnZShwYWdlX3RvX21mbihw YWdlKSk7Ci0KLSAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwotICAgICAgICAg ICAgYnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfQ09QWV9QQUdFOgotICAgICAgICB7Ci0g ICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpzcmNfcGFnZSwgKmRzdF9wYWdlOwotCi0gICAg ICAgICAgICBzcmNfcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2ZuKHBnX293bmVyLCBvcC5hcmcyLnNy Y19tZm4sICZwMm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ Mk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncp ICYmIHNyY19wYWdlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfcGFnZShz cmNfcGFnZSk7Ci0gICAgICAgICAgICAgICAgc3JjX3BhZ2UgPSBOVUxMOwotICAgICAgICAgICAg fQotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghc3JjX3BhZ2UpICkKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAg ICAgICAgICAgICAiRXJyb3IgY29weWluZyBmcm9tIG1mbiAlIiBQUklfbWZuICJcbiIsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgb3AuYXJnMi5zcmNfbWZuKTsKLSAgICAgICAgICAgICAgICBy YyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAg ICAgICAgICAgIGRzdF9wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzEu bWZuLCAmcDJtdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUDJN X0FMTE9DKTsKLSAgICAgICAgICAgIGlmICggdW5saWtlbHkocDJtdCAhPSBwMm1fcmFtX3J3KSAm JiBkc3RfcGFnZSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHV0X3BhZ2UoZHN0 X3BhZ2UpOwotICAgICAgICAgICAgICAgIGRzdF9wYWdlID0gTlVMTDsKLSAgICAgICAgICAgIH0K LSAgICAgICAgICAgIHJjID0gKGRzdF9wYWdlICYmCi0gICAgICAgICAgICAgICAgICBnZXRfcGFn ZV90eXBlKGRzdF9wYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkpID8gMCA6IC1FSU5WQUw7Ci0gICAg ICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg ICAgcHV0X3BhZ2Uoc3JjX3BhZ2UpOwotICAgICAgICAgICAgICAgIGlmICggZHN0X3BhZ2UgKQot ICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShkc3RfcGFnZSk7Ci0gICAgICAgICAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9y IGNvcHlpbmcgdG8gbWZuICUiIFBSSV9tZm4gIlxuIiwgb3AuYXJnMS5tZm4pOwotICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvKiBBIHBhZ2UgaXMg ZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY29waWVkIHRvLiAqLwotICAgICAgICAgICAgcGFnaW5n X21hcmtfZGlydHkocGdfb3duZXIsIHBhZ2VfdG9fbWZuKGRzdF9wYWdlKSk7Ci0KLSAgICAgICAg ICAgIGNvcHlfZG9tYWluX3BhZ2UocGFnZV90b19tZm4oZHN0X3BhZ2UpLCBwYWdlX3RvX21mbihz cmNfcGFnZSkpOwotCi0gICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShkc3RfcGFnZSk7Ci0g ICAgICAgICAgICBwdXRfcGFnZShzcmNfcGFnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg ICAgfQotCi0gICAgICAgIGNhc2UgTU1VRVhUX01BUktfU1VQRVI6Ci0gICAgICAgIGNhc2UgTU1V RVhUX1VOTUFSS19TVVBFUjoKLSAgICAgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgcmMgPSAtRU5PU1lT OwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotIGRvbmU6Ci0gICAgICAgIGlmICgg dW5saWtlbHkocmMpICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGd1ZXN0X2hhbmRs ZV9hZGRfb2Zmc2V0KHVvcHMsIDEpOwotICAgIH0KLQotICAgIGlmICggcmMgPT0gLUVSRVNUQVJU ICkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpIDwgY291bnQpOwotICAgICAgICByYyA9IGh5cGVy Y2FsbF9jcmVhdGVfY29udGludWF0aW9uKAotICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdWV4 dF9vcCwgImhpaGkiLAotICAgICAgICAgICAgdW9wcywgKGNvdW50IC0gaSkgfCBNTVVfVVBEQVRF X1BSRUVNUFRFRCwgcGRvbmUsIGZvcmVpZ25kb20pOwotICAgIH0KLSAgICBlbHNlIGlmICggY3Vy ci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQotICAgIHsKLSAgICAgICAgWEVOX0dVRVNUX0hBTkRM RV9QQVJBTSh2b2lkKSBudWxsOwotCi0gICAgICAgIEFTU0VSVChyYyB8fCBpID09IGNvdW50KTsK LSAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobnVsbCwgTlVMTCk7Ci0gICAgICAgIC8qCi0g ICAgICAgICAqIEluIG9yZGVyIHRvIGhhdmUgYSB3YXkgdG8gY29tbXVuaWNhdGUgdGhlIGZpbmFs IHJldHVybiB2YWx1ZSB0bwotICAgICAgICAgKiBvdXIgY29udGludWF0aW9uLCB3ZSBwYXNzIHRo aXMgaW4gcGxhY2Ugb2YgImZvcmVpZ25kb20iLCBidWlsZGluZwotICAgICAgICAgKiBvbiB0aGUg ZmFjdCB0aGF0IHRoaXMgYXJndW1lbnQgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCi0gICAgICAgICAq LwotICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAotICAgICAgICAg ICAgICAgIF9fSFlQRVJWSVNPUl9tbXVleHRfb3AsICJoaWhpIiwgbnVsbCwKLSAgICAgICAgICAg ICAgICBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgbnVsbCwgcmMpOwotICAgIH0KLQotICAgIHB1dF9w Z19vd25lcihwZ19vd25lcik7Ci0KLSAgICBwZXJmY19hZGQobnVtX21tdWV4dF9vcHMsIGkpOwot Ci0gICAgLyogQWRkIGluY3JlbWVudGFsIHdvcmsgd2UgaGF2ZSBkb25lIHRvIHRoZSBAZG9uZSBv dXRwdXQgcGFyYW1ldGVyLiAqLwotICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19u dWxsKHBkb25lKSkgKQotICAgIHsKLSAgICAgICAgZG9uZSArPSBpOwotICAgICAgICBjb3B5X3Rv X2d1ZXN0KHBkb25lLCAmZG9uZSwgMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1s b25nIGRvX21tdV91cGRhdGUoCi0gICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTShtbXVfdXBkYXRl X3QpIHVyZXFzLAotICAgIHVuc2lnbmVkIGludCBjb3VudCwKLSAgICBYRU5fR1VFU1RfSEFORExF X1BBUkFNKHVpbnQpIHBkb25lLAotICAgIHVuc2lnbmVkIGludCBmb3JlaWduZG9tKQotewotICAg IHN0cnVjdCBtbXVfdXBkYXRlIHJlcTsKLSAgICB2b2lkICp2YSA9IE5VTEw7Ci0gICAgdW5zaWdu ZWQgbG9uZyBncGZuLCBnbWZuLCBtZm47Ci0gICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAg ICB1bnNpZ25lZCBpbnQgY21kLCBpID0gMCwgZG9uZSA9IDAsIHB0X2RvbTsKLSAgICBzdHJ1Y3Qg dmNwdSAqY3VyciA9IGN1cnJlbnQsICp2ID0gY3VycjsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0g di0+ZG9tYWluLCAqcHRfb3duZXIgPSBkLCAqcGdfb3duZXI7Ci0gICAgbWZuX3QgbWFwX21mbiA9 IElOVkFMSURfTUZOOwotICAgIGJvb2wgc3luY19ndWVzdCA9IGZhbHNlOwotICAgIHVpbnQzMl90 IHhzbV9uZWVkZWQgPSAwOwotICAgIHVpbnQzMl90IHhzbV9jaGVja2VkID0gMDsKLSAgICBpbnQg cmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKGN1cnIpOwotCi0gICAgaWYgKCB1bmxpa2VseShyYykg KQotICAgIHsKLSAgICAgICAgaWYgKCBsaWtlbHkocmMgPT0gLUVSRVNUQVJUKSApCi0gICAgICAg ICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAotICAgICAgICAgICAgICAg ICAgICAgX19IWVBFUlZJU09SX21tdV91cGRhdGUsICJoaWhpIiwgdXJlcXMsIGNvdW50LCBwZG9u ZSwKLSAgICAgICAgICAgICAgICAgICAgIGZvcmVpZ25kb20pOwotICAgICAgICByZXR1cm4gcmM7 Ci0gICAgfQotCi0gICAgaWYgKCB1bmxpa2VseShjb3VudCA9PSBNTVVfVVBEQVRFX1BSRUVNUFRF RCkgJiYKLSAgICAgICAgIGxpa2VseShndWVzdF9oYW5kbGVfaXNfbnVsbCh1cmVxcykpICkKLSAg ICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNlZSB0aGUgY3Vyci0+YXJjaC5vbGRfZ3Vlc3Rf dGFibGUgcmVsYXRlZAotICAgICAgICAgKiBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigp IGJlbG93LgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIChpbnQpZm9yZWlnbmRvbTsKLSAg ICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KGNvdW50ICYgTU1VX1VQREFURV9QUkVFTVBURUQpICkK LSAgICB7Ci0gICAgICAgIGNvdW50ICY9IH5NTVVfVVBEQVRFX1BSRUVNUFRFRDsKLSAgICAgICAg aWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUpKSApCi0gICAgICAgICAg ICAodm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUsIHBkb25lLCAxKTsKLSAgICB9Ci0gICAgZWxz ZQotICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3RvX21tdV91cGRhdGUpOwotCi0gICAgaWYgKCB1 bmxpa2VseSghZ3Vlc3RfaGFuZGxlX29rYXkodXJlcXMsIGNvdW50KSkgKQotICAgICAgICByZXR1 cm4gLUVGQVVMVDsKLQotICAgIGlmICggKHB0X2RvbSA9IGZvcmVpZ25kb20gPj4gMTYpICE9IDAg KQotICAgIHsKLSAgICAgICAgLyogUGFnZXRhYmxlcyBiZWxvbmcgdG8gYSBmb3JlaWduIGRvbWFp biAoUEZEKS4gKi8KLSAgICAgICAgaWYgKCAocHRfb3duZXIgPSByY3VfbG9ja19kb21haW5fYnlf aWQocHRfZG9tIC0gMSkpID09IE5VTEwgKQotICAgICAgICAgICAgcmV0dXJuIC1FU1JDSDsKLQot ICAgICAgICBpZiAoIHB0X293bmVyID09IGQgKQotICAgICAgICAgICAgcmN1X3VubG9ja19kb21h aW4ocHRfb3duZXIpOwotICAgICAgICBlbHNlIGlmICggIXB0X293bmVyLT52Y3B1IHx8ICh2ID0g cHRfb3duZXItPnZjcHVbMF0pID09IE5VTEwgKQotICAgICAgICB7Ci0gICAgICAgICAgICByYyA9 IC1FSU5WQUw7Ci0gICAgICAgICAgICBnb3RvIG91dDsKLSAgICAgICAgfQotICAgIH0KLQotICAg IGlmICggKHBnX293bmVyID0gZ2V0X3BnX293bmVyKCh1aW50MTZfdClmb3JlaWduZG9tKSkgPT0g TlVMTCApCi0gICAgewotICAgICAgICByYyA9IC1FU1JDSDsKLSAgICAgICAgZ290byBvdXQ7Ci0g ICAgfQotCi0gICAgZm9yICggaSA9IDA7IGkgPCBjb3VudDsgaSsrICkKLSAgICB7Ci0gICAgICAg IGlmICggY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgfHwgKGkgJiYgaHlwZXJjYWxsX3ByZWVt cHRfY2hlY2soKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKLSAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShfX2Nv cHlfZnJvbV9ndWVzdCgmcmVxLCB1cmVxcywgMSkgIT0gMCkgKQotICAgICAgICB7Ci0gICAgICAg ICAgICByYyA9IC1FRkFVTFQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg ICAgIGNtZCA9IHJlcS5wdHIgJiAoc2l6ZW9mKGwxX3BnZW50cnlfdCktMSk7Ci0KLSAgICAgICAg c3dpdGNoICggY21kICkKLSAgICAgICAgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAq IE1NVV9OT1JNQUxfUFRfVVBEQVRFOiBOb3JtYWwgdXBkYXRlIHRvIGFueSBsZXZlbCBvZiBwYWdl IHRhYmxlLgotICAgICAgICAgICAgICogTU1VX1VQREFURV9QVF9QUkVTRVJWRV9BRDogQXMgYWJv dmUgYnV0IGFsc28gcHJlc2VydmUgKE9SKQotICAgICAgICAgICAgICogY3VycmVudCBBL0QgYml0 cy4KLSAgICAgICAgICAgICAqLwotICAgICAgICBjYXNlIE1NVV9OT1JNQUxfUFRfVVBEQVRFOgot ICAgICAgICBjYXNlIE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQ6Ci0gICAgICAgIHsKLSAgICAg ICAgICAgIHAybV90eXBlX3QgcDJtdDsKLQotICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsK LSAgICAgICAgICAgIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfcmVmY291bnRzKHB0X293bmVy KSkgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICB4c21fbmVlZGVkIHw9 IFhTTV9NTVVfTk9STUFMX1VQREFURTsKLSAgICAgICAgICAgIGlmICggZ2V0X3B0ZV9mbGFncyhy ZXEudmFsKSAmIF9QQUdFX1BSRVNFTlQgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg IHhzbV9uZWVkZWQgfD0gWFNNX01NVV9VUERBVEVfUkVBRDsKLSAgICAgICAgICAgICAgICBpZiAo IGdldF9wdGVfZmxhZ3MocmVxLnZhbCkgJiBfUEFHRV9SVyApCi0gICAgICAgICAgICAgICAgICAg IHhzbV9uZWVkZWQgfD0gWFNNX01NVV9VUERBVEVfV1JJVEU7Ci0gICAgICAgICAgICB9Ci0gICAg ICAgICAgICBpZiAoIHhzbV9uZWVkZWQgIT0geHNtX2NoZWNrZWQgKQotICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgIHJjID0geHNtX21tdV91cGRhdGUoWFNNX1RBUkdFVCwgZCwgcHRfb3du ZXIsIHBnX293bmVyLCB4c21fbmVlZGVkKTsKLSAgICAgICAgICAgICAgICBpZiAoIHJjICkKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgeHNtX2NoZWNrZWQgPSB4 c21fbmVlZGVkOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotCi0g ICAgICAgICAgICByZXEucHRyIC09IGNtZDsKLSAgICAgICAgICAgIGdtZm4gPSByZXEucHRyID4+ IFBBR0VfU0hJRlQ7Ci0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocHRfb3du ZXIsIGdtZm4sICZwMm10LCBQMk1fQUxMT0MpOwotCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5 KCFwYWdlKSB8fCBwMm10ICE9IHAybV9yYW1fcncgKQotICAgICAgICAgICAgewotICAgICAgICAg ICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwot ICAgICAgICAgICAgICAgIGlmICggcDJtX2lzX3BhZ2VkKHAybXQpICkKLSAgICAgICAgICAgICAg ICB7Ci0gICAgICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKHB0X293bmVy LCBnbWZuKTsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtRU5PRU5UOwotICAgICAgICAgICAg ICAgIH0KLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90 IGdldCBwYWdlIGZvciBub3JtYWwgdXBkYXRlXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsK LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbWZuID0gbWZuX3gocGFnZV90b19tZm4ocGFn ZSkpOwotCi0gICAgICAgICAgICBpZiAoICFtZm5fZXEoX21mbihtZm4pLCBtYXBfbWZuKSApCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgaWYgKCB2YSApCi0gICAgICAgICAgICAgICAg ICAgIHVubWFwX2RvbWFpbl9wYWdlKHZhKTsKLSAgICAgICAgICAgICAgICB2YSA9IG1hcF9kb21h aW5fcGFnZShfbWZuKG1mbikpOwotICAgICAgICAgICAgICAgIG1hcF9tZm4gPSBfbWZuKG1mbik7 Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB2YSA9IF9wKCgodW5zaWduZWQgbG9uZyl2YSAm IFBBR0VfTUFTSykgKyAocmVxLnB0ciAmIH5QQUdFX01BU0spKTsKLQotICAgICAgICAgICAgaWYg KCBwYWdlX2xvY2socGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHN3aXRj aCAoIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzayApCi0gICAgICAgICAg ICAgICAgewotICAgICAgICAgICAgICAgIGNhc2UgUEdUX2wxX3BhZ2VfdGFibGU6Ci0gICAgICAg ICAgICAgICAgICAgIHJjID0gbW9kX2wxX2VudHJ5KHZhLCBsMWVfZnJvbV9pbnRwdGUocmVxLnZh bCksIG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID09IE1N VV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHBnX293bmVyKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAg ICAgICAgICAgICBjYXNlIFBHVF9sMl9wYWdlX3RhYmxlOgotICAgICAgICAgICAgICAgICAgICBp ZiAoIHVubGlrZWx5KHBnX293bmVyICE9IHB0X293bmVyKSApCi0gICAgICAgICAgICAgICAgICAg ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDJfZW50cnkodmEsIGwy ZV9mcm9tX2ludHB0ZShyZXEudmFsKSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7Ci0gICAgICAg ICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICAgICAgY2FzZSBQR1RfbDNfcGFnZV90 YWJsZToKLSAgICAgICAgICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwZ19vd25lciAhPSBwdF9v d25lcikgKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAg ICAgIHJjID0gbW9kX2wzX2VudHJ5KHZhLCBsM2VfZnJvbV9pbnRwdGUocmVxLnZhbCksIG1mbiwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY21kID09IE1NVV9QVF9VUERB VEVfUFJFU0VSVkVfQUQsIHYpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAg ICAgICAgICAgIGNhc2UgUEdUX2w0X3BhZ2VfdGFibGU6Ci0gICAgICAgICAgICAgICAgICAgIGlm ICggdW5saWtlbHkocGdfb3duZXIgIT0gcHRfb3duZXIpICkKLSAgICAgICAgICAgICAgICAgICAg ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sNF9lbnRyeSh2YSwgbDRl X2Zyb21faW50cHRlKHJlcS52YWwpLCBtZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2KTsKLSAgICAgICAg ICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgICAgICogTm8gbmVlZCB0byBzeW5jIGlm IGFsbCB1c2VzIG9mIHRoZSBwYWdlIGNhbiBiZSBhY2NvdW50ZWQKLSAgICAgICAgICAgICAgICAg ICAgICogdG8gdGhlIHBhZ2UgbG9jayB3ZSBob2xkLCBpdHMgcGlubmVkIHN0YXR1cywgYW5kIHVz ZXMgb24KLSAgICAgICAgICAgICAgICAgICAgICogdGhpcyAodilDUFUuCi0gICAgICAgICAgICAg ICAgICAgICAqLwotICAgICAgICAgICAgICAgICAgICBpZiAoICFyYyAmJiB0aGlzX2NwdShyb290 X3BndCkgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgICAoKHBhZ2UtPnUuaW51c2UudHlwZV9p bmZvICYgUEdUX2NvdW50X21hc2spID4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgKyAh IShwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9waW5uZWQpICsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgIChwYWdldGFibGVfZ2V0X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlKSA9 PSBtZm4pICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChwYWdldGFibGVfZ2V0X3Bmbihj dXJyLT5hcmNoLmd1ZXN0X3RhYmxlX3VzZXIpID09Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgbWZuKSkpICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN5bmNfZ3Vlc3QgPSB0cnVlOwot ICAgICAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dy aXRhYmxlX3BhZ2U6Ci0gICAgICAgICAgICAgICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11 X3VwZGF0ZXMpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9l bnRyeSh2LCB2YSwgcmVxLnZhbCwgX21mbihtZm4pKSApCi0gICAgICAgICAgICAgICAgICAgICAg ICByYyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K LSAgICAgICAgICAgICAgICBwYWdlX3VubG9jayhwYWdlKTsKLSAgICAgICAgICAgICAgICBpZiAo IHJjID09IC1FSU5UUiApCi0gICAgICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOwotICAg ICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSBpZiAoIGdldF9wYWdlX3R5cGUocGFnZSwgUEdU X3dyaXRhYmxlX3BhZ2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwZXJmY19p bmNyKHdyaXRhYmxlX21tdV91cGRhdGVzKTsKLSAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193 cml0ZV9ndWVzdF9lbnRyeSh2LCB2YSwgcmVxLnZhbCwgX21mbihtZm4pKSApCi0gICAgICAgICAg ICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgICAgICBwdXRfcGFnZV90eXBlKHBhZ2UpOwot ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgfQot ICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVV9NQUNIUEhZU19VUERBVEU6Ci0gICAg ICAgICAgICBpZiAoIHVubGlrZWx5KGQgIT0gcHRfb3duZXIpICkKLSAgICAgICAgICAgIHsKLSAg ICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xh dGUocGdfb3duZXIpKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlO VkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICBtZm4gPSByZXEucHRyID4+IFBBR0VfU0hJRlQ7Ci0gICAgICAgICAgICBncGZuID0gcmVxLnZh bDsKLQotICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX01BQ0hQSFlTX1VQREFURTsK LSAgICAgICAgICAgIGlmICggeHNtX25lZWRlZCAhPSB4c21fY2hlY2tlZCApCi0gICAgICAgICAg ICB7Ci0gICAgICAgICAgICAgICAgcmMgPSB4c21fbW11X3VwZGF0ZShYU01fVEFSR0VULCBkLCBO VUxMLCBwZ19vd25lciwgeHNtX25lZWRlZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCByYyApCi0g ICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIHhzbV9jaGVja2VkID0g eHNtX25lZWRlZDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdl X2Zyb21fbWZuKF9tZm4obWZuKSwgcGdfb3duZXIpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eSghcGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhZ2Ug Zm9yIG1hY2gtPnBoeXMgdXBkYXRlXG4iKTsKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7 Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHNl dF9ncGZuX2Zyb21fbWZuKG1mbiwgZ3Bmbik7Ci0KLSAgICAgICAgICAgIHBhZ2luZ19tYXJrX2Rp cnR5KHBnX293bmVyLCBfbWZuKG1mbikpOwotCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsK LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByYyA9 IC1FTk9TWVM7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg dW5saWtlbHkocmMpICkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGd1ZXN0X2hhbmRs ZV9hZGRfb2Zmc2V0KHVyZXFzLCAxKTsKLSAgICB9Ci0KLSAgICBpZiAoIHJjID09IC1FUkVTVEFS VCApCi0gICAgewotICAgICAgICBBU1NFUlQoaSA8IGNvdW50KTsKLSAgICAgICAgcmMgPSBoeXBl cmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigKLSAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVf dXBkYXRlLCAiaGloaSIsCi0gICAgICAgICAgICB1cmVxcywgKGNvdW50IC0gaSkgfCBNTVVfVVBE QVRFX1BSRUVNUFRFRCwgcGRvbmUsIGZvcmVpZ25kb20pOwotICAgIH0KLSAgICBlbHNlIGlmICgg Y3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQotICAgIHsKLSAgICAgICAgWEVOX0dVRVNUX0hB TkRMRV9QQVJBTSh2b2lkKSBudWxsOwotCi0gICAgICAgIEFTU0VSVChyYyB8fCBpID09IGNvdW50 KTsKLSAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobnVsbCwgTlVMTCk7Ci0gICAgICAgIC8q Ci0gICAgICAgICAqIEluIG9yZGVyIHRvIGhhdmUgYSB3YXkgdG8gY29tbXVuaWNhdGUgdGhlIGZp bmFsIHJldHVybiB2YWx1ZSB0bwotICAgICAgICAgKiBvdXIgY29udGludWF0aW9uLCB3ZSBwYXNz IHRoaXMgaW4gcGxhY2Ugb2YgImZvcmVpZ25kb20iLCBidWlsZGluZwotICAgICAgICAgKiBvbiB0 aGUgZmFjdCB0aGF0IHRoaXMgYXJndW1lbnQgaXNuJ3QgbmVlZGVkIGFueW1vcmUuCi0gICAgICAg ICAqLwotICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAotICAgICAg ICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsIG51bGwsCi0gICAgICAg ICAgICAgICAgTU1VX1VQREFURV9QUkVFTVBURUQsIG51bGwsIHJjKTsKLSAgICB9Ci0KLSAgICBw dXRfcGdfb3duZXIocGdfb3duZXIpOwotCi0gICAgaWYgKCB2YSApCi0gICAgICAgIHVubWFwX2Rv bWFpbl9wYWdlKHZhKTsKLQotICAgIGlmICggc3luY19ndWVzdCApCi0gICAgewotICAgICAgICAv KgotICAgICAgICAgKiBGb3JjZSBvdGhlciB2Q1BVLXMgb2YgdGhlIGFmZmVjdGVkIGd1ZXN0IHRv IHBpY2sgdXAgTDQgZW50cnkKLSAgICAgICAgICogY2hhbmdlcyAoaWYgYW55KS4gSXNzdWUgYSBm bHVzaCBJUEkgd2l0aCBlbXB0eSBvcGVyYXRpb24gbWFzayB0bwotICAgICAgICAgKiBmYWNpbGl0 YXRlIHRoaXMgKGluY2x1ZGluZyBvdXJzZWx2ZXMgd2FpdGluZyBmb3IgdGhlIElQSSB0bwotICAg ICAgICAgKiBhY3R1YWxseSBoYXZlIGFycml2ZWQpLiBVdGlsaXplIHRoZSBmYWN0IHRoYXQgRkxV U0hfVkFfVkFMSUQgaXMKLSAgICAgICAgICogbWVhbmluZ2xlc3Mgd2l0aG91dCBGTFVTSF9DQUNI RSwgYnV0IHdpbGwgYWxsb3cgdG8gcGFzcyB0aGUgbm8tb3AKLSAgICAgICAgICogY2hlY2sgaW4g Zmx1c2hfYXJlYV9tYXNrKCkuCi0gICAgICAgICAqLwotICAgICAgICB1bnNpZ25lZCBpbnQgY3B1 ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSBwZXJfY3B1 KHNjcmF0Y2hfY3B1bWFzaywgY3B1KTsKLQotICAgICAgICBjcHVtYXNrX2FuZG5vdChtYXNrLCBw dF9vd25lci0+ZGlydHlfY3B1bWFzaywgY3B1bWFza19vZihjcHUpKTsKLSAgICAgICAgaWYgKCAh Y3B1bWFza19lbXB0eShtYXNrKSApCi0gICAgICAgICAgICBmbHVzaF9hcmVhX21hc2sobWFzaywg WkVST19CTE9DS19QVFIsIEZMVVNIX1ZBX1ZBTElEKTsKLSAgICB9Ci0KLSAgICBwZXJmY19hZGQo bnVtX3BhZ2VfdXBkYXRlcywgaSk7Ci0KLSBvdXQ6Ci0gICAgaWYgKCBwdF9vd25lciAhPSBkICkK LSAgICAgICAgcmN1X3VubG9ja19kb21haW4ocHRfb3duZXIpOwotCi0gICAgLyogQWRkIGluY3Jl bWVudGFsIHdvcmsgd2UgaGF2ZSBkb25lIHRvIHRoZSBAZG9uZSBvdXRwdXQgcGFyYW1ldGVyLiAq LwotICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQotICAg IHsKLSAgICAgICAgZG9uZSArPSBpOwotICAgICAgICBjb3B5X3RvX2d1ZXN0KHBkb25lLCAmZG9u ZSwgMSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgZG9uYXRlX3BhZ2UoCi0g ICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgaW50 IG1lbWZsYWdzKQotewotICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gZG9tX3hlbjsK LQotICAgIHNwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKLQotICAgIGlmICggaXNfeGVu X2hlYXBfcGFnZShwYWdlKSB8fCAoKG93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSkpICE9IE5V TEwpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCBkLT5pc19keWluZyApCi0gICAg ICAgIGdvdG8gZmFpbDsKLQotICAgIGlmICggcGFnZS0+Y291bnRfaW5mbyAmIH4oUEdDX2FsbG9j YXRlZCB8IDEpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCAhKG1lbWZsYWdzICYg TUVNRl9ub19yZWZjb3VudCkgKQotICAgIHsKLSAgICAgICAgaWYgKCBkLT50b3RfcGFnZXMgPj0g ZC0+bWF4X3BhZ2VzICkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgZG9tYWluX2Fk anVzdF90b3RfcGFnZXMoZCwgMSk7Ci0gICAgfQotCi0gICAgcGFnZS0+Y291bnRfaW5mbyA9IFBH Q19hbGxvY2F0ZWQgfCAxOwotICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIGQpOwotICAgIHBhZ2Vf bGlzdF9hZGRfdGFpbChwYWdlLCZkLT5wYWdlX2xpc3QpOwotCi0gICAgc3Bpbl91bmxvY2soJmQt PnBhZ2VfYWxsb2NfbG9jayk7Ci0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsOgotICAgIHNwaW5fdW5s b2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwotICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAi QmFkIGRvbmF0ZSBtZm4gJSIgUFJJX21mbgotICAgICAgICAgICAgICIgdG8gZCVkIChvd25lciBk JWQpIGNhZj0lMDhseCB0YWY9JSIgUFJ0eXBlX2luZm8gIlxuIiwKLSAgICAgICAgICAgICBtZm5f eChwYWdlX3RvX21mbihwYWdlKSksIGQtPmRvbWFpbl9pZCwKLSAgICAgICAgICAgICBvd25lciA/ IG93bmVyLT5kb21haW5faWQgOiBET01JRF9JTlZBTElELAotICAgICAgICAgICAgIHBhZ2UtPmNv dW50X2luZm8sIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvKTsKLSAgICByZXR1cm4gLUVJTlZBTDsK LX0KLQotaW50IHN0ZWFsX3BhZ2UoCi0gICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZSwgdW5zaWduZWQgaW50IG1lbWZsYWdzKQotewotICAgIHVuc2lnbmVkIGxvbmcg eCwgeTsKLSAgICBib29sIGRyb3BfZG9tX3JlZiA9IGZhbHNlOwotICAgIGNvbnN0IHN0cnVjdCBk b21haW4gKm93bmVyID0gZG9tX3hlbjsKLQotICAgIGlmICggcGFnaW5nX21vZGVfZXh0ZXJuYWwo ZCkgKQotICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLSAgICBzcGluX2xvY2soJmQtPnBh Z2VfYWxsb2NfbG9jayk7Ci0KLSAgICBpZiAoIGlzX3hlbl9oZWFwX3BhZ2UocGFnZSkgfHwgKChv d25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSAhPSBkKSApCi0gICAgICAgIGdvdG8gZmFpbDsK LQotICAgIC8qCi0gICAgICogV2UgcmVxdWlyZSB0aGVyZSBpcyBqdXN0IG9uZSByZWZlcmVuY2Ug KFBHQ19hbGxvY2F0ZWQpLiBXZSB0ZW1wb3JhcmlseQotICAgICAqIGRyb3AgdGhpcyByZWZlcmVu Y2Ugbm93IHNvIHRoYXQgd2UgY2FuIHNhZmVseSBzd2l6emxlIHRoZSBvd25lci4KLSAgICAgKi8K LSAgICB5ID0gcGFnZS0+Y291bnRfaW5mbzsKLSAgICBkbyB7Ci0gICAgICAgIHggPSB5OwotICAg ICAgICBpZiAoICh4ICYgKFBHQ19jb3VudF9tYXNrfFBHQ19hbGxvY2F0ZWQpKSAhPSAoMSB8IFBH Q19hbGxvY2F0ZWQpICkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgeSA9IGNtcHhj aGcoJnBhZ2UtPmNvdW50X2luZm8sIHgsIHggJiB+UEdDX2NvdW50X21hc2spOwotICAgIH0gd2hp bGUgKCB5ICE9IHggKTsKLQotICAgIC8qCi0gICAgICogV2l0aCB0aGUgc29sZSByZWZlcmVuY2Ug ZHJvcHBlZCB0ZW1wb3JhcmlseSwgbm8tb25lIGNhbiB1cGRhdGUgdHlwZQotICAgICAqIGluZm9y bWF0aW9uLiBUeXBlIGNvdW50IGFsc28gbmVlZHMgdG8gYmUgemVybyBpbiB0aGlzIGNhc2UsIGJ1 dCBlLmcuCi0gICAgICogUEdUX3NlZ19kZXNjX3BhZ2UgbWF5IHN0aWxsIGhhdmUgUEdUX3ZhbGlk YXRlZCBzZXQsIHdoaWNoIHdlIG5lZWQgdG8KLSAgICAgKiBjbGVhciBiZWZvcmUgdHJhbnNmZXJy aW5nIG93bmVyc2hpcCAoYXMgdmFsaWRhdGlvbiBjcml0ZXJpYSB2YXJ5Ci0gICAgICogZGVwZW5k aW5nIG9uIGRvbWFpbiB0eXBlKS4KLSAgICAgKi8KLSAgICBCVUdfT04ocGFnZS0+dS5pbnVzZS50 eXBlX2luZm8gJiAoUEdUX2NvdW50X21hc2sgfCBQR1RfbG9ja2VkIHwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUEdUX3Bpbm5lZCkpOwotICAgIHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvID0gMDsKLQotICAgIC8qIFN3aXp6bGUgdGhlIG93bmVyIHRoZW4gcmVpbnN0YXRl IHRoZSBQR0NfYWxsb2NhdGVkIHJlZmVyZW5jZS4gKi8KLSAgICBwYWdlX3NldF9vd25lcihwYWdl LCBOVUxMKTsKLSAgICB5ID0gcGFnZS0+Y291bnRfaW5mbzsKLSAgICBkbyB7Ci0gICAgICAgIHgg PSB5OwotICAgICAgICBCVUdfT04oKHggJiAoUEdDX2NvdW50X21hc2t8UEdDX2FsbG9jYXRlZCkp ICE9IFBHQ19hbGxvY2F0ZWQpOwotICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBhZ2UtPmNv dW50X2luZm8sIHgsIHggfCAxKSkgIT0geCApOwotCi0gICAgLyogVW5saW5rIGZyb20gb3JpZ2lu YWwgb3duZXIuICovCi0gICAgaWYgKCAhKG1lbWZsYWdzICYgTUVNRl9ub19yZWZjb3VudCkgJiYg IWRvbWFpbl9hZGp1c3RfdG90X3BhZ2VzKGQsIC0xKSApCi0gICAgICAgIGRyb3BfZG9tX3JlZiA9 IHRydWU7Ci0gICAgcGFnZV9saXN0X2RlbChwYWdlLCAmZC0+cGFnZV9saXN0KTsKLQotICAgIHNw aW5fdW5sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwotICAgIGlmICggdW5saWtlbHkoZHJvcF9k b21fcmVmKSApCi0gICAgICAgIHB1dF9kb21haW4oZCk7Ci0gICAgcmV0dXJuIDA7CisgICAgc3Bp bl91bmxvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7CisgICAgaWYgKCB1bmxpa2VseShkcm9wX2Rv bV9yZWYpICkKKyAgICAgICAgcHV0X2RvbWFpbihkKTsKKyAgICByZXR1cm4gMDsKIAogIGZhaWw6 CiAgICAgc3Bpbl91bmxvY2soJmQtPnBhZ2VfYWxsb2NfbG9jayk7CkBAIC0zOTYzLDEyMiArMTYz NSw2IEBAIGludCBzdGVhbF9wYWdlKAogICAgIHJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMg aW50IF9fZG9fdXBkYXRlX3ZhX21hcHBpbmcoCi0gICAgdW5zaWduZWQgbG9uZyB2YSwgdTY0IHZh bDY0LCB1bnNpZ25lZCBsb25nIGZsYWdzLCBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcikKLXsKLSAg ICBsMV9wZ2VudHJ5X3QgICB2YWwgPSBsMWVfZnJvbV9pbnRwdGUodmFsNjQpOwotICAgIHN0cnVj dCB2Y3B1ICAgKnYgICA9IGN1cnJlbnQ7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCAgID0gdi0+ZG9t YWluOwotICAgIHN0cnVjdCBwYWdlX2luZm8gKmdsMXBnOwotICAgIGwxX3BnZW50cnlfdCAgKnBs MWU7Ci0gICAgdW5zaWduZWQgbG9uZyAgYm1hcF9wdHI7Ci0gICAgbWZuX3QgICAgICAgICAgZ2wx bWZuOwotICAgIGNwdW1hc2tfdCAgICAgKm1hc2sgPSBOVUxMOwotICAgIGludCAgICAgICAgICAg IHJjOwotCi0gICAgcGVyZmNfaW5jcihjYWxsc190b191cGRhdGVfdmEpOwotCi0gICAgcmMgPSB4 c21fdXBkYXRlX3ZhX21hcHBpbmcoWFNNX1RBUkdFVCwgZCwgcGdfb3duZXIsIHZhbCk7Ci0gICAg aWYgKCByYyApCi0gICAgICAgIHJldHVybiByYzsKLQotICAgIHJjID0gLUVJTlZBTDsKLSAgICBw bDFlID0gbWFwX2d1ZXN0X2wxZSh2YSwgJmdsMW1mbik7Ci0gICAgZ2wxcGcgPSBwbDFlID8gZ2V0 X3BhZ2VfZnJvbV9tZm4oZ2wxbWZuLCBkKSA6IE5VTEw7Ci0gICAgaWYgKCB1bmxpa2VseSghZ2wx cGcpICkKLSAgICAgICAgZ290byBvdXQ7Ci0KLSAgICBpZiAoICFwYWdlX2xvY2soZ2wxcGcpICkK LSAgICB7Ci0gICAgICAgIHB1dF9wYWdlKGdsMXBnKTsKLSAgICAgICAgZ290byBvdXQ7Ci0gICAg fQotCi0gICAgaWYgKCAoZ2wxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykg IT0gUEdUX2wxX3BhZ2VfdGFibGUgKQotICAgIHsKLSAgICAgICAgcGFnZV91bmxvY2soZ2wxcGcp OwotICAgICAgICBwdXRfcGFnZShnbDFwZyk7Ci0gICAgICAgIGdvdG8gb3V0OwotICAgIH0KLQot ICAgIHJjID0gbW9kX2wxX2VudHJ5KHBsMWUsIHZhbCwgbWZuX3goZ2wxbWZuKSwgMCwgdiwgcGdf b3duZXIpOwotCi0gICAgcGFnZV91bmxvY2soZ2wxcGcpOwotICAgIHB1dF9wYWdlKGdsMXBnKTsK LQotIG91dDoKLSAgICBpZiAoIHBsMWUgKQotICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDFl KTsKLQotICAgIHN3aXRjaCAoIGZsYWdzICYgVVZNRl9GTFVTSFRZUEVfTUFTSyApCi0gICAgewot ICAgIGNhc2UgVVZNRl9UTEJfRkxVU0g6Ci0gICAgICAgIHN3aXRjaCAoIChibWFwX3B0ciA9IGZs YWdzICYgflVWTUZfRkxVU0hUWVBFX01BU0spICkKLSAgICAgICAgewotICAgICAgICBjYXNlIFVW TUZfTE9DQUw6Ci0gICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKLSAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICBjYXNlIFVWTUZfQUxMOgotICAgICAgICAgICAgbWFzayA9IGQtPmRpcnR5 X2NwdW1hc2s7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAg ICAgIG1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2 Y3B1bWFza190b19wY3B1bWFzayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9w dHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWFzayk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAo IG1hc2sgKQotICAgICAgICAgICAgZmx1c2hfdGxiX21hc2sobWFzayk7Ci0gICAgICAgIGJyZWFr OwotCi0gICAgY2FzZSBVVk1GX0lOVkxQRzoKLSAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0g ZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFTSykgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2Ug VVZNRl9MT0NBTDoKLSAgICAgICAgICAgIHBhZ2luZ19pbnZscGcodiwgdmEpOwotICAgICAgICAg ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVZNRl9BTEw6Ci0gICAgICAgICAgICBtYXNrID0gZC0+ ZGlydHlfY3B1bWFzazsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgbWFzayA9IHRoaXNfY3B1KHNjcmF0Y2hfY3B1bWFzayk7Ci0gICAgICAgICAgICBy YyA9IHZjcHVtYXNrX3RvX3BjcHVtYXNrKGQsIGNvbnN0X2d1ZXN0X2hhbmRsZV9mcm9tX3B0cihi bWFwX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXNrKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgICAg IGlmICggbWFzayApCi0gICAgICAgICAgICBmbHVzaF90bGJfb25lX21hc2sobWFzaywgdmEpOwot ICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLWxvbmcgZG9fdXBk YXRlX3ZhX21hcHBpbmcodW5zaWduZWQgbG9uZyB2YSwgdTY0IHZhbDY0LAotICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKQotewotICAgIHJldHVybiBfX2RvX3Vw ZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2NCwgZmxhZ3MsIGN1cnJlbnQtPmRvbWFpbik7Ci19Ci0K LWxvbmcgZG9fdXBkYXRlX3ZhX21hcHBpbmdfb3RoZXJkb21haW4odW5zaWduZWQgbG9uZyB2YSwg dTY0IHZhbDY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIGZsYWdzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb21p ZF90IGRvbWlkKQotewotICAgIHN0cnVjdCBkb21haW4gKnBnX293bmVyOwotICAgIGludCByYzsK LQotICAgIGlmICggKHBnX293bmVyID0gZ2V0X3BnX293bmVyKGRvbWlkKSkgPT0gTlVMTCApCi0g ICAgICAgIHJldHVybiAtRVNSQ0g7Ci0KLSAgICByYyA9IF9fZG9fdXBkYXRlX3ZhX21hcHBpbmco dmEsIHZhbDY0LCBmbGFncywgcGdfb3duZXIpOwotCi0gICAgcHV0X3BnX293bmVyKHBnX293bmVy KTsKLQotICAgIHJldHVybiByYzsKLX0KLQogdHlwZWRlZiBzdHJ1Y3QgZTgyMGVudHJ5IGU4MjBl bnRyeV90OwogREVGSU5FX1hFTl9HVUVTVF9IQU5ETEUoZTgyMGVudHJ5X3QpOwogCmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvcHYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCmluZGV4IDhk N2E0ZmQ4NWYuLjY1MDQ0MjJhZDEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCisr KyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCkBAIC0yMCw5ICsyMCwxOCBAQAogICovCiAKICNpbmNs dWRlIDx4ZW4vZ3Vlc3RfYWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL2h5cGVyY2FsbC5oPgorI2lu Y2x1ZGUgPHhlbi9saWIuaD4KKyNpbmNsdWRlIDx4ZW4vbW0uaD4KKyNpbmNsdWRlIDx4c20veHNt Lmg+CiAKICNpbmNsdWRlIDxhc20vY3VycmVudC5oPgorI2luY2x1ZGUgPGFzbS9ldmVudC5oPgor I2luY2x1ZGUgPGFzbS9pb2NhcC5oPgorI2luY2x1ZGUgPGFzbS9sZHQuaD4KICNpbmNsdWRlIDxh c20vcDJtLmg+CisjaW5jbHVkZSA8YXNtL3B2L21tLmg+CisjaW5jbHVkZSA8YXNtL3NoYWRvdy5o PgogCiAjaW5jbHVkZSAibW0uaCIKIApAQCAtMTMzLDYgKzE0MiwyNDQ5IEBAIGJvb2wgcHZfbWFw X2xkdF9zaGFkb3dfcGFnZSh1bnNpZ25lZCBpbnQgb2Zmc2V0KQogICAgIHJldHVybiB0cnVlOwog fQogCisvKgorICogUFRFIGZsYWdzIHRoYXQgYSBndWVzdCBtYXkgY2hhbmdlIHdpdGhvdXQgcmUt dmFsaWRhdGluZyB0aGUgUFRFLgorICogQWxsIG90aGVyIGJpdHMgYWZmZWN0IHRyYW5zbGF0aW9u LCBjYWNoaW5nLCBvciBYZW4ncyBzYWZldHkuCisgKi8KKyNkZWZpbmUgRkFTVFBBVEhfRkxBR19X SElURUxJU1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfUEFH RV9OWF9CSVQgfCBfUEFHRV9BVkFJTF9ISUdIIHwgX1BBR0VfQVZBSUwgfCBfUEFHRV9HTE9CQUwg fCBcCisgICAgIF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9VU0VSKQorCitz dGF0aWMgaW50IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKAorICAgIG1mbl90IG1mbiwgdW5z aWduZWQgbG9uZyB0eXBlLCBzdHJ1Y3QgZG9tYWluICpkLAorICAgIGludCBwYXJ0aWFsLCBpbnQg cHJlZW1wdGlibGUpCit7CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdl KG1mbik7CisgICAgaW50IHJjOworCisgICAgaWYgKCBsaWtlbHkocGFydGlhbCA+PSAwKSAmJgor ICAgICAgICAgdW5saWtlbHkoIWdldF9wYWdlX2Zyb21fbWZuKG1mbiwgZCkpICkKKyAgICAgICAg cmV0dXJuIC1FSU5WQUw7CisKKyAgICByYyA9IChwcmVlbXB0aWJsZSA/CisgICAgICAgICAgZ2V0 X3BhZ2VfdHlwZV9wcmVlbXB0aWJsZShwYWdlLCB0eXBlKSA6CisgICAgICAgICAgKGdldF9wYWdl X3R5cGUocGFnZSwgdHlwZSkgPyAwIDogLUVJTlZBTCkpOworCisgICAgaWYgKCB1bmxpa2VseShy YykgJiYgcGFydGlhbCA+PSAwICYmCisgICAgICAgICAoIXByZWVtcHRpYmxlIHx8IHBhZ2UgIT0g Y3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUpICkKKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7 CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyB2b2lkIHB1dF9kYXRhX3BhZ2UoCisgICAg c3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHdyaXRlYWJsZSkKK3sKKyAgICBpZiAoIHdyaXRl YWJsZSApCisgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOworICAgIGVsc2UKKyAgICAg ICAgcHV0X3BhZ2UocGFnZSk7Cit9CisKK3N0YXRpYyBpbnQgY3JlYXRlX3BhZV94ZW5fbWFwcGlu Z3Moc3RydWN0IGRvbWFpbiAqZCwgbDNfcGdlbnRyeV90ICpwbDNlKQoreworICAgIHN0cnVjdCBw YWdlX2luZm8gKnBhZ2U7CisgICAgbDNfcGdlbnRyeV90ICAgICBsM2UzOworCisgICAgaWYgKCAh aXNfcHZfMzJiaXRfZG9tYWluKGQpICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBwbDNlID0g KGwzX3BnZW50cnlfdCAqKSgodW5zaWduZWQgbG9uZylwbDNlICYgUEFHRV9NQVNLKTsKKworICAg IC8qIDNyZCBMMyBzbG90IGNvbnRhaW5zIEwyIHdpdGggWGVuLXByaXZhdGUgbWFwcGluZ3MuIEl0 ICptdXN0KiBleGlzdC4gKi8KKyAgICBsM2UzID0gcGwzZVszXTsKKyAgICBpZiAoICEobDNlX2dl dF9mbGFncyhsM2UzKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiUEFFIEwzIDNyZCBzbG90IGlzIGVtcHR5XG4iKTsKKyAgICAgICAg cmV0dXJuIDA7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUaGUgWGVuLXByaXZhdGUgbWFwcGlu Z3MgaW5jbHVkZSBsaW5lYXIgbWFwcGluZ3MuIFRoZSBMMiB0aHVzIGNhbm5vdAorICAgICAqIGJl IHNoYXJlZCBieSBtdWx0aXBsZSBMMyB0YWJsZXMuIFRoZSB0ZXN0IGhlcmUgaXMgYWRlcXVhdGUg YmVjYXVzZToKKyAgICAgKiAgMS4gQ2Fubm90IGFwcGVhciBpbiBzbG90cyAhPSAzIGJlY2F1c2Ug Z2V0X3BhZ2VfdHlwZSgpIGNoZWNrcyB0aGUKKyAgICAgKiAgICAgUEdUX3BhZV94ZW5fbDIgZmxh Zywgd2hpY2ggaXMgYXNzZXJ0ZWQgaWZmIHRoZSBMMiBhcHBlYXJzIGluIHNsb3QgMworICAgICAq ICAyLiBDYW5ub3QgYXBwZWFyIGluIGFub3RoZXIgcGFnZSB0YWJsZSdzIEwzOgorICAgICAqICAg ICBhLiBhbGxvY19sM190YWJsZSgpIGNhbGxzIHRoaXMgZnVuY3Rpb24gYW5kIHRoaXMgY2hlY2sg d2lsbCBmYWlsCisgICAgICogICAgIGIuIG1vZF9sM19lbnRyeSgpIGRpc2FsbG93cyB1cGRhdGVz IHRvIHNsb3QgMyBpbiBhbiBleGlzdGluZyB0YWJsZQorICAgICAqLworICAgIHBhZ2UgPSBsM2Vf Z2V0X3BhZ2UobDNlMyk7CisgICAgQlVHX09OKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdU X3Bpbm5lZCk7CisgICAgQlVHX09OKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9jb3Vu dF9tYXNrKSA9PSAwKTsKKyAgICBCVUdfT04oIShwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBH VF9wYWVfeGVuX2wyKSk7CisgICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1Rf Y291bnRfbWFzaykgIT0gMSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklO RywgIlBBRSBMMyAzcmQgc2xvdCBpcyBzaGFyZWRcbiIpOworICAgICAgICByZXR1cm4gMDsKKyAg ICB9CisKKyAgICByZXR1cm4gMTsKK30KKworI2lmZGVmIENPTkZJR19QVl9MSU5FQVJfUFQKKwor c3RhdGljIGJvb2wgaW5jX2xpbmVhcl9lbnRyaWVzKHN0cnVjdCBwYWdlX2luZm8gKnBnKQorewor ICAgIHR5cGVvZihwZy0+bGluZWFyX3B0X2NvdW50KSBuYyA9IHJlYWRfYXRvbWljKCZwZy0+bGlu ZWFyX3B0X2NvdW50KSwgb2M7CisKKyAgICBkbyB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRo ZSBjaGVjayBiZWxvdyBjaGVja3MgZm9yIHRoZSAibGluZWFyIHVzZSIgY291bnQgYmVpbmcgbm9u LXplcm8KKyAgICAgICAgICogYXMgd2VsbCBhcyBvdmVyZmxvdy4gIFNpZ25lZCBpbnRlZ2VyIG92 ZXJmbG93IGlzIHVuZGVmaW5lZCBiZWhhdmlvcgorICAgICAgICAgKiBhY2NvcmRpbmcgdG8gdGhl IEMgc3BlYy4gIEhvd2V2ZXIsIGFzIGxvbmcgYXMgbGluZWFyX3B0X2NvdW50IGlzCisgICAgICAg ICAqIHNtYWxsZXIgaW4gc2l6ZSB0aGFuICdpbnQnLCB0aGUgYXJpdGhtZXRpYyBvcGVyYXRpb24g b2YgdGhlCisgICAgICAgICAqIGluY3JlbWVudCBiZWxvdyB3b24ndCBvdmVyZmxvdzsgcmF0aGVy IHRoZSByZXN1bHQgd2lsbCBiZSB0cnVuY2F0ZWQKKyAgICAgICAgICogd2hlbiBzdG9yZWQuICBF bnN1cmUgdGhhdCB0aGlzIGlzIGFsd2F5cyB0cnVlLgorICAgICAgICAgKi8KKyAgICAgICAgQlVJ TERfQlVHX09OKHNpemVvZihuYykgPj0gc2l6ZW9mKGludCkpOworICAgICAgICBvYyA9IG5jKys7 CisgICAgICAgIGlmICggbmMgPD0gMCApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg ICAgIG5jID0gY21weGNoZygmcGctPmxpbmVhcl9wdF9jb3VudCwgb2MsIG5jKTsKKyAgICB9IHdo aWxlICggb2MgIT0gbmMgKTsKKworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBk ZWNfbGluZWFyX2VudHJpZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGcpCit7CisgICAgdHlwZW9mKHBn LT5saW5lYXJfcHRfY291bnQpIG9jOworCisgICAgb2MgPSBhcmNoX2ZldGNoX2FuZF9hZGQoJnBn LT5saW5lYXJfcHRfY291bnQsIC0xKTsKKyAgICBBU1NFUlQob2MgPiAwKTsKK30KKworc3RhdGlj IGJvb2wgaW5jX2xpbmVhcl91c2VzKHN0cnVjdCBwYWdlX2luZm8gKnBnKQoreworICAgIHR5cGVv ZihwZy0+bGluZWFyX3B0X2NvdW50KSBuYyA9IHJlYWRfYXRvbWljKCZwZy0+bGluZWFyX3B0X2Nv dW50KSwgb2M7CisKKyAgICBkbyB7CisgICAgICAgIC8qIFNlZSB0aGUgcmVzcGVjdGl2ZSBjb21t ZW50IGluIGluY19saW5lYXJfZW50cmllcygpLiAqLworICAgICAgICBCVUlMRF9CVUdfT04oc2l6 ZW9mKG5jKSA+PSBzaXplb2YoaW50KSk7CisgICAgICAgIG9jID0gbmMtLTsKKyAgICAgICAgaWYg KCBuYyA+PSAwICkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgbmMgPSBjbXB4 Y2hnKCZwZy0+bGluZWFyX3B0X2NvdW50LCBvYywgbmMpOworICAgIH0gd2hpbGUgKCBvYyAhPSBu YyApOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIGRlY19saW5lYXJfdXNl cyhzdHJ1Y3QgcGFnZV9pbmZvICpwZykKK3sKKyAgICB0eXBlb2YocGctPmxpbmVhcl9wdF9jb3Vu dCkgb2M7CisKKyAgICBvYyA9IGFyY2hfZmV0Y2hfYW5kX2FkZCgmcGctPmxpbmVhcl9wdF9jb3Vu dCwgMSk7CisgICAgQVNTRVJUKG9jIDwgMCk7Cit9CisKKy8qCisgKiBXZSBhbGxvdyByb290IHRh YmxlcyB0byBtYXAgZWFjaCBvdGhlciAoYS5rLmEuIGxpbmVhciBwYWdlIHRhYmxlcykuIEl0Cisg KiBuZWVkcyBzb21lIHNwZWNpYWwgY2FyZSB3aXRoIHJlZmVyZW5jZSBjb3VudHMgYW5kIGFjY2Vz cyBwZXJtaXNzaW9uczoKKyAqICAxLiBUaGUgbWFwcGluZyBlbnRyeSBtdXN0IGJlIHJlYWQtb25s eSwgb3IgdGhlIGd1ZXN0IG1heSBnZXQgd3JpdGUgYWNjZXNzCisgKiAgICAgdG8gaXRzIG93biBQ VEVzLgorICogIDIuIFdlIG11c3Qgb25seSBidW1wIHRoZSByZWZlcmVuY2UgY291bnRzIGZvciBh biAqYWxyZWFkeSB2YWxpZGF0ZWQqCisgKiAgICAgTDIgdGFibGUsIG9yIHdlIGNhbiBlbmQgdXAg aW4gYSBkZWFkbG9jayBpbiBnZXRfcGFnZV90eXBlKCkgYnkgd2FpdGluZworICogICAgIG9uIGEg dmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRoYXQgdmFsaWRhdGlvbi4K KyAqICAzLiBXZSBvbmx5IG5lZWQgdG8gaW5jcmVtZW50IHRoZSByZWZlcmVuY2UgY291bnRzIGZv ciB0aGUgbWFwcGVkIHBhZ2UKKyAqICAgICBmcmFtZSBpZiBpdCBpcyBtYXBwZWQgYnkgYSBkaWZm ZXJlbnQgcm9vdCB0YWJsZS4gVGhpcyBpcyBzdWZmaWNpZW50IGFuZAorICogICAgIGFsc28gbmVj ZXNzYXJ5IHRvIGFsbG93IHZhbGlkYXRpb24gb2YgYSByb290IHRhYmxlIG1hcHBpbmcgaXRzZWxm LgorICovCitzdGF0aWMgYm9vbCBfX3JlYWRfbW9zdGx5IG9wdF9wdl9saW5lYXJfcHQgPSB0cnVl OworYm9vbGVhbl9wYXJhbSgicHYtbGluZWFyLXB0Iiwgb3B0X3B2X2xpbmVhcl9wdCk7CisKKyNk ZWZpbmUgZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGxldmVsKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCitzdGF0aWMgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorZ2V0XyMjbGV2ZWwjI19s aW5lYXJfcGFnZXRhYmxlKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICBsZXZlbCMjX3BnZW50cnlfdCBwZGUsIHVuc2lnbmVkIGxvbmcgcGRlX3Bmbiwg c3RydWN0IGRvbWFpbiAqZCkgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHVu c2lnbmVkIGxvbmcgeCwgeTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIHBmbjsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIGlmICggIW9wdF9wdl9saW5lYXJfcHQgKSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAiQXR0ZW1wdCB0byBjcmVhdGUgbGluZWFyIHAu dC4gKGZlYXR1cmUgZGlzYWJsZWQpXG4iKTsgICAgIFwKKyAgICAgICAgcmV0dXJuIDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoIChsZXZl bCMjZV9nZXRfZmxhZ3MocGRlKSAmIF9QQUdFX1JXKSApICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgICAgICAgICAgIkF0dGVtcHQgdG8gY3JlYXRlIGxpbmVhciBwLnQuIHdpdGggd3JpdGUgcGVy bXNcbiIpOyAgICAgICBcCisgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKCAocGZuID0gbGV2ZWwjI2VfZ2V0X3Bm bihwZGUpKSAhPSBwZGVfcGZuICkgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgKnB0cGcgPSBtZm5f dG9fcGFnZShfbWZuKHBkZV9wZm4pKTsgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIHBhZ2UgdGFibGUgYmVsb25ncyB0byB0aGUgY29ycmVj dCBkb21haW4uICovICAgICAgIFwKKyAgICAgICAgaWYgKCB1bmxpa2VseShwYWdlX2dldF9vd25l cihwdHBnKSAhPSBkKSApICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBy ZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgLyogTWFrZSBzdXJlIHRoZSBt YXBwZWQgZnJhbWUgYmVsb25ncyB0byB0aGUgY29ycmVjdCBkb21haW4uICovICAgICBcCisgICAg ICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX21mbihfbWZuKHBmbiksIGQpOyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVy biAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg ICogRW5zdXJlIHRoYXQgdGhlIG1hcHBlZCBmcmFtZSBpcyBhbiBhbHJlYWR5LXZhbGlkYXRlZCBw YWdlIHRhYmxlICBcCisgICAgICAgICAqIGFuZCBpcyBub3QgaXRzZWxmIGhhdmluZyBsaW5lYXIg ZW50cmllcywgYXMgd2VsbCBhcyB0aGF0IHRoZSAgICAgXAorICAgICAgICAgKiBjb250YWluaW5n IHBhZ2UgdGFibGUgaXMgbm90IGlzZWxmIGluIHVzZSBhcyBhIGxpbmVhciBwYWdlIHRhYmxlIFwK KyAgICAgICAgICogZWxzZXdoZXJlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAqIElmIHNvLCBhdG9taWNhbGx5IGluY3Jl bWVudCB0aGUgY291bnQgKGNoZWNraW5nIGZvciBvdmVyZmxvdykuICAgXAorICAgICAgICAgKi8g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICAgICAgaWYgKCAhaW5jX2xpbmVhcl9lbnRyaWVzKHB0cGcpICkgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg ICAgICAgICAgcHV0X3BhZ2UocGFnZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgICAgICBpZiAoICFpbmNfbGluZWFyX3VzZXMocGFnZSkgKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgeyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICBkZWNfbGluZWFyX2VudHJpZXMocHRwZyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHJldHVybiAw OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB5ID0gcGFnZS0+dS5pbnVzZS50eXBlX2lu Zm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZG8g eyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICB4ID0geTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eSgoeCAmIFBHVF9jb3VudF9tYXNrKSA9PSBQR1RfY291bnRfbWFzaykgfHwgICAgICAgIFwKKyAg ICAgICAgICAgICAgICAgdW5saWtlbHkoKHggJiAoUEdUX3R5cGVfbWFza3xQR1RfdmFsaWRhdGVk KSkgIT0gICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIChQR1RfIyNsZXZl bCMjX3BhZ2VfdGFibGV8UEdUX3ZhbGlkYXRlZCkpICkgICAgICAgXAorICAgICAgICAgICAgeyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgICBkZWNfbGluZWFyX3VzZXMocGFnZSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZGVjX2xpbmVhcl9l bnRyaWVzKHB0cGcpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBh Z2UtPnUuaW51c2UudHlwZV9pbmZvLCB4LCB4ICsgMSkpICE9IHggKTsgICBcCisgICAgfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICByZXR1cm4gMTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9 CisKKyNlbHNlIC8qIENPTkZJR19QVl9MSU5FQVJfUFQgKi8KKworI2RlZmluZSBkZWZpbmVfZ2V0 X2xpbmVhcl9wYWdldGFibGUobGV2ZWwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor c3RhdGljIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorZ2V0XyMjbGV2ZWwjI19saW5lYXJfcGFnZXRhYmxlKCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBsZXZlbCMjX3BnZW50 cnlfdCBwZGUsIHVuc2lnbmVkIGxvbmcgcGRlX3Bmbiwgc3RydWN0IGRvbWFpbiAqZCkgXAoreyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfQorCitzdGF0aWMgdm9pZCBkZWNfbGlu ZWFyX3VzZXMoc3RydWN0IHBhZ2VfaW5mbyAqcGcpCit7CisgICAgQVNTRVJUKHBnLT5saW5lYXJf cHRfY291bnQgPT0gMCk7Cit9CisKK3N0YXRpYyB2b2lkIGRlY19saW5lYXJfZW50cmllcyhzdHJ1 Y3QgcGFnZV9pbmZvICpwZykKK3sKKyAgICBBU1NFUlQocGctPmxpbmVhcl9wdF9jb3VudCA9PSAw KTsKK30KKworI2VuZGlmIC8qIENPTkZJR19QVl9MSU5FQVJfUFQgKi8KKworLyogTkIuIFZpcnR1 YWwgYWRkcmVzcyAnbDJlJyBtYXBzIHRvIGEgbWFjaGluZSBhZGRyZXNzIHdpdGhpbiBmcmFtZSAn cGZuJy4gKi8KKy8qCisgKiBnZXRfcGFnZV9mcm9tX2wyZSByZXR1cm5zOgorICogICAxID0+IHBh Z2Ugbm90IHByZXNlbnQKKyAqICAgMCA9PiBzdWNjZXNzCisgKiAgPDAgPT4gZXJyb3IgY29kZQor ICovCitkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobDIpOworc3RhdGljIGludAorZ2V0X3Bh Z2VfZnJvbV9sMmUoCisgICAgbDJfcGdlbnRyeV90IGwyZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0 cnVjdCBkb21haW4gKmQpCit7CisgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBsMmVfZ2V0X3Bmbihs MmUpOworICAgIGludCByYzsKKworICAgIGlmICggIShsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFH RV9QUkVTRU5UKSApCisgICAgICAgIHJldHVybiAxOworCisgICAgaWYgKCB1bmxpa2VseSgobDJl X2dldF9mbGFncyhsMmUpICYgTDJfRElTQUxMT1dfTUFTSykpICkKKyAgICB7CisgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwyIGZsYWdzICV4XG4iLAorICAgICAgICAgICAg ICAgICBsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBMMl9ESVNBTExPV19NQVNLKTsKKyAgICAgICAgcmV0 dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAgcmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21m bihfbWZuKG1mbiksIFBHVF9sMV9wYWdlX3RhYmxlLCBkLCAwLCAwKTsKKyAgICBpZiAoIHVubGlr ZWx5KHJjID09IC1FSU5WQUwpICYmIGdldF9sMl9saW5lYXJfcGFnZXRhYmxlKGwyZSwgcGZuLCBk KSApCisgICAgICAgIHJjID0gMDsKKworICAgIHJldHVybiByYzsKK30KKworCisvKgorICogZ2V0 X3BhZ2VfZnJvbV9sM2UgcmV0dXJuczoKKyAqICAgMSA9PiBwYWdlIG5vdCBwcmVzZW50CisgKiAg IDAgPT4gc3VjY2VzcworICogIDwwID0+IGVycm9yIGNvZGUKKyAqLworZGVmaW5lX2dldF9saW5l YXJfcGFnZXRhYmxlKGwzKTsKK3N0YXRpYyBpbnQKK2dldF9wYWdlX2Zyb21fbDNlKAorICAgIGwz X3BnZW50cnlfdCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLCBpbnQg cGFydGlhbCkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2Up ICYgX1BBR0VfUFJFU0VOVCkgKQorICAgICAgICByZXR1cm4gMTsKKworICAgIGlmICggdW5saWtl bHkoKGwzZV9nZXRfZmxhZ3MobDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpKSApCisgICAgewor ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMyBmbGFncyAleFxuIiwKKyAg ICAgICAgICAgICAgICAgbDNlX2dldF9mbGFncyhsM2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSk7 CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIHJjID0gZ2V0X3BhZ2VfYW5k X3R5cGVfZnJvbV9tZm4oCisgICAgICAgIGwzZV9nZXRfbWZuKGwzZSksIFBHVF9sMl9wYWdlX3Rh YmxlLCBkLCBwYXJ0aWFsLCAxKTsKKyAgICBpZiAoIHVubGlrZWx5KHJjID09IC1FSU5WQUwpICYm CisgICAgICAgICAhaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmCisgICAgICAgICBnZXRfbDNfbGlu ZWFyX3BhZ2V0YWJsZShsM2UsIHBmbiwgZCkgKQorICAgICAgICByYyA9IDA7CisKKyAgICByZXR1 cm4gcmM7Cit9CisKKy8qCisgKiBnZXRfcGFnZV9mcm9tX2w0ZSByZXR1cm5zOgorICogICAxID0+ IHBhZ2Ugbm90IHByZXNlbnQKKyAqICAgMCA9PiBzdWNjZXNzCisgKiAgPDAgPT4gZXJyb3IgY29k ZQorICovCitkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobDQpOworc3RhdGljIGludAorZ2V0 X3BhZ2VfZnJvbV9sNGUoCisgICAgbDRfcGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4s IHN0cnVjdCBkb21haW4gKmQsIGludCBwYXJ0aWFsKQoreworICAgIGludCByYzsKKworICAgIGlm ICggIShsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBfUEFHRV9QUkVTRU5UKSApCisgICAgICAgIHJldHVy biAxOworCisgICAgaWYgKCB1bmxpa2VseSgobDRlX2dldF9mbGFncyhsNGUpICYgTDRfRElTQUxM T1dfTUFTSykpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFk IEw0IGZsYWdzICV4XG4iLAorICAgICAgICAgICAgICAgICBsNGVfZ2V0X2ZsYWdzKGw0ZSkgJiBM NF9ESVNBTExPV19NQVNLKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgfQorCisgICAg cmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKKyAgICAgICAgbDRlX2dldF9tZm4obDRl KSwgUEdUX2wzX3BhZ2VfdGFibGUsIGQsIHBhcnRpYWwsIDEpOworICAgIGlmICggdW5saWtlbHko cmMgPT0gLUVJTlZBTCkgJiYgZ2V0X2w0X2xpbmVhcl9wYWdldGFibGUobDRlLCBwZm4sIGQpICkK KyAgICAgICAgcmMgPSAwOworCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogTkIuIFZpcnR1 YWwgYWRkcmVzcyAnbDJlJyBtYXBzIHRvIGEgbWFjaGluZSBhZGRyZXNzIHdpdGhpbiBmcmFtZSAn cGZuJy4KKyAqIE5vdGUgYWxzbyB0aGF0IHRoaXMgYXV0b21hdGljYWxseSBkZWFscyBjb3JyZWN0 bHkgd2l0aCBsaW5lYXIgcC50LidzLgorICovCitzdGF0aWMgaW50IHB1dF9wYWdlX2Zyb21fbDJl KGwyX3BnZW50cnlfdCBsMmUsIHVuc2lnbmVkIGxvbmcgcGZuKQoreworICAgIGlmICggIShsMmVf Z2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QUkVTRU5UKSB8fCAobDJlX2dldF9wZm4obDJlKSA9PSBw Zm4pICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBpZiAoIGwyZV9nZXRfZmxhZ3MobDJlKSAm IF9QQUdFX1BTRSApCisgICAgeworICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbDJl X2dldF9wYWdlKGwyZSk7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIGZvciAo IGkgPSAwOyBpIDwgKDF1IDw8IFBBR0VUQUJMRV9PUkRFUik7IGkrKywgcGFnZSsrICkKKyAgICAg ICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOworICAgIH0KKyAgICBlbHNlCisgICAgewor ICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwZyA9IGwyZV9nZXRfcGFnZShsMmUpOworICAgICAg ICBpbnQgcmMgPSBwdXRfcGFnZV90eXBlX3B0cGcocGcsIG1mbl90b19wYWdlKF9tZm4ocGZuKSkp OworCisgICAgICAgIEFTU0VSVCghcmMpOworICAgICAgICBwdXRfcGFnZShwZyk7CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcHV0X3BhZ2VfZnJvbV9sM2UobDNfcGdl bnRyeV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBwYXJ0aWFsLCBib29sIGRlZmVyKQoreworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBn OworICAgIGludCByYzsKKworICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9Q UkVTRU5UKSB8fCAobDNlX2dldF9wZm4obDNlKSA9PSBwZm4pICkKKyAgICAgICAgcmV0dXJuIDE7 CisKKyAgICBpZiAoIHVubGlrZWx5KGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1BTRSkgKQor ICAgIHsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBsM2VfZ2V0X3BmbihsM2UpOworICAg ICAgICBpbnQgd3JpdGVhYmxlID0gbDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0VfUlc7CisKKyAg ICAgICAgQVNTRVJUKCEobWZuICYgKCgxVUwgPDwgKEwzX1BBR0VUQUJMRV9TSElGVCAtIFBBR0Vf U0hJRlQpKSAtIDEpKSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHB1dF9kYXRhX3BhZ2Uo bWZuX3RvX3BhZ2UoX21mbihtZm4pKSwgd3JpdGVhYmxlKTsKKyAgICAgICAgfSB3aGlsZSAoICsr bWZuICYgKCgxVUwgPDwgKEwzX1BBR0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpICk7 CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcGcgPSBsM2VfZ2V0X3BhZ2UobDNl KTsKKworICAgIGlmICggdW5saWtlbHkocGFydGlhbCA+IDApICkKKyAgICB7CisgICAgICAgIEFT U0VSVCghZGVmZXIpOworICAgICAgICByZXR1cm4gcHV0X3BhZ2VfdHlwZV9wdHBnX3ByZWVtcHRp YmxlKHBnLCBtZm5fdG9fcGFnZShfbWZuKHBmbikpKTsKKyAgICB9CisKKyAgICBpZiAoIGRlZmVy ICkKKyAgICB7CisgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3B0cGcgPSBtZm5fdG9f cGFnZShfbWZuKHBmbikpOworICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9 IHBnOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByYyA9IHB1dF9wYWdlX3R5cGVf cHRwZ19wcmVlbXB0aWJsZShwZywgbWZuX3RvX3BhZ2UoX21mbihwZm4pKSk7CisgICAgaWYgKCBs aWtlbHkoIXJjKSApCisgICAgICAgIHB1dF9wYWdlKHBnKTsKKworICAgIHJldHVybiByYzsKK30K Kworc3RhdGljIGludCBwdXRfcGFnZV9mcm9tX2w0ZShsNF9wZ2VudHJ5X3QgbDRlLCB1bnNpZ25l ZCBsb25nIHBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHBhcnRpYWwsIGJv b2wgZGVmZXIpCit7CisgICAgaW50IHJjID0gMTsKKworICAgIGlmICggKGw0ZV9nZXRfZmxhZ3Mo bDRlKSAmIF9QQUdFX1BSRVNFTlQpICYmCisgICAgICAgICAobDRlX2dldF9wZm4obDRlKSAhPSBw Zm4pICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnID0gbDRlX2dldF9wYWdl KGw0ZSk7CisKKyAgICAgICAgaWYgKCB1bmxpa2VseShwYXJ0aWFsID4gMCkgKQorICAgICAgICB7 CisgICAgICAgICAgICBBU1NFUlQoIWRlZmVyKTsKKyAgICAgICAgICAgIHJldHVybiBwdXRfcGFn ZV90eXBlX3B0cGdfcHJlZW1wdGlibGUocGcsIG1mbl90b19wYWdlKF9tZm4ocGZuKSkpOworICAg ICAgICB9CisKKyAgICAgICAgaWYgKCBkZWZlciApCisgICAgICAgIHsKKyAgICAgICAgICAgIGN1 cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3B0cGcgPSBtZm5fdG9fcGFnZShfbWZuKHBmbikpOworICAg ICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwZzsKKyAgICAgICAgICAg IHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBwdXRfcGFnZV90eXBlX3B0cGdf cHJlZW1wdGlibGUocGcsIG1mbl90b19wYWdlKF9tZm4ocGZuKSkpOworICAgICAgICBpZiAoIGxp a2VseSghcmMpICkKKyAgICAgICAgICAgIHB1dF9wYWdlKHBnKTsKKyAgICB9CisKKyAgICByZXR1 cm4gcmM7Cit9CisKKy8qIFVwZGF0ZSB0aGUgTDEgZW50cnkgYXQgcGwxZSB0byBuZXcgdmFsdWUg bmwxZS4gKi8KK3N0YXRpYyBpbnQgbW9kX2wxX2VudHJ5KGwxX3BnZW50cnlfdCAqcGwxZSwgbDFf cGdlbnRyeV90IG5sMWUsCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGds MW1mbiwgaW50IHByZXNlcnZlX2FkLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZj cHUgKnB0X3ZjcHUsIHN0cnVjdCBkb21haW4gKnBnX2RvbSkKK3sKKyAgICBsMV9wZ2VudHJ5X3Qg b2wxZTsKKyAgICBzdHJ1Y3QgZG9tYWluICpwdF9kb20gPSBwdF92Y3B1LT5kb21haW47CisgICAg aW50IHJjID0gMDsKKworICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wxZSwg cGwxZSwgc2l6ZW9mKG9sMWUpKSAhPSAwKSApCisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisg ICAgQVNTRVJUKCFwYWdpbmdfbW9kZV9yZWZjb3VudHMocHRfZG9tKSk7CisKKyAgICBpZiAoIGwx ZV9nZXRfZmxhZ3MobmwxZSkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICB7CisgICAgICAgIHN0cnVj dCBwYWdlX2luZm8gKnBhZ2UgPSBOVUxMOworCisgICAgICAgIGlmICggdW5saWtlbHkobDFlX2dl dF9mbGFncyhubDFlKSAmIGwxX2Rpc2FsbG93X21hc2socHRfZG9tKSkgKQorICAgICAgICB7Cisg ICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMSBmbGFncyAleFxuIiwK KyAgICAgICAgICAgICAgICAgICAgbDFlX2dldF9mbGFncyhubDFlKSAmIGwxX2Rpc2FsbG93X21h c2socHRfZG9tKSk7CisgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisg ICAgICAgIC8qIFRyYW5zbGF0ZSBmb3JlaWduIGd1ZXN0IGFkZHJlc3MuICovCisgICAgICAgIGlm ICggcGFnaW5nX21vZGVfdHJhbnNsYXRlKHBnX2RvbSkgKQorICAgICAgICB7CisgICAgICAgICAg ICBwMm1fdHlwZV90IHAybXQ7CisgICAgICAgICAgICBwMm1fcXVlcnlfdCBxID0gbDFlX2dldF9m bGFncyhubDFlKSAmIF9QQUdFX1JXID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1f QUxMT0MgfCBQMk1fVU5TSEFSRSA6IFAyTV9BTExPQzsKKworICAgICAgICAgICAgcGFnZSA9IGdl dF9wYWdlX2Zyb21fZ2ZuKHBnX2RvbSwgbDFlX2dldF9wZm4obmwxZSksICZwMm10LCBxKTsKKwor ICAgICAgICAgICAgaWYgKCBwMm1faXNfcGFnZWQocDJtdCkgKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICAgIGlmICggcGFnZSApCisgICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBh Z2UpOworICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKHBnX2RvbSwgbDFl X2dldF9wZm4obmwxZSkpOworICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHAybXQgPT0gcDJtX3JhbV9wYWdpbmdfaW4gJiYg IXBhZ2UgKQorICAgICAgICAgICAgICAgIHJldHVybiAtRU5PRU5UOworCisgICAgICAgICAgICAv KiBEaWQgb3VyIGF0dGVtcHQgdG8gdW5zaGFyZSBmYWlsPyAqLworICAgICAgICAgICAgaWYgKCAo cSAmIFAyTV9VTlNIQVJFKSAmJiBwMm1faXNfc2hhcmVkKHAybXQpICkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAvKiBXZSBjb3VsZCBub3QgaGF2ZSBvYnRhaW5lZCBhIHBhZ2UgcmVm LiAqLworICAgICAgICAgICAgICAgIEFTU0VSVCghcGFnZSk7CisgICAgICAgICAgICAgICAgLyog QW5kIG1lbV9zaGFyaW5nX25vdGlmeSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KKyAgICAg ICAgICAgICAgICByZXR1cm4gLUVOT01FTTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg aWYgKCAhcGFnZSApCisgICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CisgICAgICAgICAg ICBubDFlID0gbDFlX2Zyb21fcGFnZShwYWdlLCBsMWVfZ2V0X2ZsYWdzKG5sMWUpKTsKKyAgICAg ICAgfQorCisgICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3VmZmljaWVudGx5LXNpbWlsYXIgbWFw cGluZ3MuICovCisgICAgICAgIGlmICggIWwxZV9oYXNfY2hhbmdlZChvbDFlLCBubDFlLCB+RkFT VFBBVEhfRkxBR19XSElURUxJU1QpICkKKyAgICAgICAgeworICAgICAgICAgICAgbmwxZSA9IGFk anVzdF9ndWVzdF9sMWUobmwxZSwgcHRfZG9tKTsKKyAgICAgICAgICAgIHJjID0gVVBEQVRFX0VO VFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHB0X3ZjcHUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCk7CisgICAgICAgICAgICBpZiAoIHBhZ2UgKQor ICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAgcmV0dXJuIHJjID8g MCA6IC1FQlVTWTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoIHJjID0gZ2V0X3BhZ2Vf ZnJvbV9sMWUobmwxZSwgcHRfZG9tLCBwZ19kb20sCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20pKSApCisgICAgICAgIHsKKyAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmICggcGFnZSApCisgICAgICAgICAgICAgICAg cHV0X3BhZ2UocGFnZSk7CisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIGNhc2UgMDoK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIF9QQUdFX1JXIC4uLiBfUEFHRV9SVyB8 IFBBR0VfQ0FDSEVfQVRUUlM6CisgICAgICAgICAgICBBU1NFUlQoIShyYyAmIH4oX1BBR0VfUlcg fCBQQUdFX0NBQ0hFX0FUVFJTKSkpOworICAgICAgICAgICAgbDFlX2ZsaXBfZmxhZ3MobmwxZSwg cmMpOworICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KyAgICAgICAgaWYgKCBwYWdlICkKKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworCisgICAg ICAgIG5sMWUgPSBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIHB0X2RvbSk7CisgICAgICAgIGlmICgg dW5saWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgZ2wxbWZuLCBwdF92 Y3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSAp CisgICAgICAgIHsKKyAgICAgICAgICAgIG9sMWUgPSBubDFlOworICAgICAgICAgICAgcmMgPSAt RUJVU1k7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVf RU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAgICB7CisgICAgICAg IHJldHVybiAtRUJVU1k7CisgICAgfQorCisgICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgcHRf ZG9tKTsKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyogVXBkYXRlIHRoZSBMMiBlbnRyeSBhdCBw bDJlIHRvIG5ldyB2YWx1ZSBubDJlLiBwbDJlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCitzdGF0 aWMgaW50IG1vZF9sMl9lbnRyeShsMl9wZ2VudHJ5X3QgKnBsMmUsCisgICAgICAgICAgICAgICAg ICAgICAgICBsMl9wZ2VudHJ5X3QgbmwyZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGxvbmcgcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNlcnZlX2FkLAor ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUpCit7CisgICAgbDJfcGdl bnRyeV90IG9sMmU7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUtPmRvbWFpbjsKKyAgICBz dHJ1Y3QgcGFnZV9pbmZvICpsMnBnID0gbWZuX3RvX3BhZ2UoX21mbihwZm4pKTsKKyAgICB1bnNp Z25lZCBsb25nIHR5cGUgPSBsMnBnLT51LmludXNlLnR5cGVfaW5mbzsKKyAgICBpbnQgcmMgPSAw OworCisgICAgaWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBwZ2VudHJ5 X3B0cl90b19zbG90KHBsMmUpKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsICJMMiB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4XG4iLAorICAg ICAgICAgICAgICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBsMmUpKTsKKyAgICAgICAgcmV0dXJu IC1FUEVSTTsKKyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9s MmUsIHBsMmUsIHNpemVvZihvbDJlKSkgIT0gMCkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsK KworICAgIGlmICggbDJlX2dldF9mbGFncyhubDJlKSAmIF9QQUdFX1BSRVNFTlQgKQorICAgIHsK KyAgICAgICAgaWYgKCB1bmxpa2VseShsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgTDJfRElTQUxMT1df TUFTSykgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywg IkJhZCBMMiBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbDJlX2dldF9mbGFncyhu bDJlKSAmIEwyX0RJU0FMTE9XX01BU0spOworICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cisg ICAgICAgIH0KKworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRseS1zaW1pbGFy IG1hcHBpbmdzLiAqLworICAgICAgICBpZiAoICFsMmVfaGFzX2NoYW5nZWQob2wyZSwgbmwyZSwg fkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIG5sMmUg PSBhZGp1c3RfZ3Vlc3RfbDJlKG5sMmUsIGQpOworICAgICAgICAgICAgaWYgKCBVUERBVEVfRU5U UlkobDIsIHBsMmUsIG9sMmUsIG5sMmUsIHBmbiwgdmNwdSwgcHJlc2VydmVfYWQpICkKKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiAtRUJVU1k7CisgICAgICAg IH0KKworICAgICAgICBpZiAoIHVubGlrZWx5KChyYyA9IGdldF9wYWdlX2Zyb21fbDJlKG5sMmUs IHBmbiwgZCkpIDwgMCkgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIG5sMmUg PSBhZGp1c3RfZ3Vlc3RfbDJlKG5sMmUsIGQpOworICAgICAgICBpZiAoIHVubGlrZWx5KCFVUERB VEVfRU5UUlkobDIsIHBsMmUsIG9sMmUsIG5sMmUsIHBmbiwgdmNwdSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAgICAgICB7CisgICAgICAg ICAgICBvbDJlID0gbmwyZTsKKyAgICAgICAgICAgIHJjID0gLUVCVVNZOworICAgICAgICB9Cisg ICAgfQorICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwyLCBwbDJlLCBvbDJl LCBubDJlLCBwZm4sIHZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJlc2VydmVfYWQpKSApCisgICAgeworICAgICAgICByZXR1cm4gLUVCVVNZOworICAgIH0KKwor ICAgIHB1dF9wYWdlX2Zyb21fbDJlKG9sMmUsIHBmbik7CisgICAgcmV0dXJuIHJjOworfQorCisv KiBVcGRhdGUgdGhlIEwzIGVudHJ5IGF0IHBsM2UgdG8gbmV3IHZhbHVlIG5sM2UuIHBsM2UgaXMg d2l0aGluIGZyYW1lIHBmbi4gKi8KK3N0YXRpYyBpbnQgbW9kX2wzX2VudHJ5KGwzX3BnZW50cnlf dCAqcGwzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGwzX3BnZW50cnlfdCBubDNlLAorICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgcHJlc2VydmVfYWQsCisgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg dmNwdSAqdmNwdSkKK3sKKyAgICBsM19wZ2VudHJ5X3Qgb2wzZTsKKyAgICBzdHJ1Y3QgZG9tYWlu ICpkID0gdmNwdS0+ZG9tYWluOworICAgIGludCByYyA9IDA7CisKKyAgICAvKgorICAgICAqIERp c2FsbG93IHVwZGF0ZXMgdG8gZmluYWwgTDMgc2xvdC4gSXQgY29udGFpbnMgWGVuIG1hcHBpbmdz LCBhbmQgaXQKKyAgICAgKiB3b3VsZCBiZSBhIHBhaW4gdG8gZW5zdXJlIHRoZXkgcmVtYWluIGNv bnRpbnVvdXNseSB2YWxpZCB0aHJvdWdob3V0LgorICAgICAqLworICAgIGlmICggaXNfcHZfMzJi aXRfZG9tYWluKGQpICYmIChwZ2VudHJ5X3B0cl90b19zbG90KHBsM2UpID49IDMpICkKKyAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIo Jm9sM2UsIHBsM2UsIHNpemVvZihvbDNlKSkgIT0gMCkgKQorICAgICAgICByZXR1cm4gLUVGQVVM VDsKKworICAgIGlmICggbDNlX2dldF9mbGFncyhubDNlKSAmIF9QQUdFX1BSRVNFTlQgKQorICAg IHsKKyAgICAgICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2ZsYWdzKG5sM2UpICYgbDNfZGlzYWxs b3dfbWFzayhkKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgIkJhZCBMMyBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbDNlX2dldF9m bGFncyhubDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpOworICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRs eS1zaW1pbGFyIG1hcHBpbmdzLiAqLworICAgICAgICBpZiAoICFsM2VfaGFzX2NoYW5nZWQob2wz ZSwgbmwzZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIG5sM2UgPSBhZGp1c3RfZ3Vlc3RfbDNlKG5sM2UsIGQpOworICAgICAgICAgICAgcmMgPSBV UERBVEVfRU5UUlkobDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwgcHJlc2VydmVfYWQp OworICAgICAgICAgICAgcmV0dXJuIHJjID8gMCA6IC1FRkFVTFQ7CisgICAgICAgIH0KKworICAg ICAgICByYyA9IGdldF9wYWdlX2Zyb21fbDNlKG5sM2UsIHBmbiwgZCwgMCk7CisgICAgICAgIGlm ICggdW5saWtlbHkocmMgPCAwKSApCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIHJj ID0gMDsKKworICAgICAgICBubDNlID0gYWRqdXN0X2d1ZXN0X2wzZShubDNlLCBkKTsKKyAgICAg ICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwzLCBwbDNlLCBvbDNlLCBubDNlLCBwZm4s IHZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkp ICkKKyAgICAgICAgeworICAgICAgICAgICAgb2wzZSA9IG5sM2U7CisgICAgICAgICAgICByYyA9 IC1FRkFVTFQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERB VEVfRU5UUlkobDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAgICB7CisgICAgICAgIHJl dHVybiAtRUZBVUxUOworICAgIH0KKworICAgIGlmICggbGlrZWx5KHJjID09IDApICkKKyAgICAg ICAgaWYgKCAhY3JlYXRlX3BhZV94ZW5fbWFwcGluZ3MoZCwgcGwzZSkgKQorICAgICAgICAgICAg QlVHKCk7CisKKyAgICBwdXRfcGFnZV9mcm9tX2wzZShvbDNlLCBwZm4sIDAsIDEpOworICAgIHJl dHVybiByYzsKK30KKworLyogVXBkYXRlIHRoZSBMNCBlbnRyeSBhdCBwbDRlIHRvIG5ldyB2YWx1 ZSBubDRlLiBwbDRlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCitzdGF0aWMgaW50IG1vZF9sNF9l bnRyeShsNF9wZ2VudHJ5X3QgKnBsNGUsCisgICAgICAgICAgICAgICAgICAgICAgICBsNF9wZ2Vu dHJ5X3Qgbmw0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcGZuLAor ICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNlcnZlX2FkLAorICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHZj cHUtPmRvbWFpbjsKKyAgICBsNF9wZ2VudHJ5X3Qgb2w0ZTsKKyAgICBpbnQgcmMgPSAwOworCisg ICAgaWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDRfc2xvdChkLCBwZ2VudHJ5X3B0cl90b19zbG90 KHBsNGUpKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJMNCB1 cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4XG4iLAorICAgICAgICAgICAgICAg ICBwZ2VudHJ5X3B0cl90b19zbG90KHBsNGUpKTsKKyAgICAgICAgcmV0dXJuIC1FSU5WQUw7Cisg ICAgfQorCisgICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZvbDRlLCBwbDRlLCBz aXplb2Yob2w0ZSkpICE9IDApICkKKyAgICAgICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAo IGw0ZV9nZXRfZmxhZ3Mobmw0ZSkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICB7CisgICAgICAgIGlm ICggdW5saWtlbHkobDRlX2dldF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9XX01BU0spICkKKyAg ICAgICAgeworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDQgZmxh Z3MgJXhcbiIsCisgICAgICAgICAgICAgICAgICAgIGw0ZV9nZXRfZmxhZ3Mobmw0ZSkgJiBMNF9E SVNBTExPV19NQVNLKTsKKyAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgICAgICB9CisK KyAgICAgICAgLyogRmFzdCBwYXRoIGZvciBzdWZmaWNpZW50bHktc2ltaWxhciBtYXBwaW5ncy4g Ki8KKyAgICAgICAgaWYgKCAhbDRlX2hhc19jaGFuZ2VkKG9sNGUsIG5sNGUsIH5GQVNUUEFUSF9G TEFHX1dISVRFTElTVCkgKQorICAgICAgICB7CisgICAgICAgICAgICBubDRlID0gYWRqdXN0X2d1 ZXN0X2w0ZShubDRlLCBkKTsKKyAgICAgICAgICAgIHJjID0gVVBEQVRFX0VOVFJZKGw0LCBwbDRl LCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsIHByZXNlcnZlX2FkKTsKKyAgICAgICAgICAgIHJldHVy biByYyA/IDAgOiAtRUZBVUxUOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBnZXRfcGFnZV9m cm9tX2w0ZShubDRlLCBwZm4sIGQsIDApOworICAgICAgICBpZiAoIHVubGlrZWx5KHJjIDwgMCkg KQorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICByYyA9IDA7CisKKyAgICAgICAgbmw0 ZSA9IGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7CisgICAgICAgIGlmICggdW5saWtlbHkoIVVQ REFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgICAgIHsKKyAgICAg ICAgICAgIG9sNGUgPSBubDRlOworICAgICAgICAgICAgcmMgPSAtRUZBVUxUOworICAgICAgICB9 CisgICAgfQorICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGw0LCBwbDRlLCBv bDRlLCBubDRlLCBwZm4sIHZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcHJlc2VydmVfYWQpKSApCisgICAgeworICAgICAgICByZXR1cm4gLUVGQVVMVDsKKyAgICB9 CisKKyAgICBwdXRfcGFnZV9mcm9tX2w0ZShvbDRlLCBwZm4sIDAsIDEpOworICAgIHJldHVybiBy YzsKK30KKworc3RhdGljIGludCBhbGxvY19sMV90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdl KQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICBs MV9wZ2VudHJ5X3QgICpwbDFlOworICAgIHVuc2lnbmVkIGludCAgIGk7CisgICAgaW50ICAgICAg ICAgICAgcmV0ID0gMDsKKworICAgIHBsMWUgPSBfX21hcF9kb21haW5fcGFnZShwYWdlKTsKKwor ICAgIGZvciAoIGkgPSAwOyBpIDwgTDFfUEFHRVRBQkxFX0VOVFJJRVM7IGkrKyApCisgICAgewor ICAgICAgICBzd2l0Y2ggKCByZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShwbDFlW2ldLCBkLCBkLCBs MV9kaXNhbGxvd19tYXNrKGQpKSApCisgICAgICAgIHsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgYnJlYWs7Cisg ICAgICAgIGNhc2UgX1BBR0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKKyAg ICAgICAgICAgIEFTU0VSVCghKHJldCAmIH4oX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTKSkp OworICAgICAgICAgICAgbDFlX2ZsaXBfZmxhZ3MocGwxZVtpXSwgcmV0KTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgcGwxZVtpXSA9IGFkanVzdF9ndWVzdF9sMWUo cGwxZVtpXSwgZCk7CisgICAgfQorCisgICAgdW5tYXBfZG9tYWluX3BhZ2UocGwxZSk7CisgICAg cmV0dXJuIDA7CisKKyBmYWlsOgorICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiRmFpbHVy ZSBpbiBhbGxvY19sMV90YWJsZTogc2xvdCAlI3hcbiIsIGkpOworICAgIHdoaWxlICggaS0tID4g MCApCisgICAgICAgIHB1dF9wYWdlX2Zyb21fbDFlKHBsMWVbaV0sIGQpOworCisgICAgdW5tYXBf ZG9tYWluX3BhZ2UocGwxZSk7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhbGxv Y19sMl90YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmVlbXB0aWJsZSkKK3sKKyAgICBzdHJ1Y3Qg ZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyAgcGZu ID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOworICAgIGwyX3BnZW50cnlfdCAgKnBsMmU7Cisg ICAgdW5zaWduZWQgaW50ICAgaTsKKyAgICBpbnQgICAgICAgICAgICByYyA9IDA7CisKKyAgICBw bDJlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICBmb3IgKCBpID0gcGFnZS0+ bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMMl9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkKKyAgICB7 CisgICAgICAgIGlmICggcHJlZW1wdGlibGUgJiYgaSA+IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVz CisgICAgICAgICAgICAgJiYgaHlwZXJjYWxsX3ByZWVtcHRfY2hlY2soKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgICAgIHJj ID0gLUVSRVNUQVJUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBp ZiAoICFpc19ndWVzdF9sMl9zbG90KGQsIHR5cGUsIGkpIHx8CisgICAgICAgICAgICAgKHJjID0g Z2V0X3BhZ2VfZnJvbV9sMmUocGwyZVtpXSwgcGZuLCBkKSkgPiAwICkKKyAgICAgICAgICAgIGNv bnRpbnVlOworCisgICAgICAgIGlmICggcmMgPCAwICkKKyAgICAgICAgeworICAgICAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wyX3RhYmxlOiBzbG90 ICUjeFxuIiwgaSk7CisgICAgICAgICAgICB3aGlsZSAoIGktLSA+IDAgKQorICAgICAgICAgICAg ICAgIGlmICggaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBpKSApCisgICAgICAgICAgICAgICAg ICAgIHB1dF9wYWdlX2Zyb21fbDJlKHBsMmVbaV0sIHBmbik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIHBsMmVbaV0gPSBhZGp1c3RfZ3Vlc3RfbDJlKHBsMmVbaV0s IGQpOworICAgIH0KKworICAgIGlmICggcmMgPj0gMCAmJiAodHlwZSAmIFBHVF9wYWVfeGVuX2wy KSApCisgICAgICAgIGluaXRfeGVuX3BhZV9sMl9zbG90cyhwbDJlLCBkKTsKKworICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMmUpOworICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKK3N0 YXRpYyBpbnQgYWxsb2NfbDNfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBz dHJ1Y3QgZG9tYWluICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9u ZyAgcGZuID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOworICAgIGwzX3BnZW50cnlfdCAgKnBs M2U7CisgICAgdW5zaWduZWQgaW50ICAgaTsKKyAgICBpbnQgICAgICAgICAgICByYyA9IDAsIHBh cnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKworICAgIHBsM2UgPSBtYXBfZG9tYWluX3BhZ2Uo X21mbihwZm4pKTsKKworICAgIC8qCisgICAgICogUEFFIGd1ZXN0cyBhbGxvY2F0ZSBmdWxsIHBh Z2VzLCBidXQgYXJlbid0IHJlcXVpcmVkIHRvIGluaXRpYWxpemUKKyAgICAgKiBtb3JlIHRoYW4g dGhlIGZpcnN0IGZvdXIgZW50cmllczsgd2hlbiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkKKyAg ICAgKiBtb2RlLCBob3dldmVyLCB0aGUgZnVsbCBwYWdlIGlzIHZpc2libGUgdG8gdGhlIE1NVSwg YW5kIGhlbmNlIGFsbAorICAgICAqIDUxMiBlbnRyaWVzIG11c3QgYmUgdmFsaWQvdmVyaWZpZWQs IHdoaWNoIGlzIG1vc3QgZWFzaWx5IGFjaGlldmVkCisgICAgICogYnkgY2xlYXJpbmcgdGhlbSBv dXQuCisgICAgICovCisgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQorICAgICAgICBt ZW1zZXQocGwzZSArIDQsIDAsIChMM19QQUdFVEFCTEVfRU5UUklFUyAtIDQpICogc2l6ZW9mKCpw bDNlKSk7CisKKyAgICBmb3IgKCBpID0gcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXM7IGkgPCBMM19Q QUdFVEFCTEVfRU5UUklFUzsKKyAgICAgICAgICBpKyssIHBhcnRpYWwgPSAwICkKKyAgICB7Cisg ICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmIChpID09IDMpICkKKyAgICAgICAg eworICAgICAgICAgICAgaWYgKCAhKGwzZV9nZXRfZmxhZ3MocGwzZVtpXSkgJiBfUEFHRV9QUkVT RU5UKSB8fAorICAgICAgICAgICAgICAgICAobDNlX2dldF9mbGFncyhwbDNlW2ldKSAmIGwzX2Rp c2FsbG93X21hc2soZCkpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAg ICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21m bigKKyAgICAgICAgICAgICAgICAgICAgbDNlX2dldF9tZm4ocGwzZVtpXSksCisgICAgICAgICAg ICAgICAgICAgIFBHVF9sMl9wYWdlX3RhYmxlIHwgUEdUX3BhZV94ZW5fbDIsIGQsIHBhcnRpYWws IDEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCAocmMgPSBnZXRfcGFnZV9mcm9tX2wz ZShwbDNlW2ldLCBwZm4sIGQsIHBhcnRpYWwpKSA+IDAgKQorICAgICAgICAgICAgY29udGludWU7 CisKKyAgICAgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgICAgICB7CisgICAgICAgICAg ICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyA9IGk7CisgICAgICAgICAgICBwYWdlLT5wYXJ0aWFs X3B0ZSA9IHBhcnRpYWwgPzogMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICggcmMgPT0g LUVJTlRSICYmIGkgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRf cHRlcyA9IGk7CisgICAgICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7CisgICAgICAgICAg ICByYyA9IC1FUkVTVEFSVDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIHJjIDwgMCApCisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICBwbDNlW2ldID0gYWRqdXN0X2d1ZXN0X2wzZShwbDNl W2ldLCBkKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID49IDAgJiYgIWNyZWF0ZV9wYWVfeGVuX21h cHBpbmdzKGQsIHBsM2UpICkKKyAgICAgICAgcmMgPSAtRUlOVkFMOworICAgIGlmICggcmMgPCAw ICYmIHJjICE9IC1FUkVTVEFSVCAmJiByYyAhPSAtRUlOVFIgKQorICAgIHsKKyAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsICJGYWlsdXJlIGluIGFsbG9jX2wzX3RhYmxlOiBzbG90ICUj eFxuIiwgaSk7CisgICAgICAgIGlmICggaSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhZ2Ut Pm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgICAgIHBhZ2UtPnBhcnRpYWxfcHRlID0g MDsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3B0cGcgPSBOVUxMOworICAg ICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOworICAgICAgICB9 CisgICAgICAgIHdoaWxlICggaS0tID4gMCApCisgICAgICAgICAgICBwbDNlW2ldID0gdW5hZGp1 c3RfZ3Vlc3RfbDNlKHBsM2VbaV0sIGQpOworICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdl KHBsM2UpOworICAgIHJldHVybiByYyA+IDAgPyAwIDogcmM7Cit9CisKK3N0YXRpYyBpbnQgYWxs b2NfbDRfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWlu ICpkID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgdW5zaWduZWQgbG9uZyAgcGZuID0gbWZu X3gocGFnZV90b19tZm4ocGFnZSkpOworICAgIGw0X3BnZW50cnlfdCAgKnBsNGUgPSBtYXBfZG9t YWluX3BhZ2UoX21mbihwZm4pKTsKKyAgICB1bnNpZ25lZCBpbnQgICBpOworICAgIGludCAgICAg ICAgICAgIHJjID0gMCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOworCisgICAgZm9yICgg aSA9IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzOyBpIDwgTDRfUEFHRVRBQkxFX0VOVFJJRVM7Cisg ICAgICAgICAgaSsrLCBwYXJ0aWFsID0gMCApCisgICAgeworICAgICAgICBpZiAoICFpc19ndWVz dF9sNF9zbG90KGQsIGkpIHx8CisgICAgICAgICAgICAgKHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUo cGw0ZVtpXSwgcGZuLCBkLCBwYXJ0aWFsKSkgPiAwICkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor CisgICAgICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKKyAgICAgICAgeworICAgICAgICAgICAg cGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9w dGUgPSBwYXJ0aWFsID86IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoIHJjIDwgMCAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICggcmMgIT0gLUVJTlRSICkKKyAgICAgICAgICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAi RmFpbHVyZSBpbiBhbGxvY19sNF90YWJsZTogc2xvdCAlI3hcbiIsIGkpOworICAgICAgICAgICAg aWYgKCBpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0 ZWRfcHRlcyA9IGk7CisgICAgICAgICAgICAgICAgcGFnZS0+cGFydGlhbF9wdGUgPSAwOworICAg ICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKKyAgICAgICAgICAgICAgICAgICAgcmMg PSAtRVJFU1RBUlQ7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKCBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCisg ICAgICAgICAgICAgICAgICAgICAgICBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcysrOworICAgICAg ICAgICAgICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF9wdHBnID0gTlVMTDsKKyAgICAg ICAgICAgICAgICAgICAgY3VycmVudC0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOworICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIHJj IDwgMCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsNGUpOwor ICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisKKyAgICAgICAgcGw0ZVtpXSA9IGFk anVzdF9ndWVzdF9sNGUocGw0ZVtpXSwgZCk7CisgICAgfQorCisgICAgaWYgKCByYyA+PSAwICkK KyAgICB7CisgICAgICAgIGluaXRfeGVuX2w0X3Nsb3RzKHBsNGUsIF9tZm4ocGZuKSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgZCwgSU5WQUxJRF9NRk4sIFZNX0FTU0lTVChkLCBtMnBfc3Ry aWN0KSk7CisgICAgICAgIGF0b21pY19pbmMoJmQtPmFyY2gucHZfZG9tYWluLm5yX2w0X3BhZ2Vz KTsKKyAgICAgICAgcmMgPSAwOworICAgIH0KKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsK KworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQgZnJlZV9sMV90YWJsZShzdHJ1Y3Qg cGFnZV9pbmZvICpwYWdlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25l cihwYWdlKTsKKyAgICBsMV9wZ2VudHJ5X3QgKnBsMWU7CisgICAgdW5zaWduZWQgaW50ICBpOwor CisgICAgcGwxZSA9IF9fbWFwX2RvbWFpbl9wYWdlKHBhZ2UpOworCisgICAgZm9yICggaSA9IDA7 IGkgPCBMMV9QQUdFVEFCTEVfRU5UUklFUzsgaSsrICkKKyAgICAgICAgcHV0X3BhZ2VfZnJvbV9s MWUocGwxZVtpXSwgZCk7CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKK30KKworCitz dGF0aWMgaW50IGZyZWVfbDJfdGFibGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgaW50IHByZWVt cHRpYmxlKQoreworICAgIHN0cnVjdCBkb21haW4gKmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsK KyAgICB1bnNpZ25lZCBsb25nIHBmbiA9IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICBs Ml9wZ2VudHJ5X3QgKnBsMmU7CisgICAgdW5zaWduZWQgaW50ICBpID0gcGFnZS0+bnJfdmFsaWRh dGVkX3B0ZXMgLSAxOworICAgIGludCBlcnIgPSAwOworCisgICAgcGwyZSA9IG1hcF9kb21haW5f cGFnZShfbWZuKHBmbikpOworCisgICAgQVNTRVJUKHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzKTsK KyAgICBkbyB7CisgICAgICAgIGlmICggaXNfZ3Vlc3RfbDJfc2xvdChkLCBwYWdlLT51LmludXNl LnR5cGVfaW5mbywgaSkgJiYKKyAgICAgICAgICAgICBwdXRfcGFnZV9mcm9tX2wyZShwbDJlW2ld LCBwZm4pID09IDAgJiYKKyAgICAgICAgICAgICBwcmVlbXB0aWJsZSAmJiBpICYmIGh5cGVyY2Fs bF9wcmVlbXB0X2NoZWNrKCkgKQorICAgICAgICB7CisgICAgICAgICAgIHBhZ2UtPm5yX3ZhbGlk YXRlZF9wdGVzID0gaTsKKyAgICAgICAgICAgZXJyID0gLUVSRVNUQVJUOworICAgICAgICB9Cisg ICAgfSB3aGlsZSAoICFlcnIgJiYgaS0tICk7CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDJl KTsKKworICAgIGlmICggIWVyciApCisgICAgICAgIHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICY9 IH5QR1RfcGFlX3hlbl9sMjsKKworICAgIHJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgZnJl ZV9sM190YWJsZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlKQoreworICAgIHN0cnVjdCBkb21haW4g KmQgPSBwYWdlX2dldF9vd25lcihwYWdlKTsKKyAgICB1bnNpZ25lZCBsb25nIHBmbiA9IG1mbl94 KHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKyAgICBsM19wZ2VudHJ5X3QgKnBsM2U7CisgICAgaW50IHJj ID0gMCwgcGFydGlhbCA9IHBhZ2UtPnBhcnRpYWxfcHRlOworICAgIHVuc2lnbmVkIGludCAgaSA9 IHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzIC0gIXBhcnRpYWw7CisKKyAgICBwbDNlID0gbWFwX2Rv bWFpbl9wYWdlKF9tZm4ocGZuKSk7CisKKyAgICBkbyB7CisgICAgICAgIHJjID0gcHV0X3BhZ2Vf ZnJvbV9sM2UocGwzZVtpXSwgcGZuLCBwYXJ0aWFsLCAwKTsKKyAgICAgICAgaWYgKCByYyA8IDAg KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHBhcnRpYWwgPSAwOworICAgICAgICBpZiAo IHJjID4gMCApCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgcGwzZVtpXSA9IHVuYWRq dXN0X2d1ZXN0X2wzZShwbDNlW2ldLCBkKTsKKyAgICB9IHdoaWxlICggaS0tICk7CisKKyAgICB1 bm1hcF9kb21haW5fcGFnZShwbDNlKTsKKworICAgIGlmICggcmMgPT0gLUVSRVNUQVJUICkKKyAg ICB7CisgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9wdGVzID0gaTsKKyAgICAgICAgcGFnZS0+ cGFydGlhbF9wdGUgPSBwYXJ0aWFsID86IC0xOworICAgIH0KKyAgICBlbHNlIGlmICggcmMgPT0g LUVJTlRSICYmIGkgPCBMM19QQUdFVEFCTEVfRU5UUklFUyAtIDEgKQorICAgIHsKKyAgICAgICAg cGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpICsgMTsKKyAgICAgICAgcGFnZS0+cGFydGlhbF9w dGUgPSAwOworICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICB9CisgICAgcmV0dXJuIHJjID4g MCA/IDAgOiByYzsKK30KKworc3RhdGljIGludCBmcmVlX2w0X3RhYmxlKHN0cnVjdCBwYWdlX2lu Zm8gKnBhZ2UpCit7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHBhZ2VfZ2V0X293bmVyKHBhZ2Up OworICAgIHVuc2lnbmVkIGxvbmcgcGZuID0gbWZuX3gocGFnZV90b19tZm4ocGFnZSkpOworICAg IGw0X3BnZW50cnlfdCAqcGw0ZSA9IG1hcF9kb21haW5fcGFnZShfbWZuKHBmbikpOworICAgIGlu dCByYyA9IDAsIHBhcnRpYWwgPSBwYWdlLT5wYXJ0aWFsX3B0ZTsKKyAgICB1bnNpZ25lZCBpbnQg IGkgPSBwYWdlLT5ucl92YWxpZGF0ZWRfcHRlcyAtICFwYXJ0aWFsOworCisgICAgZG8geworICAg ICAgICBpZiAoIGlzX2d1ZXN0X2w0X3Nsb3QoZCwgaSkgKQorICAgICAgICAgICAgcmMgPSBwdXRf cGFnZV9mcm9tX2w0ZShwbDRlW2ldLCBwZm4sIHBhcnRpYWwsIDApOworICAgICAgICBpZiAoIHJj IDwgMCApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcGFydGlhbCA9IDA7CisgICAgfSB3 aGlsZSAoIGktLSApOworCisgICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAg ICAgcGFnZS0+bnJfdmFsaWRhdGVkX3B0ZXMgPSBpOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0 ZSA9IHBhcnRpYWwgPzogLTE7CisgICAgfQorICAgIGVsc2UgaWYgKCByYyA9PSAtRUlOVFIgJiYg aSA8IEw0X1BBR0VUQUJMRV9FTlRSSUVTIC0gMSApCisgICAgeworICAgICAgICBwYWdlLT5ucl92 YWxpZGF0ZWRfcHRlcyA9IGkgKyAxOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9IDA7Cisg ICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgIH0KKworICAgIHVubWFwX2RvbWFpbl9wYWdlKHBs NGUpOworCisgICAgaWYgKCByYyA+PSAwICkKKyAgICB7CisgICAgICAgIGF0b21pY19kZWMoJmQt PmFyY2gucHZfZG9tYWluLm5yX2w0X3BhZ2VzKTsKKyAgICAgICAgcmMgPSAwOworICAgIH0KKwor ICAgIHJldHVybiByYzsKK30KKworCit2b2lkIHB2X2RlY19saW5lYXJfcHQoc3RydWN0IHBhZ2Vf aW5mbyAqcHRwZywgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwKKyAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIHR5cGUpCit7CisgICAgaWYgKCBwdHBnICYmIFBHVF90eXBlX2VxdWFs KHR5cGUsIHB0cGctPnUuaW51c2UudHlwZV9pbmZvKSApCisgICAgeworICAgICAgICBBU1NFUlQo aXNfcHZfZG9tYWluKHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSk7CisgICAgICAgIEFTU0VSVChpc19w dl9kb21haW4ocGFnZV9nZXRfb3duZXIocHRwZykpKTsKKworICAgICAgICBkZWNfbGluZWFyX3Vz ZXMocGFnZSk7CisgICAgICAgIGRlY19saW5lYXJfZW50cmllcyhwdHBnKTsKKyAgICB9Cit9CisK Ky8qCisgKiBTcGVjaWFsIHZlcnNpb24gb2YgZ2V0X3BhZ2UoKSB0byBiZSB1c2VkIGV4Y2x1c2l2 ZWx5IHdoZW4KKyAqIC0gYSBwYWdlIGlzIGtub3duIHRvIGFscmVhZHkgaGF2ZSBhIG5vbi16ZXJv IHJlZmVyZW5jZSBjb3VudAorICogLSB0aGUgcGFnZSBkb2VzIG5vdCBuZWVkIGl0cyBvd25lciB0 byBiZSBjaGVja2VkCisgKiAtIGl0IHdpbGwgbm90IGJlIGNhbGxlZCBtb3JlIHRoYW4gb25jZSB3 aXRob3V0IGRyb3BwaW5nIHRoZSB0aHVzCisgKiAgIGFjcXVpcmVkIHJlZmVyZW5jZSBhZ2Fpbi4K KyAqIER1ZSB0byBnZXRfcGFnZSgpIHJlc2VydmluZyBvbmUgcmVmZXJlbmNlLCB0aGlzIGNhbGwg Y2Fubm90IGZhaWwuCisgKi8KK3N0YXRpYyB2b2lkIGdldF9wYWdlX2xpZ2h0KHN0cnVjdCBwYWdl X2luZm8gKnBhZ2UpCit7CisgICAgdW5zaWduZWQgbG9uZyB4LCBueCwgeSA9IHBhZ2UtPmNvdW50 X2luZm87CisKKyAgICBkbyB7CisgICAgICAgIHggID0geTsKKyAgICAgICAgbnggPSB4ICsgMTsK KyAgICAgICAgQlVHX09OKCEoeCAmIFBHQ19jb3VudF9tYXNrKSk7IC8qIE5vdCBhbGxvY2F0ZWQ/ ICovCisgICAgICAgIEJVR19PTighKG54ICYgUEdDX2NvdW50X21hc2spKTsgLyogT3ZlcmZsb3c/ ICovCisgICAgICAgIHkgPSBjbXB4Y2hnKCZwYWdlLT5jb3VudF9pbmZvLCB4LCBueCk7CisgICAg fQorICAgIHdoaWxlICggdW5saWtlbHkoeSAhPSB4KSApOworfQorCitpbnQgcHZfcHV0X2ZpbmFs X3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZWVtcHRpYmxlLCBzdHJ1Y3QgcGFnZV9p bmZvICpwdHBnKQoreworICAgIGludCByYyA9IHB2X2ZyZWVfcGFnZV90eXBlKHBhZ2UsIHR5cGUs IHByZWVtcHRpYmxlKTsKKworICAgIC8qIE5vIG5lZWQgZm9yIGF0b21pYyB1cGRhdGUgb2YgdHlw ZV9pbmZvIGhlcmU6IG5vb25lIGVsc2UgdXBkYXRlcyBpdC4gKi8KKyAgICBpZiAoIHJjID09IDAg KQorICAgIHsKKyAgICAgICAgcHZfZGVjX2xpbmVhcl9wdChwdHBnLCBwYWdlLCB0eXBlKTsKKyAg ICAgICAgQVNTRVJUKCFwYWdlLT5saW5lYXJfcHRfY291bnQgfHwgcGFnZV9nZXRfb3duZXIocGFn ZSktPmlzX2R5aW5nKTsKKyAgICAgICAgc2V0X3RsYmZsdXNoX3RpbWVzdGFtcChwYWdlKTsKKyAg ICAgICAgc21wX3dtYigpOworICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mby0tOworICAg IH0KKyAgICBlbHNlIGlmICggcmMgPT0gLUVJTlRSICkKKyAgICB7CisgICAgICAgIEFTU0VSVCgo cGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJgorICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFz a3xQR1RfdmFsaWRhdGVkfFBHVF9wYXJ0aWFsKSkgPT0gMSk7CisgICAgICAgIHNtcF93bWIoKTsK KyAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3ZhbGlkYXRlZDsKKyAgICB9 CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgQlVHX09OKHJjICE9IC1FUkVTVEFSVCk7CisgICAg ICAgIHNtcF93bWIoKTsKKyAgICAgICAgZ2V0X3BhZ2VfbGlnaHQocGFnZSk7CisgICAgICAgIHBh Z2UtPnUuaW51c2UudHlwZV9pbmZvIHw9IFBHVF9wYXJ0aWFsOworICAgIH0KKworICAgIHJldHVy biByYzsKK30KKworc3RhdGljIGludCBhbGxvY19zZWdkZXNjX3BhZ2Uoc3RydWN0IHBhZ2VfaW5m byAqcGFnZSkKK3sKKyAgICBjb25zdCBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293 bmVyKHBhZ2UpOworICAgIHN0cnVjdCBkZXNjX3N0cnVjdCAqZGVzY3MgPSBfX21hcF9kb21haW5f cGFnZShwYWdlKTsKKyAgICB1bnNpZ25lZCBpOworCisgICAgZm9yICggaSA9IDA7IGkgPCA1MTI7 IGkrKyApCisgICAgICAgIGlmICggdW5saWtlbHkoIWNoZWNrX2Rlc2NyaXB0b3Iob3duZXIsICZk ZXNjc1tpXSkpICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgdW5tYXBfZG9tYWluX3BhZ2Uo ZGVzY3MpOworCisgICAgcmV0dXJuIGkgPT0gNTEyID8gMCA6IC1FSU5WQUw7Cit9CisKK2ludCBw dl9hbGxvY19wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0 eXBlLAorICAgICAgICAgICAgICAgICAgICAgICBib29sIHByZWVtcHRpYmxlKQoreworICAgIHN0 cnVjdCBkb21haW4gKm93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSk7CisgICAgaW50IHJjOwor CisgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBjb3VudCBiZWNv bWVzIG5vbi16ZXJvLiAqLworICAgIGlmICggbGlrZWx5KG93bmVyICE9IE5VTEwpICkKKyAgICAg ICAgcGFnaW5nX21hcmtfZGlydHkob3duZXIsIHBhZ2VfdG9fbWZuKHBhZ2UpKTsKKworICAgIHN3 aXRjaCAoIHR5cGUgJiBQR1RfdHlwZV9tYXNrICkKKyAgICB7CisgICAgY2FzZSBQR1RfbDFfcGFn ZV90YWJsZToKKyAgICAgICAgcmMgPSBhbGxvY19sMV90YWJsZShwYWdlKTsKKyAgICAgICAgYnJl YWs7CisgICAgY2FzZSBQR1RfbDJfcGFnZV90YWJsZToKKyAgICAgICAgcmMgPSBhbGxvY19sMl90 YWJsZShwYWdlLCB0eXBlLCBwcmVlbXB0aWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug UEdUX2wzX3BhZ2VfdGFibGU6CisgICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7CisgICAgICAg IHJjID0gYWxsb2NfbDNfdGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdU X2w0X3BhZ2VfdGFibGU6CisgICAgICAgIEFTU0VSVChwcmVlbXB0aWJsZSk7CisgICAgICAgIHJj ID0gYWxsb2NfbDRfdGFibGUocGFnZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX3Nl Z19kZXNjX3BhZ2U6CisgICAgICAgIHJjID0gYWxsb2Nfc2VnZGVzY19wYWdlKHBhZ2UpOworICAg ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBwcmludGsoIkJhZCB0eXBlIGluICVz ICVseCB0PSUiIFBSdHlwZV9pbmZvICIgYz0lbHhcbiIsIF9fZnVuY19fLAorICAgICAgICAgICAg ICAgdHlwZSwgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8sCisgICAgICAgICAgICAgICBwYWdlLT5j b3VudF9pbmZvKTsKKyAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICBCVUcoKTsKKyAgICB9 CisKKyAgICAvKiBObyBuZWVkIGZvciBhdG9taWMgdXBkYXRlIG9mIHR5cGVfaW5mbyBoZXJlOiBu b29uZSBlbHNlIHVwZGF0ZXMgaXQuICovCisgICAgc21wX3dtYigpOworICAgIHN3aXRjaCAoIHJj ICkKKyAgICB7CisgICAgY2FzZSAwOgorICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyB8 PSBQR1RfdmFsaWRhdGVkOworICAgICAgICBicmVhazsKKyAgICBjYXNlIC1FSU5UUjoKKyAgICAg ICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmCisgICAgICAgICAgICAgICAgKFBH VF9jb3VudF9tYXNrfFBHVF92YWxpZGF0ZWR8UEdUX3BhcnRpYWwpKSA9PSAxKTsKKyAgICAgICAg cGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJj0gflBHVF9jb3VudF9tYXNrOworICAgICAgICBicmVh azsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlQocmMgPCAwKTsKKyAgICAgICAgZ2Rwcmlu dGsoWEVOTE9HX1dBUk5JTkcsICJFcnJvciB3aGlsZSB2YWxpZGF0aW5nIG1mbiAlIiBQUklfbWZu CisgICAgICAgICAgICAgICAgICIgKHBmbiAlIiBQUklfcGZuICIpIGZvciB0eXBlICUiIFBSdHlw ZV9pbmZvCisgICAgICAgICAgICAgICAgICI6IGNhZj0lMDhseCB0YWY9JSIgUFJ0eXBlX2luZm8g IlxuIiwKKyAgICAgICAgICAgICAgICAgbWZuX3gocGFnZV90b19tZm4ocGFnZSkpLAorICAgICAg ICAgICAgICAgICBnZXRfZ3Bmbl9mcm9tX21mbihtZm5feChwYWdlX3RvX21mbihwYWdlKSkpLAor ICAgICAgICAgICAgICAgICB0eXBlLCBwYWdlLT5jb3VudF9pbmZvLCBwYWdlLT51LmludXNlLnR5 cGVfaW5mbyk7CisgICAgICAgIGlmICggcGFnZSAhPSBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90 YWJsZSApCisgICAgICAgICAgICBwYWdlLT51LmludXNlLnR5cGVfaW5mbyA9IDA7CisgICAgICAg IGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVf aW5mbyAmCisgICAgICAgICAgICAgICAgICAgIChQR1RfY291bnRfbWFzayB8IFBHVF92YWxpZGF0 ZWQpKSA9PSAxKTsKKyAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAgICAgICAgIGdldF9wYWdlX2xp Z2h0KHBhZ2UpOworICAgICAgICAgICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gfD0gUEdUX3Bh cnRpYWw7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJj OworfQorCisKK2ludCBwdl9mcmVlX3BhZ2VfdHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1 bnNpZ25lZCBsb25nIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgYm9vbCBwcmVlbXB0aWJs ZSkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpOwor ICAgIHVuc2lnbmVkIGxvbmcgZ21mbjsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIGxpa2VseShv d25lciAhPSBOVUxMKSAmJiB1bmxpa2VseShwYWdpbmdfbW9kZV9lbmFibGVkKG93bmVyKSkgKQor ICAgIHsKKyAgICAgICAgLyogQSBwYWdlIHRhYmxlIGlzIGRpcnRpZWQgd2hlbiBpdHMgdHlwZSBj b3VudCBiZWNvbWVzIHplcm8uICovCisgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KG93bmVyLCBw YWdlX3RvX21mbihwYWdlKSk7CisKKyAgICAgICAgQVNTRVJUKCFzaGFkb3dfbW9kZV9yZWZjb3Vu dHMob3duZXIpKTsKKworICAgICAgICBnbWZuID0gbWZuX3RvX2dtZm4ob3duZXIsIG1mbl94KHBh Z2VfdG9fbWZuKHBhZ2UpKSk7CisgICAgICAgIEFTU0VSVChWQUxJRF9NMlAoZ21mbikpOworICAg ICAgICAvKiBQYWdlIHNoYXJpbmcgbm90IHN1cHBvcnRlZCBmb3Igc2hhZG93ZWQgZG9tYWlucyAq LworICAgICAgICBpZighU0hBUkVEX00yUChnbWZuKSkKKyAgICAgICAgICAgIHNoYWRvd19yZW1v dmVfYWxsX3NoYWRvd3Mob3duZXIsIF9tZm4oZ21mbikpOworICAgIH0KKworICAgIGlmICggISh0 eXBlICYgUEdUX3BhcnRpYWwpICkKKyAgICB7CisgICAgICAgIHBhZ2UtPm5yX3ZhbGlkYXRlZF9w dGVzID0gMVUgPDwgUEFHRVRBQkxFX09SREVSOworICAgICAgICBwYWdlLT5wYXJ0aWFsX3B0ZSA9 IDA7CisgICAgfQorCisgICAgc3dpdGNoICggdHlwZSAmIFBHVF90eXBlX21hc2sgKQorICAgIHsK KyAgICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgorICAgICAgICBmcmVlX2wxX3RhYmxlKHBhZ2Up OworICAgICAgICByYyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2wyX3BhZ2Vf dGFibGU6CisgICAgICAgIHJjID0gZnJlZV9sMl90YWJsZShwYWdlLCBwcmVlbXB0aWJsZSk7Cisg ICAgICAgIGJyZWFrOworICAgIGNhc2UgUEdUX2wzX3BhZ2VfdGFibGU6CisgICAgICAgIEFTU0VS VChwcmVlbXB0aWJsZSk7CisgICAgICAgIHJjID0gZnJlZV9sM190YWJsZShwYWdlKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKKyAgICAgICAgQVNTRVJUKHBy ZWVtcHRpYmxlKTsKKyAgICAgICAgcmMgPSBmcmVlX2w0X3RhYmxlKHBhZ2UpOworICAgICAgICBi cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgInR5 cGUgJSIgUFJ0eXBlX2luZm8gIiBtZm4gJSIgUFJJX21mbiAiXG4iLAorICAgICAgICAgICAgICAg ICB0eXBlLCBtZm5feChwYWdlX3RvX21mbihwYWdlKSkpOworICAgICAgICByYyA9IC1FSU5WQUw7 CisgICAgICAgIEJVRygpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworaW50IG5ld19n dWVzdF9jcjMobWZuX3QgbWZuKQoreworICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK KyAgICBzdHJ1Y3QgZG9tYWluICpkID0gY3Vyci0+ZG9tYWluOworICAgIGludCByYzsKKyAgICBt Zm5fdCBvbGRfYmFzZV9tZm47CisKKyAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSApCisg ICAgeworICAgICAgICBtZm5fdCBndF9tZm4gPSBwYWdldGFibGVfZ2V0X21mbihjdXJyLT5hcmNo Lmd1ZXN0X3RhYmxlKTsKKyAgICAgICAgbDRfcGdlbnRyeV90ICpwbDRlID0gbWFwX2RvbWFpbl9w YWdlKGd0X21mbik7CisKKyAgICAgICAgcmMgPSBtb2RfbDRfZW50cnkocGw0ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgbDRlX2Zyb21fbWZuKG1mbiwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfUlcgfAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NF RCkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBtZm5feChndF9tZm4pLCAwLCBjdXJyKTsK KyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7CisgICAgICAgIHN3aXRjaCAoIHJjICkK KyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg Y2FzZSAtRUlOVFI6CisgICAgICAgIGNhc2UgLUVSRVNUQVJUOgorICAgICAgICAgICAgcmV0dXJu IC1FUkVTVEFSVDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHdoaWxlIGluc3RhbGxpbmcg bmV3IGNvbXBhdCBiYXNlcHRyICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAgICAgICAgICAg IG1mbl94KG1mbikpOworICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICB9CisKKyAgICAg ICAgcHZfZGVzdHJveV9sZHQoY3Vycik7IC8qIFVuY29uZGl0aW9uYWwgVExCIGZsdXNoIGxhdGVy LiAqLworICAgICAgICB3cml0ZV9wdGJhc2UoY3Vycik7CisKKyAgICAgICAgcmV0dXJuIDA7Cisg ICAgfQorCisgICAgcmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKGN1cnIpOworICAgIGlmICggdW5s aWtlbHkocmMpICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgb2xkX2Jhc2VfbWZuID0gcGFn ZXRhYmxlX2dldF9tZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJsZSk7CisgICAgLyoKKyAgICAgKiBU aGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRl ciB0aGUKKyAgICAgKiBwcmV2aW91cyBhdHRlbXB0IGdvdCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1v bGQtTUZOIHBoYXNlLgorICAgICAqLworICAgIGlmICggbWZuX2VxKG9sZF9iYXNlX21mbiwgbWZu KSApCisgICAgeworICAgICAgICB3cml0ZV9wdGJhc2UoY3Vycik7CisgICAgICAgIHJldHVybiAw OworICAgIH0KKworICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4obWZuLCBQR1Rf cm9vdF9wYWdlX3RhYmxlLCBkLCAwLCAxKTsKKyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAg IGNhc2UgMDoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAtRUlOVFI6CisgICAgY2FzZSAtRVJF U1RBUlQ6CisgICAgICAgIHJldHVybiAtRVJFU1RBUlQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICJFcnJvciB3aGlsZSBp bnN0YWxsaW5nIG5ldyBiYXNlcHRyICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAgICAgICAg bWZuX3gobWZuKSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBwdl9kZXN0cm95 X2xkdChjdXJyKTsgLyogVW5jb25kaXRpb25hbCBUTEIgZmx1c2ggbGF0ZXIuICovCisKKyAgICBp ZiAoICFWTV9BU1NJU1QoZCwgbTJwX3N0cmljdCkgJiYgIXBhZ2luZ19tb2RlX3JlZmNvdW50cyhk KSApCisgICAgICAgIGZpbGxfcm9fbXB0KG1mbik7CisgICAgY3Vyci0+YXJjaC5ndWVzdF90YWJs ZSA9IHBhZ2V0YWJsZV9mcm9tX21mbihtZm4pOworICAgIHVwZGF0ZV9jcjMoY3Vycik7CisKKyAg ICB3cml0ZV9wdGJhc2UoY3Vycik7CisKKyAgICBpZiAoIGxpa2VseShtZm5feChvbGRfYmFzZV9t Zm4pICE9IDApICkKKyAgICB7CisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5f dG9fcGFnZShvbGRfYmFzZV9tZm4pOworCisgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291 bnRzKGQpICkKKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICBlbHNlCisgICAg ICAgICAgICBzd2l0Y2ggKCByYyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2Up ICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIGNhc2UgLUVJTlRSOgorICAgICAgICAgICAg ICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisg ICAgICAgICAgICBjYXNlIC1FUkVTVEFSVDoKKyAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9s ZF9ndWVzdF9wdHBnID0gTlVMTDsKKyAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVz dF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgICAgIEJVR19PTihyYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7 CisgICAgICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgc3Ry dWN0IGRvbWFpbiAqZ2V0X3BnX293bmVyKGRvbWlkX3QgZG9taWQpCit7CisgICAgc3RydWN0IGRv bWFpbiAqcGdfb3duZXIgPSBOVUxMLCAqY3VyciA9IGN1cnJlbnQtPmRvbWFpbjsKKworICAgIGlm ICggbGlrZWx5KGRvbWlkID09IERPTUlEX1NFTEYpICkKKyAgICB7CisgICAgICAgIHBnX293bmVy ID0gcmN1X2xvY2tfY3VycmVudF9kb21haW4oKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQor CisgICAgaWYgKCB1bmxpa2VseShkb21pZCA9PSBjdXJyLT5kb21haW5faWQpICkKKyAgICB7Cisg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQ2Fubm90IHNwZWNpZnkgaXRzZWxmIGFz IGZvcmVpZ24gZG9tYWluXG4iKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgc3dp dGNoICggZG9taWQgKQorICAgIHsKKyAgICBjYXNlIERPTUlEX0lPOgorICAgICAgICBwZ19vd25l ciA9IHJjdV9sb2NrX2RvbWFpbihkb21faW8pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIERP TUlEX1hFTjoKKyAgICAgICAgcGdfb3duZXIgPSByY3VfbG9ja19kb21haW4oZG9tX3hlbik7Cisg ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICggKHBnX293bmVyID0gcmN1 X2xvY2tfZG9tYWluX2J5X2lkKGRvbWlkKSkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiVW5rbm93biBkb21haW4gZCVkXG4iLCBkb21p ZCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9 CisKKyBvdXQ6CisgICAgcmV0dXJuIHBnX293bmVyOworfQorCitzdGF0aWMgdm9pZCBwdXRfcGdf b3duZXIoc3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCit7CisgICAgcmN1X3VubG9ja19kb21haW4o cGdfb3duZXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCB2Y3B1bWFza190b19wY3B1bWFzaygK KyAgICBzdHJ1Y3QgZG9tYWluICpkLCBYRU5fR1VFU1RfSEFORExFX1BBUkFNKGNvbnN0X3ZvaWQp IGJtYXAsIGNwdW1hc2tfdCAqcG1hc2spCit7CisgICAgdW5zaWduZWQgaW50IHZjcHVfaWQsIHZj cHVfYmlhcywgb2ZmczsKKyAgICB1bnNpZ25lZCBsb25nIHZtYXNrOworICAgIHN0cnVjdCB2Y3B1 ICp2OworICAgIGJvb2wgaXNfbmF0aXZlID0gIWlzX3B2XzMyYml0X2RvbWFpbihkKTsKKworICAg IGNwdW1hc2tfY2xlYXIocG1hc2spOworICAgIGZvciAoIHZtYXNrID0gMCwgb2ZmcyA9IDA7IDsg KytvZmZzICkKKyAgICB7CisgICAgICAgIHZjcHVfYmlhcyA9IG9mZnMgKiAoaXNfbmF0aXZlID8g QklUU19QRVJfTE9ORyA6IDMyKTsKKyAgICAgICAgaWYgKCB2Y3B1X2JpYXMgPj0gZC0+bWF4X3Zj cHVzICkKKyAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgIGlmICggdW5saWtlbHkoaXNf bmF0aXZlID8KKyAgICAgICAgICAgICAgICAgICAgICBjb3B5X2Zyb21fZ3Vlc3Rfb2Zmc2V0KCZ2 bWFzaywgYm1hcCwgb2ZmcywgMSkgOgorICAgICAgICAgICAgICAgICAgICAgIGNvcHlfZnJvbV9n dWVzdF9vZmZzZXQoKHVuc2lnbmVkIGludCAqKSZ2bWFzaywgYm1hcCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnMsIDEpKSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIGNwdW1hc2tfY2xlYXIocG1hc2spOworICAgICAgICAgICAgcmV0dXJuIC1FRkFV TFQ7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoIHZtYXNrICkKKyAgICAgICAgeworICAg ICAgICAgICAgdmNwdV9pZCA9IGZpbmRfZmlyc3Rfc2V0X2JpdCh2bWFzayk7CisgICAgICAgICAg ICB2bWFzayAmPSB+KDFVTCA8PCB2Y3B1X2lkKTsKKyAgICAgICAgICAgIHZjcHVfaWQgKz0gdmNw dV9iaWFzOworICAgICAgICAgICAgaWYgKCAodmNwdV9pZCA+PSBkLT5tYXhfdmNwdXMpICkKKyAg ICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGlmICggKCh2ID0gZC0+dmNwdVt2 Y3B1X2lkXSkgIT0gTlVMTCkgJiYgdmNwdV9jcHVfZGlydHkodikgKQorICAgICAgICAgICAgICAg IF9fY3B1bWFza19zZXRfY3B1KHYtPmRpcnR5X2NwdSwgcG1hc2spOworICAgICAgICB9CisgICAg fQorfQorCitsb25nIGRvX21tdWV4dF9vcCgKKyAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKG1t dWV4dF9vcF90KSB1b3BzLAorICAgIHVuc2lnbmVkIGludCBjb3VudCwKKyAgICBYRU5fR1VFU1Rf SEFORExFX1BBUkFNKHVpbnQpIHBkb25lLAorICAgIHVuc2lnbmVkIGludCBmb3JlaWduZG9tKQor eworICAgIHN0cnVjdCBtbXVleHRfb3Agb3A7CisgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAg IHVuc2lnbmVkIGludCBpLCBkb25lID0gMDsKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJl bnQ7CisgICAgc3RydWN0IGRvbWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgc3RydWN0 IGRvbWFpbiAqcGdfb3duZXI7CisgICAgaW50IHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJy KTsKKworICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICB7CisgICAgICAgIGlmICggbGlrZWx5 KHJjID09IC1FUkVTVEFSVCkgKQorICAgICAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2Nv bnRpbnVhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVleHRfb3As ICJoaWhpIiwgdW9wcywgY291bnQsIHBkb25lLAorICAgICAgICAgICAgICAgICAgICAgZm9yZWln bmRvbSk7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KGNv dW50ID09IE1NVV9VUERBVEVfUFJFRU1QVEVEKSAmJgorICAgICAgICAgbGlrZWx5KGd1ZXN0X2hh bmRsZV9pc19udWxsKHVvcHMpKSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBTZWUg dGhlIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHJlbGF0ZWQKKyAgICAgICAgICogaHlwZXJj YWxsX2NyZWF0ZV9jb250aW51YXRpb24oKSBiZWxvdy4KKyAgICAgICAgICovCisgICAgICAgIHJl dHVybiAoaW50KWZvcmVpZ25kb207CisgICAgfQorCisgICAgaWYgKCB1bmxpa2VseShjb3VudCAm IE1NVV9VUERBVEVfUFJFRU1QVEVEKSApCisgICAgeworICAgICAgICBjb3VudCAmPSB+TU1VX1VQ REFURV9QUkVFTVBURUQ7CisgICAgICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19u dWxsKHBkb25lKSkgKQorICAgICAgICAgICAgKHZvaWQpY29weV9mcm9tX2d1ZXN0KCZkb25lLCBw ZG9uZSwgMSk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgcGVyZmNfaW5jcihjYWxsc190b19t bXVleHRfb3ApOworCisgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX29rYXkodW9wcywg Y291bnQpKSApCisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgaWYgKCAocGdfb3duZXIg PSBnZXRfcGdfb3duZXIoZm9yZWlnbmRvbSkpID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVT UkNIOworCisgICAgaWYgKCAhaXNfcHZfZG9tYWluKHBnX293bmVyKSApCisgICAgeworICAgICAg ICBwdXRfcGdfb3duZXIocGdfb3duZXIpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9 CisKKyAgICByYyA9IHhzbV9tbXVleHRfb3AoWFNNX1RBUkdFVCwgY3VycmQsIHBnX293bmVyKTsK KyAgICBpZiAoIHJjICkKKyAgICB7CisgICAgICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Cisg ICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBp KysgKQorICAgIHsKKyAgICAgICAgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSB8fCAo aSAmJiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg ICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX2d1ZXN0KCZvcCwgdW9wcywgMSkgIT0gMCkgKQor ICAgICAgICB7CisgICAgICAgICAgICByYyA9IC1FRkFVTFQ7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIGlmICggaXNfaHZtX2RvbWFpbihjdXJyZCkgKQorICAgICAg ICB7CisgICAgICAgICAgICBzd2l0Y2ggKCBvcC5jbWQgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgY2FzZSBNTVVFWFRfUElOX0wxX1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRf UElOX0wyX1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wzX1RBQkxFOgorICAg ICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0w0X1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVF WFRfVU5QSU5fVEFCTEU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh dWx0OgorICAgICAgICAgICAgICAgIHJjID0gLUVPUE5PVFNVUFA7CisgICAgICAgICAgICAgICAg Z290byBkb25lOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmMgPSAwOwor CisgICAgICAgIHN3aXRjaCAoIG9wLmNtZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVj dCBwYWdlX2luZm8gKnBhZ2U7CisgICAgICAgICAgICBwMm1fdHlwZV90IHAybXQ7CisKKyAgICAg ICAgY2FzZSBNTVVFWFRfUElOX0wxX1RBQkxFOgorICAgICAgICAgICAgdHlwZSA9IFBHVF9sMV9w YWdlX3RhYmxlOworICAgICAgICAgICAgZ290byBwaW5fcGFnZTsKKworICAgICAgICBjYXNlIE1N VUVYVF9QSU5fTDJfVEFCTEU6CisgICAgICAgICAgICB0eXBlID0gUEdUX2wyX3BhZ2VfdGFibGU7 CisgICAgICAgICAgICBnb3RvIHBpbl9wYWdlOworCisgICAgICAgIGNhc2UgTU1VRVhUX1BJTl9M M19UQUJMRToKKyAgICAgICAgICAgIHR5cGUgPSBQR1RfbDNfcGFnZV90YWJsZTsKKyAgICAgICAg ICAgIGdvdG8gcGluX3BhZ2U7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfUElOX0w0X1RBQkxFOgor ICAgICAgICAgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4ocGdfb3duZXIpICkKKyAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIHR5cGUgPSBQR1RfbDRfcGFnZV90YWJsZTsKKwor ICAgICAgICBwaW5fcGFnZToKKyAgICAgICAgICAgIC8qIElnbm9yZSBwaW5uaW5nIG9mIGludmFs aWQgcGFnaW5nIGxldmVscy4gKi8KKyAgICAgICAgICAgIGlmICggKG9wLmNtZCAtIE1NVUVYVF9Q SU5fTDFfVEFCTEUpID4gKENPTkZJR19QQUdJTkdfTEVWRUxTIC0gMSkgKQorICAgICAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwZ19v d25lcikgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBwYWdlID0gZ2V0 X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOwor ICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgcmMgPSBnZXRfcGFnZV90eXBlX3ByZWVtcHRpYmxlKHBhZ2Us IHR5cGUpOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKKyAgICAgICAgICAgICAgICAgICAg cmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoIHJjICE9IC1FUkVTVEFS VCApCisgICAgICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgJWQgd2hpbGUgcGlubmluZyBtZm4gJSIgUFJJ X21mbiAiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgbWZuX3gocGFnZV90 b19tZm4ocGFnZSkpKTsKKyAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT0gY3Vyci0+YXJjaC5v bGRfZ3Vlc3RfdGFibGUgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSB4 c21fbWVtb3J5X3Bpbl9wYWdlKFhTTV9IT09LLCBjdXJyZCwgcGdfb3duZXIsIHBhZ2UpOworICAg ICAgICAgICAgaWYgKCAhcmMgJiYgdW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChfUEdUX3Bpbm5l ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBh Z2UtPnUuaW51c2UudHlwZV9pbmZvKSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4g JSIgUFJJX21mbiAiIGFscmVhZHkgcGlubmVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAg IG1mbl94KHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFM OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCisgICAg ICAgICAgICAgICAgZ290byBwaW5fZHJvcDsKKworICAgICAgICAgICAgLyogQSBwYWdlIGlzIGRp cnRpZWQgd2hlbiBpdHMgcGluIHN0YXR1cyBpcyBzZXQuICovCisgICAgICAgICAgICBwYWdpbmdf bWFya19kaXJ0eShwZ19vd25lciwgcGFnZV90b19tZm4ocGFnZSkpOworCisgICAgICAgICAgICAv KiBXZSBjYW4gcmFjZSBkb21haW4gZGVzdHJ1Y3Rpb24gKGRvbWFpbl9yZWxpbnF1aXNoX3Jlc291 cmNlcykuICovCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBnX293bmVyICE9IGN1cnJkKSAp CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYm9vbCBkcm9wX3JlZjsKKworICAgICAg ICAgICAgICAgIHNwaW5fbG9jaygmcGdfb3duZXItPnBhZ2VfYWxsb2NfbG9jayk7CisgICAgICAg ICAgICAgICAgZHJvcF9yZWYgPSAocGdfb3duZXItPmlzX2R5aW5nICYmCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdGVzdF9hbmRfY2xlYXJfYml0KF9QR1RfcGlubmVkLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGFnZS0+dS5pbnVzZS50eXBl X2luZm8pKTsKKyAgICAgICAgICAgICAgICBzcGluX3VubG9jaygmcGdfb3duZXItPnBhZ2VfYWxs b2NfbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCBkcm9wX3JlZiApCisgICAgICAgICAgICAg ICAgeworICAgICAgICBwaW5fZHJvcDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKCB0eXBlID09 IFBHVF9sMV9wYWdlX3RhYmxlICkKKyAgICAgICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlX2Fu ZF90eXBlKHBhZ2UpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3B0cGcg PSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFi bGUgPSBwYWdlOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfVU5Q SU5fVEFCTEU6CisgICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwZ19vd25l cikgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBwYWdlID0gZ2V0X3Bh Z2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOworICAg ICAgICAgICAgaWYgKCB1bmxpa2VseSghcGFnZSkgKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAg ICJtZm4gJSIgUFJJX21mbiAiIGJhZCwgb3IgYmFkIG93bmVyIGQlZFxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICBvcC5hcmcxLm1mbiwgcGdfb3duZXItPmRvbWFpbl9pZCk7CisgICAgICAg ICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg ICAgfQorCisgICAgICAgICAgICBpZiAoICF0ZXN0X2FuZF9jbGVhcl9iaXQoX1BHVF9waW5uZWQs ICZwYWdlLT51LmludXNlLnR5cGVfaW5mbykgKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJX21mbiAiIG5vdCBwaW5u ZWRcbiIsIG9wLmFyZzEubWZuKTsKKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAo IHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGFnZSkgKQorICAgICAgICAgICAg eworICAgICAgICAgICAgY2FzZSAtRUlOVFI6CisgICAgICAgICAgICBjYXNlIC1FUkVTVEFSVDoK KyAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF9wdHBnID0gTlVMTDsKKyAgICAg ICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAg ICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs dDoKKyAgICAgICAgICAgICAgICBCVUdfT04ocmMpOworICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAgICAgICAgICAg IC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXRzIHBpbiBzdGF0dXMgaXMgY2xlYXJlZC4gKi8K KyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KHBnX293bmVyLCBwYWdlX3RvX21mbihwYWdl KSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9ORVdfQkFTRVBU UjoKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKKyAgICAg ICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShw YWdpbmdfbW9kZV90cmFuc2xhdGUoY3VycmQpKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRUlO VkFMOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJjID0gbmV3X2d1ZXN0X2Ny MyhfbWZuKG9wLmFyZzEubWZuKSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNl IE1NVUVYVF9ORVdfVVNFUl9CQVNFUFRSOiB7CisgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9s ZF9tZm47CisKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkK KyAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxp a2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUoY3VycmQpKSApCisgICAgICAgICAgICAgICAgcmMg PSAtRUlOVkFMOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAg ICAgIGJyZWFrOworCisgICAgICAgICAgICBvbGRfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4oY3Vy ci0+YXJjaC5ndWVzdF90YWJsZV91c2VyKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAg KiBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBh ZnRlciB0aGUKKyAgICAgICAgICAgICAqIHByZXZpb3VzIGF0dGVtcHQgZ290IHByZWVtcHRlZCBp biB0aGUgcHV0LW9sZC1NRk4gcGhhc2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlm ICggb2xkX21mbiA9PSBvcC5hcmcxLm1mbiApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg ICAgICAgICAgIGlmICggb3AuYXJnMS5tZm4gIT0gMCApCisgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgcmMgPSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKKyAgICAgICAgICAgICAg ICAgICAgX21mbihvcC5hcmcxLm1mbiksIFBHVF9yb290X3BhZ2VfdGFibGUsIGN1cnJkLCAwLCAx KTsKKworICAgICAgICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgICAg ICB7CisgICAgICAgICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICggcmMgIT0gLUVSRVNUQVJUICkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhF TkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yICVk IGluc3RhbGxpbmcgbmV3IG1mbiAlIiBQUklfbWZuICJcbiIsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByYywgb3AuYXJnMS5tZm4pOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoIFZNX0FTU0lTVChj dXJyZCwgbTJwX3N0cmljdCkgKQorICAgICAgICAgICAgICAgICAgICB6YXBfcm9fbXB0KF9tZm4o b3AuYXJnMS5tZm4pKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY3Vyci0+YXJjaC5n dWVzdF90YWJsZV91c2VyID0gcGFnZXRhYmxlX2Zyb21fcGZuKG9wLmFyZzEubWZuKTsKKworICAg ICAgICAgICAgaWYgKCBvbGRfbWZuICE9IDAgKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShfbWZuKG9sZF9tZm4pKTsKKworICAgICAgICAgICAgICAg IHN3aXRjaCAoIHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGFnZSkgKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjYXNlIC1FSU5UUjoKKyAgICAgICAgICAg ICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJv dWdoICovCisgICAgICAgICAgICAgICAgY2FzZSAtRVJFU1RBUlQ6CisgICAgICAgICAgICAgICAg ICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0X3B0cGcgPSBOVUxMOworICAgICAgICAgICAgICAgICAg ICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIEJV R19PTihyYyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAg ICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfTE9DQUw6CisgICAgICAgICAgICBpZiAoIGxpa2VseShj dXJyZCA9PSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9sb2NhbCgpOwor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAg ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfSU5WTFBHX0xPQ0FMOgorICAgICAgICAg ICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIHJj ID0gLUVQRVJNOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhZ2luZ19pbnZs cGcoY3Vyciwgb3AuYXJnMS5saW5lYXJfYWRkcik7CisgICAgICAgICAgICBicmVhazsKKworICAg ICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfTVVMVEk6CisgICAgICAgIGNhc2UgTU1VRVhUX0lO VkxQR19NVUxUSToKKyAgICAgICAgeworICAgICAgICAgICAgY3B1bWFza190ICptYXNrID0gdGhp c19jcHUoc2NyYXRjaF9jcHVtYXNrKTsKKworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShjdXJy ZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAg ICAgZWxzZSBpZiAoIHVubGlrZWx5KHZjcHVtYXNrX3RvX3BjcHVtYXNrKGN1cnJkLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWVzdF9oYW5kbGVfdG9fcGFyYW0ob3AuYXJn Mi52Y3B1bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0X3ZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXNrKSkgKQorICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAg IGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAg ICAgaWYgKCBvcC5jbWQgPT0gTU1VRVhUX1RMQl9GTFVTSF9NVUxUSSApCisgICAgICAgICAgICAg ICAgZmx1c2hfdGxiX21hc2sobWFzayk7CisgICAgICAgICAgICBlbHNlIGlmICggX19hZGRyX29r KG9wLmFyZzEubGluZWFyX2FkZHIpICkKKyAgICAgICAgICAgICAgICBmbHVzaF90bGJfb25lX21h c2sobWFzaywgb3AuYXJnMS5saW5lYXJfYWRkcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVTSF9BTEw6CisgICAgICAgICAgICBp ZiAoIGxpa2VseShjdXJyZCA9PSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGZsdXNoX3Rs Yl9tYXNrKGN1cnJkLT5kaXJ0eV9jcHVtYXNrKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg ICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2Ug TU1VRVhUX0lOVkxQR19BTEw6CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBn X293bmVyKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNl IGlmICggX19hZGRyX29rKG9wLmFyZzEubGluZWFyX2FkZHIpICkKKyAgICAgICAgICAgICAgICBm bHVzaF90bGJfb25lX21hc2soY3VycmQtPmRpcnR5X2NwdW1hc2ssIG9wLmFyZzEubGluZWFyX2Fk ZHIpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfRkxVU0hfQ0FD SEU6CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCisgICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHko IWNhY2hlX2ZsdXNoX3Blcm1pdHRlZChjdXJyZCkpICkKKyAgICAgICAgICAgICAgICByYyA9IC1F QUNDRVM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgd2JpbnZkKCk7CisgICAg ICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9GTFVTSF9DQUNIRV9HTE9CQUw6 CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCisgICAgICAg ICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlmICggbGlrZWx5KGNhY2hl X2ZsdXNoX3Blcm1pdHRlZChjdXJyZCkpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgY3B1OworICAgICAgICAgICAgICAgIGNwdW1hc2tfdCAqbWFzayA9IHRo aXNfY3B1KHNjcmF0Y2hfY3B1bWFzayk7CisKKyAgICAgICAgICAgICAgICBjcHVtYXNrX2NsZWFy KG1hc2spOworICAgICAgICAgICAgICAgIGZvcl9lYWNoX29ubGluZV9jcHUoY3B1KQorICAgICAg ICAgICAgICAgICAgICBpZiAoICFjcHVtYXNrX2ludGVyc2VjdHMobWFzaywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcl9jcHUoY3B1X3NpYmxpbmdfbWFz aywgY3B1KSkgKQorICAgICAgICAgICAgICAgICAgICAgICAgX19jcHVtYXNrX3NldF9jcHUoY3B1 LCBtYXNrKTsKKyAgICAgICAgICAgICAgICBmbHVzaF9tYXNrKG1hc2ssIEZMVVNIX0NBQ0hFKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9IC1F SU5WQUw7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9TRVRfTERU OgorICAgICAgICB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW50cyA9IG9wLmFyZzIubnJf ZW50czsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyID0gZW50cyA/IG9wLmFyZzEubGlu ZWFyX2FkZHIgOiAwOworCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293 bmVyKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNlIGlm ICggcGFnaW5nX21vZGVfZXh0ZXJuYWwoY3VycmQpICkKKyAgICAgICAgICAgICAgICByYyA9IC1F SU5WQUw7CisgICAgICAgICAgICBlbHNlIGlmICggKChwdHIgJiAoUEFHRV9TSVpFIC0gMSkpICE9 IDApIHx8ICFfX2FkZHJfb2socHRyKSB8fAorICAgICAgICAgICAgICAgICAgICAgIChlbnRzID4g ODE5MikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJCYWQgYXJncyB0byBTRVRfTERUOiBw dHI9JWx4LCBlbnRzPSV4XG4iLCBwdHIsIGVudHMpOworICAgICAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCAoY3Vyci0+YXJjaC5w dl92Y3B1LmxkdF9lbnRzICE9IGVudHMpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGN1cnIt PmFyY2gucHZfdmNwdS5sZHRfYmFzZSAhPSBwdHIpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICBpZiAoIHB2X2Rlc3Ryb3lfbGR0KGN1cnIpICkKKyAgICAgICAgICAgICAgICAgICAg Zmx1c2hfdGxiX2xvY2FsKCk7CisKKyAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUu bGR0X2Jhc2UgPSBwdHI7CisgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9l bnRzID0gZW50czsKKyAgICAgICAgICAgICAgICBsb2FkX0xEVChjdXJyKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBNTVVFWFRf Q0xFQVJfUEFHRToKKyAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25l ciwgb3AuYXJnMS5tZm4sICZwMm10LCBQMk1fQUxMT0MpOworICAgICAgICAgICAgaWYgKCB1bmxp a2VseShwMm10ICE9IHAybV9yYW1fcncpICYmIHBhZ2UgKQorICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAgICAgIHBhZ2UgPSBOVUxMOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCAhcGFnZSB8fCAhZ2V0X3BhZ2VfdHlwZShw YWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IGlmICggcGFnZSApCisgICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAg ICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAg ICAgICJFcnJvciBjbGVhcmluZyBtZm4gJSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7Cisg ICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg ICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0J3Mg YmVpbmcgY2xlYXJlZC4gKi8KKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KHBnX293bmVy LCBwYWdlX3RvX21mbihwYWdlKSk7CisKKyAgICAgICAgICAgIGNsZWFyX2RvbWFpbl9wYWdlKHBh Z2VfdG9fbWZuKHBhZ2UpKTsKKworICAgICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7 CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9DT1BZX1BBR0U6Cisg ICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnNyY19wYWdlLCAqZHN0X3Bh Z2U7CisKKyAgICAgICAgICAgIHNyY19wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIs IG9wLmFyZzIuc3JjX21mbiwgJnAybXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFAyTV9BTExPQyk7CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHAybXQgIT0g cDJtX3JhbV9ydykgJiYgc3JjX3BhZ2UgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IHB1dF9wYWdlKHNyY19wYWdlKTsKKyAgICAgICAgICAgICAgICBzcmNfcGFnZSA9IE5VTEw7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFzcmNfcGFnZSkgKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAg ICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjb3B5aW5nIGZyb20gbWZuICUiIFBSSV9tZm4g IlxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hcmcyLnNyY19tZm4pOworICAgICAg ICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgZHN0X3BhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25l ciwgb3AuYXJnMS5tZm4sICZwMm10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBQMk1fQUxMT0MpOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAy bV9yYW1fcncpICYmIGRzdF9wYWdlICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBw dXRfcGFnZShkc3RfcGFnZSk7CisgICAgICAgICAgICAgICAgZHN0X3BhZ2UgPSBOVUxMOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSAoZHN0X3BhZ2UgJiYKKyAgICAgICAgICAgICAg ICAgIGdldF9wYWdlX3R5cGUoZHN0X3BhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgPyAwIDogLUVJ TlZBTDsKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBwdXRfcGFnZShzcmNfcGFnZSk7CisgICAgICAgICAgICAgICAgaWYgKCBk c3RfcGFnZSApCisgICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKGRzdF9wYWdlKTsKKyAgICAg ICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAiRXJyb3IgY29weWluZyB0byBtZm4gJSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8q IEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4gaXQncyBiZWluZyBjb3BpZWQgdG8uICovCisgICAgICAg ICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgcGFnZV90b19tZm4oZHN0X3BhZ2UpKTsK KworICAgICAgICAgICAgY29weV9kb21haW5fcGFnZShwYWdlX3RvX21mbihkc3RfcGFnZSksIHBh Z2VfdG9fbWZuKHNyY19wYWdlKSk7CisKKyAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKGRz dF9wYWdlKTsKKyAgICAgICAgICAgIHB1dF9wYWdlKHNyY19wYWdlKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBNTVVFWFRfTUFSS19TVVBFUjoKKyAgICAg ICAgY2FzZSBNTVVFWFRfVU5NQVJLX1NVUEVSOgorICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQ UDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy YyA9IC1FTk9TWVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgZG9uZToKKyAg ICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg Z3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQodW9wcywgMSk7CisgICAgfQorCisgICAgaWYgKCByYyA9 PSAtRVJFU1RBUlQgKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBjb3VudCk7CisgICAgICAg IHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oCisgICAgICAgICAgICBfX0hZUEVS VklTT1JfbW11ZXh0X29wLCAiaGloaSIsCisgICAgICAgICAgICB1b3BzLCAoY291bnQgLSBpKSB8 IE1NVV9VUERBVEVfUFJFRU1QVEVELCBwZG9uZSwgZm9yZWlnbmRvbSk7CisgICAgfQorICAgIGVs c2UgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCisgICAgeworICAgICAgICBYRU5f R1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIG51bGw7CisKKyAgICAgICAgQVNTRVJUKHJjIHx8IGkg PT0gY291bnQpOworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShudWxsLCBOVUxMKTsKKyAg ICAgICAgLyoKKyAgICAgICAgICogSW4gb3JkZXIgdG8gaGF2ZSBhIHdheSB0byBjb21tdW5pY2F0 ZSB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIHRvCisgICAgICAgICAqIG91ciBjb250aW51YXRpb24s IHdlIHBhc3MgdGhpcyBpbiBwbGFjZSBvZiAiZm9yZWlnbmRvbSIsIGJ1aWxkaW5nCisgICAgICAg ICAqIG9uIHRoZSBmYWN0IHRoYXQgdGhpcyBhcmd1bWVudCBpc24ndCBuZWVkZWQgYW55bW9yZS4K KyAgICAgICAgICovCisgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24o CisgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGkiLCBudWxsLAor ICAgICAgICAgICAgICAgIE1NVV9VUERBVEVfUFJFRU1QVEVELCBudWxsLCByYyk7CisgICAgfQor CisgICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsKKworICAgIHBlcmZjX2FkZChudW1fbW11ZXh0 X29wcywgaSk7CisKKyAgICAvKiBBZGQgaW5jcmVtZW50YWwgd29yayB3ZSBoYXZlIGRvbmUgdG8g dGhlIEBkb25lIG91dHB1dCBwYXJhbWV0ZXIuICovCisgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3Rf aGFuZGxlX2lzX251bGwocGRvbmUpKSApCisgICAgeworICAgICAgICBkb25lICs9IGk7CisgICAg ICAgIGNvcHlfdG9fZ3Vlc3QocGRvbmUsICZkb25lLCAxKTsKKyAgICB9CisKKyAgICByZXR1cm4g cmM7Cit9CisKK2xvbmcgZG9fbW11X3VwZGF0ZSgKKyAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFN KG1tdV91cGRhdGVfdCkgdXJlcXMsCisgICAgdW5zaWduZWQgaW50IGNvdW50LAorICAgIFhFTl9H VUVTVF9IQU5ETEVfUEFSQU0odWludCkgcGRvbmUsCisgICAgdW5zaWduZWQgaW50IGZvcmVpZ25k b20pCit7CisgICAgc3RydWN0IG1tdV91cGRhdGUgcmVxOworICAgIHZvaWQgKnZhID0gTlVMTDsK KyAgICB1bnNpZ25lZCBsb25nIGdwZm4sIGdtZm4sIG1mbjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwYWdlOworICAgIHVuc2lnbmVkIGludCBjbWQsIGkgPSAwLCBkb25lID0gMCwgcHRfZG9tOwor ICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudCwgKnYgPSBjdXJyOworICAgIHN0cnVjdCBk b21haW4gKmQgPSB2LT5kb21haW4sICpwdF9vd25lciA9IGQsICpwZ19vd25lcjsKKyAgICBtZm5f dCBtYXBfbWZuID0gSU5WQUxJRF9NRk47CisgICAgYm9vbCBzeW5jX2d1ZXN0ID0gZmFsc2U7Cisg ICAgdWludDMyX3QgeHNtX25lZWRlZCA9IDA7CisgICAgdWludDMyX3QgeHNtX2NoZWNrZWQgPSAw OworICAgIGludCByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFibGUoY3Vycik7CisKKyAgICBpZiAoIHVu bGlrZWx5KHJjKSApCisgICAgeworICAgICAgICBpZiAoIGxpa2VseShyYyA9PSAtRVJFU1RBUlQp ICkKKyAgICAgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oCisgICAg ICAgICAgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZSwgImhpaGkiLCB1cmVxcywg Y291bnQsIHBkb25lLAorICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbmRvbSk7CisgICAgICAg IHJldHVybiByYzsKKyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KGNvdW50ID09IE1NVV9VUERB VEVfUFJFRU1QVEVEKSAmJgorICAgICAgICAgbGlrZWx5KGd1ZXN0X2hhbmRsZV9pc19udWxsKHVy ZXFzKSkgKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2VlIHRoZSBjdXJyLT5hcmNo Lm9sZF9ndWVzdF90YWJsZSByZWxhdGVkCisgICAgICAgICAqIGh5cGVyY2FsbF9jcmVhdGVfY29u dGludWF0aW9uKCkgYmVsb3cuCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gKGludClmb3Jl aWduZG9tOworICAgIH0KKworICAgIGlmICggdW5saWtlbHkoY291bnQgJiBNTVVfVVBEQVRFX1BS RUVNUFRFRCkgKQorICAgIHsKKyAgICAgICAgY291bnQgJj0gfk1NVV9VUERBVEVfUFJFRU1QVEVE OworICAgICAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfaXNfbnVsbChwZG9uZSkpICkK KyAgICAgICAgICAgICh2b2lkKWNvcHlfZnJvbV9ndWVzdCgmZG9uZSwgcGRvbmUsIDEpOworICAg IH0KKyAgICBlbHNlCisgICAgICAgIHBlcmZjX2luY3IoY2FsbHNfdG9fbW11X3VwZGF0ZSk7CisK KyAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1cmVxcywgY291bnQpKSApCisg ICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgaWYgKCAocHRfZG9tID0gZm9yZWlnbmRvbSA+ PiAxNikgIT0gMCApCisgICAgeworICAgICAgICAvKiBQYWdldGFibGVzIGJlbG9uZyB0byBhIGZv cmVpZ24gZG9tYWluIChQRkQpLiAqLworICAgICAgICBpZiAoIChwdF9vd25lciA9IHJjdV9sb2Nr X2RvbWFpbl9ieV9pZChwdF9kb20gLSAxKSkgPT0gTlVMTCApCisgICAgICAgICAgICByZXR1cm4g LUVTUkNIOworCisgICAgICAgIGlmICggcHRfb3duZXIgPT0gZCApCisgICAgICAgICAgICByY3Vf dW5sb2NrX2RvbWFpbihwdF9vd25lcik7CisgICAgICAgIGVsc2UgaWYgKCAhcHRfb3duZXItPnZj cHUgfHwgKHYgPSBwdF9vd25lci0+dmNwdVswXSkgPT0gTlVMTCApCisgICAgICAgIHsKKyAgICAg ICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9Cisg ICAgfQorCisgICAgaWYgKCAocGdfb3duZXIgPSBnZXRfcGdfb3duZXIoKHVpbnQxNl90KWZvcmVp Z25kb20pKSA9PSBOVUxMICkKKyAgICB7CisgICAgICAgIHJjID0gLUVTUkNIOworICAgICAgICBn b3RvIG91dDsKKyAgICB9CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAg IHsKKyAgICAgICAgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSB8fCAoaSAmJiBoeXBl cmNhbGxfcHJlZW1wdF9jaGVjaygpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gLUVS RVNUQVJUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHVu bGlrZWx5KF9fY29weV9mcm9tX2d1ZXN0KCZyZXEsIHVyZXFzLCAxKSAhPSAwKSApCisgICAgICAg IHsKKyAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICB9CisKKyAgICAgICAgY21kID0gcmVxLnB0ciAmIChzaXplb2YobDFfcGdlbnRyeV90KS0xKTsK KworICAgICAgICBzd2l0Y2ggKCBjbWQgKQorICAgICAgICB7CisgICAgICAgICAgICAvKgorICAg ICAgICAgICAgICogTU1VX05PUk1BTF9QVF9VUERBVEU6IE5vcm1hbCB1cGRhdGUgdG8gYW55IGxl dmVsIG9mIHBhZ2UgdGFibGUuCisgICAgICAgICAgICAgKiBNTVVfVVBEQVRFX1BUX1BSRVNFUlZF X0FEOiBBcyBhYm92ZSBidXQgYWxzbyBwcmVzZXJ2ZSAoT1IpCisgICAgICAgICAgICAgKiBjdXJy ZW50IEEvRCBiaXRzLgorICAgICAgICAgICAgICovCisgICAgICAgIGNhc2UgTU1VX05PUk1BTF9Q VF9VUERBVEU6CisgICAgICAgIGNhc2UgTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRDoKKyAgICAg ICAgeworICAgICAgICAgICAgcDJtX3R5cGVfdCBwMm10OworCisgICAgICAgICAgICByYyA9IC1F T1BOT1RTVVBQOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV9yZWZjb3Vu dHMocHRfb3duZXIpKSApCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIHhz bV9uZWVkZWQgfD0gWFNNX01NVV9OT1JNQUxfVVBEQVRFOworICAgICAgICAgICAgaWYgKCBnZXRf cHRlX2ZsYWdzKHJlcS52YWwpICYgX1BBR0VfUFJFU0VOVCApCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX1VQREFURV9SRUFEOworICAgICAgICAg ICAgICAgIGlmICggZ2V0X3B0ZV9mbGFncyhyZXEudmFsKSAmIF9QQUdFX1JXICkKKyAgICAgICAg ICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX1VQREFURV9XUklURTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIGlmICggeHNtX25lZWRlZCAhPSB4c21fY2hlY2tlZCApCisgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmMgPSB4c21fbW11X3VwZGF0ZShYU01fVEFSR0VU LCBkLCBwdF9vd25lciwgcGdfb3duZXIsIHhzbV9uZWVkZWQpOworICAgICAgICAgICAgICAgIGlm ICggcmMgKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB4c21f Y2hlY2tlZCA9IHhzbV9uZWVkZWQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IC1F SU5WQUw7CisKKyAgICAgICAgICAgIHJlcS5wdHIgLT0gY21kOworICAgICAgICAgICAgZ21mbiA9 IHJlcS5wdHIgPj4gUEFHRV9TSElGVDsKKyAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9mcm9t X2dmbihwdF9vd25lciwgZ21mbiwgJnAybXQsIFAyTV9BTExPQyk7CisKKyAgICAgICAgICAgIGlm ICggdW5saWtlbHkoIXBhZ2UpIHx8IHAybXQgIT0gcDJtX3JhbV9ydyApCisgICAgICAgICAgICB7 CisgICAgICAgICAgICAgICAgaWYgKCBwYWdlICkKKyAgICAgICAgICAgICAgICAgICAgcHV0X3Bh Z2UocGFnZSk7CisgICAgICAgICAgICAgICAgaWYgKCBwMm1faXNfcGFnZWQocDJtdCkgKQorICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxh dGUocHRfb3duZXIsIGdtZm4pOworICAgICAgICAgICAgICAgICAgICByYyA9IC1FTk9FTlQ7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5vcm1hbCB1cGRhdGVcbiIpOworICAgICAgICAgICAg ICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBtZm4gPSBtZm5feChwYWdl X3RvX21mbihwYWdlKSk7CisKKyAgICAgICAgICAgIGlmICggIW1mbl9lcShfbWZuKG1mbiksIG1h cF9tZm4pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoIHZhICkKKyAgICAg ICAgICAgICAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOworICAgICAgICAgICAgICAgIHZh ID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7CisgICAgICAgICAgICAgICAgbWFwX21mbiA9 IF9tZm4obWZuKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhID0gX3AoKCh1bnNpZ25l ZCBsb25nKXZhICYgUEFHRV9NQVNLKSArIChyZXEucHRyICYgflBBR0VfTUFTSykpOworCisgICAg ICAgICAgICBpZiAoIHBhZ2VfbG9jayhwYWdlKSApCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgc3dpdGNoICggcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJs ZToKKyAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDFfZW50cnkodmEsIGwxZV9mcm9tX2lu dHB0ZShyZXEudmFsKSwgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcGdfb3duZXIpOworICAgICAgICAgICAgICAgICAgICBicmVh azsKKworICAgICAgICAgICAgICAgIGNhc2UgUEdUX2wyX3BhZ2VfdGFibGU6CisgICAgICAgICAg ICAgICAgICAgIGlmICggdW5saWtlbHkocGdfb3duZXIgIT0gcHRfb3duZXIpICkKKyAgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sMl9l bnRyeSh2YSwgbDJlX2Zyb21faW50cHRlKHJlcS52YWwpLCBtZm4sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2 KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFBH VF9sM19wYWdlX3RhYmxlOgorICAgICAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBnX293 bmVyICE9IHB0X293bmVyKSApCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgICAgICAgICAgcmMgPSBtb2RfbDNfZW50cnkodmEsIGwzZV9mcm9tX2ludHB0ZShyZXEu dmFsKSwgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPT0g TU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr OworCisgICAgICAgICAgICAgICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKKyAgICAgICAgICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShwZ19vd25lciAhPSBwdF9vd25lcikgKQorICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2w0X2Vu dHJ5KHZhLCBsNGVfZnJvbV9pbnRwdGUocmVxLnZhbCksIG1mbiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYp OworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBObyBuZWVk IHRvIHN5bmMgaWYgYWxsIHVzZXMgb2YgdGhlIHBhZ2UgY2FuIGJlIGFjY291bnRlZAorICAgICAg ICAgICAgICAgICAgICAgKiB0byB0aGUgcGFnZSBsb2NrIHdlIGhvbGQsIGl0cyBwaW5uZWQgc3Rh dHVzLCBhbmQgdXNlcyBvbgorICAgICAgICAgICAgICAgICAgICAgKiB0aGlzICh2KUNQVS4KKyAg ICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmICggIXJjICYmIHRo aXNfY3B1KHJvb3RfcGd0KSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICgocGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJiBQR1RfY291bnRfbWFzaykgPgorICAgICAgICAgICAgICAgICAgICAg ICAgICAoMSArICEhKHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3Bpbm5lZCkgKworICAg ICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2V0YWJsZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vl c3RfdGFibGUpID09IG1mbikgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBhZ2V0YWJs ZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGVfdXNlcikgPT0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBtZm4pKSkgKQorICAgICAgICAgICAgICAgICAgICAgICAgc3luY19ndWVz dCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg Y2FzZSBQR1Rfd3JpdGFibGVfcGFnZToKKyAgICAgICAgICAgICAgICAgICAgcGVyZmNfaW5jcih3 cml0YWJsZV9tbXVfdXBkYXRlcyk7CisgICAgICAgICAgICAgICAgICAgIGlmICggcGFnaW5nX3dy aXRlX2d1ZXN0X2VudHJ5KHYsIHZhLCByZXEudmFsLCBfbWZuKG1mbikpICkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOworICAgICAgICAg ICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJF U1RBUlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICggZ2V0X3BhZ2VfdHlw ZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAg ICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOworICAgICAgICAgICAgICAgIGlm ICggcGFnaW5nX3dyaXRlX2d1ZXN0X2VudHJ5KHYsIHZhLCByZXEudmFsLCBfbWZuKG1mbikpICkK KyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAgIHB1dF9wYWdlX3R5 cGUocGFnZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VX01BQ0hQSFlTX1VQ REFURToKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwdF9vd25lcikgKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgICAgIGJy ZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBhZ2luZ19t b2RlX3RyYW5zbGF0ZShwZ19vd25lcikpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIG1mbiA9IHJlcS5wdHIgPj4gUEFHRV9TSElGVDsKKyAgICAgICAgICAgIGdw Zm4gPSByZXEudmFsOworCisgICAgICAgICAgICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfTUFDSFBI WVNfVVBEQVRFOworICAgICAgICAgICAgaWYgKCB4c21fbmVlZGVkICE9IHhzbV9jaGVja2VkICkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IHhzbV9tbXVfdXBkYXRlKFhTTV9U QVJHRVQsIGQsIE5VTEwsIHBnX293bmVyLCB4c21fbmVlZGVkKTsKKyAgICAgICAgICAgICAgICBp ZiAoIHJjICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgeHNt X2NoZWNrZWQgPSB4c21fbmVlZGVkOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBwYWdl ID0gZ2V0X3BhZ2VfZnJvbV9tZm4oX21mbihtZm4pLCBwZ19vd25lcik7CisgICAgICAgICAgICBp ZiAoIHVubGlrZWx5KCFwYWdlKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2Rw cmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkNvdWxkIG5v dCBnZXQgcGFnZSBmb3IgbWFjaC0+cGh5cyB1cGRhdGVcbiIpOworICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgc2V0X2dwZm5fZnJvbV9tZm4obWZuLCBncGZuKTsKKworICAgICAgICAgICAgcGFn aW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4obWZuKSk7CisKKyAgICAgICAgICAgIHB1dF9w YWdlKHBhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg ICAgICAgIHJjID0gLUVOT1NZUzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg ICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAg Z3Vlc3RfaGFuZGxlX2FkZF9vZmZzZXQodXJlcXMsIDEpOworICAgIH0KKworICAgIGlmICggcmMg PT0gLUVSRVNUQVJUICkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgY291bnQpOworICAgICAg ICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAorICAgICAgICAgICAgX19IWVBF UlZJU09SX21tdV91cGRhdGUsICJoaWhpIiwKKyAgICAgICAgICAgIHVyZXFzLCAoY291bnQgLSBp KSB8IE1NVV9VUERBVEVfUFJFRU1QVEVELCBwZG9uZSwgZm9yZWlnbmRvbSk7CisgICAgfQorICAg IGVsc2UgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSApCisgICAgeworICAgICAgICBY RU5fR1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIG51bGw7CisKKyAgICAgICAgQVNTRVJUKHJjIHx8 IGkgPT0gY291bnQpOworICAgICAgICBzZXRfeGVuX2d1ZXN0X2hhbmRsZShudWxsLCBOVUxMKTsK KyAgICAgICAgLyoKKyAgICAgICAgICogSW4gb3JkZXIgdG8gaGF2ZSBhIHdheSB0byBjb21tdW5p Y2F0ZSB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIHRvCisgICAgICAgICAqIG91ciBjb250aW51YXRp b24sIHdlIHBhc3MgdGhpcyBpbiBwbGFjZSBvZiAiZm9yZWlnbmRvbSIsIGJ1aWxkaW5nCisgICAg ICAgICAqIG9uIHRoZSBmYWN0IHRoYXQgdGhpcyBhcmd1bWVudCBpc24ndCBuZWVkZWQgYW55bW9y ZS4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRp b24oCisgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdV91cGRhdGUsICJoaWhpIiwgbnVs bCwKKyAgICAgICAgICAgICAgICBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgbnVsbCwgcmMpOworICAg IH0KKworICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7CisKKyAgICBpZiAoIHZhICkKKyAgICAg ICAgdW5tYXBfZG9tYWluX3BhZ2UodmEpOworCisgICAgaWYgKCBzeW5jX2d1ZXN0ICkKKyAgICB7 CisgICAgICAgIC8qCisgICAgICAgICAqIEZvcmNlIG90aGVyIHZDUFUtcyBvZiB0aGUgYWZmZWN0 ZWQgZ3Vlc3QgdG8gcGljayB1cCBMNCBlbnRyeQorICAgICAgICAgKiBjaGFuZ2VzIChpZiBhbnkp LiBJc3N1ZSBhIGZsdXNoIElQSSB3aXRoIGVtcHR5IG9wZXJhdGlvbiBtYXNrIHRvCisgICAgICAg ICAqIGZhY2lsaXRhdGUgdGhpcyAoaW5jbHVkaW5nIG91cnNlbHZlcyB3YWl0aW5nIGZvciB0aGUg SVBJIHRvCisgICAgICAgICAqIGFjdHVhbGx5IGhhdmUgYXJyaXZlZCkuIFV0aWxpemUgdGhlIGZh Y3QgdGhhdCBGTFVTSF9WQV9WQUxJRCBpcworICAgICAgICAgKiBtZWFuaW5nbGVzcyB3aXRob3V0 IEZMVVNIX0NBQ0hFLCBidXQgd2lsbCBhbGxvdyB0byBwYXNzIHRoZSBuby1vcAorICAgICAgICAg KiBjaGVjayBpbiBmbHVzaF9hcmVhX21hc2soKS4KKyAgICAgICAgICovCisgICAgICAgIHVuc2ln bmVkIGludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisgICAgICAgIGNwdW1hc2tfdCAqbWFz ayA9IHBlcl9jcHUoc2NyYXRjaF9jcHVtYXNrLCBjcHUpOworCisgICAgICAgIGNwdW1hc2tfYW5k bm90KG1hc2ssIHB0X293bmVyLT5kaXJ0eV9jcHVtYXNrLCBjcHVtYXNrX29mKGNwdSkpOworICAg ICAgICBpZiAoICFjcHVtYXNrX2VtcHR5KG1hc2spICkKKyAgICAgICAgICAgIGZsdXNoX2FyZWFf bWFzayhtYXNrLCBaRVJPX0JMT0NLX1BUUiwgRkxVU0hfVkFfVkFMSUQpOworICAgIH0KKworICAg IHBlcmZjX2FkZChudW1fcGFnZV91cGRhdGVzLCBpKTsKKworIG91dDoKKyAgICBpZiAoIHB0X293 bmVyICE9IGQgKQorICAgICAgICByY3VfdW5sb2NrX2RvbWFpbihwdF9vd25lcik7CisKKyAgICAv KiBBZGQgaW5jcmVtZW50YWwgd29yayB3ZSBoYXZlIGRvbmUgdG8gdGhlIEBkb25lIG91dHB1dCBw YXJhbWV0ZXIuICovCisgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRv bmUpKSApCisgICAgeworICAgICAgICBkb25lICs9IGk7CisgICAgICAgIGNvcHlfdG9fZ3Vlc3Qo cGRvbmUsICZkb25lLCAxKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBp bnQgX19kb191cGRhdGVfdmFfbWFwcGluZygKKyAgICB1bnNpZ25lZCBsb25nIHZhLCB1NjQgdmFs NjQsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCBkb21haW4gKnBnX293bmVyKQoreworICAg IGwxX3BnZW50cnlfdCAgIHZhbCA9IGwxZV9mcm9tX2ludHB0ZSh2YWw2NCk7CisgICAgc3RydWN0 IHZjcHUgICAqdiAgID0gY3VycmVudDsKKyAgICBzdHJ1Y3QgZG9tYWluICpkICAgPSB2LT5kb21h aW47CisgICAgc3RydWN0IHBhZ2VfaW5mbyAqZ2wxcGc7CisgICAgbDFfcGdlbnRyeV90ICAqcGwx ZTsKKyAgICB1bnNpZ25lZCBsb25nICBibWFwX3B0cjsKKyAgICBtZm5fdCAgICAgICAgICBnbDFt Zm47CisgICAgY3B1bWFza190ICAgICAqbWFzayA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAg cmM7CisKKyAgICBwZXJmY19pbmNyKGNhbGxzX3RvX3VwZGF0ZV92YSk7CisKKyAgICByYyA9IHhz bV91cGRhdGVfdmFfbWFwcGluZyhYU01fVEFSR0VULCBkLCBwZ19vd25lciwgdmFsKTsKKyAgICBp ZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmMgPSAtRUlOVkFMOworICAgIHBs MWUgPSBtYXBfZ3Vlc3RfbDFlKHZhLCAmZ2wxbWZuKTsKKyAgICBnbDFwZyA9IHBsMWUgPyBnZXRf cGFnZV9mcm9tX21mbihnbDFtZm4sIGQpIDogTlVMTDsKKyAgICBpZiAoIHVubGlrZWx5KCFnbDFw ZykgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGlmICggIXBhZ2VfbG9jayhnbDFwZykgKQor ICAgIHsKKyAgICAgICAgcHV0X3BhZ2UoZ2wxcGcpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9 CisKKyAgICBpZiAoIChnbDFwZy0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAh PSBQR1RfbDFfcGFnZV90YWJsZSApCisgICAgeworICAgICAgICBwYWdlX3VubG9jayhnbDFwZyk7 CisgICAgICAgIHB1dF9wYWdlKGdsMXBnKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisg ICAgcmMgPSBtb2RfbDFfZW50cnkocGwxZSwgdmFsLCBtZm5feChnbDFtZm4pLCAwLCB2LCBwZ19v d25lcik7CisKKyAgICBwYWdlX3VubG9jayhnbDFwZyk7CisgICAgcHV0X3BhZ2UoZ2wxcGcpOwor Cisgb3V0OgorICAgIGlmICggcGwxZSApCisgICAgICAgIHVubWFwX2RvbWFpbl9wYWdlKHBsMWUp OworCisgICAgc3dpdGNoICggZmxhZ3MgJiBVVk1GX0ZMVVNIVFlQRV9NQVNLICkKKyAgICB7Cisg ICAgY2FzZSBVVk1GX1RMQl9GTFVTSDoKKyAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxh Z3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFTSykgKQorICAgICAgICB7CisgICAgICAgIGNhc2UgVVZN Rl9MT0NBTDoKKyAgICAgICAgICAgIGZsdXNoX3RsYl9sb2NhbCgpOworICAgICAgICAgICAgYnJl YWs7CisgICAgICAgIGNhc2UgVVZNRl9BTEw6CisgICAgICAgICAgICBtYXNrID0gZC0+ZGlydHlf Y3B1bWFzazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgbWFzayA9IHRoaXNfY3B1KHNjcmF0Y2hfY3B1bWFzayk7CisgICAgICAgICAgICByYyA9IHZj cHVtYXNrX3RvX3BjcHVtYXNrKGQsIGNvbnN0X2d1ZXN0X2hhbmRsZV9mcm9tX3B0cihibWFwX3B0 ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBtYXNrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmICgg bWFzayApCisgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhtYXNrKTsKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIFVWTUZfSU5WTFBHOgorICAgICAgICBzd2l0Y2ggKCAoYm1hcF9wdHIgPSBm bGFncyAmIH5VVk1GX0ZMVVNIVFlQRV9NQVNLKSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBV Vk1GX0xPQ0FMOgorICAgICAgICAgICAgcGFnaW5nX2ludmxwZyh2LCB2YSk7CisgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgY2FzZSBVVk1GX0FMTDoKKyAgICAgICAgICAgIG1hc2sgPSBkLT5k aXJ0eV9jcHVtYXNrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg ICAgICAgICBtYXNrID0gdGhpc19jcHUoc2NyYXRjaF9jcHVtYXNrKTsKKyAgICAgICAgICAgIHJj ID0gdmNwdW1hc2tfdG9fcGNwdW1hc2soZCwgY29uc3RfZ3Vlc3RfaGFuZGxlX2Zyb21fcHRyKGJt YXBfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIG1hc2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAg aWYgKCBtYXNrICkKKyAgICAgICAgICAgIGZsdXNoX3RsYl9vbmVfbWFzayhtYXNrLCB2YSk7Cisg ICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworbG9uZyBkb191cGRh dGVfdmFfbWFwcGluZyh1bnNpZ25lZCBsb25nIHZhLCB1NjQgdmFsNjQsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit7CisgICAgcmV0dXJuIF9fZG9fdXBk YXRlX3ZhX21hcHBpbmcodmEsIHZhbDY0LCBmbGFncywgY3VycmVudC0+ZG9tYWluKTsKK30KKwor bG9uZyBkb191cGRhdGVfdmFfbWFwcGluZ19vdGhlcmRvbWFpbih1bnNpZ25lZCBsb25nIHZhLCB1 NjQgdmFsNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWlk X3QgZG9taWQpCit7CisgICAgc3RydWN0IGRvbWFpbiAqcGdfb3duZXI7CisgICAgaW50IHJjOwor CisgICAgaWYgKCAocGdfb3duZXIgPSBnZXRfcGdfb3duZXIoZG9taWQpKSA9PSBOVUxMICkKKyAg ICAgICAgcmV0dXJuIC1FU1JDSDsKKworICAgIHJjID0gX19kb191cGRhdGVfdmFfbWFwcGluZyh2 YSwgdmFsNjQsIGZsYWdzLCBwZ19vd25lcik7CisKKyAgICBwdXRfcGdfb3duZXIocGdfb3duZXIp OworCisgICAgcmV0dXJuIHJjOworfQorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9k ZTogQwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVucHJvamVj dC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFuL2xpc3RpbmZvL3hlbi1k ZXZlbA==