From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 28/31] x86/mm: move PV hypercalls to pv/mm-hypercalls.c Date: Thu, 17 Aug 2017 15:44:53 +0100 Message-ID: <20170817144456.18989-29-wei.liu2@citrix.com> References: <20170817144456.18989-1-wei.liu2@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1diM59-0002pT-5F for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:47:35 +0000 In-Reply-To: <20170817144456.18989-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org QWxzbyBtb3ZlIHB2X25ld19ndWVzdF9jcjMgdGhlcmUgc28gdGhhdCB3ZSBkb24ndCBoYXZlIHRv IGV4cG9ydAptb2RfbDFfZW50cnkuCgpGaXggY29kaW5nIHN0eWxlIGlzc3Vlcy4gQ2hhbmdlIHYg dG8gY3VyciBhbmQgZCB0byBjdXJyZCB3aGVyZQphcHByb3ByaWF0ZS4KClNpZ25lZC1vZmYtYnk6 IFdlaSBMaXUgPHdlaS5saXUyQGNpdHJpeC5jb20+Ci0tLQpJIGNhbid0IGNvbnZpbmNlIGdpdCBk aWZmIHRvIHByb2R1Y2Ugc2Vuc2libGUgZGlmZiBmb3IgZG9uYXRlX3BhZ2UKYW5kIHN0ZWFsX3Bh Z2UuICBUaG9zZSBmdW5jdGlvbnMgYXJlbid0IGNoYW5nZWQuCi0tLQogeGVuL2FyY2gveDg2L21t LmMgICAgICAgICAgICAgICB8IDE1NjkgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiB4ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUgICAgICAgIHwgICAgMSArCiB4ZW4vYXJj aC94ODYvcHYvbW0taHlwZXJjYWxscy5jIHwgMTQ2MyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgMTUzMyBpbnNlcnRpb25zKCspLCAxNTAwIGRl bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHhlbi9hcmNoL3g4Ni9wdi9tbS1oeXBlcmNh bGxzLmMKCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9tbS5j CmluZGV4IDJkZTJlYzdmMWUuLjU0MjU2YjZhMTEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9t bS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9tbS5jCkBAIC0xMTY0LDI5MCArMTE2NCw2IEBAIHZvaWQg cGFnZV91bmxvY2soc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSkKICAgICB9IHdoaWxlICggKHkgPSBj bXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgbngpKSAhPSB4ICk7CiB9CiAKLS8q Ci0gKiBQVEUgZmxhZ3MgdGhhdCBhIGd1ZXN0IG1heSBjaGFuZ2Ugd2l0aG91dCByZS12YWxpZGF0 aW5nIHRoZSBQVEUuCi0gKiBBbGwgb3RoZXIgYml0cyBhZmZlY3QgdHJhbnNsYXRpb24sIGNhY2hp bmcsIG9yIFhlbidzIHNhZmV0eS4KLSAqLwotI2RlZmluZSBGQVNUUEFUSF9GTEFHX1dISVRFTElT VCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgKF9QQUdFX05YX0JJ VCB8IF9QQUdFX0FWQUlMX0hJR0ggfCBfUEFHRV9BVkFJTCB8IF9QQUdFX0dMT0JBTCB8IFwKLSAg ICAgX1BBR0VfRElSVFkgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX1VTRVIpCi0KLS8qIFVwZGF0 ZSB0aGUgTDEgZW50cnkgYXQgcGwxZSB0byBuZXcgdmFsdWUgbmwxZS4gKi8KLXN0YXRpYyBpbnQg bW9kX2wxX2VudHJ5KGwxX3BnZW50cnlfdCAqcGwxZSwgbDFfcGdlbnRyeV90IG5sMWUsCi0gICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGdsMW1mbiwgaW50IHByZXNlcnZlX2Fk LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnB0X3ZjcHUsIHN0cnVjdCBk b21haW4gKnBnX2RvbSkKLXsKLSAgICBsMV9wZ2VudHJ5X3Qgb2wxZTsKLSAgICBzdHJ1Y3QgZG9t YWluICpwdF9kb20gPSBwdF92Y3B1LT5kb21haW47Ci0gICAgaW50IHJjID0gMDsKLQotICAgIGlm ICggdW5saWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wxZSwgcGwxZSwgc2l6ZW9mKG9sMWUpKSAh PSAwKSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgQVNTRVJUKCFwYWdpbmdfbW9k ZV9yZWZjb3VudHMocHRfZG9tKSk7Ci0KLSAgICBpZiAoIGwxZV9nZXRfZmxhZ3MobmwxZSkgJiBf UEFHRV9QUkVTRU5UICkKLSAgICB7Ci0gICAgICAgIC8qIFRyYW5zbGF0ZSBmb3JlaWduIGd1ZXN0 IGFkZHJlc3Nlcy4gKi8KLSAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IE5VTEw7Ci0K LSAgICAgICAgaWYgKCB1bmxpa2VseShsMWVfZ2V0X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3df bWFzayhwdF9kb20pKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLCAiQmFkIEwxIGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICAgICBsMWVfZ2V0 X2ZsYWdzKG5sMWUpICYgbDFfZGlzYWxsb3dfbWFzayhwdF9kb20pKTsKLSAgICAgICAgICAgIHJl dHVybiAtRUlOVkFMOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV90cmFu c2xhdGUocGdfZG9tKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFnZV9m cm9tX2dmbihwZ19kb20sIGwxZV9nZXRfcGZuKG5sMWUpLCBOVUxMLCBQMk1fQUxMT0MpOwotICAg ICAgICAgICAgaWYgKCAhcGFnZSApCi0gICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0g ICAgICAgICAgICBubDFlID0gbDFlX2Zyb21fcGZuKHBhZ2VfdG9fbWZuKHBhZ2UpLCBsMWVfZ2V0 X2ZsYWdzKG5sMWUpKTsKLSAgICAgICAgfQotCi0gICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3Vm ZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCi0gICAgICAgIGlmICggIWwxZV9oYXNfY2hh bmdlZChvbDFlLCBubDFlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKLSAgICAgICAgewot ICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBwdF9kb20pOwotICAgICAgICAgICAg cmMgPSBVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKTsKLSAgICAgICAgICAg IGlmICggcGFnZSApCi0gICAgICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgICAg ICByZXR1cm4gcmMgPyAwIDogLUVCVVNZOwotICAgICAgICB9Ci0KLSAgICAgICAgc3dpdGNoICgg cmMgPSBnZXRfcGFnZV9mcm9tX2wxZShubDFlLCBwdF9kb20sIHBnX2RvbSkgKQotICAgICAgICB7 Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBpZiAoIHBhZ2UgKQotICAgICAgICAgICAg ICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgcmV0dXJuIHJjOwotICAgICAgICBjYXNl IDA6Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBfUEFHRV9SVyAuLi4gX1BBR0Vf UlcgfCBQQUdFX0NBQ0hFX0FUVFJTOgotICAgICAgICAgICAgQVNTRVJUKCEocmMgJiB+KF9QQUdF X1JXIHwgUEFHRV9DQUNIRV9BVFRSUykpKTsKLSAgICAgICAgICAgIGwxZV9mbGlwX2ZsYWdzKG5s MWUsIHJjKTsKLSAgICAgICAgICAgIHJjID0gMDsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICB9Ci0gICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLQot ICAgICAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIHB0X2RvbSk7Ci0gICAgICAgIGlmICggdW5s aWtlbHkoIVVQREFURV9FTlRSWShsMSwgcGwxZSwgb2wxZSwgbmwxZSwgZ2wxbWZuLCBwdF92Y3B1 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIG9sMWUgPSBubDFlOwotICAgICAgICAgICAgcmMgPSAtRUJV U1k7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5U UlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKLSAgICB7Ci0gICAgICAgIHJl dHVybiAtRUJVU1k7Ci0gICAgfQotCi0gICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgcHRfZG9t KTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotLyogVXBkYXRlIHRoZSBMMiBlbnRyeSBhdCBwbDJl IHRvIG5ldyB2YWx1ZSBubDJlLiBwbDJlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCi1zdGF0aWMg aW50IG1vZF9sMl9lbnRyeShsMl9wZ2VudHJ5X3QgKnBsMmUsCi0gICAgICAgICAgICAgICAgICAg ICAgICBsMl9wZ2VudHJ5X3QgbmwyZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNlcnZlX2FkLAotICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUpCi17Ci0gICAgbDJfcGdlbnRy eV90IG9sMmU7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUtPmRvbWFpbjsKLSAgICBzdHJ1 Y3QgcGFnZV9pbmZvICpsMnBnID0gbWZuX3RvX3BhZ2UocGZuKTsKLSAgICB1bnNpZ25lZCBsb25n IHR5cGUgPSBsMnBnLT51LmludXNlLnR5cGVfaW5mbzsKLSAgICBpbnQgcmMgPSAwOwotCi0gICAg aWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDJfc2xvdChkLCB0eXBlLCBwZ2VudHJ5X3B0cl90b19z bG90KHBsMmUpKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJM MiB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4XG4iLAotICAgICAgICAgICAg ICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBsMmUpKTsKLSAgICAgICAgcmV0dXJuIC1FUEVSTTsK LSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sMmUsIHBsMmUs IHNpemVvZihvbDJlKSkgIT0gMCkgKQotICAgICAgICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGlm ICggbDJlX2dldF9mbGFncyhubDJlKSAmIF9QQUdFX1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAg aWYgKCB1bmxpa2VseShsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgTDJfRElTQUxMT1dfTUFTSykgKQot ICAgICAgICB7Ci0gICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMiBm bGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbDJlX2dldF9mbGFncyhubDJlKSAmIEwy X0RJU0FMTE9XX01BU0spOwotICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0K LQotICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdz LiAqLwotICAgICAgICBpZiAoICFsMmVfaGFzX2NoYW5nZWQob2wyZSwgbmwyZSwgfkZBU1RQQVRI X0ZMQUdfV0hJVEVMSVNUKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIGFkanVzdF9ndWVzdF9s MmUobmwyZSwgZCk7Ci0gICAgICAgICAgICBpZiAoIFVQREFURV9FTlRSWShsMiwgcGwyZSwgb2wy ZSwgbmwyZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCkgKQotICAgICAgICAgICAgICAgIHJldHVy biAwOwotICAgICAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICAgICAgfQotCi0gICAgICAgIGlm ICggdW5saWtlbHkoKHJjID0gZ2V0X3BhZ2VfZnJvbV9sMmUobmwyZSwgcGZuLCBkKSkgPCAwKSAp Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICAgICAgYWRqdXN0X2d1ZXN0X2wyZShubDJl LCBkKTsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwyLCBwbDJlLCBvbDJl LCBubDJlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw cmVzZXJ2ZV9hZCkpICkKLSAgICAgICAgewotICAgICAgICAgICAgb2wyZSA9IG5sMmU7Ci0gICAg ICAgICAgICByYyA9IC1FQlVTWTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlIGlmICggdW5s aWtlbHkoIVVQREFURV9FTlRSWShsMiwgcGwyZSwgb2wyZSwgbmwyZSwgcGZuLCB2Y3B1LAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAgIHsK LSAgICAgICAgcmV0dXJuIC1FQlVTWTsKLSAgICB9Ci0KLSAgICBwdXRfcGFnZV9mcm9tX2wyZShv bDJlLCBwZm4pOwotICAgIHJldHVybiByYzsKLX0KLQotLyogVXBkYXRlIHRoZSBMMyBlbnRyeSBh dCBwbDNlIHRvIG5ldyB2YWx1ZSBubDNlLiBwbDNlIGlzIHdpdGhpbiBmcmFtZSBwZm4uICovCi1z dGF0aWMgaW50IG1vZF9sM19lbnRyeShsM19wZ2VudHJ5X3QgKnBsM2UsCi0gICAgICAgICAgICAg ICAgICAgICAgICBsM19wZ2VudHJ5X3QgbmwzZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGxvbmcgcGZuLAotICAgICAgICAgICAgICAgICAgICAgICAgaW50IHByZXNlcnZlX2Fk LAotICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZjcHUgKnZjcHUpCi17Ci0gICAgbDNf cGdlbnRyeV90IG9sM2U7Ci0gICAgc3RydWN0IGRvbWFpbiAqZCA9IHZjcHUtPmRvbWFpbjsKLSAg ICBpbnQgcmMgPSAwOwotCi0gICAgaWYgKCB1bmxpa2VseSghaXNfZ3Vlc3RfbDNfc2xvdChwZ2Vu dHJ5X3B0cl90b19zbG90KHBsM2UpKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9H X1dBUk5JTkcsICJMMyB1cGRhdGUgaW4gWGVuLXByaXZhdGUgYXJlYSwgc2xvdCAlI2x4XG4iLAot ICAgICAgICAgICAgICAgICBwZ2VudHJ5X3B0cl90b19zbG90KHBsM2UpKTsKLSAgICAgICAgcmV0 dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBEaXNhbGxvdyB1cGRhdGVzIHRv IGZpbmFsIEwzIHNsb3QuIEl0IGNvbnRhaW5zIFhlbiBtYXBwaW5ncywgYW5kIGl0Ci0gICAgICog d291bGQgYmUgYSBwYWluIHRvIGVuc3VyZSB0aGV5IHJlbWFpbiBjb250aW51b3VzbHkgdmFsaWQg dGhyb3VnaG91dC4KLSAgICAgKi8KLSAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSAmJiAo cGdlbnRyeV9wdHJfdG9fc2xvdChwbDNlKSA+PSAzKSApCi0gICAgICAgIHJldHVybiAtRUlOVkFM OwotCi0gICAgaWYgKCB1bmxpa2VseShfX2NvcHlfZnJvbV91c2VyKCZvbDNlLCBwbDNlLCBzaXpl b2Yob2wzZSkpICE9IDApICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBpZiAoIGwz ZV9nZXRfZmxhZ3MobmwzZSkgJiBfUEFHRV9QUkVTRU5UICkKLSAgICB7Ci0gICAgICAgIGlmICgg dW5saWtlbHkobDNlX2dldF9mbGFncyhubDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpICkKLSAg ICAgICAgewotICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDMgZmxh Z3MgJXhcbiIsCi0gICAgICAgICAgICAgICAgICAgIGwzZV9nZXRfZmxhZ3MobmwzZSkgJiBsM19k aXNhbGxvd19tYXNrKGQpKTsKLSAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOwotICAgICAgICB9 Ci0KLSAgICAgICAgLyogRmFzdCBwYXRoIGZvciBzdWZmaWNpZW50bHktc2ltaWxhciBtYXBwaW5n cy4gKi8KLSAgICAgICAgaWYgKCAhbDNlX2hhc19jaGFuZ2VkKG9sM2UsIG5sM2UsIH5GQVNUUEFU SF9GTEFHX1dISVRFTElTVCkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBhZGp1c3RfZ3Vlc3Rf bDNlKG5sM2UsIGQpOwotICAgICAgICAgICAgcmMgPSBVUERBVEVfRU5UUlkobDMsIHBsM2UsIG9s M2UsIG5sM2UsIHBmbiwgdmNwdSwgcHJlc2VydmVfYWQpOwotICAgICAgICAgICAgcmV0dXJuIHJj ID8gMCA6IC1FRkFVTFQ7Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IGdldF9wYWdlX2Zyb21f bDNlKG5sM2UsIHBmbiwgZCwgMCk7Ci0gICAgICAgIGlmICggdW5saWtlbHkocmMgPCAwKSApCi0g ICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIHJjID0gMDsKLQotICAgICAgICBhZGp1c3Rf Z3Vlc3RfbDNlKG5sM2UsIGQpOwotICAgICAgICBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5UUlko bDMsIHBsM2UsIG9sM2UsIG5sM2UsIHBmbiwgdmNwdSwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQotICAgICAgICB7Ci0gICAgICAgICAgICBvbDNl ID0gbmwzZTsKLSAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKLSAgICAgICAgfQotICAgIH0KLSAg ICBlbHNlIGlmICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsMywgcGwzZSwgb2wzZSwgbmwzZSwg cGZuLCB2Y3B1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZl X2FkKSkgKQotICAgIHsKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0gICAgfQotCi0gICAgaWYg KCBsaWtlbHkocmMgPT0gMCkgKQotICAgICAgICBpZiAoICFwdl9jcmVhdGVfcGFlX3hlbl9tYXBw aW5ncyhkLCBwbDNlKSApCi0gICAgICAgICAgICBCVUcoKTsKLQotICAgIHB1dF9wYWdlX2Zyb21f bDNlKG9sM2UsIHBmbiwgMCwgMSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0vKiBVcGRhdGUgdGhl IEw0IGVudHJ5IGF0IHBsNGUgdG8gbmV3IHZhbHVlIG5sNGUuIHBsNGUgaXMgd2l0aGluIGZyYW1l IHBmbi4gKi8KLXN0YXRpYyBpbnQgbW9kX2w0X2VudHJ5KGw0X3BnZW50cnlfdCAqcGw0ZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgIGw0X3BnZW50cnlfdCBubDRlLAotICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBwZm4sCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnQg cHJlc2VydmVfYWQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmNwdSAqdmNwdSkK LXsKLSAgICBzdHJ1Y3QgZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOwotICAgIGw0X3BnZW50cnlf dCBvbDRlOwotICAgIGludCByYyA9IDA7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFpc19ndWVzdF9s NF9zbG90KGQsIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkpKSApCi0gICAgewotICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgIkw0IHVwZGF0ZSBpbiBYZW4tcHJpdmF0ZSBhcmVhLCBz bG90ICUjbHhcbiIsCi0gICAgICAgICAgICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocGw0ZSkp OwotICAgICAgICByZXR1cm4gLUVJTlZBTDsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KF9f Y29weV9mcm9tX3VzZXIoJm9sNGUsIHBsNGUsIHNpemVvZihvbDRlKSkgIT0gMCkgKQotICAgICAg ICByZXR1cm4gLUVGQVVMVDsKLQotICAgIGlmICggbDRlX2dldF9mbGFncyhubDRlKSAmIF9QQUdF X1BSRVNFTlQgKQotICAgIHsKLSAgICAgICAgaWYgKCB1bmxpa2VseShsNGVfZ2V0X2ZsYWdzKG5s NGUpICYgTDRfRElTQUxMT1dfTUFTSykgKQotICAgICAgICB7Ci0gICAgICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywgIkJhZCBMNCBmbGFncyAleFxuIiwKLSAgICAgICAgICAgICAgICAg ICAgbDRlX2dldF9mbGFncyhubDRlKSAmIEw0X0RJU0FMTE9XX01BU0spOwotICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1 ZmZpY2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLwotICAgICAgICBpZiAoICFsNGVfaGFzX2No YW5nZWQob2w0ZSwgbmw0ZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCi0gICAgICAgIHsK LSAgICAgICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Ci0gICAgICAgICAgICByYyA9 IFVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9h ZCk7Ci0gICAgICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVGQVVMVDsKLSAgICAgICAgfQotCi0g ICAgICAgIHJjID0gZ2V0X3BhZ2VfZnJvbV9sNGUobmw0ZSwgcGZuLCBkLCAwKTsKLSAgICAgICAg aWYgKCB1bmxpa2VseShyYyA8IDApICkKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAg cmMgPSAwOwotCi0gICAgICAgIGFkanVzdF9ndWVzdF9sNGUobmw0ZSwgZCk7Ci0gICAgICAgIGlm ICggdW5saWtlbHkoIVVQREFURV9FTlRSWShsNCwgcGw0ZSwgb2w0ZSwgbmw0ZSwgcGZuLCB2Y3B1 LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIG9sNGUgPSBubDRlOwotICAgICAgICAgICAgcmMgPSAtRUZB VUxUOwotICAgICAgICB9Ci0gICAgfQotICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VO VFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCi0gICAgewotICAgICAgICByZXR1cm4g LUVGQVVMVDsKLSAgICB9Ci0KLSAgICBwdXRfcGFnZV9mcm9tX2w0ZShvbDRlLCBwZm4sIDAsIDEp OwotICAgIHJldHVybiByYzsKLX0KLQogc3RhdGljIGludCBjbGVhbnVwX3BhZ2VfY2FjaGVhdHRy KHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UpCiB7CiAgICAgdW5zaWduZWQgaW50IGNhY2hlYXR0ciA9 CkBAIC0xODg2LDExMjcgKzE2MDIsOTYgQEAgaW50IHZjcHVfZGVzdHJveV9wYWdldGFibGVzKHN0 cnVjdCB2Y3B1ICp2KQogICAgIHJldHVybiByYyAhPSAtRUlOVFIgPyByYyA6IC1FUkVTVEFSVDsK IH0KIAotaW50IHB2X25ld19ndWVzdF9jcjModW5zaWduZWQgbG9uZyBtZm4pCitpbnQgZG9uYXRl X3BhZ2UoCisgICAgc3RydWN0IGRvbWFpbiAqZCwgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5z aWduZWQgaW50IG1lbWZsYWdzKQogewotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3VycmVudDsK LSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBpbnQgcmM7Ci0g ICAgdW5zaWduZWQgbG9uZyBvbGRfYmFzZV9tZm47Ci0KLSAgICBpZiAoIGlzX3B2XzMyYml0X2Rv bWFpbihjdXJyZCkgKQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgbG9uZyBndF9tZm4gPSBwYWdl dGFibGVfZ2V0X3BmbihjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlKTsKLSAgICAgICAgbDRfcGdlbnRy eV90ICpwbDRlID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4oZ3RfbWZuKSk7Ci0KLSAgICAgICAgcmMg PSBtb2RfbDRfZW50cnkocGw0ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbDRlX2Zyb21f cGZuKG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChfUEFHRV9Q UkVTRU5UIHwgX1BBR0VfUlcgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9QQUdFX1VTRVIgfCBfUEFHRV9BQ0NFU1NFRCkpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICBndF9tZm4sIDAsIGN1cnIpOwotICAgICAgICB1bm1hcF9kb21haW5fcGFnZShwbDRlKTsK LSAgICAgICAgc3dpdGNoICggcmMgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgMDoKLSAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAgICAgY2FzZSAtRVJFU1RB UlQ6Ci0gICAgICAgICAgICByZXR1cm4gLUVSRVNUQVJUOwotICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAi RXJyb3Igd2hpbGUgaW5zdGFsbGluZyBuZXcgY29tcGF0IGJhc2VwdHIgJSIgUFJJX21mbiAiXG4i LAotICAgICAgICAgICAgICAgICAgICAgbWZuKTsKLSAgICAgICAgICAgIHJldHVybiByYzsKLSAg ICAgICAgfQorICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gZG9tX3hlbjsKIAotICAg ICAgICBwdl9pbnZhbGlkYXRlX3NoYWRvd19sZHQoY3VyciwgZmFsc2UpOwotICAgICAgICB3cml0 ZV9wdGJhc2UoY3Vycik7CisgICAgc3Bpbl9sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwogCi0g ICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpZiAoIGlzX3hlbl9oZWFwX3BhZ2UocGFnZSkg fHwgKChvd25lciA9IHBhZ2VfZ2V0X293bmVyKHBhZ2UpKSAhPSBOVUxMKSApCisgICAgICAgIGdv dG8gZmFpbDsKIAotICAgIHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKLSAgICBpZiAo IHVubGlrZWx5KHJjKSApCi0gICAgICAgIHJldHVybiByYzsKKyAgICBpZiAoIGQtPmlzX2R5aW5n ICkKKyAgICAgICAgZ290byBmYWlsOwogCi0gICAgb2xkX2Jhc2VfbWZuID0gcGFnZXRhYmxlX2dl dF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90YWJsZSk7Ci0gICAgLyoKLSAgICAgKiBUaGlzIGlzIHBh cnRpY3VsYXJseSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRlciB0aGUKLSAg ICAgKiBwcmV2aW91cyBhdHRlbXB0IGdvdCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1vbGQtTUZOIHBo YXNlLgotICAgICAqLwotICAgIGlmICggb2xkX2Jhc2VfbWZuID09IG1mbiApCi0gICAgewotICAg ICAgICB3cml0ZV9wdGJhc2UoY3Vycik7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBp ZiAoIHBhZ2UtPmNvdW50X2luZm8gJiB+KFBHQ19hbGxvY2F0ZWQgfCAxKSApCisgICAgICAgIGdv dG8gZmFpbDsKIAotICAgIHJjID0gcGFnaW5nX21vZGVfcmVmY291bnRzKGN1cnJkKQotICAgICAg ICAgPyAoZ2V0X3BhZ2VfZnJvbV9tZm4oX21mbihtZm4pLCBjdXJyZCkgPyAwIDogLUVJTlZBTCkK LSAgICAgICAgIDogZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oX21mbihtZm4pLCBQR1Rfcm9v dF9wYWdlX3RhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJy ZCwgMCwgdHJ1ZSk7Ci0gICAgc3dpdGNoICggcmMgKQorICAgIGlmICggIShtZW1mbGFncyAmIE1F TUZfbm9fcmVmY291bnQpICkKICAgICB7Ci0gICAgY2FzZSAwOgotICAgICAgICBicmVhazsKLSAg ICBjYXNlIC1FSU5UUjoKLSAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgcmV0dXJuIC1FUkVT VEFSVDsKLSAgICBkZWZhdWx0OgotICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAg ICAgICAgICAgICAgICAgIkVycm9yIHdoaWxlIGluc3RhbGxpbmcgbmV3IGJhc2VwdHIgJSIgUFJJ X21mbiAiXG4iLCBtZm4pOwotICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIGlmICggZC0+dG90 X3BhZ2VzID49IGQtPm1heF9wYWdlcyApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAg IGRvbWFpbl9hZGp1c3RfdG90X3BhZ2VzKGQsIDEpOwogICAgIH0KIAotICAgIHB2X2ludmFsaWRh dGVfc2hhZG93X2xkdChjdXJyLCBmYWxzZSk7Ci0KLSAgICBpZiAoICFWTV9BU1NJU1QoY3VycmQs IG0ycF9zdHJpY3QpICYmICFwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpICkKLSAgICAgICAg ZmlsbF9yb19tcHQobWZuKTsKLSAgICBjdXJyLT5hcmNoLmd1ZXN0X3RhYmxlID0gcGFnZXRhYmxl X2Zyb21fcGZuKG1mbik7Ci0gICAgdXBkYXRlX2NyMyhjdXJyKTsKLQotICAgIHdyaXRlX3B0YmFz ZShjdXJyKTsKLQotICAgIGlmICggbGlrZWx5KG9sZF9iYXNlX21mbiAhPSAwKSApCi0gICAgewot ICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2Uob2xkX2Jhc2VfbWZu KTsKKyAgICBwYWdlLT5jb3VudF9pbmZvID0gUEdDX2FsbG9jYXRlZCB8IDE7CisgICAgcGFnZV9z ZXRfb3duZXIocGFnZSwgZCk7CisgICAgcGFnZV9saXN0X2FkZF90YWlsKHBhZ2UsJmQtPnBhZ2Vf bGlzdCk7CiAKLSAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpICkKLSAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzd2l0 Y2ggKCByYyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKLSAgICAgICAg ICAgIHsKLSAgICAgICAgICAgIGNhc2UgLUVJTlRSOgotICAgICAgICAgICAgICAgIHJjID0gLUVS RVNUQVJUOwotICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICBj YXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJs ZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBkZWZhdWx0Ogot ICAgICAgICAgICAgICAgIEJVR19PTihyYyk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0gICAgfQorICAgIHNwaW5fdW5sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwor ICAgIHJldHVybiAwOwogCi0gICAgcmV0dXJuIHJjOworIGZhaWw6CisgICAgc3Bpbl91bmxvY2so JmQtPnBhZ2VfYWxsb2NfbG9jayk7CisgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQg ZG9uYXRlIG1mbiAlIiBQUklfbWZuCisgICAgICAgICAgICAgIiB0byBkJWQgKG93bmVyIGQlZCkg Y2FmPSUwOGx4IHRhZj0lIiBQUnR5cGVfaW5mbyAiXG4iLAorICAgICAgICAgICAgIHBhZ2VfdG9f bWZuKHBhZ2UpLCBkLT5kb21haW5faWQsCisgICAgICAgICAgICAgb3duZXIgPyBvd25lci0+ZG9t YWluX2lkIDogRE9NSURfSU5WQUxJRCwKKyAgICAgICAgICAgICBwYWdlLT5jb3VudF9pbmZvLCBw YWdlLT51LmludXNlLnR5cGVfaW5mbyk7CisgICAgcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRp YyBzdHJ1Y3QgZG9tYWluICpnZXRfcGdfb3duZXIoZG9taWRfdCBkb21pZCkKK2ludCBzdGVhbF9w YWdlKAorICAgIHN0cnVjdCBkb21haW4gKmQsIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIHVuc2ln bmVkIGludCBtZW1mbGFncykKIHsKLSAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lciA9IE5VTEws ICpjdXJyID0gY3VycmVudC0+ZG9tYWluOworICAgIHVuc2lnbmVkIGxvbmcgeCwgeTsKKyAgICBi b29sIGRyb3BfZG9tX3JlZiA9IGZhbHNlOworICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVy ID0gZG9tX3hlbjsKIAotICAgIGlmICggbGlrZWx5KGRvbWlkID09IERPTUlEX1NFTEYpICkKLSAg ICB7Ci0gICAgICAgIHBnX293bmVyID0gcmN1X2xvY2tfY3VycmVudF9kb21haW4oKTsKLSAgICAg ICAgZ290byBvdXQ7Ci0gICAgfQorICAgIGlmICggcGFnaW5nX21vZGVfZXh0ZXJuYWwoZCkgKQor ICAgICAgICByZXR1cm4gLUVPUE5PVFNVUFA7CiAKLSAgICBpZiAoIHVubGlrZWx5KGRvbWlkID09 IGN1cnItPmRvbWFpbl9pZCkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJDYW5ub3Qgc3BlY2lmeSBpdHNlbGYgYXMgZm9yZWlnbiBkb21haW5cbiIpOwotICAgICAg ICBnb3RvIG91dDsKLSAgICB9CisgICAgc3Bpbl9sb2NrKCZkLT5wYWdlX2FsbG9jX2xvY2spOwog Ci0gICAgc3dpdGNoICggZG9taWQgKQotICAgIHsKLSAgICBjYXNlIERPTUlEX0lPOgotICAgICAg ICBwZ19vd25lciA9IHJjdV9sb2NrX2RvbWFpbihkb21faW8pOwotICAgICAgICBicmVhazsKLSAg ICBjYXNlIERPTUlEX1hFTjoKLSAgICAgICAgcGdfb3duZXIgPSByY3VfbG9ja19kb21haW4oZG9t X3hlbik7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIGlmICggKHBnX293 bmVyID0gcmN1X2xvY2tfZG9tYWluX2J5X2lkKGRvbWlkKSkgPT0gTlVMTCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiVW5rbm93biBkb21haW4gZCVk XG4iLCBkb21pZCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBicmVh azsKLSAgICB9CisgICAgaWYgKCBpc194ZW5faGVhcF9wYWdlKHBhZ2UpIHx8ICgob3duZXIgPSBw YWdlX2dldF9vd25lcihwYWdlKSkgIT0gZCkgKQorICAgICAgICBnb3RvIGZhaWw7CiAKLSBvdXQ6 Ci0gICAgcmV0dXJuIHBnX293bmVyOwotfQorICAgIC8qCisgICAgICogV2UgcmVxdWlyZSB0aGVy ZSBpcyBqdXN0IG9uZSByZWZlcmVuY2UgKFBHQ19hbGxvY2F0ZWQpLiBXZSB0ZW1wb3JhcmlseQor ICAgICAqIGRyb3AgdGhpcyByZWZlcmVuY2Ugbm93IHNvIHRoYXQgd2UgY2FuIHNhZmVseSBzd2l6 emxlIHRoZSBvd25lci4KKyAgICAgKi8KKyAgICB5ID0gcGFnZS0+Y291bnRfaW5mbzsKKyAgICBk byB7CisgICAgICAgIHggPSB5OworICAgICAgICBpZiAoICh4ICYgKFBHQ19jb3VudF9tYXNrfFBH Q19hbGxvY2F0ZWQpKSAhPSAoMSB8IFBHQ19hbGxvY2F0ZWQpICkKKyAgICAgICAgICAgIGdvdG8g ZmFpbDsKKyAgICAgICAgeSA9IGNtcHhjaGcoJnBhZ2UtPmNvdW50X2luZm8sIHgsIHggJiB+UEdD X2NvdW50X21hc2spOworICAgIH0gd2hpbGUgKCB5ICE9IHggKTsKIAotc3RhdGljIHZvaWQgcHV0 X3BnX293bmVyKHN0cnVjdCBkb21haW4gKnBnX293bmVyKQotewotICAgIHJjdV91bmxvY2tfZG9t YWluKHBnX293bmVyKTsKLX0KKyAgICAvKgorICAgICAqIFdpdGggdGhlIHNvbGUgcmVmZXJlbmNl IGRyb3BwZWQgdGVtcG9yYXJpbHksIG5vLW9uZSBjYW4gdXBkYXRlIHR5cGUKKyAgICAgKiBpbmZv cm1hdGlvbi4gVHlwZSBjb3VudCBhbHNvIG5lZWRzIHRvIGJlIHplcm8gaW4gdGhpcyBjYXNlLCBi dXQgZS5nLgorICAgICAqIFBHVF9zZWdfZGVzY19wYWdlIG1heSBzdGlsbCBoYXZlIFBHVF92YWxp ZGF0ZWQgc2V0LCB3aGljaCB3ZSBuZWVkIHRvCisgICAgICogY2xlYXIgYmVmb3JlIHRyYW5zZmVy cmluZyBvd25lcnNoaXAgKGFzIHZhbGlkYXRpb24gY3JpdGVyaWEgdmFyeQorICAgICAqIGRlcGVu ZGluZyBvbiBkb21haW4gdHlwZSkuCisgICAgICovCisgICAgQlVHX09OKHBhZ2UtPnUuaW51c2Uu dHlwZV9pbmZvICYgKFBHVF9jb3VudF9tYXNrIHwgUEdUX2xvY2tlZCB8CisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFBHVF9waW5uZWQpKTsKKyAgICBwYWdlLT51LmludXNl LnR5cGVfaW5mbyA9IDA7CiAKLXN0YXRpYyBpbmxpbmUgaW50IHZjcHVtYXNrX3RvX3BjcHVtYXNr KAotICAgIHN0cnVjdCBkb21haW4gKmQsIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0oY29uc3Rfdm9p ZCkgYm1hcCwgY3B1bWFza190ICpwbWFzaykKLXsKLSAgICB1bnNpZ25lZCBpbnQgdmNwdV9pZCwg dmNwdV9iaWFzLCBvZmZzOwotICAgIHVuc2lnbmVkIGxvbmcgdm1hc2s7Ci0gICAgc3RydWN0IHZj cHUgKnY7Ci0gICAgYm9vbCBpc19uYXRpdmUgPSAhaXNfcHZfMzJiaXRfZG9tYWluKGQpOworICAg IC8qIFN3aXp6bGUgdGhlIG93bmVyIHRoZW4gcmVpbnN0YXRlIHRoZSBQR0NfYWxsb2NhdGVkIHJl ZmVyZW5jZS4gKi8KKyAgICBwYWdlX3NldF9vd25lcihwYWdlLCBOVUxMKTsKKyAgICB5ID0gcGFn ZS0+Y291bnRfaW5mbzsKKyAgICBkbyB7CisgICAgICAgIHggPSB5OworICAgICAgICBCVUdfT04o KHggJiAoUEdDX2NvdW50X21hc2t8UEdDX2FsbG9jYXRlZCkpICE9IFBHQ19hbGxvY2F0ZWQpOwor ICAgIH0gd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBhZ2UtPmNvdW50X2luZm8sIHgsIHggfCAxKSkg IT0geCApOwogCi0gICAgY3B1bWFza19jbGVhcihwbWFzayk7Ci0gICAgZm9yICggdm1hc2sgPSAw LCBvZmZzID0gMDsgOyArK29mZnMgKQotICAgIHsKLSAgICAgICAgdmNwdV9iaWFzID0gb2ZmcyAq IChpc19uYXRpdmUgPyBCSVRTX1BFUl9MT05HIDogMzIpOwotICAgICAgICBpZiAoIHZjcHVfYmlh cyA+PSBkLT5tYXhfdmNwdXMgKQotICAgICAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAgICAgaWYg KCB1bmxpa2VseShpc19uYXRpdmUgPwotICAgICAgICAgICAgICAgICAgICAgIGNvcHlfZnJvbV9n dWVzdF9vZmZzZXQoJnZtYXNrLCBibWFwLCBvZmZzLCAxKSA6Ci0gICAgICAgICAgICAgICAgICAg ICAgY29weV9mcm9tX2d1ZXN0X29mZnNldCgodW5zaWduZWQgaW50ICopJnZtYXNrLCBibWFwLAot ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2ZmcywgMSkpICkK LSAgICAgICAgewotICAgICAgICAgICAgY3B1bWFza19jbGVhcihwbWFzayk7Ci0gICAgICAgICAg ICByZXR1cm4gLUVGQVVMVDsKLSAgICAgICAgfQotCi0gICAgICAgIHdoaWxlICggdm1hc2sgKQot ICAgICAgICB7Ci0gICAgICAgICAgICB2Y3B1X2lkID0gZmluZF9maXJzdF9zZXRfYml0KHZtYXNr KTsKLSAgICAgICAgICAgIHZtYXNrICY9IH4oMVVMIDw8IHZjcHVfaWQpOwotICAgICAgICAgICAg dmNwdV9pZCArPSB2Y3B1X2JpYXM7Ci0gICAgICAgICAgICBpZiAoICh2Y3B1X2lkID49IGQtPm1h eF92Y3B1cykgKQotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgaWYgKCAo KHYgPSBkLT52Y3B1W3ZjcHVfaWRdKSAhPSBOVUxMKSApCi0gICAgICAgICAgICAgICAgY3B1bWFz a19vcihwbWFzaywgcG1hc2ssIHYtPnZjcHVfZGlydHlfY3B1bWFzayk7Ci0gICAgICAgIH0KLSAg ICB9Ci19Ci0KLWxvbmcgZG9fbW11ZXh0X29wKAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0o bW11ZXh0X29wX3QpIHVvcHMsCi0gICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgIFhFTl9HVUVT VF9IQU5ETEVfUEFSQU0odWludCkgcGRvbmUsCi0gICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20p Ci17Ci0gICAgc3RydWN0IG1tdWV4dF9vcCBvcDsKLSAgICB1bnNpZ25lZCBsb25nIHR5cGU7Ci0g ICAgdW5zaWduZWQgaW50IGksIGRvbmUgPSAwOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJyID0gY3Vy cmVudDsKLSAgICBzdHJ1Y3QgZG9tYWluICpjdXJyZCA9IGN1cnItPmRvbWFpbjsKLSAgICBzdHJ1 Y3QgZG9tYWluICpwZ19vd25lcjsKLSAgICBpbnQgcmMgPSBwdXRfb2xkX2d1ZXN0X3RhYmxlKGN1 cnIpOwotCi0gICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgIHsKLSAgICAgICAgaWYgKCBsaWtl bHkocmMgPT0gLUVSRVNUQVJUKSApCi0gICAgICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVf Y29udGludWF0aW9uKAotICAgICAgICAgICAgICAgICAgICAgX19IWVBFUlZJU09SX21tdWV4dF9v cCwgImhpaGkiLCB1b3BzLCBjb3VudCwgcGRvbmUsCi0gICAgICAgICAgICAgICAgICAgICBmb3Jl aWduZG9tKTsKLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHko Y291bnQgPT0gTU1VX1VQREFURV9QUkVFTVBURUQpICYmCi0gICAgICAgICBsaWtlbHkoZ3Vlc3Rf aGFuZGxlX2lzX251bGwodW9wcykpICkKLSAgICB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFNl ZSB0aGUgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgcmVsYXRlZAotICAgICAgICAgKiBoeXBl cmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigpIGJlbG93LgotICAgICAgICAgKi8KLSAgICAgICAg cmV0dXJuIChpbnQpZm9yZWlnbmRvbTsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KGNvdW50 ICYgTU1VX1VQREFURV9QUkVFTVBURUQpICkKLSAgICB7Ci0gICAgICAgIGNvdW50ICY9IH5NTVVf VVBEQVRFX1BSRUVNUFRFRDsKLSAgICAgICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lz X251bGwocGRvbmUpKSApCi0gICAgICAgICAgICAodm9pZCljb3B5X2Zyb21fZ3Vlc3QoJmRvbmUs IHBkb25lLCAxKTsKLSAgICB9Ci0gICAgZWxzZQotICAgICAgICBwZXJmY19pbmNyKGNhbGxzX3Rv X21tdWV4dF9vcCk7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1b3Bz LCBjb3VudCkpICkKLSAgICAgICAgcmV0dXJuIC1FRkFVTFQ7Ci0KLSAgICBpZiAoIChwZ19vd25l ciA9IGdldF9wZ19vd25lcihmb3JlaWduZG9tKSkgPT0gTlVMTCApCi0gICAgICAgIHJldHVybiAt RVNSQ0g7Ci0KLSAgICBpZiAoICFpc19wdl9kb21haW4ocGdfb3duZXIpICkKLSAgICB7Ci0gICAg ICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Ci0gICAgICAgIHJldHVybiAtRUlOVkFMOwotICAg IH0KLQotICAgIHJjID0geHNtX21tdWV4dF9vcChYU01fVEFSR0VULCBjdXJyZCwgcGdfb3duZXIp OwotICAgIGlmICggcmMgKQotICAgIHsKLSAgICAgICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsK LSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7 IGkrKyApCi0gICAgewotICAgICAgICBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8 IChpICYmIGh5cGVyY2FsbF9wcmVlbXB0X2NoZWNrKCkpICkKLSAgICAgICAgewotICAgICAgICAg ICAgcmMgPSAtRVJFU1RBUlQ7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAg ICAgIGlmICggdW5saWtlbHkoX19jb3B5X2Zyb21fZ3Vlc3QoJm9wLCB1b3BzLCAxKSAhPSAwKSAp Ci0gICAgICAgIHsKLSAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKLSAgICAgICAgICAgIGJyZWFr OwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKCBpc19odm1fZG9tYWluKGN1cnJkKSApCi0gICAg ICAgIHsKLSAgICAgICAgICAgIHN3aXRjaCAoIG9wLmNtZCApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDFfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1NVUVY VF9QSU5fTDJfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDNfVEFCTEU6Ci0g ICAgICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDRfVEFCTEU6Ci0gICAgICAgICAgICBjYXNlIE1N VUVYVF9VTlBJTl9UQUJMRToKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRl ZmF1bHQ6Ci0gICAgICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgICAg ICBnb3RvIGRvbmU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICByYyA9IDA7 Ci0KLSAgICAgICAgc3dpdGNoICggb3AuY21kICkKLSAgICAgICAgewotICAgICAgICAgICAgc3Ry dWN0IHBhZ2VfaW5mbyAqcGFnZTsKLSAgICAgICAgICAgIHAybV90eXBlX3QgcDJtdDsKLQotICAg ICAgICBjYXNlIE1NVUVYVF9QSU5fTDFfVEFCTEU6Ci0gICAgICAgICAgICB0eXBlID0gUEdUX2wx X3BhZ2VfdGFibGU7Ci0gICAgICAgICAgICBnb3RvIHBpbl9wYWdlOwotCi0gICAgICAgIGNhc2Ug TU1VRVhUX1BJTl9MMl9UQUJMRToKLSAgICAgICAgICAgIHR5cGUgPSBQR1RfbDJfcGFnZV90YWJs ZTsKLSAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfUElO X0wzX1RBQkxFOgotICAgICAgICAgICAgdHlwZSA9IFBHVF9sM19wYWdlX3RhYmxlOwotICAgICAg ICAgICAgZ290byBwaW5fcGFnZTsKLQotICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDRfVEFCTEU6 Ci0gICAgICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihwZ19vd25lcikgKQotICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgdHlwZSA9IFBHVF9sNF9wYWdlX3RhYmxlOwot Ci0gICAgICAgIHBpbl9wYWdlOgotICAgICAgICAgICAgLyogSWdub3JlIHBpbm5pbmcgb2YgaW52 YWxpZCBwYWdpbmcgbGV2ZWxzLiAqLwotICAgICAgICAgICAgaWYgKCAob3AuY21kIC0gTU1VRVhU X1BJTl9MMV9UQUJMRSkgPiAoQ09ORklHX1BBR0lOR19MRVZFTFMgLSAxKSApCi0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICggcGFnaW5nX21vZGVfcmVmY291bnRzKHBn X293bmVyKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIHBhZ2UgPSBn ZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sIE5VTEwsIFAyTV9BTExPQyk7 Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFwYWdlKSApCi0gICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICByYyA9IGdldF9wYWdlX3R5cGVfcHJlZW1wdGlibGUocGFn ZSwgdHlwZSk7Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgaWYgKCByYyA9PSAtRUlOVFIgKQotICAgICAgICAgICAgICAgICAg ICByYyA9IC1FUkVTVEFSVDsKLSAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVSRVNU QVJUICkKLSAgICAgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciAlZCB3aGlsZSBwaW5uaW5nIG1mbiAlIiBQ UklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHBhZ2VfdG9fbWZu KHBhZ2UpKTsKLSAgICAgICAgICAgICAgICBpZiAoIHBhZ2UgIT0gY3Vyci0+YXJjaC5vbGRfZ3Vl c3RfdGFibGUgKQotICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAg ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcmMgPSB4c21fbWVt b3J5X3Bpbl9wYWdlKFhTTV9IT09LLCBjdXJyZCwgcGdfb3duZXIsIHBhZ2UpOwotICAgICAgICAg ICAgaWYgKCAhcmMgJiYgdW5saWtlbHkodGVzdF9hbmRfc2V0X2JpdChfUEdUX3Bpbm5lZCwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2UtPnUu aW51c2UudHlwZV9pbmZvKSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJ X21mbiAiIGFscmVhZHkgcGlubmVkXG4iLCBwYWdlX3RvX21mbihwYWdlKSk7Ci0gICAgICAgICAg ICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIHVu bGlrZWx5KHJjKSApCi0gICAgICAgICAgICAgICAgZ290byBwaW5fZHJvcDsKLQotICAgICAgICAg ICAgLyogQSBwYWdlIGlzIGRpcnRpZWQgd2hlbiBpdHMgcGluIHN0YXR1cyBpcyBzZXQuICovCi0g ICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihw YWdlKSkpOwotCi0gICAgICAgICAgICAvKiBXZSBjYW4gcmFjZSBkb21haW4gZGVzdHJ1Y3Rpb24g KGRvbWFpbl9yZWxpbnF1aXNoX3Jlc291cmNlcykuICovCi0gICAgICAgICAgICBpZiAoIHVubGlr ZWx5KHBnX293bmVyICE9IGN1cnJkKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAg Ym9vbCBkcm9wX3JlZjsKLQotICAgICAgICAgICAgICAgIHNwaW5fbG9jaygmcGdfb3duZXItPnBh Z2VfYWxsb2NfbG9jayk7Ci0gICAgICAgICAgICAgICAgZHJvcF9yZWYgPSAocGdfb3duZXItPmlz X2R5aW5nICYmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVzdF9hbmRfY2xlYXJfYml0 KF9QR1RfcGlubmVkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8pKTsKLSAgICAgICAgICAgICAgICBzcGluX3Vu bG9jaygmcGdfb3duZXItPnBhZ2VfYWxsb2NfbG9jayk7Ci0gICAgICAgICAgICAgICAgaWYgKCBk cm9wX3JlZiApCi0gICAgICAgICAgICAgICAgewotICAgICAgICBwaW5fZHJvcDoKLSAgICAgICAg ICAgICAgICAgICAgaWYgKCB0eXBlID09IFBHVF9sMV9wYWdlX3RhYmxlICkKLSAgICAgICAgICAg ICAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwotICAgICAgICAgICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJs ZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAg YnJlYWs7Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfVU5QSU5fVEFCTEU6Ci0gICAgICAgICAgICBp ZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIGJy ZWFrOwotCi0gICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9w LmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgh cGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJtZm4gJSIgUFJJX21mbiAiIGJhZCwg b3IgYmFkIG93bmVyIGQlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBvcC5hcmcxLm1m biwgcGdfb3duZXItPmRvbWFpbl9pZCk7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwot ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo ICF0ZXN0X2FuZF9jbGVhcl9iaXQoX1BHVF9waW5uZWQsICZwYWdlLT51LmludXNlLnR5cGVfaW5m bykgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAg ICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAg ICAgICAgICJtZm4gJSIgUFJJX21mbiAiIG5vdCBwaW5uZWRcbiIsIG9wLmFyZzEubWZuKTsKLSAg ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoIHJjID0gcHV0X3BhZ2VfYW5kX3R5cGVf cHJlZW1wdGlibGUocGFnZSkgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgY2FzZSAtRUlO VFI6Ci0gICAgICAgICAgICBjYXNlIC1FUkVTVEFSVDoKLSAgICAgICAgICAgICAgICBjdXJyLT5h cmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7Ci0gICAgICAgICAgICAgICAgcmMgPSAwOwotICAg ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg ICBCVUdfT04ocmMpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAg ICAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0KLSAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0 aWVkIHdoZW4gaXRzIHBpbiBzdGF0dXMgaXMgY2xlYXJlZC4gKi8KLSAgICAgICAgICAgIHBhZ2lu Z19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7Ci0gICAgICAg ICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9ORVdfQkFTRVBUUjoKLSAgICAgICAg ICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICBy YyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90 cmFuc2xhdGUoY3VycmQpKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAg ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJjID0gcHZfbmV3X2d1ZXN0X2NyMyhvcC5hcmcx Lm1mbik7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9ORVdfVVNF Ul9CQVNFUFRSOiB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBsb25nIG9sZF9tZm47Ci0KLSAgICAg ICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKLSAgICAgICAgICAgICAg ICByYyA9IC1FUEVSTTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9k ZV90cmFuc2xhdGUoY3VycmQpKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgICAgICBvbGRfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4oY3Vyci0+YXJjaC5ndWVzdF90 YWJsZV91c2VyKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIHBhcnRp Y3VsYXJseSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRlciB0aGUKLSAgICAg ICAgICAgICAqIHByZXZpb3VzIGF0dGVtcHQgZ290IHByZWVtcHRlZCBpbiB0aGUgcHV0LW9sZC1N Rk4gcGhhc2UuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggb2xkX21mbiA9PSBv cC5hcmcxLm1mbiApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIGlmICgg b3AuYXJnMS5tZm4gIT0gMCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmMgPSBn ZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbigKLSAgICAgICAgICAgICAgICAgICAgX21mbihvcC5h cmcxLm1mbiksIFBHVF9yb290X3BhZ2VfdGFibGUsIGN1cnJkLCAwLCB0cnVlKTsKLQotICAgICAg ICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAgICAgICB7Ci0gICAgICAg ICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKLSAgICAgICAgICAgICAgICAgICAgICAg IHJjID0gLUVSRVNUQVJUOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICggcmMgIT0gLUVS RVNUQVJUICkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5H LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yICVkIGluc3RhbGxpbmcg bmV3IG1mbiAlIiBQUklfbWZuICJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICByYywgb3AuYXJnMS5tZm4pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg ICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoIFZNX0FTU0lTVChjdXJyZCwgbTJwX3N0 cmljdCkgKQotICAgICAgICAgICAgICAgICAgICB6YXBfcm9fbXB0KG9wLmFyZzEubWZuKTsKLSAg ICAgICAgICAgIH0KLQotICAgICAgICAgICAgY3Vyci0+YXJjaC5ndWVzdF90YWJsZV91c2VyID0g cGFnZXRhYmxlX2Zyb21fcGZuKG9wLmFyZzEubWZuKTsKLQotICAgICAgICAgICAgaWYgKCBvbGRf bWZuICE9IDAgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHBhZ2UgPSBtZm5fdG9f cGFnZShvbGRfbWZuKTsKLQotICAgICAgICAgICAgICAgIHN3aXRjaCAoIHJjID0gcHV0X3BhZ2Vf YW5kX3R5cGVfcHJlZW1wdGlibGUocGFnZSkgKQotICAgICAgICAgICAgICAgIHsKLSAgICAgICAg ICAgICAgICBjYXNlIC1FSU5UUjoKLSAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7 Ci0gICAgICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCi0gICAgICAgICAgICAgICAg Y2FzZSAtRVJFU1RBUlQ6Ci0gICAgICAgICAgICAgICAgICAgIGN1cnItPmFyY2gub2xkX2d1ZXN0 X3RhYmxlID0gcGFnZTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg ICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgQlVHX09OKHJjKTsKLSAgICAgICAgICAg ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotCi0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgfQotCi0gICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVT SF9MT0NBTDoKLSAgICAgICAgICAgIGlmICggbGlrZWx5KGN1cnJkID09IHBnX293bmVyKSApCi0g ICAgICAgICAgICAgICAgZmx1c2hfdGxiX2xvY2FsKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBj YXNlIE1NVUVYVF9JTlZMUEdfTE9DQUw6Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJk ICE9IHBnX293bmVyKSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAg ICBlbHNlCi0gICAgICAgICAgICAgICAgcGFnaW5nX2ludmxwZyhjdXJyLCBvcC5hcmcxLmxpbmVh cl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX1RMQl9G TFVTSF9NVUxUSToKLSAgICAgICAgY2FzZSBNTVVFWFRfSU5WTFBHX01VTFRJOgotICAgICAgICB7 Ci0gICAgICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2sp OwotCi0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCi0gICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggdW5saWtlbHko dmNwdW1hc2tfdG9fcGNwdW1hc2soY3VycmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGd1ZXN0X2hhbmRsZV90b19wYXJhbShvcC5hcmcyLnZjcHVtYXNrLAotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rfdm9p ZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2spKSApCi0gICAgICAg ICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQot ICAgICAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgICAgICBpZiAoIG9wLmNtZCA9PSBNTVVF WFRfVExCX0ZMVVNIX01VTFRJICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbWFzayhtYXNr KTsKLSAgICAgICAgICAgIGVsc2UgaWYgKCBfX2FkZHJfb2sob3AuYXJnMS5saW5lYXJfYWRkcikg KQotICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9vbmVfbWFzayhtYXNrLCBvcC5hcmcxLmxpbmVh cl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBN TVVFWFRfVExCX0ZMVVNIX0FMTDoKLSAgICAgICAgICAgIGlmICggbGlrZWx5KGN1cnJkID09IHBn X293bmVyKSApCi0gICAgICAgICAgICAgICAgZmx1c2hfdGxiX21hc2soY3VycmQtPmRvbWFpbl9k aXJ0eV9jcHVtYXNrKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICByYyA9IC1F UEVSTTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGNhc2UgTU1VRVhUX0lOVkxQR19B TEw6Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBnX293bmVyKSApCi0gICAg ICAgICAgICAgICAgcmMgPSAtRVBFUk07Ci0gICAgICAgICAgICBlbHNlIGlmICggX19hZGRyX29r KG9wLmFyZzEubGluZWFyX2FkZHIpICkKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfb25lX21h c2soY3VycmQtPmRvbWFpbl9kaXJ0eV9jcHVtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBvcC5hcmcxLmxpbmVhcl9hZGRyKTsKLSAgICAgICAgICAgIGJyZWFrOwotCi0g ICAgICAgIGNhc2UgTU1VRVhUX0ZMVVNIX0NBQ0hFOgotICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eShjdXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAg ICAgICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmQp KSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUFDQ0VTOwotICAgICAgICAgICAgZWxzZQotICAg ICAgICAgICAgICAgIHdiaW52ZCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgY2Fz ZSBNTVVFWFRfRkxVU0hfQ0FDSEVfR0xPQkFMOgotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShj dXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOwotICAgICAg ICAgICAgZWxzZSBpZiAoIGxpa2VseShjYWNoZV9mbHVzaF9wZXJtaXR0ZWQoY3VycmQpKSApCi0g ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNwdTsKLSAgICAgICAg ICAgICAgICBjcHVtYXNrX3QgKm1hc2sgPSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOwotCi0g ICAgICAgICAgICAgICAgY3B1bWFza19jbGVhcihtYXNrKTsKLSAgICAgICAgICAgICAgICBmb3Jf ZWFjaF9vbmxpbmVfY3B1KGNwdSkKLSAgICAgICAgICAgICAgICAgICAgaWYgKCAhY3B1bWFza19p bnRlcnNlY3RzKG1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZXJfY3B1KGNwdV9zaWJsaW5nX21hc2ssIGNwdSkpICkKLSAgICAgICAgICAgICAgICAg ICAgICAgIF9fY3B1bWFza19zZXRfY3B1KGNwdSwgbWFzayk7Ci0gICAgICAgICAgICAgICAgZmx1 c2hfbWFzayhtYXNrLCBGTFVTSF9DQUNIRSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBl bHNlCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgYnJlYWs7Ci0K LSAgICAgICAgY2FzZSBNTVVFWFRfU0VUX0xEVDoKLSAgICAgICAgewotICAgICAgICAgICAgdW5z aWduZWQgaW50IGVudHMgPSBvcC5hcmcyLm5yX2VudHM7Ci0gICAgICAgICAgICB1bnNpZ25lZCBs b25nIHB0ciA9IGVudHMgPyBvcC5hcmcxLmxpbmVhcl9hZGRyIDogMDsKLQotICAgICAgICAgICAg aWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQotICAgICAgICAgICAgICAgIHJjID0g LUVQRVJNOwotICAgICAgICAgICAgZWxzZSBpZiAoIHBhZ2luZ19tb2RlX2V4dGVybmFsKGN1cnJk KSApCi0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgZWxzZSBpZiAo ICgocHRyICYgKFBBR0VfU0laRSAtIDEpKSAhPSAwKSB8fCAhX19hZGRyX29rKHB0cikgfHwKLSAg ICAgICAgICAgICAgICAgICAgICAoZW50cyA+IDgxOTIpICkKLSAgICAgICAgICAgIHsKLSAgICAg ICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAg ICAgICAiQmFkIGFyZ3MgdG8gU0VUX0xEVDogcHRyPSVseCwgZW50cz0leFxuIiwgcHRyLCBlbnRz KTsKLSAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Ci0gICAgICAgICAgICB9Ci0gICAgICAg ICAgICBlbHNlIGlmICggKGN1cnItPmFyY2gucHZfdmNwdS5sZHRfZW50cyAhPSBlbnRzKSB8fAot ICAgICAgICAgICAgICAgICAgICAgIChjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgIT0gcHRy KSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcHZfaW52YWxpZGF0ZV9zaGFkb3df bGR0KGN1cnIsIGZhbHNlKTsKLSAgICAgICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKLSAg ICAgICAgICAgICAgICBjdXJyLT5hcmNoLnB2X3ZjcHUubGR0X2Jhc2UgPSBwdHI7Ci0gICAgICAg ICAgICAgICAgY3Vyci0+YXJjaC5wdl92Y3B1LmxkdF9lbnRzID0gZW50czsKLSAgICAgICAgICAg ICAgICBsb2FkX0xEVChjdXJyKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0KLSAgICAgICAgY2FzZSBNTVVFWFRfQ0xFQVJfUEFHRToKLSAgICAgICAgICAg IHBhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5tZm4sICZwMm10LCBQ Mk1fQUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncp ICYmIHBhZ2UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2Up OwotICAgICAgICAgICAgICAgIHBhZ2UgPSBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAg ICAgaWYgKCAhcGFnZSB8fCAhZ2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkg KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGlmICggcGFnZSApCi0gICAgICAgICAg ICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxP R19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBjbGVhcmluZyBtZm4g JSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlO VkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAg ICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY2xlYXJlZC4gKi8KLSAgICAg ICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5KHBnX293bmVyLCBfbWZuKHBhZ2VfdG9fbWZuKHBhZ2Up KSk7Ci0KLSAgICAgICAgICAgIGNsZWFyX2RvbWFpbl9wYWdlKF9tZm4ocGFnZV90b19tZm4ocGFn ZSkpKTsKLQotICAgICAgICAgICAgcHV0X3BhZ2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgICAgICAg ICBicmVhazsKLQotICAgICAgICBjYXNlIE1NVUVYVF9DT1BZX1BBR0U6Ci0gICAgICAgIHsKLSAg ICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnNyY19wYWdlLCAqZHN0X3BhZ2U7Ci0KLSAgICAg ICAgICAgIHNyY19wYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzIuc3Jj X21mbiwgJnAybXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFAy TV9BTExPQyk7Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KHAybXQgIT0gcDJtX3JhbV9ydykg JiYgc3JjX3BhZ2UgKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHB1dF9wYWdlKHNy Y19wYWdlKTsKLSAgICAgICAgICAgICAgICBzcmNfcGFnZSA9IE5VTEw7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KCFzcmNfcGFnZSkgKQotICAgICAgICAgICAgewot ICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAotICAgICAgICAgICAgICAg ICAgICAgICAgICJFcnJvciBjb3B5aW5nIGZyb20gbWZuICUiIFBSSV9tZm4gIlxuIiwKLSAgICAg ICAgICAgICAgICAgICAgICAgICBvcC5hcmcyLnNyY19tZm4pOwotICAgICAgICAgICAgICAgIHJj ID0gLUVJTlZBTDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAg ICAgICAgICAgZHN0X3BhZ2UgPSBnZXRfcGFnZV9mcm9tX2dmbihwZ19vd25lciwgb3AuYXJnMS5t Zm4sICZwMm10LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1f QUxMT0MpOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncpICYm IGRzdF9wYWdlICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBwdXRfcGFnZShkc3Rf cGFnZSk7Ci0gICAgICAgICAgICAgICAgZHN0X3BhZ2UgPSBOVUxMOwotICAgICAgICAgICAgfQot ICAgICAgICAgICAgcmMgPSAoZHN0X3BhZ2UgJiYKLSAgICAgICAgICAgICAgICAgIGdldF9wYWdl X3R5cGUoZHN0X3BhZ2UsIFBHVF93cml0YWJsZV9wYWdlKSkgPyAwIDogLUVJTlZBTDsKLSAgICAg ICAgICAgIGlmICggdW5saWtlbHkocmMpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAg ICBwdXRfcGFnZShzcmNfcGFnZSk7Ci0gICAgICAgICAgICAgICAgaWYgKCBkc3RfcGFnZSApCi0g ICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKGRzdF9wYWdlKTsKLSAgICAgICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3Ig Y29weWluZyB0byBtZm4gJSIgUFJJX21mbiAiXG4iLCBvcC5hcmcxLm1mbik7Ci0gICAgICAgICAg ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBk aXJ0aWVkIHdoZW4gaXQncyBiZWluZyBjb3BpZWQgdG8uICovCi0gICAgICAgICAgICBwYWdpbmdf bWFya19kaXJ0eShwZ19vd25lciwgX21mbihwYWdlX3RvX21mbihkc3RfcGFnZSkpKTsKLQotICAg ICAgICAgICAgY29weV9kb21haW5fcGFnZShfbWZuKHBhZ2VfdG9fbWZuKGRzdF9wYWdlKSksCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9tZm4ocGFnZV90b19tZm4oc3JjX3BhZ2UpKSk7 Ci0KLSAgICAgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKGRzdF9wYWdlKTsKLSAgICAgICAgICAg IHB1dF9wYWdlKHNyY19wYWdlKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0KLSAg ICAgICAgY2FzZSBNTVVFWFRfTUFSS19TVVBFUjoKLSAgICAgICAgY2FzZSBNTVVFWFRfVU5NQVJL X1NVUEVSOgotICAgICAgICAgICAgcmMgPSAtRU9QTk9UU1VQUDsKLSAgICAgICAgICAgIGJyZWFr OwotCi0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICByYyA9IC1FTk9TWVM7Ci0gICAgICAg ICAgICBicmVhazsKLSAgICAgICAgfQotCi0gZG9uZToKLSAgICAgICAgaWYgKCB1bmxpa2VseShy YykgKQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgZ3Vlc3RfaGFuZGxlX2FkZF9vZmZz ZXQodW9wcywgMSk7Ci0gICAgfQotCi0gICAgaWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAgIHsK LSAgICAgICAgQVNTRVJUKGkgPCBjb3VudCk7Ci0gICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0 ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11ZXh0X29wLCAiaGlo aSIsCi0gICAgICAgICAgICB1b3BzLCAoY291bnQgLSBpKSB8IE1NVV9VUERBVEVfUFJFRU1QVEVE LCBwZG9uZSwgZm9yZWlnbmRvbSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKCBjdXJyLT5hcmNoLm9s ZF9ndWVzdF90YWJsZSApCi0gICAgewotICAgICAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKHZv aWQpIG51bGw7Ci0KLSAgICAgICAgQVNTRVJUKHJjIHx8IGkgPT0gY291bnQpOwotICAgICAgICBz ZXRfeGVuX2d1ZXN0X2hhbmRsZShudWxsLCBOVUxMKTsKLSAgICAgICAgLyoKLSAgICAgICAgICog SW4gb3JkZXIgdG8gaGF2ZSBhIHdheSB0byBjb21tdW5pY2F0ZSB0aGUgZmluYWwgcmV0dXJuIHZh bHVlIHRvCi0gICAgICAgICAqIG91ciBjb250aW51YXRpb24sIHdlIHBhc3MgdGhpcyBpbiBwbGFj ZSBvZiAiZm9yZWlnbmRvbSIsIGJ1aWxkaW5nCi0gICAgICAgICAqIG9uIHRoZSBmYWN0IHRoYXQg dGhpcyBhcmd1bWVudCBpc24ndCBuZWVkZWQgYW55bW9yZS4KLSAgICAgICAgICovCi0gICAgICAg IHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oCi0gICAgICAgICAgICAgICAgX19I WVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGkiLCBudWxsLAotICAgICAgICAgICAgICAgIE1NVV9V UERBVEVfUFJFRU1QVEVELCBudWxsLCByYyk7Ci0gICAgfQotCi0gICAgcHV0X3BnX293bmVyKHBn X293bmVyKTsKLQotICAgIHBlcmZjX2FkZChudW1fbW11ZXh0X29wcywgaSk7Ci0KLSAgICAvKiBB ZGQgaW5jcmVtZW50YWwgd29yayB3ZSBoYXZlIGRvbmUgdG8gdGhlIEBkb25lIG91dHB1dCBwYXJh bWV0ZXIuICovCi0gICAgaWYgKCB1bmxpa2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUp KSApCi0gICAgewotICAgICAgICBkb25lICs9IGk7Ci0gICAgICAgIGNvcHlfdG9fZ3Vlc3QocGRv bmUsICZkb25lLCAxKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLWxvbmcgZG9fbW11 X3VwZGF0ZSgKLSAgICBYRU5fR1VFU1RfSEFORExFX1BBUkFNKG1tdV91cGRhdGVfdCkgdXJlcXMs Ci0gICAgdW5zaWduZWQgaW50IGNvdW50LAotICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odWlu dCkgcGRvbmUsCi0gICAgdW5zaWduZWQgaW50IGZvcmVpZ25kb20pCi17Ci0gICAgc3RydWN0IG1t dV91cGRhdGUgcmVxOwotICAgIHZvaWQgKnZhID0gTlVMTDsKLSAgICB1bnNpZ25lZCBsb25nIGdw Zm4sIGdtZm4sIG1mbjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwotICAgIHVuc2lnbmVk IGludCBjbWQsIGkgPSAwLCBkb25lID0gMCwgcHRfZG9tOwotICAgIHN0cnVjdCB2Y3B1ICpjdXJy ID0gY3VycmVudCwgKnYgPSBjdXJyOwotICAgIHN0cnVjdCBkb21haW4gKmQgPSB2LT5kb21haW4s ICpwdF9vd25lciA9IGQsICpwZ19vd25lcjsKLSAgICBtZm5fdCBtYXBfbWZuID0gSU5WQUxJRF9N Rk47Ci0gICAgdWludDMyX3QgeHNtX25lZWRlZCA9IDA7Ci0gICAgdWludDMyX3QgeHNtX2NoZWNr ZWQgPSAwOwotICAgIGludCByYyA9IHB1dF9vbGRfZ3Vlc3RfdGFibGUoY3Vycik7Ci0KLSAgICBp ZiAoIHVubGlrZWx5KHJjKSApCi0gICAgewotICAgICAgICBpZiAoIGxpa2VseShyYyA9PSAtRVJF U1RBUlQpICkKLSAgICAgICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24o Ci0gICAgICAgICAgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZSwgImhpaGkiLCB1 cmVxcywgY291bnQsIHBkb25lLAotICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbmRvbSk7Ci0g ICAgICAgIHJldHVybiByYzsKLSAgICB9Ci0KLSAgICBpZiAoIHVubGlrZWx5KGNvdW50ID09IE1N VV9VUERBVEVfUFJFRU1QVEVEKSAmJgotICAgICAgICAgbGlrZWx5KGd1ZXN0X2hhbmRsZV9pc19u dWxsKHVyZXFzKSkgKQotICAgIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogU2VlIHRoZSBjdXJy LT5hcmNoLm9sZF9ndWVzdF90YWJsZSByZWxhdGVkCi0gICAgICAgICAqIGh5cGVyY2FsbF9jcmVh dGVfY29udGludWF0aW9uKCkgYmVsb3cuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gKGlu dClmb3JlaWduZG9tOwotICAgIH0KLQotICAgIGlmICggdW5saWtlbHkoY291bnQgJiBNTVVfVVBE QVRFX1BSRUVNUFRFRCkgKQotICAgIHsKLSAgICAgICAgY291bnQgJj0gfk1NVV9VUERBVEVfUFJF RU1QVEVEOwotICAgICAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfaXNfbnVsbChwZG9u ZSkpICkKLSAgICAgICAgICAgICh2b2lkKWNvcHlfZnJvbV9ndWVzdCgmZG9uZSwgcGRvbmUsIDEp OwotICAgIH0KLSAgICBlbHNlCi0gICAgICAgIHBlcmZjX2luY3IoY2FsbHNfdG9fbW11X3VwZGF0 ZSk7Ci0KLSAgICBpZiAoIHVubGlrZWx5KCFndWVzdF9oYW5kbGVfb2theSh1cmVxcywgY291bnQp KSApCi0gICAgICAgIHJldHVybiAtRUZBVUxUOwotCi0gICAgaWYgKCAocHRfZG9tID0gZm9yZWln bmRvbSA+PiAxNikgIT0gMCApCi0gICAgewotICAgICAgICAvKiBQYWdldGFibGVzIGJlbG9uZyB0 byBhIGZvcmVpZ24gZG9tYWluIChQRkQpLiAqLwotICAgICAgICBpZiAoIChwdF9vd25lciA9IHJj dV9sb2NrX2RvbWFpbl9ieV9pZChwdF9kb20gLSAxKSkgPT0gTlVMTCApCi0gICAgICAgICAgICBy ZXR1cm4gLUVTUkNIOwotCi0gICAgICAgIGlmICggcHRfb3duZXIgPT0gZCApCi0gICAgICAgICAg ICByY3VfdW5sb2NrX2RvbWFpbihwdF9vd25lcik7Ci0gICAgICAgIGVsc2UgaWYgKCAhcHRfb3du ZXItPnZjcHUgfHwgKHYgPSBwdF9vd25lci0+dmNwdVswXSkgPT0gTlVMTCApCi0gICAgICAgIHsK LSAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKLSAgICAgICAgICAgIGdvdG8gb3V0OwotICAgICAg ICB9Ci0gICAgfQotCi0gICAgaWYgKCAocGdfb3duZXIgPSBnZXRfcGdfb3duZXIoKHVpbnQxNl90 KWZvcmVpZ25kb20pKSA9PSBOVUxMICkKLSAgICB7Ci0gICAgICAgIHJjID0gLUVTUkNIOwotICAg ICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysg KQotICAgIHsKLSAgICAgICAgaWYgKCBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSB8fCAoaSAm JiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVjaygpKSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJj ID0gLUVSRVNUQVJUOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLQotICAgICAgICBp ZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX2d1ZXN0KCZyZXEsIHVyZXFzLCAxKSAhPSAwKSApCi0g ICAgICAgIHsKLSAgICAgICAgICAgIHJjID0gLUVGQVVMVDsKLSAgICAgICAgICAgIGJyZWFrOwot ICAgICAgICB9Ci0KLSAgICAgICAgY21kID0gcmVxLnB0ciAmIChzaXplb2YobDFfcGdlbnRyeV90 KS0xKTsKLQotICAgICAgICBzd2l0Y2ggKCBjbWQgKQotICAgICAgICB7Ci0gICAgICAgICAgICAv KgotICAgICAgICAgICAgICogTU1VX05PUk1BTF9QVF9VUERBVEU6IE5vcm1hbCB1cGRhdGUgdG8g YW55IGxldmVsIG9mIHBhZ2UgdGFibGUuCi0gICAgICAgICAgICAgKiBNTVVfVVBEQVRFX1BUX1BS RVNFUlZFX0FEOiBBcyBhYm92ZSBidXQgYWxzbyBwcmVzZXJ2ZSAoT1IpCi0gICAgICAgICAgICAg KiBjdXJyZW50IEEvRCBiaXRzLgotICAgICAgICAgICAgICovCi0gICAgICAgIGNhc2UgTU1VX05P Uk1BTF9QVF9VUERBVEU6Ci0gICAgICAgIGNhc2UgTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRDoK LSAgICAgICAgewotICAgICAgICAgICAgcDJtX3R5cGVfdCBwMm10OwotCi0gICAgICAgICAgICBy YyA9IC1FT1BOT1RTVVBQOwotICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV9y ZWZjb3VudHMocHRfb3duZXIpKSApCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAg ICAgIHhzbV9uZWVkZWQgfD0gWFNNX01NVV9OT1JNQUxfVVBEQVRFOwotICAgICAgICAgICAgaWYg KCBnZXRfcHRlX2ZsYWdzKHJlcS52YWwpICYgX1BBR0VfUFJFU0VOVCApCi0gICAgICAgICAgICB7 Ci0gICAgICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX1VQREFURV9SRUFEOwotICAg ICAgICAgICAgICAgIGlmICggZ2V0X3B0ZV9mbGFncyhyZXEudmFsKSAmIF9QQUdFX1JXICkKLSAg ICAgICAgICAgICAgICAgICAgeHNtX25lZWRlZCB8PSBYU01fTU1VX1VQREFURV9XUklURTsKLSAg ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICggeHNtX25lZWRlZCAhPSB4c21fY2hlY2tlZCAp Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmMgPSB4c21fbW11X3VwZGF0ZShYU01f VEFSR0VULCBkLCBwdF9vd25lciwgcGdfb3duZXIsIHhzbV9uZWVkZWQpOwotICAgICAgICAgICAg ICAgIGlmICggcmMgKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAg ICB4c21fY2hlY2tlZCA9IHhzbV9uZWVkZWQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy YyA9IC1FSU5WQUw7Ci0KLSAgICAgICAgICAgIHJlcS5wdHIgLT0gY21kOwotICAgICAgICAgICAg Z21mbiA9IHJlcS5wdHIgPj4gUEFHRV9TSElGVDsKLSAgICAgICAgICAgIHBhZ2UgPSBnZXRfcGFn ZV9mcm9tX2dmbihwdF9vd25lciwgZ21mbiwgJnAybXQsIFAyTV9BTExPQyk7Ci0KLSAgICAgICAg ICAgIGlmICggcDJtX2lzX3BhZ2VkKHAybXQpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg ICAgICBBU1NFUlQoIXBhZ2UpOwotICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVs YXRlKHBnX293bmVyLCBnbWZuKTsKLSAgICAgICAgICAgICAgICByYyA9IC1FTk9FTlQ7Ci0gICAg ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmICggdW5s aWtlbHkoIXBhZ2UpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZHByaW50ayhY RU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGdldCBw YWdlIGZvciBub3JtYWwgdXBkYXRlXG4iKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg ICAgICAgIH0KLQotICAgICAgICAgICAgbWZuID0gcGFnZV90b19tZm4ocGFnZSk7Ci0KLSAgICAg ICAgICAgIGlmICggIW1mbl9lcShfbWZuKG1mbiksIG1hcF9tZm4pICkKLSAgICAgICAgICAgIHsK LSAgICAgICAgICAgICAgICBpZiAoIHZhICkKLSAgICAgICAgICAgICAgICAgICAgdW5tYXBfZG9t YWluX3BhZ2UodmEpOwotICAgICAgICAgICAgICAgIHZhID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4o bWZuKSk7Ci0gICAgICAgICAgICAgICAgbWFwX21mbiA9IF9tZm4obWZuKTsKLSAgICAgICAgICAg IH0KLSAgICAgICAgICAgIHZhID0gX3AoKCh1bnNpZ25lZCBsb25nKXZhICYgUEFHRV9NQVNLKSAr IChyZXEucHRyICYgflBBR0VfTUFTSykpOwotCi0gICAgICAgICAgICBpZiAoIHBhZ2VfbG9jayhw YWdlKSApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgc3dpdGNoICggcGFnZS0+dS5p bnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrICkKLSAgICAgICAgICAgICAgICB7Ci0gICAg ICAgICAgICAgICAgY2FzZSBQR1RfbDFfcGFnZV90YWJsZToKLSAgICAgICAgICAgICAgICB7Ci0g ICAgICAgICAgICAgICAgICAgIGwxX3BnZW50cnlfdCBsMWUgPSBsMWVfZnJvbV9pbnRwdGUocmVx LnZhbCk7Ci0gICAgICAgICAgICAgICAgICAgIHAybV90eXBlX3QgbDFlX3AybXQgPSBwMm1fcmFt X3J3OwotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICp0YXJnZXQgPSBOVUxM OwotICAgICAgICAgICAgICAgICAgICBwMm1fcXVlcnlfdCBxID0gKGwxZV9nZXRfZmxhZ3MobDFl KSAmIF9QQUdFX1JXKSA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UDJNX1VOU0hBUkUgOiBQMk1fQUxMT0M7Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKCBwYWdp bmdfbW9kZV90cmFuc2xhdGUocGdfb3duZXIpICkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRh cmdldCA9IGdldF9wYWdlX2Zyb21fZ2ZuKHBnX293bmVyLCBsMWVfZ2V0X3BmbihsMWUpLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmwxZV9wMm10 LCBxKTsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoIHAybV9pc19wYWdlZChsMWVfcDJtdCkg KQotICAgICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIHRh cmdldCApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0X3BhZ2UodGFyZ2V0KTsKLSAg ICAgICAgICAgICAgICAgICAgICAgIHAybV9tZW1fcGFnaW5nX3BvcHVsYXRlKHBnX293bmVyLCBs MWVfZ2V0X3BmbihsMWUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gLUVOT0VOVDsK LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9Ci0g ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCBwMm1fcmFtX3BhZ2luZ19pbiA9PSBsMWVfcDJt dCAmJiAhdGFyZ2V0ICkKLSAgICAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAg ICAgICAgcmMgPSAtRU5PRU5UOwotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgLyogSWYgd2UgdHJpZWQgdG8g dW5zaGFyZSBhbmQgZmFpbGVkICovCi0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCAocSAm IFAyTV9VTlNIQVJFKSAmJiBwMm1faXNfc2hhcmVkKGwxZV9wMm10KSApCi0gICAgICAgICAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdlIGNvdWxkIG5vdCBoYXZlIG9i dGFpbmVkIGEgcGFnZSByZWYuICovCi0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQodGFy Z2V0ID09IE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgLyogQW5kIG1lbV9zaGFyaW5n X25vdGlmeSBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZC4gKi8KLSAgICAgICAgICAgICAgICAgICAg ICAgIHJjID0gLUVOT01FTTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDFfZW50cnko dmEsIGwxZSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQg PT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdiwKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgcGdfb3duZXIpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIHRhcmdl dCApCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZSh0YXJnZXQpOwotICAgICAgICAg ICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIFBH VF9sMl9wYWdlX3RhYmxlOgotICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sMl9lbnRyeSh2 YSwgbDJlX2Zyb21faW50cHRlKHJlcS52YWwpLCBtZm4sCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2KTsKLSAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSBQR1RfbDNfcGFn ZV90YWJsZToKLSAgICAgICAgICAgICAgICAgICAgcmMgPSBtb2RfbDNfZW50cnkodmEsIGwzZV9m cm9tX2ludHB0ZShyZXEudmFsKSwgbWZuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjbWQgPT0gTU1VX1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7Ci0gICAgICAgICAg ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEdUX2w0X3BhZ2VfdGFibGU6 Ci0gICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2w0X2VudHJ5KHZhLCBsNGVfZnJvbV9pbnRw dGUocmVxLnZhbCksIG1mbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYpOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgICAgIGNhc2UgUEdUX3dyaXRhYmxlX3BhZ2U6Ci0gICAgICAgICAg ICAgICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOwotICAgICAgICAgICAg ICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSh2LCB2YSwgcmVxLnZhbCwgX21m bihtZm4pKSApCi0gICAgICAgICAgICAgICAgICAgICAgICByYyA9IDA7Ci0gICAgICAgICAgICAg ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBwYWdlX3Vu bG9jayhwYWdlKTsKLSAgICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5UUiApCi0gICAgICAg ICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg ZWxzZSBpZiAoIGdldF9wYWdlX3R5cGUocGFnZSwgUEdUX3dyaXRhYmxlX3BhZ2UpICkKLSAgICAg ICAgICAgIHsKLSAgICAgICAgICAgICAgICBwZXJmY19pbmNyKHdyaXRhYmxlX21tdV91cGRhdGVz KTsKLSAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ193cml0ZV9ndWVzdF9lbnRyeSh2LCB2YSwg cmVxLnZhbCwgX21mbihtZm4pKSApCi0gICAgICAgICAgICAgICAgICAgIHJjID0gMDsKLSAgICAg ICAgICAgICAgICBwdXRfcGFnZV90eXBlKHBhZ2UpOwotICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICBwdXRfcGFnZShwYWdlKTsKLSAgICAgICAgfQotICAgICAgICBicmVhazsKLQotICAgICAg ICBjYXNlIE1NVV9NQUNIUEhZU19VUERBVEU6Ci0gICAgICAgICAgICBpZiAoIHVubGlrZWx5KGQg IT0gcHRfb3duZXIpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByYyA9IC1FUEVS TTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg aWYgKCB1bmxpa2VseShwYWdpbmdfbW9kZV90cmFuc2xhdGUocGdfb3duZXIpKSApCi0gICAgICAg ICAgICB7Ci0gICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwotICAgICAgICAgICAgICAgIGJy ZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBtZm4gPSByZXEucHRyID4+IFBBR0Vf U0hJRlQ7Ci0gICAgICAgICAgICBncGZuID0gcmVxLnZhbDsKLQotICAgICAgICAgICAgeHNtX25l ZWRlZCB8PSBYU01fTU1VX01BQ0hQSFlTX1VQREFURTsKLSAgICAgICAgICAgIGlmICggeHNtX25l ZWRlZCAhPSB4c21fY2hlY2tlZCApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmMg PSB4c21fbW11X3VwZGF0ZShYU01fVEFSR0VULCBkLCBOVUxMLCBwZ19vd25lciwgeHNtX25lZWRl ZCk7Ci0gICAgICAgICAgICAgICAgaWYgKCByYyApCi0gICAgICAgICAgICAgICAgICAgIGJyZWFr OwotICAgICAgICAgICAgICAgIHhzbV9jaGVja2VkID0geHNtX25lZWRlZDsKLSAgICAgICAgICAg IH0KLQotICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3BhZ2VfZnJvbV9tZm4oX21mbiht Zm4pLCBwZ19vd25lcikpICkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBnZHByaW50 ayhYRU5MT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGQgbm90IGdl dCBwYWdlIGZvciBtYWNoLT5waHlzIHVwZGF0ZVxuIik7Ci0gICAgICAgICAgICAgICAgcmMgPSAt RUlOVkFMOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAg ICAgICBzZXRfZ3Bmbl9mcm9tX21mbihtZm4sIGdwZm4pOwotCi0gICAgICAgICAgICBwYWdpbmdf bWFya19kaXJ0eShwZ19vd25lciwgX21mbihtZm4pKTsKLQotICAgICAgICAgICAgcHV0X3BhZ2Uo bWZuX3RvX3BhZ2UobWZuKSk7Ci0gICAgICAgICAgICBicmVhazsKLQotICAgICAgICBkZWZhdWx0 OgotICAgICAgICAgICAgcmMgPSAtRU5PU1lTOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg IH0KLQotICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCi0gICAgICAgICAgICBicmVhazsKLQot ICAgICAgICBndWVzdF9oYW5kbGVfYWRkX29mZnNldCh1cmVxcywgMSk7Ci0gICAgfQotCi0gICAg aWYgKCByYyA9PSAtRVJFU1RBUlQgKQotICAgIHsKLSAgICAgICAgQVNTRVJUKGkgPCBjb3VudCk7 Ci0gICAgICAgIHJjID0gaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oCi0gICAgICAgICAg ICBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZSwgImhpaGkiLAotICAgICAgICAgICAgdXJlcXMsIChj b3VudCAtIGkpIHwgTU1VX1VQREFURV9QUkVFTVBURUQsIHBkb25lLCBmb3JlaWduZG9tKTsKLSAg ICB9Ci0gICAgZWxzZSBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKLSAgICB7Ci0g ICAgICAgIFhFTl9HVUVTVF9IQU5ETEVfUEFSQU0odm9pZCkgbnVsbDsKLQotICAgICAgICBBU1NF UlQocmMgfHwgaSA9PSBjb3VudCk7Ci0gICAgICAgIHNldF94ZW5fZ3Vlc3RfaGFuZGxlKG51bGws IE5VTEwpOwotICAgICAgICAvKgotICAgICAgICAgKiBJbiBvcmRlciB0byBoYXZlIGEgd2F5IHRv IGNvbW11bmljYXRlIHRoZSBmaW5hbCByZXR1cm4gdmFsdWUgdG8KLSAgICAgICAgICogb3VyIGNv bnRpbnVhdGlvbiwgd2UgcGFzcyB0aGlzIGluIHBsYWNlIG9mICJmb3JlaWduZG9tIiwgYnVpbGRp bmcKLSAgICAgICAgICogb24gdGhlIGZhY3QgdGhhdCB0aGlzIGFyZ3VtZW50IGlzbid0IG5lZWRl ZCBhbnltb3JlLgotICAgICAgICAgKi8KLSAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2Nv bnRpbnVhdGlvbigKLSAgICAgICAgICAgICAgICBfX0hZUEVSVklTT1JfbW11X3VwZGF0ZSwgImhp aGkiLCBudWxsLAotICAgICAgICAgICAgICAgIE1NVV9VUERBVEVfUFJFRU1QVEVELCBudWxsLCBy Yyk7Ci0gICAgfQotCi0gICAgcHV0X3BnX293bmVyKHBnX293bmVyKTsKLQotICAgIGlmICggdmEg KQotICAgICAgICB1bm1hcF9kb21haW5fcGFnZSh2YSk7Ci0KLSAgICBwZXJmY19hZGQobnVtX3Bh Z2VfdXBkYXRlcywgaSk7Ci0KLSBvdXQ6Ci0gICAgaWYgKCBwdF9vd25lciAhPSBkICkKLSAgICAg ICAgcmN1X3VubG9ja19kb21haW4ocHRfb3duZXIpOwotCi0gICAgLyogQWRkIGluY3JlbWVudGFs IHdvcmsgd2UgaGF2ZSBkb25lIHRvIHRoZSBAZG9uZSBvdXRwdXQgcGFyYW1ldGVyLiAqLwotICAg IGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQotICAgIHsKLSAg ICAgICAgZG9uZSArPSBpOwotICAgICAgICBjb3B5X3RvX2d1ZXN0KHBkb25lLCAmZG9uZSwgMSk7 Ci0gICAgfQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQgZG9uYXRlX3BhZ2UoCi0gICAgc3Ry dWN0IGRvbWFpbiAqZCwgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgaW50IG1lbWZs YWdzKQotewotICAgIGNvbnN0IHN0cnVjdCBkb21haW4gKm93bmVyID0gZG9tX3hlbjsKLQotICAg IHNwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKLQotICAgIGlmICggaXNfeGVuX2hlYXBf cGFnZShwYWdlKSB8fCAoKG93bmVyID0gcGFnZV9nZXRfb3duZXIocGFnZSkpICE9IE5VTEwpICkK LSAgICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCBkLT5pc19keWluZyApCi0gICAgICAgIGdv dG8gZmFpbDsKLQotICAgIGlmICggcGFnZS0+Y291bnRfaW5mbyAmIH4oUEdDX2FsbG9jYXRlZCB8 IDEpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgaWYgKCAhKG1lbWZsYWdzICYgTUVNRl9u b19yZWZjb3VudCkgKQotICAgIHsKLSAgICAgICAgaWYgKCBkLT50b3RfcGFnZXMgPj0gZC0+bWF4 X3BhZ2VzICkKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgZG9tYWluX2FkanVzdF90 b3RfcGFnZXMoZCwgMSk7Ci0gICAgfQotCi0gICAgcGFnZS0+Y291bnRfaW5mbyA9IFBHQ19hbGxv Y2F0ZWQgfCAxOwotICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIGQpOwotICAgIHBhZ2VfbGlzdF9h ZGRfdGFpbChwYWdlLCZkLT5wYWdlX2xpc3QpOwotCi0gICAgc3Bpbl91bmxvY2soJmQtPnBhZ2Vf YWxsb2NfbG9jayk7Ci0gICAgcmV0dXJuIDA7Ci0KLSBmYWlsOgotICAgIHNwaW5fdW5sb2NrKCZk LT5wYWdlX2FsbG9jX2xvY2spOwotICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIGRv bmF0ZSBtZm4gJSIgUFJJX21mbgotICAgICAgICAgICAgICIgdG8gZCVkIChvd25lciBkJWQpIGNh Zj0lMDhseCB0YWY9JSIgUFJ0eXBlX2luZm8gIlxuIiwKLSAgICAgICAgICAgICBwYWdlX3RvX21m bihwYWdlKSwgZC0+ZG9tYWluX2lkLAotICAgICAgICAgICAgIG93bmVyID8gb3duZXItPmRvbWFp bl9pZCA6IERPTUlEX0lOVkFMSUQsCi0gICAgICAgICAgICAgcGFnZS0+Y291bnRfaW5mbywgcGFn ZS0+dS5pbnVzZS50eXBlX2luZm8pOwotICAgIHJldHVybiAtRUlOVkFMOwotfQotCi1pbnQgc3Rl YWxfcGFnZSgKLSAgICBzdHJ1Y3QgZG9tYWluICpkLCBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1 bnNpZ25lZCBpbnQgbWVtZmxhZ3MpCi17Ci0gICAgdW5zaWduZWQgbG9uZyB4LCB5OwotICAgIGJv b2wgZHJvcF9kb21fcmVmID0gZmFsc2U7Ci0gICAgY29uc3Qgc3RydWN0IGRvbWFpbiAqb3duZXIg PSBkb21feGVuOwotCi0gICAgaWYgKCBwYWdpbmdfbW9kZV9leHRlcm5hbChkKSApCi0gICAgICAg IHJldHVybiAtRU9QTk9UU1VQUDsKLQotICAgIHNwaW5fbG9jaygmZC0+cGFnZV9hbGxvY19sb2Nr KTsKLQotICAgIGlmICggaXNfeGVuX2hlYXBfcGFnZShwYWdlKSB8fCAoKG93bmVyID0gcGFnZV9n ZXRfb3duZXIocGFnZSkpICE9IGQpICkKLSAgICAgICAgZ290byBmYWlsOwotCi0gICAgLyoKLSAg ICAgKiBXZSByZXF1aXJlIHRoZXJlIGlzIGp1c3Qgb25lIHJlZmVyZW5jZSAoUEdDX2FsbG9jYXRl ZCkuIFdlIHRlbXBvcmFyaWx5Ci0gICAgICogZHJvcCB0aGlzIHJlZmVyZW5jZSBub3cgc28gdGhh dCB3ZSBjYW4gc2FmZWx5IHN3aXp6bGUgdGhlIG93bmVyLgotICAgICAqLwotICAgIHkgPSBwYWdl LT5jb3VudF9pbmZvOwotICAgIGRvIHsKLSAgICAgICAgeCA9IHk7Ci0gICAgICAgIGlmICggKHgg JiAoUEdDX2NvdW50X21hc2t8UEdDX2FsbG9jYXRlZCkpICE9ICgxIHwgUEdDX2FsbG9jYXRlZCkg KQotICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICB5ID0gY21weGNoZygmcGFnZS0+Y291 bnRfaW5mbywgeCwgeCAmIH5QR0NfY291bnRfbWFzayk7Ci0gICAgfSB3aGlsZSAoIHkgIT0geCAp OwotCi0gICAgLyoKLSAgICAgKiBXaXRoIHRoZSBzb2xlIHJlZmVyZW5jZSBkcm9wcGVkIHRlbXBv cmFyaWx5LCBuby1vbmUgY2FuIHVwZGF0ZSB0eXBlCi0gICAgICogaW5mb3JtYXRpb24uIFR5cGUg Y291bnQgYWxzbyBuZWVkcyB0byBiZSB6ZXJvIGluIHRoaXMgY2FzZSwgYnV0IGUuZy4KLSAgICAg KiBQR1Rfc2VnX2Rlc2NfcGFnZSBtYXkgc3RpbGwgaGF2ZSBQR1RfdmFsaWRhdGVkIHNldCwgd2hp Y2ggd2UgbmVlZCB0bwotICAgICAqIGNsZWFyIGJlZm9yZSB0cmFuc2ZlcnJpbmcgb3duZXJzaGlw IChhcyB2YWxpZGF0aW9uIGNyaXRlcmlhIHZhcnkKLSAgICAgKiBkZXBlbmRpbmcgb24gZG9tYWlu IHR5cGUpLgotICAgICAqLwotICAgIEJVR19PTihwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIChQ R1RfY291bnRfbWFzayB8IFBHVF9sb2NrZWQgfAotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQR1RfcGlubmVkKSk7Ci0gICAgcGFnZS0+dS5pbnVzZS50eXBlX2luZm8gPSAw OwotCi0gICAgLyogU3dpenpsZSB0aGUgb3duZXIgdGhlbiByZWluc3RhdGUgdGhlIFBHQ19hbGxv Y2F0ZWQgcmVmZXJlbmNlLiAqLwotICAgIHBhZ2Vfc2V0X293bmVyKHBhZ2UsIE5VTEwpOwotICAg IHkgPSBwYWdlLT5jb3VudF9pbmZvOwotICAgIGRvIHsKLSAgICAgICAgeCA9IHk7Ci0gICAgICAg IEJVR19PTigoeCAmIChQR0NfY291bnRfbWFza3xQR0NfYWxsb2NhdGVkKSkgIT0gUEdDX2FsbG9j YXRlZCk7Ci0gICAgfSB3aGlsZSAoICh5ID0gY21weGNoZygmcGFnZS0+Y291bnRfaW5mbywgeCwg eCB8IDEpKSAhPSB4ICk7Ci0KLSAgICAvKiBVbmxpbmsgZnJvbSBvcmlnaW5hbCBvd25lci4gKi8K LSAgICBpZiAoICEobWVtZmxhZ3MgJiBNRU1GX25vX3JlZmNvdW50KSAmJiAhZG9tYWluX2FkanVz dF90b3RfcGFnZXMoZCwgLTEpICkKLSAgICAgICAgZHJvcF9kb21fcmVmID0gdHJ1ZTsKLSAgICBw YWdlX2xpc3RfZGVsKHBhZ2UsICZkLT5wYWdlX2xpc3QpOworICAgIC8qIFVubGluayBmcm9tIG9y aWdpbmFsIG93bmVyLiAqLworICAgIGlmICggIShtZW1mbGFncyAmIE1FTUZfbm9fcmVmY291bnQp ICYmICFkb21haW5fYWRqdXN0X3RvdF9wYWdlcyhkLCAtMSkgKQorICAgICAgICBkcm9wX2RvbV9y ZWYgPSB0cnVlOworICAgIHBhZ2VfbGlzdF9kZWwocGFnZSwgJmQtPnBhZ2VfbGlzdCk7CiAKICAg ICBzcGluX3VubG9jaygmZC0+cGFnZV9hbGxvY19sb2NrKTsKICAgICBpZiAoIHVubGlrZWx5KGRy b3BfZG9tX3JlZikgKQpAQCAtMzAyMywxMjIgKzE3MDgsNiBAQCBpbnQgc3RlYWxfcGFnZSgKICAg ICByZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBfX2RvX3VwZGF0ZV92YV9tYXBwaW5n KAotICAgIHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwgdW5zaWduZWQgbG9uZyBmbGFncywg c3RydWN0IGRvbWFpbiAqcGdfb3duZXIpCi17Ci0gICAgbDFfcGdlbnRyeV90ICAgdmFsID0gbDFl X2Zyb21faW50cHRlKHZhbDY0KTsKLSAgICBzdHJ1Y3QgdmNwdSAgICp2ICAgPSBjdXJyZW50Owot ICAgIHN0cnVjdCBkb21haW4gKmQgICA9IHYtPmRvbWFpbjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpnbDFwZzsKLSAgICBsMV9wZ2VudHJ5X3QgICpwbDFlOwotICAgIHVuc2lnbmVkIGxvbmcgIGJt YXBfcHRyLCBnbDFtZm47Ci0gICAgY3B1bWFza190ICAgICAqbWFzayA9IE5VTEw7Ci0gICAgaW50 ICAgICAgICAgICAgcmM7Ci0KLSAgICBwZXJmY19pbmNyKGNhbGxzX3RvX3VwZGF0ZV92YSk7Ci0K LSAgICByYyA9IHhzbV91cGRhdGVfdmFfbWFwcGluZyhYU01fVEFSR0VULCBkLCBwZ19vd25lciwg dmFsKTsKLSAgICBpZiAoIHJjICkKLSAgICAgICAgcmV0dXJuIHJjOwotCi0gICAgcmMgPSAtRUlO VkFMOwotICAgIHBsMWUgPSBwdl9tYXBfZ3Vlc3RfbDFlKHZhLCAmZ2wxbWZuKTsKLSAgICBpZiAo IHVubGlrZWx5KCFwbDFlIHx8ICFnZXRfcGFnZV9mcm9tX21mbihfbWZuKGdsMW1mbiksIGQpKSAp Ci0gICAgICAgIGdvdG8gb3V0OwotCi0gICAgZ2wxcGcgPSBtZm5fdG9fcGFnZShnbDFtZm4pOwot ICAgIGlmICggIXBhZ2VfbG9jayhnbDFwZykgKQotICAgIHsKLSAgICAgICAgcHV0X3BhZ2UoZ2wx cGcpOwotICAgICAgICBnb3RvIG91dDsKLSAgICB9Ci0KLSAgICBpZiAoIChnbDFwZy0+dS5pbnVz ZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCi0gICAg ewotICAgICAgICBwYWdlX3VubG9jayhnbDFwZyk7Ci0gICAgICAgIHB1dF9wYWdlKGdsMXBnKTsK LSAgICAgICAgZ290byBvdXQ7Ci0gICAgfQotCi0gICAgcmMgPSBtb2RfbDFfZW50cnkocGwxZSwg dmFsLCBnbDFtZm4sIDAsIHYsIHBnX293bmVyKTsKLQotICAgIHBhZ2VfdW5sb2NrKGdsMXBnKTsK LSAgICBwdXRfcGFnZShnbDFwZyk7Ci0KLSBvdXQ6Ci0gICAgaWYgKCBwbDFlICkKLSAgICAgICAg cHZfdW5tYXBfZ3Vlc3RfbDFlKHBsMWUpOwotCi0gICAgc3dpdGNoICggZmxhZ3MgJiBVVk1GX0ZM VVNIVFlQRV9NQVNLICkKLSAgICB7Ci0gICAgY2FzZSBVVk1GX1RMQl9GTFVTSDoKLSAgICAgICAg c3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFTSykgKQotICAg ICAgICB7Ci0gICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKLSAgICAgICAgICAgIGZsdXNoX3RsYl9s b2NhbCgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVZNRl9BTEw6Ci0gICAg ICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7Ci0gICAgICAgICAgICBicmVh azsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1hc2sgPSB0aGlzX2NwdShzY3JhdGNo X2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19wY3B1bWFzayhkLCBjb25z dF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7Ci0gICAgICAgICAgICBi cmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIG1hc2sgKQotICAgICAgICAgICAgZmx1c2hf dGxiX21hc2sobWFzayk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBVVk1GX0lOVkxQRzoK LSAgICAgICAgc3dpdGNoICggKGJtYXBfcHRyID0gZmxhZ3MgJiB+VVZNRl9GTFVTSFRZUEVfTUFT SykgKQotICAgICAgICB7Ci0gICAgICAgIGNhc2UgVVZNRl9MT0NBTDoKLSAgICAgICAgICAgIHBh Z2luZ19pbnZscGcodiwgdmEpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgVVZN Rl9BTEw6Ci0gICAgICAgICAgICBtYXNrID0gZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7Ci0gICAg ICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIG1hc2sgPSB0aGlz X2NwdShzY3JhdGNoX2NwdW1hc2spOwotICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190b19wY3B1 bWFzayhkLCBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7Ci0g ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBpZiAoIG1hc2sgKQotICAgICAg ICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKG1hc2ssIHZhKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg fQotCi0gICAgcmV0dXJuIHJjOwotfQotCi1sb25nIGRvX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2ln bmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBmbGFncykKLXsKLSAgICByZXR1cm4gX19kb191cGRhdGVfdmFfbWFwcGluZyh2YSwg dmFsNjQsIGZsYWdzLCBjdXJyZW50LT5kb21haW4pOwotfQotCi1sb25nIGRvX3VwZGF0ZV92YV9t YXBwaW5nX290aGVyZG9tYWluKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9taWRfdCBkb21pZCkKLXsKLSAgICBz dHJ1Y3QgZG9tYWluICpwZ19vd25lcjsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoIChwZ19vd25l ciA9IGdldF9wZ19vd25lcihkb21pZCkpID09IE5VTEwgKQotICAgICAgICByZXR1cm4gLUVTUkNI OwotCi0gICAgcmMgPSBfX2RvX3VwZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2NCwgZmxhZ3MsIHBn X293bmVyKTsKLQotICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7Ci0KLSAgICByZXR1cm4gcmM7 Ci19Ci0KLQogdHlwZWRlZiBzdHJ1Y3QgZTgyMGVudHJ5IGU4MjBlbnRyeV90OwogREVGSU5FX1hF Tl9HVUVTVF9IQU5ETEUoZTgyMGVudHJ5X3QpOwogCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYv cHYvTWFrZWZpbGUgYi94ZW4vYXJjaC94ODYvcHYvTWFrZWZpbGUKaW5kZXggNDJlOWQzNzIzYi4u MjE5ZDdkMGM2MyAxMDA2NDQKLS0tIGEveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCisrKyBiL3hl bi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQpAQCAtMTIsNiArMTIsNyBAQCBvYmoteSArPSBoeXBlcmNh bGwubwogb2JqLXkgKz0gaXJldC5vCiBvYmoteSArPSBtaXNjLWh5cGVyY2FsbHMubwogb2JqLXkg Kz0gbW0ubworb2JqLXkgKz0gbW0taHlwZXJjYWxscy5vCiBvYmoteSArPSB0cmFwcy5vCiAKIG9i ai1iaW4teSArPSBkb20wX2J1aWxkLmluaXQubwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2 L21tLWh5cGVyY2FsbHMuYyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS1oeXBlcmNhbGxzLmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzQ0NzYzM2M4YQotLS0gL2Rldi9udWxs CisrKyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS1oeXBlcmNhbGxzLmMKQEAgLTAsMCArMSwxNDYzIEBA CisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqCisgKiBhcmNoL3g4Ni9wdi9tbS1oeXBlcmNhbGxzLmMK KyAqCisgKiBNZW1vcnkgbWFuYWdlbWVudCBoeXBlcmNhbGxzIGZvciBQViBndWVzdHMKKyAqCisg KiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNSBLIEEgRnJhc2VyCisgKiBDb3B5cmlnaHQgKGMpIDIw MDQgQ2hyaXN0aWFuIExpbXBhY2gKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhl IExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp cyBwcm9ncmFtOyBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisg Ki8KKworI2luY2x1ZGUgPHhlbi9ldmVudC5oPgorI2luY2x1ZGUgPHhlbi9ndWVzdF9hY2Nlc3Mu aD4KKworI2luY2x1ZGUgPGFzbS9oeXBlcmNhbGwuaD4KKyNpbmNsdWRlIDxhc20vaW9jYXAuaD4K KyNpbmNsdWRlIDxhc20vbGR0Lmg+CisjaW5jbHVkZSA8YXNtL21tLmg+CisjaW5jbHVkZSA8YXNt L3AybS5oPgorI2luY2x1ZGUgPGFzbS9wdi9tbS5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgor CisjaW5jbHVkZSA8eHNtL3hzbS5oPgorCisjaW5jbHVkZSAibW0uaCIKKworc3RhdGljIHN0cnVj dCBkb21haW4gKmdldF9wZ19vd25lcihkb21pZF90IGRvbWlkKQoreworICAgIHN0cnVjdCBkb21h aW4gKnBnX293bmVyID0gTlVMTCwgKmN1cnJkID0gY3VycmVudC0+ZG9tYWluOworCisgICAgaWYg KCBsaWtlbHkoZG9taWQgPT0gRE9NSURfU0VMRikgKQorICAgIHsKKyAgICAgICAgcGdfb3duZXIg PSByY3VfbG9ja19jdXJyZW50X2RvbWFpbigpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisK KyAgICBpZiAoIHVubGlrZWx5KGRvbWlkID09IGN1cnJkLT5kb21haW5faWQpICkKKyAgICB7Cisg 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 Y3B1X2lkXSkgIT0gTlVMTCkgKQorICAgICAgICAgICAgICAgIGNwdW1hc2tfb3IocG1hc2ssIHBt YXNrLCB2LT52Y3B1X2RpcnR5X2NwdW1hc2spOworICAgICAgICB9CisgICAgfQorfQorCisvKgor ICogUFRFIGZsYWdzIHRoYXQgYSBndWVzdCBtYXkgY2hhbmdlIHdpdGhvdXQgcmUtdmFsaWRhdGlu ZyB0aGUgUFRFLgorICogQWxsIG90aGVyIGJpdHMgYWZmZWN0IHRyYW5zbGF0aW9uLCBjYWNoaW5n LCBvciBYZW4ncyBzYWZldHkuCisgKi8KKyNkZWZpbmUgRkFTVFBBVEhfRkxBR19XSElURUxJU1Qg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChfUEFHRV9OWF9CSVQg fCBfUEFHRV9BVkFJTF9ISUdIIHwgX1BBR0VfQVZBSUwgfCBfUEFHRV9HTE9CQUwgfCBcCisgICAg IF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9VU0VSKQorCisvKiBVcGRhdGUg dGhlIEwxIGVudHJ5IGF0IHBsMWUgdG8gbmV3IHZhbHVlIG5sMWUuICovCitzdGF0aWMgaW50IG1v ZF9sMV9lbnRyeShsMV9wZ2VudHJ5X3QgKnBsMWUsIGwxX3BnZW50cnlfdCBubDFlLAorICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBnbDFtZm4sIGludCBwcmVzZXJ2ZV9hZCwK KyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2Y3B1ICpwdF92Y3B1LCBzdHJ1Y3QgZG9t YWluICpwZ19kb20pCit7CisgICAgbDFfcGdlbnRyeV90IG9sMWU7CisgICAgc3RydWN0IGRvbWFp biAqcHRfZG9tID0gcHRfdmNwdS0+ZG9tYWluOworICAgIGludCByYyA9IDA7CisKKyAgICBpZiAo IHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIoJm9sMWUsIHBsMWUsIHNpemVvZihvbDFlKSkgIT0g MCkgKQorICAgICAgICByZXR1cm4gLUVGQVVMVDsKKworICAgIEFTU0VSVCghcGFnaW5nX21vZGVf cmVmY291bnRzKHB0X2RvbSkpOworCisgICAgaWYgKCBsMWVfZ2V0X2ZsYWdzKG5sMWUpICYgX1BB R0VfUFJFU0VOVCApCisgICAgeworICAgICAgICAvKiBUcmFuc2xhdGUgZm9yZWlnbiBndWVzdCBh ZGRyZXNzZXMuICovCisgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBOVUxMOworCisg ICAgICAgIGlmICggdW5saWtlbHkobDFlX2dldF9mbGFncyhubDFlKSAmIGwxX2Rpc2FsbG93X21h c2socHRfZG9tKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgIkJhZCBMMSBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbDFlX2dldF9m bGFncyhubDFlKSAmIGwxX2Rpc2FsbG93X21hc2socHRfZG9tKSk7CisgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggcGFnaW5nX21vZGVfdHJhbnNs YXRlKHBnX2RvbSkgKQorICAgICAgICB7CisgICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJv bV9nZm4ocGdfZG9tLCBsMWVfZ2V0X3BmbihubDFlKSwgTlVMTCwgUDJNX0FMTE9DKTsKKyAgICAg ICAgICAgIGlmICggIXBhZ2UgKQorICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOworICAg ICAgICAgICAgbmwxZSA9IGwxZV9mcm9tX3BmbihwYWdlX3RvX21mbihwYWdlKSwgbDFlX2dldF9m bGFncyhubDFlKSk7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZp Y2llbnRseS1zaW1pbGFyIG1hcHBpbmdzLiAqLworICAgICAgICBpZiAoICFsMWVfaGFzX2NoYW5n ZWQob2wxZSwgbmwxZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCisgICAgICAgIHsKKyAg ICAgICAgICAgIGFkanVzdF9ndWVzdF9sMWUobmwxZSwgcHRfZG9tKTsKKyAgICAgICAgICAgIHJj ID0gVVBEQVRFX0VOVFJZKGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHB0X3ZjcHUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCk7CisgICAgICAgICAgICBp ZiAoIHBhZ2UgKQorICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworICAgICAgICAgICAg cmV0dXJuIHJjID8gMCA6IC1FQlVTWTsKKyAgICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoIHJj ID0gZ2V0X3BhZ2VfZnJvbV9sMWUobmwxZSwgcHRfZG9tLCBwZ19kb20pICkKKyAgICAgICAgewor ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgaWYgKCBwYWdlICkKKyAgICAgICAgICAgICAg ICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgY2FzZSAw OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgX1BBR0VfUlcgLi4uIF9QQUdFX1JX IHwgUEFHRV9DQUNIRV9BVFRSUzoKKyAgICAgICAgICAgIEFTU0VSVCghKHJjICYgfihfUEFHRV9S VyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7CisgICAgICAgICAgICBsMWVfZmxpcF9mbGFncyhubDFl LCByYyk7CisgICAgICAgICAgICByYyA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgICAgICBpZiAoIHBhZ2UgKQorICAgICAgICAgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAg ICAgICAgYWRqdXN0X2d1ZXN0X2wxZShubDFlLCBwdF9kb20pOworICAgICAgICBpZiAoIHVubGlr ZWx5KCFVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIGdsMW1mbiwgcHRfdmNwdSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAg ICAgICB7CisgICAgICAgICAgICBvbDFlID0gbmwxZTsKKyAgICAgICAgICAgIHJjID0gLUVCVVNZ OworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZ KGwxLCBwbDFlLCBvbDFlLCBubDFlLCBnbDFtZm4sIHB0X3ZjcHUsCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgeworICAgICAgICByZXR1 cm4gLUVCVVNZOworICAgIH0KKworICAgIHB1dF9wYWdlX2Zyb21fbDFlKG9sMWUsIHB0X2RvbSk7 CisgICAgcmV0dXJuIHJjOworfQorCisvKiBVcGRhdGUgdGhlIEwyIGVudHJ5IGF0IHBsMmUgdG8g bmV3IHZhbHVlIG5sMmUuIHBsMmUgaXMgd2l0aGluIGZyYW1lIHBmbi4gKi8KK3N0YXRpYyBpbnQg bW9kX2wyX2VudHJ5KGwyX3BnZW50cnlfdCAqcGwyZSwgbDJfcGdlbnRyeV90IG5sMmUsCisgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgaW50IHByZXNlcnZlX2FkLCBz dHJ1Y3QgdmNwdSAqdmNwdSkKK3sKKyAgICBsMl9wZ2VudHJ5X3Qgb2wyZTsKKyAgICBzdHJ1Y3Qg ZG9tYWluICpkID0gdmNwdS0+ZG9tYWluOworICAgIHN0cnVjdCBwYWdlX2luZm8gKmwycGcgPSBt Zm5fdG9fcGFnZShwZm4pOworICAgIHVuc2lnbmVkIGxvbmcgdHlwZSA9IGwycGctPnUuaW51c2Uu dHlwZV9pbmZvOworICAgIGludCByYyA9IDA7CisKKyAgICBpZiAoIHVubGlrZWx5KCFpc19ndWVz dF9sMl9zbG90KGQsIHR5cGUsIHBnZW50cnlfcHRyX3RvX3Nsb3QocGwyZSkpKSApCisgICAgewor ICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkwyIHVwZGF0ZSBpbiBYZW4tcHJpdmF0 ZSBhcmVhLCBzbG90ICUjbHhcbiIsCisgICAgICAgICAgICAgICAgIHBnZW50cnlfcHRyX3RvX3Ns b3QocGwyZSkpOworICAgICAgICByZXR1cm4gLUVQRVJNOworICAgIH0KKworICAgIGlmICggdW5s aWtlbHkoX19jb3B5X2Zyb21fdXNlcigmb2wyZSwgcGwyZSwgc2l6ZW9mKG9sMmUpKSAhPSAwKSAp CisgICAgICAgIHJldHVybiAtRUZBVUxUOworCisgICAgaWYgKCBsMmVfZ2V0X2ZsYWdzKG5sMmUp ICYgX1BBR0VfUFJFU0VOVCApCisgICAgeworICAgICAgICBpZiAoIHVubGlrZWx5KGwyZV9nZXRf ZmxhZ3MobmwyZSkgJiBMMl9ESVNBTExPV19NQVNLKSApCisgICAgICAgIHsKKyAgICAgICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwyIGZsYWdzICV4XG4iLAorICAgICAgICAg ICAgICAgICAgICBsMmVfZ2V0X2ZsYWdzKG5sMmUpICYgTDJfRElTQUxMT1dfTUFTSyk7CisgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZhc3QgcGF0 aCBmb3Igc3VmZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCisgICAgICAgIGlmICggIWwy ZV9oYXNfY2hhbmdlZChvbDJlLCBubDJlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKKyAg ICAgICAgeworICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2wyZShubDJlLCBkKTsKKyAgICAgICAg ICAgIGlmICggVVBEQVRFX0VOVFJZKGwyLCBwbDJlLCBvbDJlLCBubDJlLCBwZm4sIHZjcHUsIHBy ZXNlcnZlX2FkKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1 cm4gLUVCVVNZOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCB1bmxpa2VseSgocmMgPSBnZXRf cGFnZV9mcm9tX2wyZShubDJlLCBwZm4sIGQpKSA8IDApICkKKyAgICAgICAgICAgIHJldHVybiBy YzsKKworICAgICAgICBhZGp1c3RfZ3Vlc3RfbDJlKG5sMmUsIGQpOworICAgICAgICBpZiAoIHVu bGlrZWx5KCFVUERBVEVfRU5UUlkobDIsIHBsMmUsIG9sMmUsIG5sMmUsIHBmbiwgdmNwdSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXNlcnZlX2FkKSkgKQorICAgICAg ICB7CisgICAgICAgICAgICBvbDJlID0gbmwyZTsKKyAgICAgICAgICAgIHJjID0gLUVCVVNZOwor ICAgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwy LCBwbDJlLCBvbDJlLCBubDJlLCBwZm4sIHZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgeworICAgICAgICByZXR1cm4gLUVCVVNZ OworICAgIH0KKworICAgIHB1dF9wYWdlX2Zyb21fbDJlKG9sMmUsIHBmbik7CisgICAgcmV0dXJu IHJjOworfQorCisvKiBVcGRhdGUgdGhlIEwzIGVudHJ5IGF0IHBsM2UgdG8gbmV3IHZhbHVlIG5s M2UuIHBsM2UgaXMgd2l0aGluIGZyYW1lIHBmbi4gKi8KK3N0YXRpYyBpbnQgbW9kX2wzX2VudHJ5 KGwzX3BnZW50cnlfdCAqcGwzZSwgbDNfcGdlbnRyeV90IG5sM2UsCisgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHBmbiwgaW50IHByZXNlcnZlX2FkLCBzdHJ1Y3QgdmNwdSAq dmNwdSkKK3sKKyAgICBsM19wZ2VudHJ5X3Qgb2wzZTsKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0g dmNwdS0+ZG9tYWluOworICAgIGludCByYyA9IDA7CisKKyAgICBpZiAoIHVubGlrZWx5KCFpc19n dWVzdF9sM19zbG90KHBnZW50cnlfcHRyX3RvX3Nsb3QocGwzZSkpKSApCisgICAgeworICAgICAg ICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgIkwzIHVwZGF0ZSBpbiBYZW4tcHJpdmF0ZSBhcmVh LCBzbG90ICUjbHhcbiIsCisgICAgICAgICAgICAgICAgIHBnZW50cnlfcHRyX3RvX3Nsb3QocGwz ZSkpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERp c2FsbG93IHVwZGF0ZXMgdG8gZmluYWwgTDMgc2xvdC4gSXQgY29udGFpbnMgWGVuIG1hcHBpbmdz LCBhbmQgaXQKKyAgICAgKiB3b3VsZCBiZSBhIHBhaW4gdG8gZW5zdXJlIHRoZXkgcmVtYWluIGNv bnRpbnVvdXNseSB2YWxpZCB0aHJvdWdob3V0LgorICAgICAqLworICAgIGlmICggaXNfcHZfMzJi aXRfZG9tYWluKGQpICYmIChwZ2VudHJ5X3B0cl90b19zbG90KHBsM2UpID49IDMpICkKKyAgICAg ICAgcmV0dXJuIC1FSU5WQUw7CisKKyAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9tX3VzZXIo Jm9sM2UsIHBsM2UsIHNpemVvZihvbDNlKSkgIT0gMCkgKQorICAgICAgICByZXR1cm4gLUVGQVVM VDsKKworICAgIGlmICggbDNlX2dldF9mbGFncyhubDNlKSAmIF9QQUdFX1BSRVNFTlQgKQorICAg IHsKKyAgICAgICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2ZsYWdzKG5sM2UpICYgbDNfZGlzYWxs b3dfbWFzayhkKSkgKQorICAgICAgICB7CisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FS TklORywgIkJhZCBMMyBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbDNlX2dldF9m bGFncyhubDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpOworICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7CisgICAgICAgIH0KKworICAgICAgICAvKiBGYXN0IHBhdGggZm9yIHN1ZmZpY2llbnRs eS1zaW1pbGFyIG1hcHBpbmdzLiAqLworICAgICAgICBpZiAoICFsM2VfaGFzX2NoYW5nZWQob2wz ZSwgbmwzZSwgfkZBU1RQQVRIX0ZMQUdfV0hJVEVMSVNUKSApCisgICAgICAgIHsKKyAgICAgICAg ICAgIGFkanVzdF9ndWVzdF9sM2UobmwzZSwgZCk7CisgICAgICAgICAgICByYyA9IFVQREFURV9F TlRSWShsMywgcGwzZSwgb2wzZSwgbmwzZSwgcGZuLCB2Y3B1LCBwcmVzZXJ2ZV9hZCk7CisgICAg ICAgICAgICByZXR1cm4gcmMgPyAwIDogLUVGQVVMVDsKKyAgICAgICAgfQorCisgICAgICAgIHJj ID0gZ2V0X3BhZ2VfZnJvbV9sM2UobmwzZSwgcGZuLCBkLCAwKTsKKyAgICAgICAgaWYgKCB1bmxp a2VseShyYyA8IDApICkKKyAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgcmMgPSAwOwor CisgICAgICAgIGFkanVzdF9ndWVzdF9sM2UobmwzZSwgZCk7CisgICAgICAgIGlmICggdW5saWtl bHkoIVVQREFURV9FTlRSWShsMywgcGwzZSwgb2wzZSwgbmwzZSwgcGZuLCB2Y3B1LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIG9sM2UgPSBubDNlOworICAgICAgICAgICAgcmMgPSAtRUZBVUxUOworICAg ICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGwzLCBw bDNlLCBvbDNlLCBubDNlLCBwZm4sIHZjcHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHJlc2VydmVfYWQpKSApCisgICAgeworICAgICAgICByZXR1cm4gLUVGQVVMVDsK KyAgICB9CisKKyAgICBpZiAoIGxpa2VseShyYyA9PSAwKSApCisgICAgICAgIGlmICggIXB2X2Ny ZWF0ZV9wYWVfeGVuX21hcHBpbmdzKGQsIHBsM2UpICkKKyAgICAgICAgICAgIEJVRygpOworCisg ICAgcHV0X3BhZ2VfZnJvbV9sM2Uob2wzZSwgcGZuLCAwLCAxKTsKKyAgICByZXR1cm4gcmM7Cit9 CisKKy8qIFVwZGF0ZSB0aGUgTDQgZW50cnkgYXQgcGw0ZSB0byBuZXcgdmFsdWUgbmw0ZS4gcGw0 ZSBpcyB3aXRoaW4gZnJhbWUgcGZuLiAqLworc3RhdGljIGludCBtb2RfbDRfZW50cnkobDRfcGdl bnRyeV90ICpwbDRlLCBsNF9wZ2VudHJ5X3Qgbmw0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcHJlc2VydmVfYWQsIHN0cnVjdCB2Y3B1ICp2Y3B1KQor eworICAgIHN0cnVjdCBkb21haW4gKmQgPSB2Y3B1LT5kb21haW47CisgICAgbDRfcGdlbnRyeV90 IG9sNGU7CisgICAgaW50IHJjID0gMDsKKworICAgIGlmICggdW5saWtlbHkoIWlzX2d1ZXN0X2w0 X3Nsb3QoZCwgcGdlbnRyeV9wdHJfdG9fc2xvdChwbDRlKSkpICkKKyAgICB7CisgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiTDQgdXBkYXRlIGluIFhlbi1wcml2YXRlIGFyZWEsIHNs b3QgJSNseFxuIiwKKyAgICAgICAgICAgICAgICAgcGdlbnRyeV9wdHJfdG9fc2xvdChwbDRlKSk7 CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKworICAgIGlmICggdW5saWtlbHkoX19j b3B5X2Zyb21fdXNlcigmb2w0ZSwgcGw0ZSwgc2l6ZW9mKG9sNGUpKSAhPSAwKSApCisgICAgICAg IHJldHVybiAtRUZBVUxUOworCisgICAgaWYgKCBsNGVfZ2V0X2ZsYWdzKG5sNGUpICYgX1BBR0Vf UFJFU0VOVCApCisgICAgeworICAgICAgICBpZiAoIHVubGlrZWx5KGw0ZV9nZXRfZmxhZ3Mobmw0 ZSkgJiBMNF9ESVNBTExPV19NQVNLKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIGdkcHJpbnRr KFhFTkxPR19XQVJOSU5HLCAiQmFkIEw0IGZsYWdzICV4XG4iLAorICAgICAgICAgICAgICAgICAg ICBsNGVfZ2V0X2ZsYWdzKG5sNGUpICYgTDRfRElTQUxMT1dfTUFTSyk7CisgICAgICAgICAgICBy ZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEZhc3QgcGF0aCBmb3Igc3Vm ZmljaWVudGx5LXNpbWlsYXIgbWFwcGluZ3MuICovCisgICAgICAgIGlmICggIWw0ZV9oYXNfY2hh bmdlZChvbDRlLCBubDRlLCB+RkFTVFBBVEhfRkxBR19XSElURUxJU1QpICkKKyAgICAgICAgewor ICAgICAgICAgICAgYWRqdXN0X2d1ZXN0X2w0ZShubDRlLCBkKTsKKyAgICAgICAgICAgIHJjID0g VVBEQVRFX0VOVFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUsIHByZXNlcnZlX2Fk KTsKKyAgICAgICAgICAgIHJldHVybiByYyA/IDAgOiAtRUZBVUxUOworICAgICAgICB9CisKKyAg ICAgICAgcmMgPSBnZXRfcGFnZV9mcm9tX2w0ZShubDRlLCBwZm4sIGQsIDApOworICAgICAgICBp ZiAoIHVubGlrZWx5KHJjIDwgMCkgKQorICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICBy YyA9IDA7CisKKyAgICAgICAgYWRqdXN0X2d1ZXN0X2w0ZShubDRlLCBkKTsKKyAgICAgICAgaWYg KCB1bmxpa2VseSghVVBEQVRFX0VOVFJZKGw0LCBwbDRlLCBvbDRlLCBubDRlLCBwZm4sIHZjcHUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAg ICAgICAgeworICAgICAgICAgICAgb2w0ZSA9IG5sNGU7CisgICAgICAgICAgICByYyA9IC1FRkFV TFQ7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSBpZiAoIHVubGlrZWx5KCFVUERBVEVfRU5U UlkobDQsIHBsNGUsIG9sNGUsIG5sNGUsIHBmbiwgdmNwdSwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmVzZXJ2ZV9hZCkpICkKKyAgICB7CisgICAgICAgIHJldHVybiAt RUZBVUxUOworICAgIH0KKworICAgIHB1dF9wYWdlX2Zyb21fbDRlKG9sNGUsIHBmbiwgMCwgMSk7 CisgICAgcmV0dXJuIHJjOworfQorCitpbnQgcHZfbmV3X2d1ZXN0X2NyMyh1bnNpZ25lZCBsb25n IG1mbikKK3sKKyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IGRv bWFpbiAqY3VycmQgPSBjdXJyLT5kb21haW47CisgICAgaW50IHJjOworICAgIHVuc2lnbmVkIGxv bmcgb2xkX2Jhc2VfbWZuOworCisgICAgaWYgKCBpc19wdl8zMmJpdF9kb21haW4oY3VycmQpICkK KyAgICB7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgZ3RfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4o Y3Vyci0+YXJjaC5ndWVzdF90YWJsZSk7CisgICAgICAgIGw0X3BnZW50cnlfdCAqcGw0ZSA9IG1h cF9kb21haW5fcGFnZShfbWZuKGd0X21mbikpOworCisgICAgICAgIHJjID0gbW9kX2w0X2VudHJ5 KHBsNGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGw0ZV9mcm9tX3BmbihtZm4sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoX1BBR0VfUFJFU0VOVCB8IF9QQUdF X1JXIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUEFHRV9VU0VS IHwgX1BBR0VfQUNDRVNTRUQpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3RfbWZuLCAw LCBjdXJyKTsKKyAgICAgICAgdW5tYXBfZG9tYWluX3BhZ2UocGw0ZSk7CisgICAgICAgIHN3aXRj aCAoIHJjICkKKyAgICAgICAgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgY2FzZSAtRUlOVFI6CisgICAgICAgIGNhc2UgLUVSRVNUQVJUOgorICAgICAgICAg ICAgcmV0dXJuIC1FUkVTVEFSVDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGdkcHJp bnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIkVycm9yIHdoaWxlIGlu c3RhbGxpbmcgbmV3IGNvbXBhdCBiYXNlcHRyICUiIFBSSV9tZm4gIlxuIiwKKyAgICAgICAgICAg ICAgICAgICAgIG1mbik7CisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIH0KKworICAg ICAgICBwdl9pbnZhbGlkYXRlX3NoYWRvd19sZHQoY3VyciwgZmFsc2UpOworICAgICAgICB3cml0 ZV9wdGJhc2UoY3Vycik7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmMgPSBw dXRfb2xkX2d1ZXN0X3RhYmxlKGN1cnIpOworICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICAg ICAgcmV0dXJuIHJjOworCisgICAgb2xkX2Jhc2VfbWZuID0gcGFnZXRhYmxlX2dldF9wZm4oY3Vy ci0+YXJjaC5ndWVzdF90YWJsZSk7CisgICAgLyoKKyAgICAgKiBUaGlzIGlzIHBhcnRpY3VsYXJs eSBpbXBvcnRhbnQgd2hlbiBnZXR0aW5nIHJlc3RhcnRlZCBhZnRlciB0aGUKKyAgICAgKiBwcmV2 aW91cyBhdHRlbXB0IGdvdCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1vbGQtTUZOIHBoYXNlLgorICAg ICAqLworICAgIGlmICggb2xkX2Jhc2VfbWZuID09IG1mbiApCisgICAgeworICAgICAgICB3cml0 ZV9wdGJhc2UoY3Vycik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHJjID0gcGFn aW5nX21vZGVfcmVmY291bnRzKGN1cnJkKQorICAgICAgICAgPyAoZ2V0X3BhZ2VfZnJvbV9tZm4o X21mbihtZm4pLCBjdXJyZCkgPyAwIDogLUVJTlZBTCkKKyAgICAgICAgIDogZ2V0X3BhZ2VfYW5k X3R5cGVfZnJvbV9tZm4oX21mbihtZm4pLCBQR1Rfcm9vdF9wYWdlX3RhYmxlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZCwgMCwgdHJ1ZSk7CisgICAgc3dpdGNo ICggcmMgKQorICAgIHsKKyAgICBjYXNlIDA6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgLUVJ TlRSOgorICAgIGNhc2UgLUVSRVNUQVJUOgorICAgICAgICByZXR1cm4gLUVSRVNUQVJUOworICAg IGRlZmF1bHQ6CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAg ICAgICAiRXJyb3Igd2hpbGUgaW5zdGFsbGluZyBuZXcgYmFzZXB0ciAlIiBQUklfbWZuICJcbiIs IG1mbik7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBwdl9pbnZhbGlkYXRlX3No YWRvd19sZHQoY3VyciwgZmFsc2UpOworCisgICAgaWYgKCAhVk1fQVNTSVNUKGN1cnJkLCBtMnBf c3RyaWN0KSAmJiAhcGFnaW5nX21vZGVfcmVmY291bnRzKGN1cnJkKSApCisgICAgICAgIGZpbGxf cm9fbXB0KG1mbik7CisgICAgY3Vyci0+YXJjaC5ndWVzdF90YWJsZSA9IHBhZ2V0YWJsZV9mcm9t X3BmbihtZm4pOworICAgIHVwZGF0ZV9jcjMoY3Vycik7CisKKyAgICB3cml0ZV9wdGJhc2UoY3Vy cik7CisKKyAgICBpZiAoIGxpa2VseShvbGRfYmFzZV9tZm4gIT0gMCkgKQorICAgIHsKKyAgICAg ICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSA9IG1mbl90b19wYWdlKG9sZF9iYXNlX21mbik7CisK KyAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHMoY3VycmQpICkKKyAgICAgICAgICAg IHB1dF9wYWdlKHBhZ2UpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2l0Y2ggKCByYyA9 IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgIGNhc2UgLUVJTlRSOgorICAgICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOwor ICAgICAgICAgICAgICAgIC8qIGZhbGx0aHJvdWdoICovCisgICAgICAgICAgICBjYXNlIC1FUkVT VEFSVDoKKyAgICAgICAgICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7 CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgICAgIEJVR19PTihyYyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCitsb25nIGRvX21tdWV4dF9vcChYRU5fR1VF U1RfSEFORExFX1BBUkFNKG1tdWV4dF9vcF90KSB1b3BzLCB1bnNpZ25lZCBpbnQgY291bnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhFTl9HVUVTVF9IQU5ETEVf UEFSQU0odWludCkgcGRvbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGludCBmb3JlaWduZG9tKQoreworICAgIHN0cnVjdCBtbXVleHRfb3Agb3A7 CisgICAgdW5zaWduZWQgbG9uZyB0eXBlOworICAgIHVuc2lnbmVkIGludCBpLCBkb25lID0gMDsK KyAgICBzdHJ1Y3QgdmNwdSAqY3VyciA9IGN1cnJlbnQ7CisgICAgc3RydWN0IGRvbWFpbiAqY3Vy cmQgPSBjdXJyLT5kb21haW47CisgICAgc3RydWN0IGRvbWFpbiAqcGdfb3duZXI7CisgICAgaW50 IHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKKworICAgIGlmICggdW5saWtlbHkocmMp ICkKKyAgICB7CisgICAgICAgIGlmICggbGlrZWx5KHJjID09IC1FUkVTVEFSVCkgKQorICAgICAg ICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigKKyAgICAgICAgICAgICAg ICAgICAgIF9fSFlQRVJWSVNPUl9tbXVleHRfb3AsICJoaWhpIiwgdW9wcywgY291bnQsIHBkb25l LAorICAgICAgICAgICAgICAgICAgICAgZm9yZWlnbmRvbSk7CisgICAgICAgIHJldHVybiByYzsK KyAgICB9CisKKyAgICBpZiAoIHVubGlrZWx5KGNvdW50ID09IE1NVV9VUERBVEVfUFJFRU1QVEVE KSAmJgorICAgICAgICAgbGlrZWx5KGd1ZXN0X2hhbmRsZV9pc19udWxsKHVvcHMpKSApCisgICAg eworICAgICAgICAvKgorICAgICAgICAgKiBTZWUgdGhlIGN1cnItPmFyY2gub2xkX2d1ZXN0X3Rh YmxlIHJlbGF0ZWQKKyAgICAgICAgICogaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51YXRpb24oKSBi ZWxvdy4KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiAoaW50KWZvcmVpZ25kb207CisgICAg fQorCisgICAgaWYgKCB1bmxpa2VseShjb3VudCAmIE1NVV9VUERBVEVfUFJFRU1QVEVEKSApCisg ICAgeworICAgICAgICBjb3VudCAmPSB+TU1VX1VQREFURV9QUkVFTVBURUQ7CisgICAgICAgIGlm ICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQorICAgICAgICAgICAg KHZvaWQpY29weV9mcm9tX2d1ZXN0KCZkb25lLCBwZG9uZSwgMSk7CisgICAgfQorICAgIGVsc2UK KyAgICAgICAgcGVyZmNfaW5jcihjYWxsc190b19tbXVleHRfb3ApOworCisgICAgaWYgKCB1bmxp a2VseSghZ3Vlc3RfaGFuZGxlX29rYXkodW9wcywgY291bnQpKSApCisgICAgICAgIHJldHVybiAt RUZBVUxUOworCisgICAgaWYgKCAocGdfb3duZXIgPSBnZXRfcGdfb3duZXIoZm9yZWlnbmRvbSkp ID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVTUkNIOworCisgICAgaWYgKCAhaXNfcHZfZG9t YWluKHBnX293bmVyKSApCisgICAgeworICAgICAgICBwdXRfcGdfb3duZXIocGdfb3duZXIpOwor ICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICByYyA9IHhzbV9tbXVleHRfb3Ao WFNNX1RBUkdFVCwgY3VycmQsIHBnX293bmVyKTsKKyAgICBpZiAoIHJjICkKKyAgICB7CisgICAg ICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7CisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisK KyAgICBmb3IgKCBpID0gMDsgaSA8IGNvdW50OyBpKysgKQorICAgIHsKKyAgICAgICAgaWYgKCBj dXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSB8fCAoaSAmJiBoeXBlcmNhbGxfcHJlZW1wdF9jaGVj aygpKSApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIHVubGlrZWx5KF9fY29weV9mcm9t X2d1ZXN0KCZvcCwgdW9wcywgMSkgIT0gMCkgKQorICAgICAgICB7CisgICAgICAgICAgICByYyA9 IC1FRkFVTFQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgg aXNfaHZtX2RvbWFpbihjdXJyZCkgKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKCBv cC5jbWQgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wxX1RB QkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wyX1RBQkxFOgorICAgICAgICAgICAg Y2FzZSBNTVVFWFRfUElOX0wzX1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfUElOX0w0 X1RBQkxFOgorICAgICAgICAgICAgY2FzZSBNTVVFWFRfVU5QSU5fVEFCTEU6CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJjID0g LUVPUE5PVFNVUFA7CisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgfQor ICAgICAgICB9CisKKyAgICAgICAgcmMgPSAwOworCisgICAgICAgIHN3aXRjaCAoIG9wLmNtZCAp CisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgICAg ICAgICBwMm1fdHlwZV90IHAybXQ7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfUElOX0wxX1RBQkxF OgorICAgICAgICAgICAgdHlwZSA9IFBHVF9sMV9wYWdlX3RhYmxlOworICAgICAgICAgICAgZ290 byBwaW5fcGFnZTsKKworICAgICAgICBjYXNlIE1NVUVYVF9QSU5fTDJfVEFCTEU6CisgICAgICAg ICAgICB0eXBlID0gUEdUX2wyX3BhZ2VfdGFibGU7CisgICAgICAgICAgICBnb3RvIHBpbl9wYWdl OworCisgICAgICAgIGNhc2UgTU1VRVhUX1BJTl9MM19UQUJMRToKKyAgICAgICAgICAgIHR5cGUg PSBQR1RfbDNfcGFnZV90YWJsZTsKKyAgICAgICAgICAgIGdvdG8gcGluX3BhZ2U7CisKKyAgICAg ICAgY2FzZSBNTVVFWFRfUElOX0w0X1RBQkxFOgorICAgICAgICAgICAgaWYgKCBpc19wdl8zMmJp dF9kb21haW4ocGdfb3duZXIpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg IHR5cGUgPSBQR1RfbDRfcGFnZV90YWJsZTsKKworICAgICAgICBwaW5fcGFnZToKKyAgICAgICAg ICAgIC8qIElnbm9yZSBwaW5uaW5nIG9mIGludmFsaWQgcGFnaW5nIGxldmVscy4gKi8KKyAgICAg ICAgICAgIGlmICggKG9wLmNtZCAtIE1NVUVYVF9QSU5fTDFfVEFCTEUpID4gKENPTkZJR19QQUdJ TkdfTEVWRUxTIC0gMSkgKQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBp ZiAoIHBhZ2luZ19tb2RlX3JlZmNvdW50cyhwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGJy ZWFrOworCisgICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIG9w LmFyZzEubWZuLCBOVUxMLCBQMk1fQUxMT0MpOworICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgh cGFnZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAg ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmMgPSBn ZXRfcGFnZV90eXBlX3ByZWVtcHRpYmxlKHBhZ2UsIHR5cGUpOworICAgICAgICAgICAgaWYgKCB1 bmxpa2VseShyYykgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICggcmMgPT0g LUVJTlRSICkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAg ICAgICAgZWxzZSBpZiAoIHJjICE9IC1FUkVTVEFSVCApCisgICAgICAgICAgICAgICAgICAgIGdk cHJpbnRrKFhFTkxPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRXJy b3IgJWQgd2hpbGUgcGlubmluZyBtZm4gJSIgUFJJX21mbiAiXG4iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHJjLCBwYWdlX3RvX21mbihwYWdlKSk7CisgICAgICAgICAgICAgICAgaWYg KCBwYWdlICE9IGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlICkKKyAgICAgICAgICAgICAgICAg ICAgcHV0X3BhZ2UocGFnZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIHJjID0geHNtX21lbW9yeV9waW5fcGFnZShYU01fSE9PSywgY3VycmQs IHBnX293bmVyLCBwYWdlKTsKKyAgICAgICAgICAgIGlmICggIXJjICYmIHVubGlrZWx5KHRlc3Rf YW5kX3NldF9iaXQoX1BHVF9waW5uZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZwYWdlLT51LmludXNlLnR5cGVfaW5mbykpICkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAibWZuICUiIFBSSV9tZm4gIiBhbHJlYWR5IHBpbm5lZFxuIiwgcGFn ZV90b19tZm4ocGFnZSkpOworICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShyYykgKQorICAgICAgICAgICAgICAg IGdvdG8gcGluX2Ryb3A7CisKKyAgICAgICAgICAgIC8qIEEgcGFnZSBpcyBkaXJ0aWVkIHdoZW4g aXRzIHBpbiBzdGF0dXMgaXMgc2V0LiAqLworICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHko cGdfb3duZXIsIF9tZm4ocGFnZV90b19tZm4ocGFnZSkpKTsKKworICAgICAgICAgICAgLyogV2Ug Y2FuIHJhY2UgZG9tYWluIGRlc3RydWN0aW9uIChkb21haW5fcmVsaW5xdWlzaF9yZXNvdXJjZXMp LiAqLworICAgICAgICAgICAgaWYgKCB1bmxpa2VseShwZ19vd25lciAhPSBjdXJyZCkgKQorICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgIGJvb2wgZHJvcF9yZWY7CisKKyAgICAgICAgICAg ICAgICBzcGluX2xvY2soJnBnX293bmVyLT5wYWdlX2FsbG9jX2xvY2spOworICAgICAgICAgICAg ICAgIGRyb3BfcmVmID0gKHBnX293bmVyLT5pc19keWluZyAmJgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHRlc3RfYW5kX2NsZWFyX2JpdChfUEdUX3Bpbm5lZCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZv KSk7CisgICAgICAgICAgICAgICAgc3Bpbl91bmxvY2soJnBnX293bmVyLT5wYWdlX2FsbG9jX2xv Y2spOworICAgICAgICAgICAgICAgIGlmICggZHJvcF9yZWYgKQorICAgICAgICAgICAgICAgIHsK KyAgICAgICAgcGluX2Ryb3A6CisgICAgICAgICAgICAgICAgICAgIGlmICggdHlwZSA9PSBQR1Rf bDFfcGFnZV90YWJsZSApCisgICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZV9hbmRfdHlw ZShwYWdlKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg ICAgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOworICAgICAgICAgICAgICAgIH0K KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VRVhU X1VOUElOX1RBQkxFOgorICAgICAgICAgICAgaWYgKCBwYWdpbmdfbW9kZV9yZWZjb3VudHMocGdf b3duZXIpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgcGFnZSA9IGdl dF9wYWdlX2Zyb21fZ2ZuKHBnX293bmVyLCBvcC5hcmcxLm1mbiwgTlVMTCwgUDJNX0FMTE9DKTsK KyAgICAgICAgICAgIGlmICggdW5saWtlbHkoIXBhZ2UpICkKKyAgICAgICAgICAgIHsKKyAgICAg ICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAibWZuICUiIFBSSV9tZm4gIiBiYWQsIG9yIGJhZCBvd25lciBkJWRcbiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgb3AuYXJnMS5tZm4sIHBnX293bmVyLT5kb21haW5faWQpOworICAg ICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCAhdGVzdF9hbmRfY2xlYXJfYml0KF9QR1RfcGlu bmVkLCAmcGFnZS0+dS5pbnVzZS50eXBlX2luZm8pICkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0df V0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAibWZuICUiIFBSSV9tZm4gIiBub3Qg cGlubmVkXG4iLCBvcC5hcmcxLm1mbik7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlOVkFMOwor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0 Y2ggKCByYyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgIGNhc2UgLUVJTlRSOgorICAgICAgICAgICAgY2FzZSAtRVJFU1RB UlQ6CisgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgPSBwYWdlOwor ICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQlVHX09OKHJjKTsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1dF9wYWdlKHBhZ2UpOworCisg ICAgICAgICAgICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0cyBwaW4gc3RhdHVzIGlzIGNs ZWFyZWQuICovCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19vd25lciwgX21mbihw YWdlX3RvX21mbihwYWdlKSkpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBN TVVFWFRfTkVXX0JBU0VQVFI6CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9IHBn X293bmVyKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBlbHNl IGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfdHJhbnNsYXRlKGN1cnJkKSkgKQorICAgICAgICAg ICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy YyA9IHB2X25ld19ndWVzdF9jcjMob3AuYXJnMS5tZm4pOworICAgICAgICAgICAgYnJlYWs7CisK KyAgICAgICAgY2FzZSBNTVVFWFRfTkVXX1VTRVJfQkFTRVBUUjogeworICAgICAgICAgICAgdW5z aWduZWQgbG9uZyBvbGRfbWZuOworCisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KGN1cnJkICE9 IHBnX293bmVyKSApCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBl bHNlIGlmICggdW5saWtlbHkocGFnaW5nX21vZGVfdHJhbnNsYXRlKGN1cnJkKSkgKQorICAgICAg ICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkocmMpICkK KyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgb2xkX21mbiA9IHBhZ2V0YWJs ZV9nZXRfcGZuKGN1cnItPmFyY2guZ3Vlc3RfdGFibGVfdXNlcik7CisgICAgICAgICAgICAvKgor ICAgICAgICAgICAgICogVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdoZW4gZ2V0dGlu ZyByZXN0YXJ0ZWQgYWZ0ZXIgdGhlCisgICAgICAgICAgICAgKiBwcmV2aW91cyBhdHRlbXB0IGdv dCBwcmVlbXB0ZWQgaW4gdGhlIHB1dC1vbGQtTUZOIHBoYXNlLgorICAgICAgICAgICAgICovCisg ICAgICAgICAgICBpZiAoIG9sZF9tZm4gPT0gb3AuYXJnMS5tZm4gKQorICAgICAgICAgICAgICAg IGJyZWFrOworCisgICAgICAgICAgICBpZiAoIG9wLmFyZzEubWZuICE9IDAgKQorICAgICAgICAg ICAgeworICAgICAgICAgICAgICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oCisg ICAgICAgICAgICAgICAgICAgIF9tZm4ob3AuYXJnMS5tZm4pLCBQR1Rfcm9vdF9wYWdlX3RhYmxl LCBjdXJyZCwgMCwgdHJ1ZSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSAp CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAoIHJjID09IC1FSU5U UiApCisgICAgICAgICAgICAgICAgICAgICAgICByYyA9IC1FUkVTVEFSVDsKKyAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoIHJjICE9IC1FUkVTVEFSVCApCisgICAgICAgICAgICAgICAgICAg ICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICJFcnJvciAlZCBpbnN0YWxsaW5nIG5ldyBtZm4gJSIgUFJJX21mbiAiXG4iLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIG9wLmFyZzEubWZuKTsKKyAgICAgICAg ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg aWYgKCBWTV9BU1NJU1QoY3VycmQsIG0ycF9zdHJpY3QpICkKKyAgICAgICAgICAgICAgICAgICAg emFwX3JvX21wdChvcC5hcmcxLm1mbik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGN1 cnItPmFyY2guZ3Vlc3RfdGFibGVfdXNlciA9IHBhZ2V0YWJsZV9mcm9tX3BmbihvcC5hcmcxLm1m bik7CisKKyAgICAgICAgICAgIGlmICggb2xkX21mbiAhPSAwICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBwYWdlID0gbWZuX3RvX3BhZ2Uob2xkX21mbik7CisKKyAgICAgICAgICAg ICAgICBzd2l0Y2ggKCByYyA9IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBhZ2UpICkK KyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY2FzZSAtRUlOVFI6CisgICAgICAg ICAgICAgICAgICAgIHJjID0gLUVSRVNUQVJUOworICAgICAgICAgICAgICAgICAgICAvKiBmYWxs dGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgLUVSRVNUQVJUOgorICAgICAgICAgICAg ICAgICAgICBjdXJyLT5hcmNoLm9sZF9ndWVzdF90YWJsZSA9IHBhZ2U7CisgICAgICAgICAgICAg ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg ICAgIEJVR19PTihyYyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfTE9DQUw6CisgICAgICAgICAgICBpZiAoIGxp a2VseShjdXJyZCA9PSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGZsdXNoX3RsYl9sb2Nh bCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAg ICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVFWFRfSU5WTFBHX0xPQ0FMOgorICAg ICAgICAgICAgaWYgKCB1bmxpa2VseShjdXJyZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAg ICAgIHJjID0gLUVQRVJNOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHBhZ2lu Z19pbnZscGcoY3Vyciwgb3AuYXJnMS5saW5lYXJfYWRkcik7CisgICAgICAgICAgICBicmVhazsK KworICAgICAgICBjYXNlIE1NVUVYVF9UTEJfRkxVU0hfTVVMVEk6CisgICAgICAgIGNhc2UgTU1V RVhUX0lOVkxQR19NVUxUSToKKyAgICAgICAgeworICAgICAgICAgICAgY3B1bWFza190ICptYXNr ID0gdGhpc19jcHUoc2NyYXRjaF9jcHVtYXNrKTsKKworICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eShjdXJyZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAg ICAgICAgICAgZWxzZSBpZiAoIHVubGlrZWx5KHZjcHVtYXNrX3RvX3BjcHVtYXNrKGN1cnJkLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBndWVzdF9oYW5kbGVfdG9fcGFyYW0o b3AuYXJnMi52Y3B1bWFzaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0X3ZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBtYXNrKSkgKQorICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAg ICAgICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg ICAgICAgICAgaWYgKCBvcC5jbWQgPT0gTU1VRVhUX1RMQl9GTFVTSF9NVUxUSSApCisgICAgICAg ICAgICAgICAgZmx1c2hfdGxiX21hc2sobWFzayk7CisgICAgICAgICAgICBlbHNlIGlmICggX19h ZGRyX29rKG9wLmFyZzEubGluZWFyX2FkZHIpICkKKyAgICAgICAgICAgICAgICBmbHVzaF90bGJf b25lX21hc2sobWFzaywgb3AuYXJnMS5saW5lYXJfYWRkcik7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX1RMQl9GTFVTSF9BTEw6CisgICAgICAg ICAgICBpZiAoIGxpa2VseShjdXJyZCA9PSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIGZs dXNoX3RsYl9tYXNrKGN1cnJkLT5kb21haW5fZGlydHlfY3B1bWFzayk7CisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgcmMgPSAtRVBFUk07CisgICAgICAgICAgICBicmVhazsKKwor ICAgICAgICBjYXNlIE1NVUVYVF9JTlZMUEdfQUxMOgorICAgICAgICAgICAgaWYgKCB1bmxpa2Vs eShjdXJyZCAhPSBwZ19vd25lcikgKQorICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAg ICAgICAgICAgZWxzZSBpZiAoIF9fYWRkcl9vayhvcC5hcmcxLmxpbmVhcl9hZGRyKSApCisgICAg ICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9tYXNrKGN1cnJkLT5kb21haW5fZGlydHlfY3B1bWFz aywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3AuYXJnMS5saW5lYXJfYWRk cik7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1NVUVYVF9GTFVTSF9DQUNI RToKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKKyAgICAg ICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCB1bmxpa2VseSgh Y2FjaGVfZmx1c2hfcGVybWl0dGVkKGN1cnJkKSkgKQorICAgICAgICAgICAgICAgIHJjID0gLUVB Q0NFUzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB3YmludmQoKTsKKyAgICAg ICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VRVhUX0ZMVVNIX0NBQ0hFX0dMT0JBTDoK KyAgICAgICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3duZXIpICkKKyAgICAgICAg ICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCBsaWtlbHkoY2FjaGVf Zmx1c2hfcGVybWl0dGVkKGN1cnJkKSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBjcHU7CisgICAgICAgICAgICAgICAgY3B1bWFza190ICptYXNrID0gdGhp c19jcHUoc2NyYXRjaF9jcHVtYXNrKTsKKworICAgICAgICAgICAgICAgIGNwdW1hc2tfY2xlYXIo bWFzayk7CisgICAgICAgICAgICAgICAgZm9yX2VhY2hfb25saW5lX2NwdShjcHUpCisgICAgICAg ICAgICAgICAgICAgIGlmICggIWNwdW1hc2tfaW50ZXJzZWN0cyhtYXNrLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyX2NwdShjcHVfc2libGluZ19tYXNr LCBjcHUpKSApCisgICAgICAgICAgICAgICAgICAgICAgICBfX2NwdW1hc2tfc2V0X2NwdShjcHUs IG1hc2spOworICAgICAgICAgICAgICAgIGZsdXNoX21hc2sobWFzaywgRkxVU0hfQ0FDSEUpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1VRVhUX1NFVF9MRFQ6 CisgICAgICAgIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGludCBlbnRzID0gb3AuYXJnMi5ucl9l bnRzOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBwdHIgPSBlbnRzID8gb3AuYXJnMS5saW5l YXJfYWRkciA6IDA7CisKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoY3VycmQgIT0gcGdfb3du ZXIpICkKKyAgICAgICAgICAgICAgICByYyA9IC1FUEVSTTsKKyAgICAgICAgICAgIGVsc2UgaWYg KCBwYWdpbmdfbW9kZV9leHRlcm5hbChjdXJyZCkgKQorICAgICAgICAgICAgICAgIHJjID0gLUVJ TlZBTDsKKyAgICAgICAgICAgIGVsc2UgaWYgKCAoKHB0ciAmIChQQUdFX1NJWkUgLSAxKSkgIT0g MCkgfHwgIV9fYWRkcl9vayhwdHIpIHx8CisgICAgICAgICAgICAgICAgICAgICAgKGVudHMgPiA4 MTkyKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dB Uk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIkJhZCBhcmdzIHRvIFNFVF9MRFQ6IHB0 cj0lbHgsIGVudHM9JXhcbiIsIHB0ciwgZW50cyk7CisgICAgICAgICAgICAgICAgcmMgPSAtRUlO VkFMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoIChjdXJyLT5hcmNoLnB2 X3ZjcHUubGR0X2VudHMgIT0gZW50cykgfHwKKyAgICAgICAgICAgICAgICAgICAgICAoY3Vyci0+ YXJjaC5wdl92Y3B1LmxkdF9iYXNlICE9IHB0cikgKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIHB2X2ludmFsaWRhdGVfc2hhZG93X2xkdChjdXJyLCBmYWxzZSk7CisgICAgICAgICAg ICAgICAgZmx1c2hfdGxiX2xvY2FsKCk7CisgICAgICAgICAgICAgICAgY3Vyci0+YXJjaC5wdl92 Y3B1LmxkdF9iYXNlID0gcHRyOworICAgICAgICAgICAgICAgIGN1cnItPmFyY2gucHZfdmNwdS5s ZHRfZW50cyA9IGVudHM7CisgICAgICAgICAgICAgICAgbG9hZF9MRFQoY3Vycik7CisgICAgICAg ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1V RVhUX0NMRUFSX1BBR0U6CisgICAgICAgICAgICBwYWdlID0gZ2V0X3BhZ2VfZnJvbV9nZm4ocGdf b3duZXIsIG9wLmFyZzEubWZuLCAmcDJtdCwgUDJNX0FMTE9DKTsKKyAgICAgICAgICAgIGlmICgg dW5saWtlbHkocDJtdCAhPSBwMm1fcmFtX3J3KSAmJiBwYWdlICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAgICAgICAgICAgICAgICBwYWdlID0gTlVM TDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICggIXBhZ2UgfHwgIWdldF9wYWdlX3R5 cGUocGFnZSwgUEdUX3dyaXRhYmxlX3BhZ2UpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICBpZiAoIHBhZ2UgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsKKyAg ICAgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAiRXJyb3IgY2xlYXJpbmcgbWZuICUiIFBSSV9tZm4gIlxuIiwgb3AuYXJnMS5tZm4p OworICAgICAgICAgICAgICAgIHJjID0gLUVJTlZBTDsKKyAgICAgICAgICAgICAgICBicmVhazsK KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQSBwYWdlIGlzIGRpcnRpZWQgd2hlbiBp dCdzIGJlaW5nIGNsZWFyZWQuICovCisgICAgICAgICAgICBwYWdpbmdfbWFya19kaXJ0eShwZ19v d25lciwgX21mbihwYWdlX3RvX21mbihwYWdlKSkpOworCisgICAgICAgICAgICBjbGVhcl9kb21h aW5fcGFnZShfbWZuKHBhZ2VfdG9fbWZuKHBhZ2UpKSk7CisKKyAgICAgICAgICAgIHB1dF9wYWdl X2FuZF90eXBlKHBhZ2UpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNTVVF WFRfQ09QWV9QQUdFOgorICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpz cmNfcGFnZSwgKmRzdF9wYWdlOworCisgICAgICAgICAgICBzcmNfcGFnZSA9IGdldF9wYWdlX2Zy b21fZ2ZuKHBnX293bmVyLCBvcC5hcmcyLnNyY19tZm4sICZwMm10LAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1fQUxMT0MpOworICAgICAgICAgICAgaWYgKCB1 bmxpa2VseShwMm10ICE9IHAybV9yYW1fcncpICYmIHNyY19wYWdlICkKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICBwdXRfcGFnZShzcmNfcGFnZSk7CisgICAgICAgICAgICAgICAgc3Jj X3BhZ2UgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCB1bmxpa2VseSgh c3JjX3BhZ2UpICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBnZHByaW50ayhYRU5M T0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgY29weWluZyBmcm9t IG1mbiAlIiBQUklfbWZuICJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgb3AuYXJnMi5z cmNfbWZuKTsKKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGRzdF9wYWdlID0gZ2V0X3BhZ2Vf ZnJvbV9nZm4ocGdfb3duZXIsIG9wLmFyZzEubWZuLCAmcDJtdCwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUDJNX0FMTE9DKTsKKyAgICAgICAgICAgIGlmICggdW5s aWtlbHkocDJtdCAhPSBwMm1fcmFtX3J3KSAmJiBkc3RfcGFnZSApCisgICAgICAgICAgICB7Cisg ICAgICAgICAgICAgICAgcHV0X3BhZ2UoZHN0X3BhZ2UpOworICAgICAgICAgICAgICAgIGRzdF9w YWdlID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gKGRzdF9wYWdlICYm CisgICAgICAgICAgICAgICAgICBnZXRfcGFnZV90eXBlKGRzdF9wYWdlLCBQR1Rfd3JpdGFibGVf cGFnZSkpID8gMCA6IC1FSU5WQUw7CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHJjKSApCisg ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHV0X3BhZ2Uoc3JjX3BhZ2UpOworICAgICAg ICAgICAgICAgIGlmICggZHN0X3BhZ2UgKQorICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZShk c3RfcGFnZSk7CisgICAgICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGNvcHlpbmcgdG8gbWZuICUiIFBSSV9tZm4gIlxu Iiwgb3AuYXJnMS5tZm4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor CisgICAgICAgICAgICAvKiBBIHBhZ2UgaXMgZGlydGllZCB3aGVuIGl0J3MgYmVpbmcgY29waWVk IHRvLiAqLworICAgICAgICAgICAgcGFnaW5nX21hcmtfZGlydHkocGdfb3duZXIsIF9tZm4ocGFn ZV90b19tZm4oZHN0X3BhZ2UpKSk7CisKKyAgICAgICAgICAgIGNvcHlfZG9tYWluX3BhZ2UoX21m bihwYWdlX3RvX21mbihkc3RfcGFnZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf bWZuKHBhZ2VfdG9fbWZuKHNyY19wYWdlKSkpOworCisgICAgICAgICAgICBwdXRfcGFnZV9hbmRf dHlwZShkc3RfcGFnZSk7CisgICAgICAgICAgICBwdXRfcGFnZShzcmNfcGFnZSk7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGNhc2UgTU1VRVhUX01BUktfU1VQRVI6 CisgICAgICAgIGNhc2UgTU1VRVhUX1VOTUFSS19TVVBFUjoKKyAgICAgICAgICAgIHJjID0gLUVP UE5PVFNVUFA7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAg ICAgICAgcmMgPSAtRU5PU1lTOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworIGRv bmU6CisgICAgICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgIGJyZWFrOworCisg ICAgICAgIGd1ZXN0X2hhbmRsZV9hZGRfb2Zmc2V0KHVvcHMsIDEpOworICAgIH0KKworICAgIGlm ICggcmMgPT0gLUVSRVNUQVJUICkKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgY291bnQpOwor ICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9uKAorICAgICAgICAgICAg X19IWVBFUlZJU09SX21tdWV4dF9vcCwgImhpaGkiLAorICAgICAgICAgICAgdW9wcywgKGNvdW50 IC0gaSkgfCBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgcGRvbmUsIGZvcmVpZ25kb20pOworICAgIH0K KyAgICBlbHNlIGlmICggY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQorICAgIHsKKyAgICAg ICAgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBudWxsOworCisgICAgICAgIEFTU0VSVChy YyB8fCBpID09IGNvdW50KTsKKyAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobnVsbCwgTlVM TCk7CisgICAgICAgIC8qCisgICAgICAgICAqIEluIG9yZGVyIHRvIGhhdmUgYSB3YXkgdG8gY29t bXVuaWNhdGUgdGhlIGZpbmFsIHJldHVybiB2YWx1ZSB0bworICAgICAgICAgKiBvdXIgY29udGlu dWF0aW9uLCB3ZSBwYXNzIHRoaXMgaW4gcGxhY2Ugb2YgImZvcmVpZ25kb20iLCBidWlsZGluZwor ICAgICAgICAgKiBvbiB0aGUgZmFjdCB0aGF0IHRoaXMgYXJndW1lbnQgaXNuJ3QgbmVlZGVkIGFu eW1vcmUuCisgICAgICAgICAqLworICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGlu dWF0aW9uKAorICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVleHRfb3AsICJoaWhpIiwg bnVsbCwKKyAgICAgICAgICAgICAgICBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgbnVsbCwgcmMpOwor ICAgIH0KKworICAgIHB1dF9wZ19vd25lcihwZ19vd25lcik7CisKKyAgICBwZXJmY19hZGQobnVt X21tdWV4dF9vcHMsIGkpOworCisgICAgLyogQWRkIGluY3JlbWVudGFsIHdvcmsgd2UgaGF2ZSBk b25lIHRvIHRoZSBAZG9uZSBvdXRwdXQgcGFyYW1ldGVyLiAqLworICAgIGlmICggdW5saWtlbHko IWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQorICAgIHsKKyAgICAgICAgZG9uZSArPSBp OworICAgICAgICBjb3B5X3RvX2d1ZXN0KHBkb25lLCAmZG9uZSwgMSk7CisgICAgfQorCisgICAg cmV0dXJuIHJjOworfQorCitsb25nIGRvX21tdV91cGRhdGUoWEVOX0dVRVNUX0hBTkRMRV9QQVJB TShtbXVfdXBkYXRlX3QpIHVyZXFzLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBj b3VudCwgWEVOX0dVRVNUX0hBTkRMRV9QQVJBTSh1aW50KSBwZG9uZSwKKyAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgZm9yZWlnbmRvbSkKK3sKKyAgICBzdHJ1Y3QgbW11X3VwZGF0ZSBy ZXE7CisgICAgdm9pZCAqdmEgPSBOVUxMOworICAgIHVuc2lnbmVkIGxvbmcgZ3BmbiwgZ21mbiwg bWZuOworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgdW5zaWduZWQgaW50IGNtZCwg aSA9IDAsIGRvbmUgPSAwLCBwdF9kb207CisgICAgc3RydWN0IHZjcHUgKmN1cnIgPSBjdXJyZW50 LCAqdiA9IGN1cnI7CisgICAgc3RydWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbiwgKnB0X293bmVy ID0gZCwgKnBnX293bmVyOworICAgIG1mbl90IG1hcF9tZm4gPSBJTlZBTElEX01GTjsKKyAgICB1 aW50MzJfdCB4c21fbmVlZGVkID0gMDsKKyAgICB1aW50MzJfdCB4c21fY2hlY2tlZCA9IDA7Cisg ICAgaW50IHJjID0gcHV0X29sZF9ndWVzdF90YWJsZShjdXJyKTsKKworICAgIGlmICggdW5saWtl bHkocmMpICkKKyAgICB7CisgICAgICAgIGlmICggbGlrZWx5KHJjID09IC1FUkVTVEFSVCkgKQor ICAgICAgICAgICAgcmMgPSBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigKKyAgICAgICAg ICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsIHVyZXFzLCBjb3Vu dCwgcGRvbmUsCisgICAgICAgICAgICAgICAgICAgICBmb3JlaWduZG9tKTsKKyAgICAgICAgcmV0 dXJuIHJjOworICAgIH0KKworICAgIGlmICggdW5saWtlbHkoY291bnQgPT0gTU1VX1VQREFURV9Q UkVFTVBURUQpICYmCisgICAgICAgICBsaWtlbHkoZ3Vlc3RfaGFuZGxlX2lzX251bGwodXJlcXMp KSApCisgICAgeworICAgICAgICAvKgorICAgICAgICAgKiBTZWUgdGhlIGN1cnItPmFyY2gub2xk X2d1ZXN0X3RhYmxlIHJlbGF0ZWQKKyAgICAgICAgICogaHlwZXJjYWxsX2NyZWF0ZV9jb250aW51 YXRpb24oKSBiZWxvdy4KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiAoaW50KWZvcmVpZ25k b207CisgICAgfQorCisgICAgaWYgKCB1bmxpa2VseShjb3VudCAmIE1NVV9VUERBVEVfUFJFRU1Q VEVEKSApCisgICAgeworICAgICAgICBjb3VudCAmPSB+TU1VX1VQREFURV9QUkVFTVBURUQ7Cisg ICAgICAgIGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9pc19udWxsKHBkb25lKSkgKQorICAg ICAgICAgICAgKHZvaWQpY29weV9mcm9tX2d1ZXN0KCZkb25lLCBwZG9uZSwgMSk7CisgICAgfQor ICAgIGVsc2UKKyAgICAgICAgcGVyZmNfaW5jcihjYWxsc190b19tbXVfdXBkYXRlKTsKKworICAg IGlmICggdW5saWtlbHkoIWd1ZXN0X2hhbmRsZV9va2F5KHVyZXFzLCBjb3VudCkpICkKKyAgICAg ICAgcmV0dXJuIC1FRkFVTFQ7CisKKyAgICBpZiAoIChwdF9kb20gPSBmb3JlaWduZG9tID4+IDE2 KSAhPSAwICkKKyAgICB7CisgICAgICAgIC8qIFBhZ2V0YWJsZXMgYmVsb25nIHRvIGEgZm9yZWln biBkb21haW4gKFBGRCkuICovCisgICAgICAgIGlmICggKHB0X293bmVyID0gcmN1X2xvY2tfZG9t YWluX2J5X2lkKHB0X2RvbSAtIDEpKSA9PSBOVUxMICkKKyAgICAgICAgICAgIHJldHVybiAtRVNS Q0g7CisKKyAgICAgICAgaWYgKCBwdF9vd25lciA9PSBkICkKKyAgICAgICAgICAgIHJjdV91bmxv Y2tfZG9tYWluKHB0X293bmVyKTsKKyAgICAgICAgZWxzZSBpZiAoICFwdF9vd25lci0+dmNwdSB8 fCAodiA9IHB0X293bmVyLT52Y3B1WzBdKSA9PSBOVUxMICkKKyAgICAgICAgeworICAgICAgICAg ICAgcmMgPSAtRUlOVkFMOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBpZiAoIChwZ19vd25lciA9IGdldF9wZ19vd25lcigodWludDE2X3QpZm9yZWlnbmRv bSkpID09IE5VTEwgKQorICAgIHsKKyAgICAgICAgcmMgPSAtRVNSQ0g7CisgICAgICAgIGdvdG8g b3V0OworICAgIH0KKworICAgIGZvciAoIGkgPSAwOyBpIDwgY291bnQ7IGkrKyApCisgICAgewor ICAgICAgICBpZiAoIGN1cnItPmFyY2gub2xkX2d1ZXN0X3RhYmxlIHx8IChpICYmIGh5cGVyY2Fs bF9wcmVlbXB0X2NoZWNrKCkpICkKKyAgICAgICAgeworICAgICAgICAgICAgcmMgPSAtRVJFU1RB UlQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICggdW5saWtl bHkoX19jb3B5X2Zyb21fZ3Vlc3QoJnJlcSwgdXJlcXMsIDEpICE9IDApICkKKyAgICAgICAgewor ICAgICAgICAgICAgcmMgPSAtRUZBVUxUOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K KworICAgICAgICBjbWQgPSByZXEucHRyICYgKHNpemVvZihsMV9wZ2VudHJ5X3QpLTEpOworCisg ICAgICAgIHN3aXRjaCAoIGNtZCApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAg ICAgICAgKiBNTVVfTk9STUFMX1BUX1VQREFURTogTm9ybWFsIHVwZGF0ZSB0byBhbnkgbGV2ZWwg b2YgcGFnZSB0YWJsZS4KKyAgICAgICAgICAgICAqIE1NVV9VUERBVEVfUFRfUFJFU0VSVkVfQUQ6 IEFzIGFib3ZlIGJ1dCBhbHNvIHByZXNlcnZlIChPUikKKyAgICAgICAgICAgICAqIGN1cnJlbnQg QS9EIGJpdHMuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgY2FzZSBNTVVfTk9STUFMX1BUX1VQ REFURToKKyAgICAgICAgY2FzZSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FEOgorICAgICAgICB7 CisgICAgICAgICAgICBwMm1fdHlwZV90IHAybXQ7CisKKyAgICAgICAgICAgIHJjID0gLUVPUE5P VFNVUFA7CisgICAgICAgICAgICBpZiAoIHVubGlrZWx5KHBhZ2luZ19tb2RlX3JlZmNvdW50cyhw dF9vd25lcikpICkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgeHNtX25l ZWRlZCB8PSBYU01fTU1VX05PUk1BTF9VUERBVEU7CisgICAgICAgICAgICBpZiAoIGdldF9wdGVf ZmxhZ3MocmVxLnZhbCkgJiBfUEFHRV9QUkVTRU5UICkKKyAgICAgICAgICAgIHsKKyAgICAgICAg ICAgICAgICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfVVBEQVRFX1JFQUQ7CisgICAgICAgICAgICAg ICAgaWYgKCBnZXRfcHRlX2ZsYWdzKHJlcS52YWwpICYgX1BBR0VfUlcgKQorICAgICAgICAgICAg ICAgICAgICB4c21fbmVlZGVkIHw9IFhTTV9NTVVfVVBEQVRFX1dSSVRFOworICAgICAgICAgICAg fQorICAgICAgICAgICAgaWYgKCB4c21fbmVlZGVkICE9IHhzbV9jaGVja2VkICkKKyAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IHhzbV9tbXVfdXBkYXRlKFhTTV9UQVJHRVQsIGQs IHB0X293bmVyLCBwZ19vd25lciwgeHNtX25lZWRlZCk7CisgICAgICAgICAgICAgICAgaWYgKCBy YyApCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHhzbV9jaGVj a2VkID0geHNtX25lZWRlZDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJjID0gLUVJTlZB TDsKKworICAgICAgICAgICAgcmVxLnB0ciAtPSBjbWQ7CisgICAgICAgICAgICBnbWZuID0gcmVx LnB0ciA+PiBQQUdFX1NISUZUOworICAgICAgICAgICAgcGFnZSA9IGdldF9wYWdlX2Zyb21fZ2Zu KHB0X293bmVyLCBnbWZuLCAmcDJtdCwgUDJNX0FMTE9DKTsKKworICAgICAgICAgICAgaWYgKCBw Mm1faXNfcGFnZWQocDJtdCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIEFTU0VS VCghcGFnZSk7CisgICAgICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUocGdfb3du ZXIsIGdtZm4pOworICAgICAgICAgICAgICAgIHJjID0gLUVOT0VOVDsKKyAgICAgICAgICAgICAg ICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCB1bmxpa2VseSghcGFn ZSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9yIG5v cm1hbCB1cGRhdGVcbiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor CisgICAgICAgICAgICBtZm4gPSBwYWdlX3RvX21mbihwYWdlKTsKKworICAgICAgICAgICAgaWYg KCAhbWZuX2VxKF9tZm4obWZuKSwgbWFwX21mbikgKQorICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIGlmICggdmEgKQorICAgICAgICAgICAgICAgICAgICB1bm1hcF9kb21haW5fcGFnZSh2 YSk7CisgICAgICAgICAgICAgICAgdmEgPSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAg ICAgICAgICAgICAgICBtYXBfbWZuID0gX21mbihtZm4pOworICAgICAgICAgICAgfQorICAgICAg ICAgICAgdmEgPSBfcCgoKHVuc2lnbmVkIGxvbmcpdmEgJiBQQUdFX01BU0spICsgKHJlcS5wdHIg JiB+UEFHRV9NQVNLKSk7CisKKyAgICAgICAgICAgIGlmICggcGFnZV9sb2NrKHBhZ2UpICkKKyAg ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCBwYWdlLT51LmludXNlLnR5cGVf aW5mbyAmIFBHVF90eXBlX21hc2sgKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg ICBjYXNlIFBHVF9sMV9wYWdlX3RhYmxlOgorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgbDFfcGdlbnRyeV90IGwxZSA9IGwxZV9mcm9tX2ludHB0ZShyZXEudmFsKTsKKyAg ICAgICAgICAgICAgICAgICAgcDJtX3R5cGVfdCBsMWVfcDJtdCA9IHAybV9yYW1fcnc7CisgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnRhcmdldCA9IE5VTEw7CisgICAgICAg ICAgICAgICAgICAgIHAybV9xdWVyeV90IHEgPSAobDFlX2dldF9mbGFncyhsMWUpICYgX1BBR0Vf UlcpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQMk1fVU5TSEFS RSA6IFAyTV9BTExPQzsKKworICAgICAgICAgICAgICAgICAgICBpZiAoIHBhZ2luZ19tb2RlX3Ry YW5zbGF0ZShwZ19vd25lcikgKQorICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0ID0gZ2V0 X3BhZ2VfZnJvbV9nZm4ocGdfb3duZXIsIGwxZV9nZXRfcGZuKGwxZSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbDFlX3AybXQsIHEpOworCisg ICAgICAgICAgICAgICAgICAgIGlmICggcDJtX2lzX3BhZ2VkKGwxZV9wMm10KSApCisgICAgICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ICkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRfcGFnZSh0YXJnZXQpOworICAgICAgICAgICAg ICAgICAgICAgICAgcDJtX21lbV9wYWdpbmdfcG9wdWxhdGUocGdfb3duZXIsIGwxZV9nZXRfcGZu KGwxZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAtRU5PRU5UOworICAgICAgICAg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoIHAybV9yYW1fcGFnaW5nX2luID09IGwxZV9wMm10ICYmICF0YXJn ZXQgKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICByYyA9 IC1FTk9FTlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAvKiBJZiB3ZSB0cmllZCB0byB1bnNoYXJlIGFu ZCBmYWlsZWQgKi8KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoIChxICYgUDJNX1VOU0hB UkUpICYmIHAybV9pc19zaGFyZWQobDFlX3AybXQpICkKKyAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgLyogV2UgY291bGQgbm90IGhhdmUgb2J0YWluZWQgYSBw YWdlIHJlZi4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVCh0YXJnZXQgPT0gTlVM TCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBBbmQgbWVtX3NoYXJpbmdfbm90aWZ5IGhh cyBhbHJlYWR5IGJlZW4gY2FsbGVkLiAqLworICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSAt RU5PTUVNOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg ICAgIH0KKworICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sMV9lbnRyeSh2YSwgbDFlLCBt Zm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNtZCA9PSBNTVVfUFRf VVBEQVRFX1BSRVNFUlZFX0FELCB2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwZ19vd25lcik7CisgICAgICAgICAgICAgICAgICAgIGlmICggdGFyZ2V0ICkKKyAgICAg ICAgICAgICAgICAgICAgICAgIHB1dF9wYWdlKHRhcmdldCk7CisgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUEdUX2wyX3BhZ2Vf dGFibGU6CisgICAgICAgICAgICAgICAgICAgIHJjID0gbW9kX2wyX2VudHJ5KHZhLCBsMmVfZnJv bV9pbnRwdGUocmVxLnZhbCksIG1mbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY21kID09IE1NVV9QVF9VUERBVEVfUFJFU0VSVkVfQUQsIHYpOworICAgICAgICAgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBHVF9sM19wYWdlX3RhYmxlOgor ICAgICAgICAgICAgICAgICAgICByYyA9IG1vZF9sM19lbnRyeSh2YSwgbDNlX2Zyb21faW50cHRl KHJlcS52YWwpLCBtZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNt ZCA9PSBNTVVfUFRfVVBEQVRFX1BSRVNFUlZFX0FELCB2KTsKKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBQR1RfbDRfcGFnZV90YWJsZToKKyAgICAgICAg ICAgICAgICAgICAgcmMgPSBtb2RfbDRfZW50cnkodmEsIGw0ZV9mcm9tX2ludHB0ZShyZXEudmFs KSwgbWZuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbWQgPT0gTU1V X1BUX1VQREFURV9QUkVTRVJWRV9BRCwgdik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICAgICAgY2FzZSBQR1Rfd3JpdGFibGVfcGFnZToKKyAgICAgICAgICAgICAgICAgICAg cGVyZmNfaW5jcih3cml0YWJsZV9tbXVfdXBkYXRlcyk7CisgICAgICAgICAgICAgICAgICAgIGlm ICggcGFnaW5nX3dyaXRlX2d1ZXN0X2VudHJ5KHYsIHZhLCByZXEudmFsLCBfbWZuKG1mbikpICkK KyAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2Up OworICAgICAgICAgICAgICAgIGlmICggcmMgPT0gLUVJTlRSICkKKyAgICAgICAgICAgICAgICAg ICAgcmMgPSAtRVJFU1RBUlQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICgg Z2V0X3BhZ2VfdHlwZShwYWdlLCBQR1Rfd3JpdGFibGVfcGFnZSkgKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIHBlcmZjX2luY3Iod3JpdGFibGVfbW11X3VwZGF0ZXMpOworICAgICAg ICAgICAgICAgIGlmICggcGFnaW5nX3dyaXRlX2d1ZXN0X2VudHJ5KHYsIHZhLCByZXEudmFsLCBf bWZuKG1mbikpICkKKyAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworICAgICAgICAgICAgICAg IHB1dF9wYWdlX3R5cGUocGFnZSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHB1dF9w YWdlKHBhZ2UpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU1V X01BQ0hQSFlTX1VQREFURToKKyAgICAgICAgICAgIGlmICggdW5saWtlbHkoZCAhPSBwdF9vd25l cikgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJjID0gLUVQRVJNOworICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoIHVubGlr ZWx5KHBhZ2luZ19tb2RlX3RyYW5zbGF0ZShwZ19vd25lcikpICkKKyAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIG1mbiA9IHJlcS5wdHIgPj4gUEFHRV9TSElGVDsKKyAg ICAgICAgICAgIGdwZm4gPSByZXEudmFsOworCisgICAgICAgICAgICB4c21fbmVlZGVkIHw9IFhT TV9NTVVfTUFDSFBIWVNfVVBEQVRFOworICAgICAgICAgICAgaWYgKCB4c21fbmVlZGVkICE9IHhz bV9jaGVja2VkICkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByYyA9IHhzbV9tbXVf dXBkYXRlKFhTTV9UQVJHRVQsIGQsIE5VTEwsIHBnX293bmVyLCB4c21fbmVlZGVkKTsKKyAgICAg ICAgICAgICAgICBpZiAoIHJjICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg ICAgICAgICAgeHNtX2NoZWNrZWQgPSB4c21fbmVlZGVkOworICAgICAgICAgICAgfQorCisgICAg ICAgICAgICBpZiAoIHVubGlrZWx5KCFnZXRfcGFnZV9mcm9tX21mbihfbWZuKG1mbiksIHBnX293 bmVyKSkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGdkcHJpbnRrKFhFTkxPR19X QVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZ2V0IHBhZ2UgZm9y IG1hY2gtPnBoeXMgdXBkYXRlXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC1FSU5WQUw7Cisg ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldF9n cGZuX2Zyb21fbWZuKG1mbiwgZ3Bmbik7CisKKyAgICAgICAgICAgIHBhZ2luZ19tYXJrX2RpcnR5 KHBnX293bmVyLCBfbWZuKG1mbikpOworCisgICAgICAgICAgICBwdXRfcGFnZShtZm5fdG9fcGFn ZShtZm4pKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICByYyA9IC1FTk9TWVM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAg ICAgIGlmICggdW5saWtlbHkocmMpICkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGd1 ZXN0X2hhbmRsZV9hZGRfb2Zmc2V0KHVyZXFzLCAxKTsKKyAgICB9CisKKyAgICBpZiAoIHJjID09 IC1FUkVTVEFSVCApCisgICAgeworICAgICAgICBBU1NFUlQoaSA8IGNvdW50KTsKKyAgICAgICAg cmMgPSBoeXBlcmNhbGxfY3JlYXRlX2NvbnRpbnVhdGlvbigKKyAgICAgICAgICAgIF9fSFlQRVJW SVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsCisgICAgICAgICAgICB1cmVxcywgKGNvdW50IC0gaSkg fCBNTVVfVVBEQVRFX1BSRUVNUFRFRCwgcGRvbmUsIGZvcmVpZ25kb20pOworICAgIH0KKyAgICBl bHNlIGlmICggY3Vyci0+YXJjaC5vbGRfZ3Vlc3RfdGFibGUgKQorICAgIHsKKyAgICAgICAgWEVO X0dVRVNUX0hBTkRMRV9QQVJBTSh2b2lkKSBudWxsOworCisgICAgICAgIEFTU0VSVChyYyB8fCBp ID09IGNvdW50KTsKKyAgICAgICAgc2V0X3hlbl9ndWVzdF9oYW5kbGUobnVsbCwgTlVMTCk7Cisg ICAgICAgIC8qCisgICAgICAgICAqIEluIG9yZGVyIHRvIGhhdmUgYSB3YXkgdG8gY29tbXVuaWNh dGUgdGhlIGZpbmFsIHJldHVybiB2YWx1ZSB0bworICAgICAgICAgKiBvdXIgY29udGludWF0aW9u LCB3ZSBwYXNzIHRoaXMgaW4gcGxhY2Ugb2YgImZvcmVpZ25kb20iLCBidWlsZGluZworICAgICAg ICAgKiBvbiB0aGUgZmFjdCB0aGF0IHRoaXMgYXJndW1lbnQgaXNuJ3QgbmVlZGVkIGFueW1vcmUu CisgICAgICAgICAqLworICAgICAgICByYyA9IGh5cGVyY2FsbF9jcmVhdGVfY29udGludWF0aW9u KAorICAgICAgICAgICAgICAgIF9fSFlQRVJWSVNPUl9tbXVfdXBkYXRlLCAiaGloaSIsIG51bGws CisgICAgICAgICAgICAgICAgTU1VX1VQREFURV9QUkVFTVBURUQsIG51bGwsIHJjKTsKKyAgICB9 CisKKyAgICBwdXRfcGdfb3duZXIocGdfb3duZXIpOworCisgICAgaWYgKCB2YSApCisgICAgICAg IHVubWFwX2RvbWFpbl9wYWdlKHZhKTsKKworICAgIHBlcmZjX2FkZChudW1fcGFnZV91cGRhdGVz LCBpKTsKKworIG91dDoKKyAgICBpZiAoIHB0X293bmVyICE9IGQgKQorICAgICAgICByY3VfdW5s b2NrX2RvbWFpbihwdF9vd25lcik7CisKKyAgICAvKiBBZGQgaW5jcmVtZW50YWwgd29yayB3ZSBo YXZlIGRvbmUgdG8gdGhlIEBkb25lIG91dHB1dCBwYXJhbWV0ZXIuICovCisgICAgaWYgKCB1bmxp a2VseSghZ3Vlc3RfaGFuZGxlX2lzX251bGwocGRvbmUpKSApCisgICAgeworICAgICAgICBkb25l ICs9IGk7CisgICAgICAgIGNvcHlfdG9fZ3Vlc3QocGRvbmUsICZkb25lLCAxKTsKKyAgICB9CisK KyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgX19kb191cGRhdGVfdmFfbWFwcGluZyh1 bnNpZ25lZCBsb25nIHZhLCB1NjQgdmFsNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25lcikKK3sKKyAgICBsMV9wZ2VudHJ5X3QgICB2YWwg PSBsMWVfZnJvbV9pbnRwdGUodmFsNjQpOworICAgIHN0cnVjdCB2Y3B1ICAgKmN1cnIgPSBjdXJy ZW50OworICAgIHN0cnVjdCBkb21haW4gKmN1cnJkID0gY3Vyci0+ZG9tYWluOworICAgIHN0cnVj dCBwYWdlX2luZm8gKmdsMXBnOworICAgIGwxX3BnZW50cnlfdCAgKnBsMWU7CisgICAgdW5zaWdu ZWQgbG9uZyAgYm1hcF9wdHIsIGdsMW1mbjsKKyAgICBjcHVtYXNrX3QgICAgICptYXNrID0gTlVM TDsKKyAgICBpbnQgICAgICAgICAgICByYzsKKworICAgIHBlcmZjX2luY3IoY2FsbHNfdG9fdXBk YXRlX3ZhKTsKKworICAgIHJjID0geHNtX3VwZGF0ZV92YV9tYXBwaW5nKFhTTV9UQVJHRVQsIGN1 cnJkLCBwZ19vd25lciwgdmFsKTsKKyAgICBpZiAoIHJjICkKKyAgICAgICAgcmV0dXJuIHJjOwor CisgICAgcmMgPSAtRUlOVkFMOworICAgIHBsMWUgPSBwdl9tYXBfZ3Vlc3RfbDFlKHZhLCAmZ2wx bWZuKTsKKyAgICBpZiAoIHVubGlrZWx5KCFwbDFlIHx8ICFnZXRfcGFnZV9mcm9tX21mbihfbWZu KGdsMW1mbiksIGN1cnJkKSkgKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGdsMXBnID0gbWZu X3RvX3BhZ2UoZ2wxbWZuKTsKKyAgICBpZiAoICFwYWdlX2xvY2soZ2wxcGcpICkKKyAgICB7Cisg ICAgICAgIHB1dF9wYWdlKGdsMXBnKTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAg aWYgKCAoZ2wxcGctPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX3R5cGVfbWFzaykgIT0gUEdUX2wx X3BhZ2VfdGFibGUgKQorICAgIHsKKyAgICAgICAgcGFnZV91bmxvY2soZ2wxcGcpOworICAgICAg ICBwdXRfcGFnZShnbDFwZyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIHJjID0g bW9kX2wxX2VudHJ5KHBsMWUsIHZhbCwgZ2wxbWZuLCAwLCBjdXJyLCBwZ19vd25lcik7CisKKyAg ICBwYWdlX3VubG9jayhnbDFwZyk7CisgICAgcHV0X3BhZ2UoZ2wxcGcpOworCisgb3V0OgorICAg IGlmICggcGwxZSApCisgICAgICAgIHB2X3VubWFwX2d1ZXN0X2wxZShwbDFlKTsKKworICAgIHN3 aXRjaCAoIGZsYWdzICYgVVZNRl9GTFVTSFRZUEVfTUFTSyApCisgICAgeworICAgIGNhc2UgVVZN Rl9UTEJfRkxVU0g6CisgICAgICAgIHN3aXRjaCAoIChibWFwX3B0ciA9IGZsYWdzICYgflVWTUZf RkxVU0hUWVBFX01BU0spICkKKyAgICAgICAgeworICAgICAgICBjYXNlIFVWTUZfTE9DQUw6Cisg ICAgICAgICAgICBmbHVzaF90bGJfbG9jYWwoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIFVWTUZfQUxMOgorICAgICAgICAgICAgbWFzayA9IGN1cnJkLT5kb21haW5fZGlydHlf Y3B1bWFzazsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg ICAgbWFzayA9IHRoaXNfY3B1KHNjcmF0Y2hfY3B1bWFzayk7CisgICAgICAgICAgICByYyA9IHZj cHVtYXNrX3RvX3BjcHVtYXNrKGN1cnJkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdF9ndWVzdF9oYW5kbGVfZnJvbV9wdHIoYm1hcF9wdHIsIHZvaWQpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrKTsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICAgIGlmICggbWFzayApCisgICAgICAgICAgICBmbHVzaF90 bGJfbWFzayhtYXNrKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFVWTUZfSU5WTFBHOgor ICAgICAgICBzd2l0Y2ggKCAoYm1hcF9wdHIgPSBmbGFncyAmIH5VVk1GX0ZMVVNIVFlQRV9NQVNL KSApCisgICAgICAgIHsKKyAgICAgICAgY2FzZSBVVk1GX0xPQ0FMOgorICAgICAgICAgICAgcGFn aW5nX2ludmxwZyhjdXJyLCB2YSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBV Vk1GX0FMTDoKKyAgICAgICAgICAgIG1hc2sgPSBjdXJyZC0+ZG9tYWluX2RpcnR5X2NwdW1hc2s7 CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIG1hc2sg PSB0aGlzX2NwdShzY3JhdGNoX2NwdW1hc2spOworICAgICAgICAgICAgcmMgPSB2Y3B1bWFza190 b19wY3B1bWFzayhjdXJyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3RfZ3Vlc3RfaGFuZGxlX2Zyb21fcHRyKGJtYXBfcHRyLCB2b2lkKSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzayk7CisgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgfQorICAgICAgICBpZiAoIG1hc2sgKQorICAgICAgICAgICAgZmx1c2hfdGxiX29uZV9t YXNrKG1hc2ssIHZhKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOwor fQorCitsb25nIGRvX3VwZGF0ZV92YV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2 NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKyAg ICByZXR1cm4gX19kb191cGRhdGVfdmFfbWFwcGluZyh2YSwgdmFsNjQsIGZsYWdzLCBjdXJyZW50 LT5kb21haW4pOworfQorCitsb25nIGRvX3VwZGF0ZV92YV9tYXBwaW5nX290aGVyZG9tYWluKHVu c2lnbmVkIGxvbmcgdmEsIHU2NCB2YWw2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgZG9taWRfdCBkb21pZCkKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpwZ19vd25l cjsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoIChwZ19vd25lciA9IGdldF9wZ19vd25lcihkb21p ZCkpID09IE5VTEwgKQorICAgICAgICByZXR1cm4gLUVTUkNIOworCisgICAgcmMgPSBfX2RvX3Vw ZGF0ZV92YV9tYXBwaW5nKHZhLCB2YWw2NCwgZmxhZ3MsIHBnX293bmVyKTsKKworICAgIHB1dF9w Z19vd25lcihwZ19vd25lcik7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBMb2NhbCB2 YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2lj LW9mZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAq IEVuZDoKKyAqLwotLSAKMi4xMS4wCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVu Lm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==