From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by dpdk.org (Postfix) with ESMTP id AD0FA32A5 for ; Wed, 19 Sep 2018 09:29:24 +0200 (CEST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by fmsmga103.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Sep 2018 00:29:22 -0700 Message-Id: <0590c7$2ni65a@orsmga001.jf.intel.com> Date: 19 Sep 2018 00:28:03 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,393,1531810800"; d="scan'208";a="91822250" Received: from unknown (HELO [127.0.1.1]) ([10.240.176.154]) by orsmga001.jf.intel.com with ESMTP; 19 Sep 2018 00:28:03 -0700 Content-Type: multipart/alternative; boundary="===============0222398043628913181==" MIME-Version: 1.0 From: sys_stv@intel.com To: test-report@dpdk.org Cc: Subject: [dpdk-test-report] |FAILURE| pw44899[2/3] net/mlx5: remove Netlink flow driver X-BeenThere: test-report@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: automatic DPDK test reports List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 Sep 2018 07:29:25 -0000 --===============0222398043628913181== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 VGVzdC1MYWJlbDogSW50ZWwtY29tcGlsYXRpb24KVGVzdC1TdGF0dXM6IEZBSUxVUkUKaHR0cDov L2RwZGsub3JnL3BhdGNoLzQ0ODk5CgpfYXBwbHkgaXNzdWVzXwoKU3VibWl0dGVyOiBZb25nc2Vv ayBLb2ggPHlza29oQG1lbGxhbm94LmNvbT4KRGF0ZTogMjAxOC0wOS0xOSAwNzoyMTo1NgpEUERL IGdpdCBiYXNlbGluZToKCVJlcG86ZHBkay1tYXN0ZXIsIENvbW1pdElEOiA3YWJiNTIxZDJjNDQ4 OWJmYjRmZDBjMmJkMzdlMzA1MGIwNmE5YThhCglSZXBvOmRwZGstbmV4dC1ldmVudGRldiwgQ29t bWl0SUQ6IDc2YjlkOWRlNWM3ZDc0N2MzODEwMjcxNTZhYWMwNzczNWNiMWJjMGMKCVJlcG86ZHBk ay1uZXh0LW5ldCwgQ29tbWl0SUQ6IGM1NzM4Y2Q5NTIwNTIxMDM5ODE3MGUzOWIwNzFkOWEwZjE4 MGY3ZDkKCVJlcG86ZHBkay1uZXh0LWNyeXB0bywgQ29tbWl0SUQ6IDdlZTVhZmE1ZGI5NjdhMjEx Y2FkMjhlODNhYjU4OWQxODhjZDNlYzQKCVJlcG86ZHBkay1uZXh0LXZpcnRpbywgQ29tbWl0SUQ6 IGRlYWQwNjAyZDE0YzZkNmU3ZWYxNTI5ODljNThjMWI1ODQ3M2MzZGQKCipSZXBvOiBkcGRrLW1h c3RlcgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlLi4uCmVycm9yOiB3 aGlsZSBzZWFyY2hpbmcgZm9yOgpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9 IG1seDVfZmxvd192ZXJicy5jClNSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9NTFg1X1BNRCkgKz0g bWx4NV9zb2NrZXQuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1seDVf bmwuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1seDVfbmxfZmxvdy5j CgppZmVxICgkKENPTkZJR19SVEVfTElCUlRFX01MWDVfRExPUEVOX0RFUFMpLHkpCklOU1RBTEwt JChDT05GSUdfUlRFX0xJQlJURV9NTFg1X1BNRCktbGliICs9ICQoTElCX0dMVUUpCgplcnJvcjog cGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlOjM1CmVycm9yOiBkcml2ZXJz L25ldC9tbHg1L01ha2VmaWxlOiBwYXRjaCBkb2VzIG5vdCBhcHBseQpDaGVja2luZyBwYXRjaCBk cml2ZXJzL25ldC9tbHg1L21seDUuYy4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAyODIgKG9mZnNl dCAtNCBsaW5lcykuCkh1bmsgIzIgc3VjY2VlZGVkIGF0IDExMjggKG9mZnNldCAtNyBsaW5lcyku Ckh1bmsgIzMgc3VjY2VlZGVkIGF0IDExODAgKG9mZnNldCAtNyBsaW5lcykuCkNoZWNraW5nIHBh dGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NS5oLi4uCipSZXBvOiBkcGRrLW5leHQtZXZlbnRkZXYK Q2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9NYWtlZmlsZS4uLgplcnJvcjogd2hpbGUg c2VhcmNoaW5nIGZvcjoKU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX01MWDVfUE1EKSArPSBtbHg1 X2Zsb3dfdmVyYnMuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1seDVf c29ja2V0LmMKU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX01MWDVfUE1EKSArPSBtbHg1X25sLmMK U1JDUy0kKENPTkZJR19SVEVfTElCUlRFX01MWDVfUE1EKSArPSBtbHg1X25sX2Zsb3cuYwoKaWZl cSAoJChDT05GSUdfUlRFX0xJQlJURV9NTFg1X0RMT1BFTl9ERVBTKSx5KQpJTlNUQUxMLSQoQ09O RklHX1JURV9MSUJSVEVfTUxYNV9QTUQpLWxpYiArPSAkKExJQl9HTFVFKQoKZXJyb3I6IHBhdGNo IGZhaWxlZDogZHJpdmVycy9uZXQvbWx4NS9NYWtlZmlsZTozNQplcnJvcjogZHJpdmVycy9uZXQv bWx4NS9NYWtlZmlsZTogcGF0Y2ggZG9lcyBub3QgYXBwbHkKQ2hlY2tpbmcgcGF0Y2ggZHJpdmVy cy9uZXQvbWx4NS9tbHg1LmMuLi4KSHVuayAjMSBzdWNjZWVkZWQgYXQgMjgyIChvZmZzZXQgLTQg bGluZXMpLgpIdW5rICMyIHN1Y2NlZWRlZCBhdCAxMTI2IChvZmZzZXQgLTkgbGluZXMpLgpIdW5r ICMzIHN1Y2NlZWRlZCBhdCAxMTc4IChvZmZzZXQgLTkgbGluZXMpLgpDaGVja2luZyBwYXRjaCBk cml2ZXJzL25ldC9tbHg1L21seDUuaC4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAxNTYgKG9mZnNl dCAtMSBsaW5lcykuCkh1bmsgIzIgc3VjY2VlZGVkIGF0IDM5MCAob2Zmc2V0IC0yIGxpbmVzKS4K Q2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1X25sX2Zsb3cuYy4uLgplcnJvcjog d2hpbGUgc2VhcmNoaW5nIGZvcjoKLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNs YXVzZQogKiBDb3B5cmlnaHQgMjAxOCA2V0lORCBTLkEuCiAqIENvcHlyaWdodCAyMDE4IE1lbGxh bm94IFRlY2hub2xvZ2llcywgTHRkCiAqLwoKLS0KICogICBEZWZhdWx0IG1hc2sgZm9yIHBhdHRl cm4gaXRlbSBhcyBzcGVjaWZpZWQgYnkgdGhlIGZsb3cgQVBJLgogKiBAcGFyYW1baW5dIG1hc2tf c3VwcG9ydGVkCiAqICAgTWFzayBmaWVsZHMgc3VwcG9ydGVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlv bi4KICogQHBhcmFtW2luXSBtYXNrX2VtcHR5CiAqICAgRW1wdHkgbWFzayB0byByZXR1cm4gd2hl biB0aGVyZSBpcyBubyBzcGVjaWZpY2F0aW9uLgogKiBAcGFyYW1bb3V0XSBlcnJvcgogKiAgIFBl cmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5VTEwuCiAqCiAqIEByZXR1cm4K ICogICBFaXRoZXIgQHAgaXRlbS0+bWFzayBvciBvbmUgb2YgdGhlIG1hc2sgcGFyYW1ldGVycyBv biBzdWNjZXNzLCBOVUxMCiAqICAgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0LgogKi8K LS0KbWx4NV9ubF9mbG93X2l0ZW1fbWFzayhjb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRlbSAqaXRl bSwKCQkgICAgICAgY29uc3Qgdm9pZCAqbWFza19kZWZhdWx0LAoJCSAgICAgICBjb25zdCB2b2lk ICptYXNrX3N1cHBvcnRlZCwKCQkgICAgICAgY29uc3Qgdm9pZCAqbWFza19lbXB0eSwKCQkgICAg ICAgc2l6ZV90IG1hc2tfc2l6ZSwKCQkgICAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJv cikKewoJY29uc3QgdWludDhfdCAqbWFzazsKCXNpemVfdCBpOwoKCS8qIGl0ZW0tPmxhc3QgYW5k IGl0ZW0tPm1hc2sgY2Fubm90IGV4aXN0IHdpdGhvdXQgaXRlbS0+c3BlYy4gKi8KCWlmICghaXRl bS0+c3BlYyAmJiAoaXRlbS0+bWFzayB8fCBpdGVtLT5sYXN0KSkgewoJCXJ0ZV9mbG93X2Vycm9y X3NldAoJCQkoZXJyb3IsIEVJTlZBTCwgUlRFX0ZMT1dfRVJST1JfVFlQRV9JVEVNLCBpdGVtLAoJ CQkgIlwibWFza1wiIG9yIFwibGFzdFwiIGZpZWxkIHByb3ZpZGVkIHdpdGhvdXQgYSIKCQkJICIg Y29ycmVzcG9uZGluZyBcInNwZWNcIiIpOwoJCXJldHVybiBOVUxMOwoJfQoJLyogTm8gc3BlYywg bm8gbWFzaywgbm8gcHJvYmxlbS4gKi8KLS0KCWZvciAoaSA9IDA7IGkgIT0gbWFza19zaXplOyAr K2kpIHsKCQlpZiAoIW1hc2tbaV0pCgkJCWNvbnRpbnVlOwoJCWlmICgobWFza1tpXSB8ICgoY29u c3QgdWludDhfdCAqKW1hc2tfc3VwcG9ydGVkKVtpXSkgIT0KCQkgICAgKChjb25zdCB1aW50OF90 ICopbWFza19zdXBwb3J0ZWQpW2ldKSB7CgkJCXJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9y LCBFTk9UU1VQLCBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU1fTUFTSywKCQkJCSBtYXNrLCAidW5z dXBwb3J0ZWQgZmllbGQgZm91bmQgaW4gXCJtYXNrXCIiKTsKCQkJcmV0dXJuIE5VTEw7CgkJfQoJ CWlmIChpdGVtLT5sYXN0ICYmCgkJICAgICgoKGNvbnN0IHVpbnQ4X3QgKilpdGVtLT5zcGVjKVtp XSAmIG1hc2tbaV0pICE9CgkJICAgICgoKGNvbnN0IHVpbnQ4X3QgKilpdGVtLT5sYXN0KVtpXSAm IG1hc2tbaV0pKSB7CgkJCXJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9UU1VQLCBS VEVfRkxPV19FUlJPUl9UWVBFX0lURU1fTEFTVCwKCQkJCSBpdGVtLT5sYXN0LAoJCQkJICJyYW5n ZSBiZXR3ZWVuIFwic3BlY1wiIGFuZCBcImxhc3RcIiBub3QiCgkJCQkgIiBjb21wcmlzZWQgaW4g XCJtYXNrXCIiKTsKCQkJcmV0dXJuIE5VTEw7CgkJfQotLQogKiAgIEZsb3cgcnVsZSBhdHRyaWJ1 dGVzLgogKiBAcGFyYW1baW5dIHBhdHRlcm4KICogICBQYXR0ZXJuIHNwZWNpZmljYXRpb24uCiAq IEBwYXJhbVtpbl0gYWN0aW9ucwogKiAgIEFzc29jaWF0ZWQgYWN0aW9ucy4KICogQHBhcmFtW291 dF0gZXJyb3IKICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlmIG5vdCBOVUxM LgogKgogKiBAcmV0dXJuCiAqICAgQSBwb3NpdGl2ZSB2YWx1ZSByZXByZXNlbnRpbmcgdGhlIGV4 YWN0IHNpemUgb2YgdGhlIG1lc3NhZ2UgaW4gYnl0ZXMKICogICByZWdhcmRsZXNzIG9mIHRoZSBA cCBzaXplIHBhcmFtZXRlciBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIHZhbHVlCiAqICAg b3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0LgotLQoJCSAgICAgICBzaXplX3Qgc2l6ZSwK CQkgICAgICAgY29uc3Qgc3RydWN0IG1seDVfbmxfZmxvd19wdG9pICpwdG9pLAoJCSAgICAgICBj b25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYXR0ciAqYXR0ciwKCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0 ZV9mbG93X2l0ZW0gKnBhdHRlcm4sCgkJICAgICAgIGNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rp b24gKmFjdGlvbnMsCgkJICAgICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpCnsKCWFs aWduYXMoc3RydWN0IG5sbXNnaGRyKQoJdWludDhfdCBidWZfdG1wW21ubF9ubG1zZ19zaXplKHNp emVvZihzdHJ1Y3QgdGNtc2cpICsgMTAyNCldOwoJY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2l0ZW0g Kml0ZW07Cgljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfYWN0aW9uICphY3Rpb247Ci0tCglzdHJ1Y3Qg bmxhdHRyICpuYV92bGFuX3ByaW9yaXR5OwoJY29uc3QgZW51bSBtbHg1X25sX2Zsb3dfdHJhbnMg KnRyYW5zOwoJY29uc3QgZW51bSBtbHg1X25sX2Zsb3dfdHJhbnMgKmJhY2s7CgoJaWYgKCFzaXpl KQoJCWdvdG8gZXJyb3Jfbm9idWZzOwppbml0OgoJaXRlbSA9IHBhdHRlcm47CglhY3Rpb24gPSBh Y3Rpb25zOwoJbiA9IDA7CglhY3RfaW5kZXhfY3VyID0gMDsKLS0KCQlzdHJ1Y3QgbmxhdHRyICph Y3Q7CgkJdW5zaWduZWQgaW50IGk7CgoJY2FzZSBJTlZBTElEOgoJCWlmIChpdGVtLT50eXBlKQoJ CQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAsIFJURV9GTE9X X0VSUk9SX1RZUEVfSVRFTSwKCQkJCSBpdGVtLCAidW5zdXBwb3J0ZWQgcGF0dGVybiBpdGVtIGNv bWJpbmF0aW9uIik7CgkJZWxzZSBpZiAoYWN0aW9uLT50eXBlKQoJCQlyZXR1cm4gcnRlX2Zsb3df ZXJyb3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfQUNUSU9O LAoJCQkJIGFjdGlvbiwgInVuc3VwcG9ydGVkIGFjdGlvbiBjb21iaW5hdGlvbiIpOwoJCXJldHVy biBydGVfZmxvd19lcnJvcl9zZXQKCQkJKGVycm9yLCBFTk9UU1VQLCBSVEVfRkxPV19FUlJPUl9U WVBFX1VOU1BFQ0lGSUVELCBOVUxMLAoJCQkgImZsb3cgcnVsZSBsYWNrcyBzb21lIGtpbmQgb2Yg ZmF0ZSBhY3Rpb24iKTsKCWNhc2UgQkFDSzoKCQl0cmFucyA9IGJhY2s7CgkJbiA9IDA7CgkJZ290 byB0cmFuczsKLS0KCQkgKiBTdXBwb3J0ZWQgYXR0cmlidXRlczogbm8gZ3JvdXBzLCBzb21lIHBy aW9yaXRpZXMgYW5kCgkJICogaW5ncmVzcyBvbmx5LiBEb24ndCBjYXJlIGFib3V0IHRyYW5zZmVy IGFzIGl0IGlzIHRoZQoJCSAqIGNhbGxlcidzIHByb2JsZW0uCgkJICovCgkJaWYgKGF0dHItPmdy b3VwKQoJCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAsCgkJ CQkgUlRFX0ZMT1dfRVJST1JfVFlQRV9BVFRSX0dST1VQLAoJCQkJIGF0dHIsICJncm91cHMgYXJl IG5vdCBzdXBwb3J0ZWQiKTsKCQlpZiAoYXR0ci0+cHJpb3JpdHkgPiAweGZmZmUpCgkJCXJldHVy biBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwKCQkJCSBSVEVfRkxPV19F UlJPUl9UWVBFX0FUVFJfUFJJT1JJVFksCgkJCQkgYXR0ciwgImxvd2VzdCBwcmlvcml0eSBsZXZl bCBpcyAweGZmZmUiKTsKCQlpZiAoIWF0dHItPmluZ3Jlc3MpCgkJCXJldHVybiBydGVfZmxvd19l cnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwKCQkJCSBSVEVfRkxPV19FUlJPUl9UWVBFX0FU VFJfSU5HUkVTUywKCQkJCSBhdHRyLCAib25seSBpbmdyZXNzIGlzIHN1cHBvcnRlZCIpOwoJCWlm IChhdHRyLT5lZ3Jlc3MpCgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwg RU5PVFNVUCwKCQkJCSBSVEVfRkxPV19FUlJPUl9UWVBFX0FUVFJfSU5HUkVTUywKCQkJCSBhdHRy LCAiZWdyZXNzIGlzIG5vdCBzdXBwb3J0ZWQiKTsKCQlpZiAoc2l6ZSA8IG1ubF9ubG1zZ19zaXpl KHNpemVvZigqdGNtKSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCW5saCA9IG1ubF9ubG1zZ19w dXRfaGVhZGVyKGJ1Zik7CgkJbmxoLT5ubG1zZ190eXBlID0gMDsKCQlubGgtPm5sbXNnX2ZsYWdz ID0gMDsKCQlubGgtPm5sbXNnX3NlcSA9IDA7CgkJdGNtID0gbW5sX25sbXNnX3B1dF9leHRyYV9o ZWFkZXIobmxoLCBzaXplb2YoKnRjbSkpOwotLQoJCXRjbS0+dGNtX2luZm8gPSBUQ19IX01BS0Uo KGF0dHItPnByaW9yaXR5ICsgMSkgPDwgMTYsCgkJCQkJICBSVEVfQkUxNihFVEhfUF9BTEwpKTsK CQlicmVhazsKCWNhc2UgUEFUVEVSTjoKCQlpZiAoIW1ubF9hdHRyX3B1dF9zdHJ6X2NoZWNrKGJ1 Ziwgc2l6ZSwgVENBX0tJTkQsICJmbG93ZXIiKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJbmFf Zmxvd2VyID0gbW5sX2F0dHJfbmVzdF9zdGFydF9jaGVjayhidWYsIHNpemUsIFRDQV9PUFRJT05T KTsKCQlpZiAoIW5hX2Zsb3dlcikKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJaWYgKCFtbmxfYXR0 cl9wdXRfdTMyX2NoZWNrKGJ1Ziwgc2l6ZSwgVENBX0ZMT1dFUl9GTEFHUywKCQkJCQkgICAgVENB X0NMU19GTEFHU19TS0lQX1NXKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJYnJlYWs7CgljYXNl IElURU1fVk9JRDoKCQlpZiAoaXRlbS0+dHlwZSAhPSBSVEVfRkxPV19JVEVNX1RZUEVfVk9JRCkK CQkJZ290byB0cmFuczsKCQkrK2l0ZW07Ci0tCgkJCWdvdG8gdHJhbnM7CgkJbWFzay5wb3J0X2lk ID0gbWx4NV9ubF9mbG93X2l0ZW1fbWFzawoJCQkoaXRlbSwgJnJ0ZV9mbG93X2l0ZW1fcG9ydF9p ZF9tYXNrLAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX3N1cHBvcnRlZC5wb3J0X2lkLAoJCQkgJm1s eDVfbmxfZmxvd19tYXNrX2VtcHR5LnBvcnRfaWQsCgkJCSBzaXplb2YobWx4NV9ubF9mbG93X21h c2tfc3VwcG9ydGVkLnBvcnRfaWQpLCBlcnJvcik7CgkJaWYgKCFtYXNrLnBvcnRfaWQpCgkJCXJl dHVybiAtcnRlX2Vycm5vOwoJCWlmIChtYXNrLnBvcnRfaWQgPT0gJm1seDVfbmxfZmxvd19tYXNr X2VtcHR5LnBvcnRfaWQpIHsKCQkJaW5fcG9ydF9pZF9zZXQgPSAxOwoJCQkrK2l0ZW07CgkJCWJy ZWFrOwoJCX0KCQlzcGVjLnBvcnRfaWQgPSBpdGVtLT5zcGVjOwoJCWlmIChtYXNrLnBvcnRfaWQt PmlkICYmIG1hc2sucG9ydF9pZC0+aWQgIT0gMHhmZmZmZmZmZikKCQkJcmV0dXJuIHJ0ZV9mbG93 X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9UU1VQLCBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU1f TUFTSywKCQkJCSBtYXNrLnBvcnRfaWQsCgkJCQkgIm5vIHN1cHBvcnQgZm9yIHBhcnRpYWwgbWFz ayBvbiIKCQkJCSAiIFwiaWRcIiBmaWVsZCIpOwoJCWlmICghbWFzay5wb3J0X2lkLT5pZCkKCQkJ aSA9IDA7CgkJZWxzZQoJCQlmb3IgKGkgPSAwOyBwdG9pW2ldLmlmaW5kZXg7ICsraSkKCQkJCWlm IChwdG9pW2ldLnBvcnRfaWQgPT0gc3BlYy5wb3J0X2lkLT5pZCkKCQkJCQlicmVhazsKCQlpZiAo IXB0b2lbaV0uaWZpbmRleCkKCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9y LCBFTk9ERVYsIFJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTV9TUEVDLAoJCQkJIHNwZWMucG9ydF9p ZCwKCQkJCSAibWlzc2luZyBkYXRhIHRvIGNvbnZlcnQgcG9ydCBJRCB0byBpZmluZGV4Iik7CgkJ dGNtID0gbW5sX25sbXNnX2dldF9wYXlsb2FkKGJ1Zik7CgkJaWYgKGluX3BvcnRfaWRfc2V0ICYm CgkJICAgIHB0b2lbaV0uaWZpbmRleCAhPSAodW5zaWduZWQgaW50KXRjbS0+dGNtX2lmaW5kZXgp CgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwgUlRFX0ZM T1dfRVJST1JfVFlQRV9JVEVNX1NQRUMsCgkJCQkgc3BlYy5wb3J0X2lkLAoJCQkJICJjYW5ub3Qg bWF0Y2ggdHJhZmZpYyBmb3Igc2V2ZXJhbCBwb3J0IElEcyIKCQkJCSAiIHRocm91Z2ggYSBzaW5n bGUgZmxvdyBydWxlIik7CgkJdGNtLT50Y21faWZpbmRleCA9IHB0b2lbaV0uaWZpbmRleDsKCQlp bl9wb3J0X2lkX3NldCA9IDE7Ci0tCgkJCWdvdG8gdHJhbnM7CgkJbWFzay5ldGggPSBtbHg1X25s X2Zsb3dfaXRlbV9tYXNrCgkJCShpdGVtLCAmcnRlX2Zsb3dfaXRlbV9ldGhfbWFzaywKCQkJICZt bHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQuZXRoLAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX2Vt cHR5LmV0aCwKCQkJIHNpemVvZihtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQuZXRoKSwgZXJy b3IpOwoJCWlmICghbWFzay5ldGgpCgkJCXJldHVybiAtcnRlX2Vycm5vOwoJCWlmIChtYXNrLmV0 aCA9PSAmbWx4NV9ubF9mbG93X21hc2tfZW1wdHkuZXRoKSB7CgkJCSsraXRlbTsKCQkJYnJlYWs7 CgkJfQoJCXNwZWMuZXRoID0gaXRlbS0+c3BlYzsKCQlpZiAobWFzay5ldGgtPnR5cGUgJiYgbWFz ay5ldGgtPnR5cGUgIT0gUlRFX0JFMTYoMHhmZmZmKSkKCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9y X3NldAoJCQkJKGVycm9yLCBFTk9UU1VQLCBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU1fTUFTSywK CQkJCSBtYXNrLmV0aCwKCQkJCSAibm8gc3VwcG9ydCBmb3IgcGFydGlhbCBtYXNrIG9uIgoJCQkJ ICIgXCJ0eXBlXCIgZmllbGQiKTsKCQlpZiAobWFzay5ldGgtPnR5cGUpIHsKCQkJaWYgKCFtbmxf YXR0cl9wdXRfdTE2X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJCQkJICAgIFRDQV9GTE9XRVJfS0VZX0VU SF9UWVBFLAoJCQkJCQkgICAgc3BlYy5ldGgtPnR5cGUpKQoJCQkJZ290byBlcnJvcl9ub2J1ZnM7 CgkJCWV0aF90eXBlX3NldCA9IDE7CgkJfQoJCWlmICgoIWlzX3plcm9fZXRoZXJfYWRkcigmbWFz ay5ldGgtPmRzdCkgJiYKCQkgICAgICghbW5sX2F0dHJfcHV0X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJ CQkgIFRDQV9GTE9XRVJfS0VZX0VUSF9EU1QsCi0tCgkJCQkJICBzcGVjLmV0aC0+c3JjLmFkZHJf Ynl0ZXMpIHx8CgkJICAgICAgIW1ubF9hdHRyX3B1dF9jaGVjayhidWYsIHNpemUsCgkJCQkJICBU Q0FfRkxPV0VSX0tFWV9FVEhfU1JDX01BU0ssCgkJCQkJICBFVEhFUl9BRERSX0xFTiwKCQkJCQkg IG1hc2suZXRoLT5zcmMuYWRkcl9ieXRlcykpKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJKytp dGVtOwoJCWJyZWFrOwoJY2FzZSBJVEVNX1ZMQU46CgkJaWYgKGl0ZW0tPnR5cGUgIT0gUlRFX0ZM T1dfSVRFTV9UWVBFX1ZMQU4pCgkJCWdvdG8gdHJhbnM7CgkJbWFzay52bGFuID0gbWx4NV9ubF9m bG93X2l0ZW1fbWFzawoJCQkoaXRlbSwgJnJ0ZV9mbG93X2l0ZW1fdmxhbl9tYXNrLAoJCQkgJm1s eDVfbmxfZmxvd19tYXNrX3N1cHBvcnRlZC52bGFuLAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX2Vt cHR5LnZsYW4sCgkJCSBzaXplb2YobWx4NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLnZsYW4pLCBl cnJvcik7CgkJaWYgKCFtYXNrLnZsYW4pCgkJCXJldHVybiAtcnRlX2Vycm5vOwoJCWlmICghZXRo X3R5cGVfc2V0ICYmCgkJICAgICFtbmxfYXR0cl9wdXRfdTE2X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJ CQkgICAgVENBX0ZMT1dFUl9LRVlfRVRIX1RZUEUsCgkJCQkJICAgIFJURV9CRTE2KEVUSF9QXzgw MjFRKSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWV0aF90eXBlX3NldCA9IDE7CgkJdmxhbl9w cmVzZW50ID0gMTsKCQlpZiAobWFzay52bGFuID09ICZtbHg1X25sX2Zsb3dfbWFza19lbXB0eS52 bGFuKSB7CgkJCSsraXRlbTsKCQkJYnJlYWs7Ci0tCgkJICAgICAobWFzay52bGFuLT50Y2kgJiBS VEVfQkUxNigweGUwMDApKSAhPSBSVEVfQkUxNigweGUwMDApKSB8fAoJCSAgICAobWFzay52bGFu LT50Y2kgJiBSVEVfQkUxNigweDBmZmYpICYmCgkJICAgICAobWFzay52bGFuLT50Y2kgJiBSVEVf QkUxNigweDBmZmYpKSAhPSBSVEVfQkUxNigweDBmZmYpKSB8fAoJCSAgICAobWFzay52bGFuLT5p bm5lcl90eXBlICYmCgkJICAgICBtYXNrLnZsYW4tPmlubmVyX3R5cGUgIT0gUlRFX0JFMTYoMHhm ZmZmKSkpCgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwg UlRFX0ZMT1dfRVJST1JfVFlQRV9JVEVNX01BU0ssCgkJCQkgbWFzay52bGFuLAoJCQkJICJubyBz dXBwb3J0IGZvciBwYXJ0aWFsIG1hc2tzIG9uIgoJCQkJICIgXCJ0Y2lcIiAoUENQIGFuZCBWSUQg cGFydHMpIGFuZCIKCQkJCSAiIFwiaW5uZXJfdHlwZVwiIGZpZWxkcyIpOwoJCWlmIChtYXNrLnZs YW4tPmlubmVyX3R5cGUpIHsKCQkJaWYgKCFtbmxfYXR0cl9wdXRfdTE2X2NoZWNrCgkJCSAgICAo YnVmLCBzaXplLCBUQ0FfRkxPV0VSX0tFWV9WTEFOX0VUSF9UWVBFLAoJCQkgICAgIHNwZWMudmxh bi0+aW5uZXJfdHlwZSkpCgkJCQlnb3RvIGVycm9yX25vYnVmczsKCQkJdmxhbl9ldGhfdHlwZV9z ZXQgPSAxOwoJCX0KCQlpZiAoKG1hc2sudmxhbi0+dGNpICYgUlRFX0JFMTYoMHhlMDAwKSAmJgoJ CSAgICAgIW1ubF9hdHRyX3B1dF91OF9jaGVjawoJCSAgICAgKGJ1Ziwgc2l6ZSwgVENBX0ZMT1dF Ul9LRVlfVkxBTl9QUklPLAoJCSAgICAgIChydGVfYmVfdG9fY3B1XzE2KHNwZWMudmxhbi0+dGNp KSA+PiAxMykgJiAweDcpKSB8fAoJCSAgICAobWFzay52bGFuLT50Y2kgJiBSVEVfQkUxNigweDBm ZmYpICYmCgkJICAgICAhbW5sX2F0dHJfcHV0X3UxNl9jaGVjawoJCSAgICAgKGJ1Ziwgc2l6ZSwg VENBX0ZMT1dFUl9LRVlfVkxBTl9JRCwKCQkgICAgICBydGVfYmVfdG9fY3B1XzE2KHNwZWMudmxh bi0+dGNpICYgUlRFX0JFMTYoMHgwZmZmKSkpKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJKytp dGVtOwoJCWJyZWFrOwoJY2FzZSBJVEVNX0lQVjQ6CgkJaWYgKGl0ZW0tPnR5cGUgIT0gUlRFX0ZM T1dfSVRFTV9UWVBFX0lQVjQpCgkJCWdvdG8gdHJhbnM7CgkJbWFzay5pcHY0ID0gbWx4NV9ubF9m bG93X2l0ZW1fbWFzawoJCQkoaXRlbSwgJnJ0ZV9mbG93X2l0ZW1faXB2NF9tYXNrLAoJCQkgJm1s eDVfbmxfZmxvd19tYXNrX3N1cHBvcnRlZC5pcHY0LAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX2Vt cHR5LmlwdjQsCgkJCSBzaXplb2YobWx4NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLmlwdjQpLCBl cnJvcik7CgkJaWYgKCFtYXNrLmlwdjQpCgkJCXJldHVybiAtcnRlX2Vycm5vOwoJCWlmICgoIWV0 aF90eXBlX3NldCB8fCAhdmxhbl9ldGhfdHlwZV9zZXQpICYmCgkJICAgICFtbmxfYXR0cl9wdXRf dTE2X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJCQkgICAgdmxhbl9wcmVzZW50ID8KCQkJCQkgICAgVENB X0ZMT1dFUl9LRVlfVkxBTl9FVEhfVFlQRSA6CgkJCQkJICAgIFRDQV9GTE9XRVJfS0VZX0VUSF9U WVBFLAoJCQkJCSAgICBSVEVfQkUxNihFVEhfUF9JUCkpKQoJCQlnb3RvIGVycm9yX25vYnVmczsK CQlldGhfdHlwZV9zZXQgPSAxOwoJCXZsYW5fZXRoX3R5cGVfc2V0ID0gMTsKCQlpZiAobWFzay5p cHY0ID09ICZtbHg1X25sX2Zsb3dfbWFza19lbXB0eS5pcHY0KSB7CgkJCSsraXRlbTsKCQkJYnJl YWs7CgkJfQoJCXNwZWMuaXB2NCA9IGl0ZW0tPnNwZWM7CgkJaWYgKG1hc2suaXB2NC0+aGRyLm5l eHRfcHJvdG9faWQgJiYKCQkgICAgbWFzay5pcHY0LT5oZHIubmV4dF9wcm90b19pZCAhPSAweGZm KQoJCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAsIFJURV9G TE9XX0VSUk9SX1RZUEVfSVRFTV9NQVNLLAoJCQkJIG1hc2suaXB2NCwKCQkJCSAibm8gc3VwcG9y dCBmb3IgcGFydGlhbCBtYXNrIG9uIgoJCQkJICIgXCJoZHIubmV4dF9wcm90b19pZFwiIGZpZWxk Iik7CgkJaWYgKG1hc2suaXB2NC0+aGRyLm5leHRfcHJvdG9faWQpIHsKCQkJaWYgKCFtbmxfYXR0 cl9wdXRfdThfY2hlY2sKCQkJICAgIChidWYsIHNpemUsIFRDQV9GTE9XRVJfS0VZX0lQX1BST1RP LAoJCQkgICAgIHNwZWMuaXB2NC0+aGRyLm5leHRfcHJvdG9faWQpKQoJCQkJZ290byBlcnJvcl9u b2J1ZnM7CgkJCWlwX3Byb3RvX3NldCA9IDE7CgkJfQoJCWlmICgobWFzay5pcHY0LT5oZHIuc3Jj X2FkZHIgJiYKCQkgICAgICghbW5sX2F0dHJfcHV0X3UzMl9jaGVjayhidWYsIHNpemUsCgkJCQkJ ICAgICAgVENBX0ZMT1dFUl9LRVlfSVBWNF9TUkMsCi0tCgkJCQkJICAgICAgVENBX0ZMT1dFUl9L RVlfSVBWNF9EU1QsCgkJCQkJICAgICAgc3BlYy5pcHY0LT5oZHIuZHN0X2FkZHIpIHx8CgkJICAg ICAgIW1ubF9hdHRyX3B1dF91MzJfY2hlY2soYnVmLCBzaXplLAoJCQkJCSAgICAgIFRDQV9GTE9X RVJfS0VZX0lQVjRfRFNUX01BU0ssCgkJCQkJICAgICAgbWFzay5pcHY0LT5oZHIuZHN0X2FkZHIp KSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCSsraXRlbTsKCQlicmVhazsKCWNhc2UgSVRFTV9J UFY2OgoJCWlmIChpdGVtLT50eXBlICE9IFJURV9GTE9XX0lURU1fVFlQRV9JUFY2KQoJCQlnb3Rv IHRyYW5zOwoJCW1hc2suaXB2NiA9IG1seDVfbmxfZmxvd19pdGVtX21hc2sKCQkJKGl0ZW0sICZy dGVfZmxvd19pdGVtX2lwdjZfbWFzaywKCQkJICZtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQu aXB2NiwKCQkJICZtbHg1X25sX2Zsb3dfbWFza19lbXB0eS5pcHY2LAoJCQkgc2l6ZW9mKG1seDVf bmxfZmxvd19tYXNrX3N1cHBvcnRlZC5pcHY2KSwgZXJyb3IpOwoJCWlmICghbWFzay5pcHY2KQoJ CQlyZXR1cm4gLXJ0ZV9lcnJubzsKCQlpZiAoKCFldGhfdHlwZV9zZXQgfHwgIXZsYW5fZXRoX3R5 cGVfc2V0KSAmJgoJCSAgICAhbW5sX2F0dHJfcHV0X3UxNl9jaGVjayhidWYsIHNpemUsCgkJCQkJ ICAgIHZsYW5fcHJlc2VudCA/CgkJCQkJICAgIFRDQV9GTE9XRVJfS0VZX1ZMQU5fRVRIX1RZUEUg OgoJCQkJCSAgICBUQ0FfRkxPV0VSX0tFWV9FVEhfVFlQRSwKCQkJCQkgICAgUlRFX0JFMTYoRVRI X1BfSVBWNikpKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlldGhfdHlwZV9zZXQgPSAxOwoJCXZs YW5fZXRoX3R5cGVfc2V0ID0gMTsKCQlpZiAobWFzay5pcHY2ID09ICZtbHg1X25sX2Zsb3dfbWFz a19lbXB0eS5pcHY2KSB7CgkJCSsraXRlbTsKCQkJYnJlYWs7CgkJfQoJCXNwZWMuaXB2NiA9IGl0 ZW0tPnNwZWM7CgkJaWYgKG1hc2suaXB2Ni0+aGRyLnByb3RvICYmIG1hc2suaXB2Ni0+aGRyLnBy b3RvICE9IDB4ZmYpCgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5P VFNVUCwgUlRFX0ZMT1dfRVJST1JfVFlQRV9JVEVNX01BU0ssCgkJCQkgbWFzay5pcHY2LAoJCQkJ ICJubyBzdXBwb3J0IGZvciBwYXJ0aWFsIG1hc2sgb24iCgkJCQkgIiBcImhkci5wcm90b1wiIGZp ZWxkIik7CgkJaWYgKG1hc2suaXB2Ni0+aGRyLnByb3RvKSB7CgkJCWlmICghbW5sX2F0dHJfcHV0 X3U4X2NoZWNrCgkJCSAgICAoYnVmLCBzaXplLCBUQ0FfRkxPV0VSX0tFWV9JUF9QUk9UTywKCQkJ ICAgICBzcGVjLmlwdjYtPmhkci5wcm90bykpCgkJCQlnb3RvIGVycm9yX25vYnVmczsKCQkJaXBf cHJvdG9fc2V0ID0gMTsKCQl9CgkJaWYgKCghSU42X0lTX0FERFJfVU5TUEVDSUZJRUQobWFzay5p cHY2LT5oZHIuc3JjX2FkZHIpICYmCgkJICAgICAoIW1ubF9hdHRyX3B1dF9jaGVjayhidWYsIHNp emUsCgkJCQkJICBUQ0FfRkxPV0VSX0tFWV9JUFY2X1NSQywKLS0KCQkJCQkgIHNwZWMuaXB2Ni0+ aGRyLmRzdF9hZGRyKSB8fAoJCSAgICAgICFtbmxfYXR0cl9wdXRfY2hlY2soYnVmLCBzaXplLAoJ CQkJCSAgVENBX0ZMT1dFUl9LRVlfSVBWNl9EU1RfTUFTSywKCQkJCQkgIHNpemVvZihtYXNrLmlw djYtPmhkci5kc3RfYWRkciksCgkJCQkJICBtYXNrLmlwdjYtPmhkci5kc3RfYWRkcikpKSkKCQkJ Z290byBlcnJvcl9ub2J1ZnM7CgkJKytpdGVtOwoJCWJyZWFrOwoJY2FzZSBJVEVNX1RDUDoKCQlp ZiAoaXRlbS0+dHlwZSAhPSBSVEVfRkxPV19JVEVNX1RZUEVfVENQKQoJCQlnb3RvIHRyYW5zOwoJ CW1hc2sudGNwID0gbWx4NV9ubF9mbG93X2l0ZW1fbWFzawoJCQkoaXRlbSwgJnJ0ZV9mbG93X2l0 ZW1fdGNwX21hc2ssCgkJCSAmbWx4NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLnRjcCwKCQkJICZt bHg1X25sX2Zsb3dfbWFza19lbXB0eS50Y3AsCgkJCSBzaXplb2YobWx4NV9ubF9mbG93X21hc2tf c3VwcG9ydGVkLnRjcCksIGVycm9yKTsKCQlpZiAoIW1hc2sudGNwKQoJCQlyZXR1cm4gLXJ0ZV9l cnJubzsKCQlpZiAoIWlwX3Byb3RvX3NldCAmJgoJCSAgICAhbW5sX2F0dHJfcHV0X3U4X2NoZWNr KGJ1Ziwgc2l6ZSwKCQkJCQkgICBUQ0FfRkxPV0VSX0tFWV9JUF9QUk9UTywKCQkJCQkgICBJUFBS T1RPX1RDUCkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWlmIChtYXNrLnRjcCA9PSAmbWx4NV9u bF9mbG93X21hc2tfZW1wdHkudGNwKSB7CgkJCSsraXRlbTsKCQkJYnJlYWs7CgkJfQoJCXNwZWMu dGNwID0gaXRlbS0+c3BlYzsKLS0KCQkJCQkgICAgICBUQ0FfRkxPV0VSX0tFWV9UQ1BfRFNULAoJ CQkJCSAgICAgIHNwZWMudGNwLT5oZHIuZHN0X3BvcnQpIHx8CgkJICAgICAgIW1ubF9hdHRyX3B1 dF91MTZfY2hlY2soYnVmLCBzaXplLAoJCQkJCSAgICAgIFRDQV9GTE9XRVJfS0VZX1RDUF9EU1Rf TUFTSywKCQkJCQkgICAgICBtYXNrLnRjcC0+aGRyLmRzdF9wb3J0KSkpKQoJCQlnb3RvIGVycm9y X25vYnVmczsKCQkrK2l0ZW07CgkJYnJlYWs7CgljYXNlIElURU1fVURQOgoJCWlmIChpdGVtLT50 eXBlICE9IFJURV9GTE9XX0lURU1fVFlQRV9VRFApCgkJCWdvdG8gdHJhbnM7CgkJbWFzay51ZHAg PSBtbHg1X25sX2Zsb3dfaXRlbV9tYXNrCgkJCShpdGVtLCAmcnRlX2Zsb3dfaXRlbV91ZHBfbWFz aywKCQkJICZtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQudWRwLAoJCQkgJm1seDVfbmxfZmxv d19tYXNrX2VtcHR5LnVkcCwKCQkJIHNpemVvZihtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQu dWRwKSwgZXJyb3IpOwoJCWlmICghbWFzay51ZHApCgkJCXJldHVybiAtcnRlX2Vycm5vOwoJCWlm ICghaXBfcHJvdG9fc2V0ICYmCgkJICAgICFtbmxfYXR0cl9wdXRfdThfY2hlY2soYnVmLCBzaXpl LAoJCQkJCSAgIFRDQV9GTE9XRVJfS0VZX0lQX1BST1RPLAoJCQkJCSAgIElQUFJPVE9fVURQKSkK CQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJaWYgKG1hc2sudWRwID09ICZtbHg1X25sX2Zsb3dfbWFz a19lbXB0eS51ZHApIHsKCQkJKytpdGVtOwoJCQlicmVhazsKCQl9CgkJc3BlYy51ZHAgPSBpdGVt LT5zcGVjOwotLQoJCQkJCSAgICAgIFRDQV9GTE9XRVJfS0VZX1VEUF9EU1QsCgkJCQkJICAgICAg c3BlYy51ZHAtPmhkci5kc3RfcG9ydCkgfHwKCQkgICAgICAhbW5sX2F0dHJfcHV0X3UxNl9jaGVj ayhidWYsIHNpemUsCgkJCQkJICAgICAgVENBX0ZMT1dFUl9LRVlfVURQX0RTVF9NQVNLLAoJCQkJ CSAgICAgIG1hc2sudWRwLT5oZHIuZHN0X3BvcnQpKSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJ CSsraXRlbTsKCQlicmVhazsKCWNhc2UgQUNUSU9OUzoKCQlpZiAoaXRlbS0+dHlwZSAhPSBSVEVf RkxPV19JVEVNX1RZUEVfRU5EKQoJCQlnb3RvIHRyYW5zOwoJCWFzc2VydChuYV9mbG93ZXIpOwoJ CWFzc2VydCghbmFfZmxvd2VyX2FjdCk7CgkJbmFfZmxvd2VyX2FjdCA9CgkJCW1ubF9hdHRyX25l c3Rfc3RhcnRfY2hlY2soYnVmLCBzaXplLCBUQ0FfRkxPV0VSX0FDVCk7CgkJaWYgKCFuYV9mbG93 ZXJfYWN0KQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlhY3RfaW5kZXhfY3VyID0gMTsKCQlicmVh azsKCWNhc2UgQUNUSU9OX1ZPSUQ6CgkJaWYgKGFjdGlvbi0+dHlwZSAhPSBSVEVfRkxPV19BQ1RJ T05fVFlQRV9WT0lEKQoJCQlnb3RvIHRyYW5zOwotLQoJCWVsc2UKCQkJZm9yIChpID0gMDsgcHRv aVtpXS5pZmluZGV4OyArK2kpCgkJCQlpZiAocHRvaVtpXS5wb3J0X2lkID09IGNvbmYucG9ydF9p ZC0+aWQpCgkJCQkJYnJlYWs7CgkJaWYgKCFwdG9pW2ldLmlmaW5kZXgpCgkJCXJldHVybiBydGVf Zmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PREVWLCBSVEVfRkxPV19FUlJPUl9UWVBFX0FD VElPTl9DT05GLAoJCQkJIGNvbmYucG9ydF9pZCwKCQkJCSAibWlzc2luZyBkYXRhIHRvIGNvbnZl cnQgcG9ydCBJRCB0byBpZmluZGV4Iik7CgkJYWN0X2luZGV4ID0KCQkJbW5sX2F0dHJfbmVzdF9z dGFydF9jaGVjayhidWYsIHNpemUsIGFjdF9pbmRleF9jdXIrKyk7CgkJaWYgKCFhY3RfaW5kZXgg fHwKCQkgICAgIW1ubF9hdHRyX3B1dF9zdHJ6X2NoZWNrKGJ1Ziwgc2l6ZSwgVENBX0FDVF9LSU5E LCAibWlycmVkIikpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWFjdCA9IG1ubF9hdHRyX25lc3Rf c3RhcnRfY2hlY2soYnVmLCBzaXplLCBUQ0FfQUNUX09QVElPTlMpOwoJCWlmICghYWN0KQoJCQln b3RvIGVycm9yX25vYnVmczsKCQlpZiAoIW1ubF9hdHRyX3B1dF9jaGVjayhidWYsIHNpemUsIFRD QV9NSVJSRURfUEFSTVMsCgkJCQkJc2l6ZW9mKHN0cnVjdCB0Y19taXJyZWQpLAoJCQkJCSYoc3Ry dWN0IHRjX21pcnJlZCl7CgkJCQkJCS5hY3Rpb24gPSBUQ19BQ1RfU1RPTEVOLAoJCQkJCQkuZWFj dGlvbiA9IFRDQV9FR1JFU1NfUkVESVIsCgkJCQkJCS5pZmluZGV4ID0gcHRvaVtpXS5pZmluZGV4 LAoJCQkJCX0pKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQltbmxfYXR0cl9uZXN0X2VuZChidWYs IGFjdCk7CgkJbW5sX2F0dHJfbmVzdF9lbmQoYnVmLCBhY3RfaW5kZXgpOwoJCSsrYWN0aW9uOwoJ CWJyZWFrOwoJY2FzZSBBQ1RJT05fRFJPUDoKLS0KCQkJZ290byB0cmFuczsKCQlhY3RfaW5kZXgg PQoJCQltbmxfYXR0cl9uZXN0X3N0YXJ0X2NoZWNrKGJ1Ziwgc2l6ZSwgYWN0X2luZGV4X2N1cisr KTsKCQlpZiAoIWFjdF9pbmRleCB8fAoJCSAgICAhbW5sX2F0dHJfcHV0X3N0cnpfY2hlY2soYnVm LCBzaXplLCBUQ0FfQUNUX0tJTkQsICJnYWN0IikpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWFj dCA9IG1ubF9hdHRyX25lc3Rfc3RhcnRfY2hlY2soYnVmLCBzaXplLCBUQ0FfQUNUX09QVElPTlMp OwoJCWlmICghYWN0KQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlpZiAoIW1ubF9hdHRyX3B1dF9j aGVjayhidWYsIHNpemUsIFRDQV9HQUNUX1BBUk1TLAoJCQkJCXNpemVvZihzdHJ1Y3QgdGNfZ2Fj dCksCgkJCQkJJihzdHJ1Y3QgdGNfZ2FjdCl7CgkJCQkJCS5hY3Rpb24gPSBUQ19BQ1RfU0hPVCwK CQkJCQl9KSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJbW5sX2F0dHJfbmVzdF9lbmQoYnVmLCBh Y3QpOwoJCW1ubF9hdHRyX25lc3RfZW5kKGJ1ZiwgYWN0X2luZGV4KTsKCQkrK2FjdGlvbjsKCQli cmVhazsKCWNhc2UgQUNUSU9OX09GX1BPUF9WTEFOOgotLQphY3Rpb25fb2ZfdmxhbjoKCQlhY3Rf aW5kZXggPQoJCQltbmxfYXR0cl9uZXN0X3N0YXJ0X2NoZWNrKGJ1Ziwgc2l6ZSwgYWN0X2luZGV4 X2N1cisrKTsKCQlpZiAoIWFjdF9pbmRleCB8fAoJCSAgICAhbW5sX2F0dHJfcHV0X3N0cnpfY2hl Y2soYnVmLCBzaXplLCBUQ0FfQUNUX0tJTkQsICJ2bGFuIikpCgkJCWdvdG8gZXJyb3Jfbm9idWZz OwoJCWFjdCA9IG1ubF9hdHRyX25lc3Rfc3RhcnRfY2hlY2soYnVmLCBzaXplLCBUQ0FfQUNUX09Q VElPTlMpOwoJCWlmICghYWN0KQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlpZiAoIW1ubF9hdHRy X3B1dF9jaGVjayhidWYsIHNpemUsIFRDQV9WTEFOX1BBUk1TLAoJCQkJCXNpemVvZihzdHJ1Y3Qg dGNfdmxhbiksCgkJCQkJJihzdHJ1Y3QgdGNfdmxhbil7CgkJCQkJCS5hY3Rpb24gPSBUQ19BQ1Rf UElQRSwKCQkJCQkJLnZfYWN0aW9uID0gaSwKCQkJCQl9KSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7 CgkJaWYgKGkgPT0gVENBX1ZMQU5fQUNUX1BPUCkgewoJCQltbmxfYXR0cl9uZXN0X2VuZChidWYs IGFjdCk7CgkJCW1ubF9hdHRyX25lc3RfZW5kKGJ1ZiwgYWN0X2luZGV4KTsKCQkJKythY3Rpb247 CgkJCWJyZWFrOwoJCX0KCQlpZiAoaSA9PSBUQ0FfVkxBTl9BQ1RfUFVTSCAmJgoJCSAgICAhbW5s X2F0dHJfcHV0X3UxNl9jaGVjayhidWYsIHNpemUsCgkJCQkJICAgIFRDQV9WTEFOX1BVU0hfVkxB Tl9QUk9UT0NPTCwKCQkJCQkgICAgY29uZi5vZl9wdXNoX3ZsYW4tPmV0aGVydHlwZSkpCgkJCWdv dG8gZXJyb3Jfbm9idWZzOwoJCW5hX3ZsYW5faWQgPSBtbmxfbmxtc2dfZ2V0X3BheWxvYWRfdGFp bChidWYpOwoJCWlmICghbW5sX2F0dHJfcHV0X3UxNl9jaGVjayhidWYsIHNpemUsIFRDQV9WTEFO X1BBRCwgMCkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCW5hX3ZsYW5fcHJpb3JpdHkgPSBtbmxf bmxtc2dfZ2V0X3BheWxvYWRfdGFpbChidWYpOwoJCWlmICghbW5sX2F0dHJfcHV0X3U4X2NoZWNr KGJ1Ziwgc2l6ZSwgVENBX1ZMQU5fUEFELCAwKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJbW5s X2F0dHJfbmVzdF9lbmQoYnVmLCBhY3QpOwoJCW1ubF9hdHRyX25lc3RfZW5kKGJ1ZiwgYWN0X2lu ZGV4KTsKCQlpZiAoYWN0aW9uLT50eXBlID09IFJURV9GTE9XX0FDVElPTl9UWVBFX09GX1NFVF9W TEFOX1ZJRCkgewpvdmVycmlkZV9uYV92bGFuX2lkOgoJCQluYV92bGFuX2lkLT5ubGFfdHlwZSA9 IFRDQV9WTEFOX1BVU0hfVkxBTl9JRDsKLS0KCX0KCWJhY2sgPSB0cmFuczsKCXRyYW5zID0gbWx4 NV9ubF9mbG93X3RyYW5zW3RyYW5zW24gLSAxXV07CgluID0gMDsKCWdvdG8gdHJhbnM7CmVycm9y X25vYnVmczoKCWlmIChidWYgIT0gYnVmX3RtcCkgewoJCWJ1ZiA9IGJ1Zl90bXA7CgkJc2l6ZSA9 IHNpemVvZihidWZfdG1wKTsKCQlnb3RvIGluaXQ7Cgl9CglyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jf c2V0CgkJKGVycm9yLCBFTk9CVUZTLCBSVEVfRkxPV19FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELCBO VUxMLAoJCSAiZ2VuZXJhdGVkIFRDIG1lc3NhZ2UgaXMgdG9vIGxhcmdlIik7Cn0KCi8qKgogKiBC cmFuZCBydG5ldGxpbmsgYnVmZmVyIHdpdGggdW5pcXVlIGhhbmRsZS4KLS0KICoKICogQHBhcmFt IG5sCiAqICAgTGlibW5sIHNvY2tldCB0byB1c2UuCiAqIEBwYXJhbSBidWYKICogICBGbG93IHJ1 bGUgYnVmZmVyIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYnkgbWx4NV9ubF9mbG93X3RyYW5zcG9z ZSgpLgogKiBAcGFyYW1bb3V0XSBlcnJvcgogKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBv cnRpbmcgaWYgbm90IE5VTEwuCiAqCiAqIEByZXR1cm4KICogICAwIG9uIHN1Y2Nlc3MsIGEgbmVn YXRpdmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0LgogKi8KaW50 Cm1seDVfbmxfZmxvd19jcmVhdGUoc3RydWN0IG1ubF9zb2NrZXQgKm5sLCB2b2lkICpidWYsCgkJ ICAgIHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpCnsKCXN0cnVjdCBubG1zZ2hkciAqbmxo ID0gYnVmOwoKCW5saC0+bmxtc2dfdHlwZSA9IFJUTV9ORVdURklMVEVSOwoJbmxoLT5ubG1zZ19m bGFncyA9IE5MTV9GX1JFUVVFU1QgfCBOTE1fRl9DUkVBVEUgfCBOTE1fRl9FWENMOwoJaWYgKCFt bHg1X25sX2Zsb3dfbmxfYWNrKG5sLCBubGgpKQoJCXJldHVybiAwOwoJcmV0dXJuIHJ0ZV9mbG93 X2Vycm9yX3NldAoJCShlcnJvciwgcnRlX2Vycm5vLCBSVEVfRkxPV19FUlJPUl9UWVBFX1VOU1BF Q0lGSUVELCBOVUxMLAoJCSAibmV0bGluazogZmFpbGVkIHRvIGNyZWF0ZSBUQyBmbG93IHJ1bGUi KTsKfQoKLyoqCiAqIERlc3Ryb3kgYSBOZXRsaW5rIGZsb3cgcnVsZS4KICoKICogQHBhcmFtIG5s CiAqICAgTGlibW5sIHNvY2tldCB0byB1c2UuCiAqIEBwYXJhbSBidWYKICogICBGbG93IHJ1bGUg YnVmZmVyIHByZXZpb3VzbHkgaW5pdGlhbGl6ZWQgYnkgbWx4NV9ubF9mbG93X3RyYW5zcG9zZSgp LgogKiBAcGFyYW1bb3V0XSBlcnJvcgogKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRp bmcgaWYgbm90IE5VTEwuCiAqCiAqIEByZXR1cm4KICogICAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRp dmUgZXJybm8gdmFsdWUgb3RoZXJ3aXNlIGFuZCBydGVfZXJybm8gaXMgc2V0LgogKi8KaW50Cm1s eDVfbmxfZmxvd19kZXN0cm95KHN0cnVjdCBtbmxfc29ja2V0ICpubCwgdm9pZCAqYnVmLAoJCSAg ICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcikKewoJc3RydWN0IG5sbXNnaGRyICpubGgg PSBidWY7CgoJbmxoLT5ubG1zZ190eXBlID0gUlRNX0RFTFRGSUxURVI7CglubGgtPm5sbXNnX2Zs YWdzID0gTkxNX0ZfUkVRVUVTVDsKCWlmICghbWx4NV9ubF9mbG93X25sX2FjayhubCwgbmxoKSkK CQlyZXR1cm4gMDsKCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkoZXJyb3IsIGVycm5vLCBS VEVfRkxPV19FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELCBOVUxMLAoJCSAibmV0bGluazogZmFpbGVk IHRvIGRlc3Ryb3kgVEMgZmxvdyBydWxlIik7Cn0KCi8qKgogKiBJbml0aWFsaXplIGluZ3Jlc3Mg cWRpc2Mgb2YgYSBnaXZlbiBuZXR3b3JrIGludGVyZmFjZS4KICoKICogQHBhcmFtIG5sCiAqICAg TGlibW5sIHNvY2tldCBvZiB0aGUgQHAgTkVUTElOS19ST1VURSBraW5kLgogKiBAcGFyYW0gaWZp bmRleAogKiAgIEluZGV4IG9mIG5ldHdvcmsgaW50ZXJmYWNlIHRvIGluaXRpYWxpemUuCiAqIEBw YXJhbVtvdXRdIGVycm9yCiAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBu b3QgTlVMTC4KICoKICogQHJldHVybgogKiAgIDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJu byB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuCiAqLwppbnQKbWx4NV9ubF9m bG93X2luaXQoc3RydWN0IG1ubF9zb2NrZXQgKm5sLCB1bnNpZ25lZCBpbnQgaWZpbmRleCwKCQkg IHN0cnVjdCBydGVfZmxvd19lcnJvciAqZXJyb3IpCnsKCXN0cnVjdCBubG1zZ2hkciAqbmxoOwoJ c3RydWN0IHRjbXNnICp0Y207CglhbGlnbmFzKHN0cnVjdCBubG1zZ2hkcikKCXVpbnQ4X3QgYnVm W21ubF9ubG1zZ19zaXplKHNpemVvZigqdGNtKSArIDEyOCldOwotLQoJdGNtID0gbW5sX25sbXNn X3B1dF9leHRyYV9oZWFkZXIobmxoLCBzaXplb2YoKnRjbSkpOwoJdGNtLT50Y21fZmFtaWx5ID0g QUZfVU5TUEVDOwoJdGNtLT50Y21faWZpbmRleCA9IGlmaW5kZXg7Cgl0Y20tPnRjbV9oYW5kbGUg PSBUQ19IX01BS0UoVENfSF9JTkdSRVNTLCAwKTsKCXRjbS0+dGNtX3BhcmVudCA9IFRDX0hfSU5H UkVTUzsKCS8qIElnbm9yZSBlcnJvcnMgd2hlbiBxZGlzYyBpcyBhbHJlYWR5IGFic2VudC4gKi8K CWlmIChtbHg1X25sX2Zsb3dfbmxfYWNrKG5sLCBubGgpICYmCgkgICAgcnRlX2Vycm5vICE9IEVJ TlZBTCAmJiBydGVfZXJybm8gIT0gRU5PRU5UKQoJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQK CQkJKGVycm9yLCBydGVfZXJybm8sIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsCgkJ CSBOVUxMLCAibmV0bGluazogZmFpbGVkIHRvIHJlbW92ZSBpbmdyZXNzIHFkaXNjIik7CgkvKiBD cmVhdGUgZnJlc2ggaW5ncmVzcyBxZGlzYy4gKi8KCW5saCA9IG1ubF9ubG1zZ19wdXRfaGVhZGVy KGJ1Zik7CglubGgtPm5sbXNnX3R5cGUgPSBSVE1fTkVXUURJU0M7CglubGgtPm5sbXNnX2ZsYWdz ID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX0NSRUFURSB8IE5MTV9GX0VYQ0w7Cgl0Y20gPSBtbmxf bmxtc2dfcHV0X2V4dHJhX2hlYWRlcihubGgsIHNpemVvZigqdGNtKSk7Ci0tCgl0Y20tPnRjbV9p ZmluZGV4ID0gaWZpbmRleDsKCXRjbS0+dGNtX2hhbmRsZSA9IFRDX0hfTUFLRShUQ19IX0lOR1JF U1MsIDApOwoJdGNtLT50Y21fcGFyZW50ID0gVENfSF9JTkdSRVNTOwoJbW5sX2F0dHJfcHV0X3N0 cnpfY2hlY2sobmxoLCBzaXplb2YoYnVmKSwgVENBX0tJTkQsICJpbmdyZXNzIik7CglpZiAobWx4 NV9ubF9mbG93X25sX2FjayhubCwgbmxoKSkKCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJ CShlcnJvciwgcnRlX2Vycm5vLCBSVEVfRkxPV19FUlJPUl9UWVBFX1VOU1BFQ0lGSUVELAoJCQkg TlVMTCwgIm5ldGxpbms6IGZhaWxlZCB0byBjcmVhdGUgaW5ncmVzcyBxZGlzYyIpOwoJcmV0dXJu IDA7Cn0KCi8qKgogKiBDcmVhdGUgYW5kIGNvbmZpZ3VyZSBhIGxpYm1ubCBzb2NrZXQgZm9yIE5l dGxpbmsgZmxvdyBydWxlcy4KLS0KbWx4NV9ubF9mbG93X3NvY2tldF9kZXN0cm95KHN0cnVjdCBt bmxfc29ja2V0ICpubCkKewoJbW5sX3NvY2tldF9jbG9zZShubCk7Cn0KCmVycm9yOiBwYXRjaCBm YWlsZWQ6IGRyaXZlcnMvbmV0L21seDUvbWx4NV9ubF9mbG93LmM6MQplcnJvcjogZHJpdmVycy9u ZXQvbWx4NS9tbHg1X25sX2Zsb3cuYzogcGF0Y2ggZG9lcyBub3QgYXBwbHkKKlJlcG86IGRwZGst bmV4dC1uZXQKQ2hlY2tpbmcgcGF0Y2ggZHJpdmVycy9uZXQvbWx4NS9NYWtlZmlsZS4uLgplcnJv cjogd2hpbGUgc2VhcmNoaW5nIGZvcjoKU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX01MWDVfUE1E KSArPSBtbHg1X2Zsb3dfdmVyYnMuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQp ICs9IG1seDVfc29ja2V0LmMKU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX01MWDVfUE1EKSArPSBt bHg1X25sLmMKU1JDUy0kKENPTkZJR19SVEVfTElCUlRFX01MWDVfUE1EKSArPSBtbHg1X25sX2Zs b3cuYwoKaWZlcSAoJChDT05GSUdfUlRFX0xJQlJURV9NTFg1X0RMT1BFTl9ERVBTKSx5KQpJTlNU QUxMLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpLWxpYiArPSAkKExJQl9HTFVFKQoKZXJy b3I6IHBhdGNoIGZhaWxlZDogZHJpdmVycy9uZXQvbWx4NS9NYWtlZmlsZTozNQplcnJvcjogZHJp dmVycy9uZXQvbWx4NS9NYWtlZmlsZTogcGF0Y2ggZG9lcyBub3QgYXBwbHkKQ2hlY2tpbmcgcGF0 Y2ggZHJpdmVycy9uZXQvbWx4NS9tbHg1LmMuLi4KSHVuayAjMSBzdWNjZWVkZWQgYXQgMjgyIChv ZmZzZXQgLTQgbGluZXMpLgpIdW5rICMyIHN1Y2NlZWRlZCBhdCAxMTI4IChvZmZzZXQgLTcgbGlu ZXMpLgpIdW5rICMzIHN1Y2NlZWRlZCBhdCAxMTgwIChvZmZzZXQgLTcgbGluZXMpLgpDaGVja2lu ZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDUuaC4uLgoqUmVwbzogZHBkay1uZXh0LWNyeXB0 bwpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlLi4uCmVycm9yOiB3aGls ZSBzZWFyY2hpbmcgZm9yOgpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1s eDVfZmxvd192ZXJicy5jClNSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9NTFg1X1BNRCkgKz0gbWx4 NV9zb2NrZXQuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1seDVfbmwu YwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1seDVfbmxfZmxvdy5jCgpp ZmVxICgkKENPTkZJR19SVEVfTElCUlRFX01MWDVfRExPUEVOX0RFUFMpLHkpCklOU1RBTEwtJChD T05GSUdfUlRFX0xJQlJURV9NTFg1X1BNRCktbGliICs9ICQoTElCX0dMVUUpCgplcnJvcjogcGF0 Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlOjM1CmVycm9yOiBkcml2ZXJzL25l dC9tbHg1L01ha2VmaWxlOiBwYXRjaCBkb2VzIG5vdCBhcHBseQpDaGVja2luZyBwYXRjaCBkcml2 ZXJzL25ldC9tbHg1L21seDUuYy4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAyODIgKG9mZnNldCAt NCBsaW5lcykuCkh1bmsgIzIgc3VjY2VlZGVkIGF0IDExMjYgKG9mZnNldCAtOSBsaW5lcykuCkh1 bmsgIzMgc3VjY2VlZGVkIGF0IDExNzggKG9mZnNldCAtOSBsaW5lcykuCkNoZWNraW5nIHBhdGNo IGRyaXZlcnMvbmV0L21seDUvbWx4NS5oLi4uCkh1bmsgIzEgc3VjY2VlZGVkIGF0IDE1NiAob2Zm c2V0IC0xIGxpbmVzKS4KSHVuayAjMiBzdWNjZWVkZWQgYXQgMzkwIChvZmZzZXQgLTIgbGluZXMp LgpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDVfbmxfZmxvdy5jLi4uCmVycm9y OiB3aGlsZSBzZWFyY2hpbmcgZm9yOgovKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMt Q2xhdXNlCiAqIENvcHlyaWdodCAyMDE4IDZXSU5EIFMuQS4KICogQ29weXJpZ2h0IDIwMTggTWVs bGFub3ggVGVjaG5vbG9naWVzLCBMdGQKICovCgotLQogKiAgIERlZmF1bHQgbWFzayBmb3IgcGF0 dGVybiBpdGVtIGFzIHNwZWNpZmllZCBieSB0aGUgZmxvdyBBUEkuCiAqIEBwYXJhbVtpbl0gbWFz a19zdXBwb3J0ZWQKICogICBNYXNrIGZpZWxkcyBzdXBwb3J0ZWQgYnkgdGhlIGltcGxlbWVudGF0 aW9uLgogKiBAcGFyYW1baW5dIG1hc2tfZW1wdHkKICogICBFbXB0eSBtYXNrIHRvIHJldHVybiB3 aGVuIHRoZXJlIGlzIG5vIHNwZWNpZmljYXRpb24uCiAqIEBwYXJhbVtvdXRdIGVycm9yCiAqICAg UGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9ydGluZyBpZiBub3QgTlVMTC4KICoKICogQHJldHVy bgogKiAgIEVpdGhlciBAcCBpdGVtLT5tYXNrIG9yIG9uZSBvZiB0aGUgbWFzayBwYXJhbWV0ZXJz IG9uIHN1Y2Nlc3MsIE5VTEwKICogICBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuCiAq LwotLQptbHg1X25sX2Zsb3dfaXRlbV9tYXNrKGNvbnN0IHN0cnVjdCBydGVfZmxvd19pdGVtICpp dGVtLAoJCSAgICAgICBjb25zdCB2b2lkICptYXNrX2RlZmF1bHQsCgkJICAgICAgIGNvbnN0IHZv aWQgKm1hc2tfc3VwcG9ydGVkLAoJCSAgICAgICBjb25zdCB2b2lkICptYXNrX2VtcHR5LAoJCSAg ICAgICBzaXplX3QgbWFza19zaXplLAoJCSAgICAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVy cm9yKQp7Cgljb25zdCB1aW50OF90ICptYXNrOwoJc2l6ZV90IGk7CgoJLyogaXRlbS0+bGFzdCBh bmQgaXRlbS0+bWFzayBjYW5ub3QgZXhpc3Qgd2l0aG91dCBpdGVtLT5zcGVjLiAqLwoJaWYgKCFp dGVtLT5zcGVjICYmIChpdGVtLT5tYXNrIHx8IGl0ZW0tPmxhc3QpKSB7CgkJcnRlX2Zsb3dfZXJy b3Jfc2V0CgkJCShlcnJvciwgRUlOVkFMLCBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU0sIGl0ZW0s CgkJCSAiXCJtYXNrXCIgb3IgXCJsYXN0XCIgZmllbGQgcHJvdmlkZWQgd2l0aG91dCBhIgoJCQkg IiBjb3JyZXNwb25kaW5nIFwic3BlY1wiIik7CgkJcmV0dXJuIE5VTEw7Cgl9CgkvKiBObyBzcGVj LCBubyBtYXNrLCBubyBwcm9ibGVtLiAqLwotLQoJZm9yIChpID0gMDsgaSAhPSBtYXNrX3NpemU7 ICsraSkgewoJCWlmICghbWFza1tpXSkKCQkJY29udGludWU7CgkJaWYgKChtYXNrW2ldIHwgKChj b25zdCB1aW50OF90ICopbWFza19zdXBwb3J0ZWQpW2ldKSAhPQoJCSAgICAoKGNvbnN0IHVpbnQ4 X3QgKiltYXNrX3N1cHBvcnRlZClbaV0pIHsKCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJCQkoZXJy b3IsIEVOT1RTVVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTV9NQVNLLAoJCQkJIG1hc2ssICJ1 bnN1cHBvcnRlZCBmaWVsZCBmb3VuZCBpbiBcIm1hc2tcIiIpOwoJCQlyZXR1cm4gTlVMTDsKCQl9 CgkJaWYgKGl0ZW0tPmxhc3QgJiYKCQkgICAgKCgoY29uc3QgdWludDhfdCAqKWl0ZW0tPnNwZWMp W2ldICYgbWFza1tpXSkgIT0KCQkgICAgKCgoY29uc3QgdWludDhfdCAqKWl0ZW0tPmxhc3QpW2ld ICYgbWFza1tpXSkpIHsKCQkJcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAs IFJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTV9MQVNULAoJCQkJIGl0ZW0tPmxhc3QsCgkJCQkgInJh bmdlIGJldHdlZW4gXCJzcGVjXCIgYW5kIFwibGFzdFwiIG5vdCIKCQkJCSAiIGNvbXByaXNlZCBp biBcIm1hc2tcIiIpOwoJCQlyZXR1cm4gTlVMTDsKCQl9Ci0tCiAqICAgRmxvdyBydWxlIGF0dHJp YnV0ZXMuCiAqIEBwYXJhbVtpbl0gcGF0dGVybgogKiAgIFBhdHRlcm4gc3BlY2lmaWNhdGlvbi4K ICogQHBhcmFtW2luXSBhY3Rpb25zCiAqICAgQXNzb2NpYXRlZCBhY3Rpb25zLgogKiBAcGFyYW1b b3V0XSBlcnJvcgogKiAgIFBlcmZvcm0gdmVyYm9zZSBlcnJvciByZXBvcnRpbmcgaWYgbm90IE5V TEwuCiAqCiAqIEByZXR1cm4KICogICBBIHBvc2l0aXZlIHZhbHVlIHJlcHJlc2VudGluZyB0aGUg ZXhhY3Qgc2l6ZSBvZiB0aGUgbWVzc2FnZSBpbiBieXRlcwogKiAgIHJlZ2FyZGxlc3Mgb2YgdGhl IEBwIHNpemUgcGFyYW1ldGVyIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gdmFsdWUKICog ICBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuCi0tCgkJICAgICAgIHNpemVfdCBzaXpl LAoJCSAgICAgICBjb25zdCBzdHJ1Y3QgbWx4NV9ubF9mbG93X3B0b2kgKnB0b2ksCgkJICAgICAg IGNvbnN0IHN0cnVjdCBydGVfZmxvd19hdHRyICphdHRyLAoJCSAgICAgICBjb25zdCBzdHJ1Y3Qg cnRlX2Zsb3dfaXRlbSAqcGF0dGVybiwKCQkgICAgICAgY29uc3Qgc3RydWN0IHJ0ZV9mbG93X2Fj dGlvbiAqYWN0aW9ucywKCQkgICAgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcikKewoJ YWxpZ25hcyhzdHJ1Y3Qgbmxtc2doZHIpCgl1aW50OF90IGJ1Zl90bXBbbW5sX25sbXNnX3NpemUo c2l6ZW9mKHN0cnVjdCB0Y21zZykgKyAxMDI0KV07Cgljb25zdCBzdHJ1Y3QgcnRlX2Zsb3dfaXRl bSAqaXRlbTsKCWNvbnN0IHN0cnVjdCBydGVfZmxvd19hY3Rpb24gKmFjdGlvbjsKLS0KCXN0cnVj dCBubGF0dHIgKm5hX3ZsYW5fcHJpb3JpdHk7Cgljb25zdCBlbnVtIG1seDVfbmxfZmxvd190cmFu cyAqdHJhbnM7Cgljb25zdCBlbnVtIG1seDVfbmxfZmxvd190cmFucyAqYmFjazsKCglpZiAoIXNp emUpCgkJZ290byBlcnJvcl9ub2J1ZnM7CmluaXQ6CglpdGVtID0gcGF0dGVybjsKCWFjdGlvbiA9 IGFjdGlvbnM7CgluID0gMDsKCWFjdF9pbmRleF9jdXIgPSAwOwotLQoJCXN0cnVjdCBubGF0dHIg KmFjdDsKCQl1bnNpZ25lZCBpbnQgaTsKCgljYXNlIElOVkFMSUQ6CgkJaWYgKGl0ZW0tPnR5cGUp CgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwgUlRFX0ZM T1dfRVJST1JfVFlQRV9JVEVNLAoJCQkJIGl0ZW0sICJ1bnN1cHBvcnRlZCBwYXR0ZXJuIGl0ZW0g Y29tYmluYXRpb24iKTsKCQllbHNlIGlmIChhY3Rpb24tPnR5cGUpCgkJCXJldHVybiBydGVfZmxv d19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwgUlRFX0ZMT1dfRVJST1JfVFlQRV9BQ1RJ T04sCgkJCQkgYWN0aW9uLCAidW5zdXBwb3J0ZWQgYWN0aW9uIGNvbWJpbmF0aW9uIik7CgkJcmV0 dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkoZXJyb3IsIEVOT1RTVVAsIFJURV9GTE9XX0VSUk9S X1RZUEVfVU5TUEVDSUZJRUQsIE5VTEwsCgkJCSAiZmxvdyBydWxlIGxhY2tzIHNvbWUga2luZCBv ZiBmYXRlIGFjdGlvbiIpOwoJY2FzZSBCQUNLOgoJCXRyYW5zID0gYmFjazsKCQluID0gMDsKCQln b3RvIHRyYW5zOwotLQoJCSAqIFN1cHBvcnRlZCBhdHRyaWJ1dGVzOiBubyBncm91cHMsIHNvbWUg cHJpb3JpdGllcyBhbmQKCQkgKiBpbmdyZXNzIG9ubHkuIERvbid0IGNhcmUgYWJvdXQgdHJhbnNm ZXIgYXMgaXQgaXMgdGhlCgkJICogY2FsbGVyJ3MgcHJvYmxlbS4KCQkgKi8KCQlpZiAoYXR0ci0+ Z3JvdXApCgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwK CQkJCSBSVEVfRkxPV19FUlJPUl9UWVBFX0FUVFJfR1JPVVAsCgkJCQkgYXR0ciwgImdyb3VwcyBh cmUgbm90IHN1cHBvcnRlZCIpOwoJCWlmIChhdHRyLT5wcmlvcml0eSA+IDB4ZmZmZSkKCQkJcmV0 dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9UU1VQLAoJCQkJIFJURV9GTE9X X0VSUk9SX1RZUEVfQVRUUl9QUklPUklUWSwKCQkJCSBhdHRyLCAibG93ZXN0IHByaW9yaXR5IGxl dmVsIGlzIDB4ZmZmZSIpOwoJCWlmICghYXR0ci0+aW5ncmVzcykKCQkJcmV0dXJuIHJ0ZV9mbG93 X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9UU1VQLAoJCQkJIFJURV9GTE9XX0VSUk9SX1RZUEVf QVRUUl9JTkdSRVNTLAoJCQkJIGF0dHIsICJvbmx5IGluZ3Jlc3MgaXMgc3VwcG9ydGVkIik7CgkJ aWYgKGF0dHItPmVncmVzcykKCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9y LCBFTk9UU1VQLAoJCQkJIFJURV9GTE9XX0VSUk9SX1RZUEVfQVRUUl9JTkdSRVNTLAoJCQkJIGF0 dHIsICJlZ3Jlc3MgaXMgbm90IHN1cHBvcnRlZCIpOwoJCWlmIChzaXplIDwgbW5sX25sbXNnX3Np emUoc2l6ZW9mKCp0Y20pKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJbmxoID0gbW5sX25sbXNn X3B1dF9oZWFkZXIoYnVmKTsKCQlubGgtPm5sbXNnX3R5cGUgPSAwOwoJCW5saC0+bmxtc2dfZmxh Z3MgPSAwOwoJCW5saC0+bmxtc2dfc2VxID0gMDsKCQl0Y20gPSBtbmxfbmxtc2dfcHV0X2V4dHJh X2hlYWRlcihubGgsIHNpemVvZigqdGNtKSk7Ci0tCgkJdGNtLT50Y21faW5mbyA9IFRDX0hfTUFL RSgoYXR0ci0+cHJpb3JpdHkgKyAxKSA8PCAxNiwKCQkJCQkgIFJURV9CRTE2KEVUSF9QX0FMTCkp OwoJCWJyZWFrOwoJY2FzZSBQQVRURVJOOgoJCWlmICghbW5sX2F0dHJfcHV0X3N0cnpfY2hlY2so YnVmLCBzaXplLCBUQ0FfS0lORCwgImZsb3dlciIpKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlu YV9mbG93ZXIgPSBtbmxfYXR0cl9uZXN0X3N0YXJ0X2NoZWNrKGJ1Ziwgc2l6ZSwgVENBX09QVElP TlMpOwoJCWlmICghbmFfZmxvd2VyKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlpZiAoIW1ubF9h dHRyX3B1dF91MzJfY2hlY2soYnVmLCBzaXplLCBUQ0FfRkxPV0VSX0ZMQUdTLAoJCQkJCSAgICBU Q0FfQ0xTX0ZMQUdTX1NLSVBfU1cpKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlicmVhazsKCWNh c2UgSVRFTV9WT0lEOgoJCWlmIChpdGVtLT50eXBlICE9IFJURV9GTE9XX0lURU1fVFlQRV9WT0lE KQoJCQlnb3RvIHRyYW5zOwoJCSsraXRlbTsKLS0KCQkJZ290byB0cmFuczsKCQltYXNrLnBvcnRf aWQgPSBtbHg1X25sX2Zsb3dfaXRlbV9tYXNrCgkJCShpdGVtLCAmcnRlX2Zsb3dfaXRlbV9wb3J0 X2lkX21hc2ssCgkJCSAmbWx4NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLnBvcnRfaWQsCgkJCSAm bWx4NV9ubF9mbG93X21hc2tfZW1wdHkucG9ydF9pZCwKCQkJIHNpemVvZihtbHg1X25sX2Zsb3df bWFza19zdXBwb3J0ZWQucG9ydF9pZCksIGVycm9yKTsKCQlpZiAoIW1hc2sucG9ydF9pZCkKCQkJ cmV0dXJuIC1ydGVfZXJybm87CgkJaWYgKG1hc2sucG9ydF9pZCA9PSAmbWx4NV9ubF9mbG93X21h c2tfZW1wdHkucG9ydF9pZCkgewoJCQlpbl9wb3J0X2lkX3NldCA9IDE7CgkJCSsraXRlbTsKCQkJ YnJlYWs7CgkJfQoJCXNwZWMucG9ydF9pZCA9IGl0ZW0tPnNwZWM7CgkJaWYgKG1hc2sucG9ydF9p ZC0+aWQgJiYgbWFzay5wb3J0X2lkLT5pZCAhPSAweGZmZmZmZmZmKQoJCQlyZXR1cm4gcnRlX2Zs b3dfZXJyb3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfSVRF TV9NQVNLLAoJCQkJIG1hc2sucG9ydF9pZCwKCQkJCSAibm8gc3VwcG9ydCBmb3IgcGFydGlhbCBt YXNrIG9uIgoJCQkJICIgXCJpZFwiIGZpZWxkIik7CgkJaWYgKCFtYXNrLnBvcnRfaWQtPmlkKQoJ CQlpID0gMDsKCQllbHNlCgkJCWZvciAoaSA9IDA7IHB0b2lbaV0uaWZpbmRleDsgKytpKQoJCQkJ aWYgKHB0b2lbaV0ucG9ydF9pZCA9PSBzcGVjLnBvcnRfaWQtPmlkKQoJCQkJCWJyZWFrOwoJCWlm ICghcHRvaVtpXS5pZmluZGV4KQoJCQlyZXR1cm4gcnRlX2Zsb3dfZXJyb3Jfc2V0CgkJCQkoZXJy b3IsIEVOT0RFViwgUlRFX0ZMT1dfRVJST1JfVFlQRV9JVEVNX1NQRUMsCgkJCQkgc3BlYy5wb3J0 X2lkLAoJCQkJICJtaXNzaW5nIGRhdGEgdG8gY29udmVydCBwb3J0IElEIHRvIGlmaW5kZXgiKTsK CQl0Y20gPSBtbmxfbmxtc2dfZ2V0X3BheWxvYWQoYnVmKTsKCQlpZiAoaW5fcG9ydF9pZF9zZXQg JiYKCQkgICAgcHRvaVtpXS5pZmluZGV4ICE9ICh1bnNpZ25lZCBpbnQpdGNtLT50Y21faWZpbmRl eCkKCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9UU1VQLCBSVEVf RkxPV19FUlJPUl9UWVBFX0lURU1fU1BFQywKCQkJCSBzcGVjLnBvcnRfaWQsCgkJCQkgImNhbm5v dCBtYXRjaCB0cmFmZmljIGZvciBzZXZlcmFsIHBvcnQgSURzIgoJCQkJICIgdGhyb3VnaCBhIHNp bmdsZSBmbG93IHJ1bGUiKTsKCQl0Y20tPnRjbV9pZmluZGV4ID0gcHRvaVtpXS5pZmluZGV4OwoJ CWluX3BvcnRfaWRfc2V0ID0gMTsKLS0KCQkJZ290byB0cmFuczsKCQltYXNrLmV0aCA9IG1seDVf bmxfZmxvd19pdGVtX21hc2sKCQkJKGl0ZW0sICZydGVfZmxvd19pdGVtX2V0aF9tYXNrLAoJCQkg Jm1seDVfbmxfZmxvd19tYXNrX3N1cHBvcnRlZC5ldGgsCgkJCSAmbWx4NV9ubF9mbG93X21hc2tf ZW1wdHkuZXRoLAoJCQkgc2l6ZW9mKG1seDVfbmxfZmxvd19tYXNrX3N1cHBvcnRlZC5ldGgpLCBl cnJvcik7CgkJaWYgKCFtYXNrLmV0aCkKCQkJcmV0dXJuIC1ydGVfZXJybm87CgkJaWYgKG1hc2su ZXRoID09ICZtbHg1X25sX2Zsb3dfbWFza19lbXB0eS5ldGgpIHsKCQkJKytpdGVtOwoJCQlicmVh azsKCQl9CgkJc3BlYy5ldGggPSBpdGVtLT5zcGVjOwoJCWlmIChtYXNrLmV0aC0+dHlwZSAmJiBt YXNrLmV0aC0+dHlwZSAhPSBSVEVfQkUxNigweGZmZmYpKQoJCQlyZXR1cm4gcnRlX2Zsb3dfZXJy b3Jfc2V0CgkJCQkoZXJyb3IsIEVOT1RTVVAsIFJURV9GTE9XX0VSUk9SX1RZUEVfSVRFTV9NQVNL LAoJCQkJIG1hc2suZXRoLAoJCQkJICJubyBzdXBwb3J0IGZvciBwYXJ0aWFsIG1hc2sgb24iCgkJ CQkgIiBcInR5cGVcIiBmaWVsZCIpOwoJCWlmIChtYXNrLmV0aC0+dHlwZSkgewoJCQlpZiAoIW1u bF9hdHRyX3B1dF91MTZfY2hlY2soYnVmLCBzaXplLAoJCQkJCQkgICAgVENBX0ZMT1dFUl9LRVlf RVRIX1RZUEUsCgkJCQkJCSAgICBzcGVjLmV0aC0+dHlwZSkpCgkJCQlnb3RvIGVycm9yX25vYnVm czsKCQkJZXRoX3R5cGVfc2V0ID0gMTsKCQl9CgkJaWYgKCghaXNfemVyb19ldGhlcl9hZGRyKCZt YXNrLmV0aC0+ZHN0KSAmJgoJCSAgICAgKCFtbmxfYXR0cl9wdXRfY2hlY2soYnVmLCBzaXplLAoJ CQkJCSAgVENBX0ZMT1dFUl9LRVlfRVRIX0RTVCwKLS0KCQkJCQkgIHNwZWMuZXRoLT5zcmMuYWRk cl9ieXRlcykgfHwKCQkgICAgICAhbW5sX2F0dHJfcHV0X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJCQkg IFRDQV9GTE9XRVJfS0VZX0VUSF9TUkNfTUFTSywKCQkJCQkgIEVUSEVSX0FERFJfTEVOLAoJCQkJ CSAgbWFzay5ldGgtPnNyYy5hZGRyX2J5dGVzKSkpKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQkr K2l0ZW07CgkJYnJlYWs7CgljYXNlIElURU1fVkxBTjoKCQlpZiAoaXRlbS0+dHlwZSAhPSBSVEVf RkxPV19JVEVNX1RZUEVfVkxBTikKCQkJZ290byB0cmFuczsKCQltYXNrLnZsYW4gPSBtbHg1X25s X2Zsb3dfaXRlbV9tYXNrCgkJCShpdGVtLCAmcnRlX2Zsb3dfaXRlbV92bGFuX21hc2ssCgkJCSAm bWx4NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLnZsYW4sCgkJCSAmbWx4NV9ubF9mbG93X21hc2tf ZW1wdHkudmxhbiwKCQkJIHNpemVvZihtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQudmxhbiks IGVycm9yKTsKCQlpZiAoIW1hc2sudmxhbikKCQkJcmV0dXJuIC1ydGVfZXJybm87CgkJaWYgKCFl dGhfdHlwZV9zZXQgJiYKCQkgICAgIW1ubF9hdHRyX3B1dF91MTZfY2hlY2soYnVmLCBzaXplLAoJ CQkJCSAgICBUQ0FfRkxPV0VSX0tFWV9FVEhfVFlQRSwKCQkJCQkgICAgUlRFX0JFMTYoRVRIX1Bf ODAyMVEpKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJZXRoX3R5cGVfc2V0ID0gMTsKCQl2bGFu X3ByZXNlbnQgPSAxOwoJCWlmIChtYXNrLnZsYW4gPT0gJm1seDVfbmxfZmxvd19tYXNrX2VtcHR5 LnZsYW4pIHsKCQkJKytpdGVtOwoJCQlicmVhazsKLS0KCQkgICAgIChtYXNrLnZsYW4tPnRjaSAm IFJURV9CRTE2KDB4ZTAwMCkpICE9IFJURV9CRTE2KDB4ZTAwMCkpIHx8CgkJICAgIChtYXNrLnZs YW4tPnRjaSAmIFJURV9CRTE2KDB4MGZmZikgJiYKCQkgICAgIChtYXNrLnZsYW4tPnRjaSAmIFJU RV9CRTE2KDB4MGZmZikpICE9IFJURV9CRTE2KDB4MGZmZikpIHx8CgkJICAgIChtYXNrLnZsYW4t PmlubmVyX3R5cGUgJiYKCQkgICAgIG1hc2sudmxhbi0+aW5uZXJfdHlwZSAhPSBSVEVfQkUxNigw eGZmZmYpKSkKCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9UU1VQ LCBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU1fTUFTSywKCQkJCSBtYXNrLnZsYW4sCgkJCQkgIm5v IHN1cHBvcnQgZm9yIHBhcnRpYWwgbWFza3Mgb24iCgkJCQkgIiBcInRjaVwiIChQQ1AgYW5kIFZJ RCBwYXJ0cykgYW5kIgoJCQkJICIgXCJpbm5lcl90eXBlXCIgZmllbGRzIik7CgkJaWYgKG1hc2su dmxhbi0+aW5uZXJfdHlwZSkgewoJCQlpZiAoIW1ubF9hdHRyX3B1dF91MTZfY2hlY2sKCQkJICAg IChidWYsIHNpemUsIFRDQV9GTE9XRVJfS0VZX1ZMQU5fRVRIX1RZUEUsCgkJCSAgICAgc3BlYy52 bGFuLT5pbm5lcl90eXBlKSkKCQkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCQl2bGFuX2V0aF90eXBl X3NldCA9IDE7CgkJfQoJCWlmICgobWFzay52bGFuLT50Y2kgJiBSVEVfQkUxNigweGUwMDApICYm CgkJICAgICAhbW5sX2F0dHJfcHV0X3U4X2NoZWNrCgkJICAgICAoYnVmLCBzaXplLCBUQ0FfRkxP V0VSX0tFWV9WTEFOX1BSSU8sCgkJICAgICAgKHJ0ZV9iZV90b19jcHVfMTYoc3BlYy52bGFuLT50 Y2kpID4+IDEzKSAmIDB4NykpIHx8CgkJICAgIChtYXNrLnZsYW4tPnRjaSAmIFJURV9CRTE2KDB4 MGZmZikgJiYKCQkgICAgICFtbmxfYXR0cl9wdXRfdTE2X2NoZWNrCgkJICAgICAoYnVmLCBzaXpl LCBUQ0FfRkxPV0VSX0tFWV9WTEFOX0lELAoJCSAgICAgIHJ0ZV9iZV90b19jcHVfMTYoc3BlYy52 bGFuLT50Y2kgJiBSVEVfQkUxNigweDBmZmYpKSkpKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQkr K2l0ZW07CgkJYnJlYWs7CgljYXNlIElURU1fSVBWNDoKCQlpZiAoaXRlbS0+dHlwZSAhPSBSVEVf RkxPV19JVEVNX1RZUEVfSVBWNCkKCQkJZ290byB0cmFuczsKCQltYXNrLmlwdjQgPSBtbHg1X25s X2Zsb3dfaXRlbV9tYXNrCgkJCShpdGVtLCAmcnRlX2Zsb3dfaXRlbV9pcHY0X21hc2ssCgkJCSAm bWx4NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLmlwdjQsCgkJCSAmbWx4NV9ubF9mbG93X21hc2tf ZW1wdHkuaXB2NCwKCQkJIHNpemVvZihtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQuaXB2NCks IGVycm9yKTsKCQlpZiAoIW1hc2suaXB2NCkKCQkJcmV0dXJuIC1ydGVfZXJybm87CgkJaWYgKCgh ZXRoX3R5cGVfc2V0IHx8ICF2bGFuX2V0aF90eXBlX3NldCkgJiYKCQkgICAgIW1ubF9hdHRyX3B1 dF91MTZfY2hlY2soYnVmLCBzaXplLAoJCQkJCSAgICB2bGFuX3ByZXNlbnQgPwoJCQkJCSAgICBU Q0FfRkxPV0VSX0tFWV9WTEFOX0VUSF9UWVBFIDoKCQkJCQkgICAgVENBX0ZMT1dFUl9LRVlfRVRI X1RZUEUsCgkJCQkJICAgIFJURV9CRTE2KEVUSF9QX0lQKSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZz OwoJCWV0aF90eXBlX3NldCA9IDE7CgkJdmxhbl9ldGhfdHlwZV9zZXQgPSAxOwoJCWlmIChtYXNr LmlwdjQgPT0gJm1seDVfbmxfZmxvd19tYXNrX2VtcHR5LmlwdjQpIHsKCQkJKytpdGVtOwoJCQli cmVhazsKCQl9CgkJc3BlYy5pcHY0ID0gaXRlbS0+c3BlYzsKCQlpZiAobWFzay5pcHY0LT5oZHIu bmV4dF9wcm90b19pZCAmJgoJCSAgICBtYXNrLmlwdjQtPmhkci5uZXh0X3Byb3RvX2lkICE9IDB4 ZmYpCgkJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQKCQkJCShlcnJvciwgRU5PVFNVUCwgUlRF X0ZMT1dfRVJST1JfVFlQRV9JVEVNX01BU0ssCgkJCQkgbWFzay5pcHY0LAoJCQkJICJubyBzdXBw b3J0IGZvciBwYXJ0aWFsIG1hc2sgb24iCgkJCQkgIiBcImhkci5uZXh0X3Byb3RvX2lkXCIgZmll bGQiKTsKCQlpZiAobWFzay5pcHY0LT5oZHIubmV4dF9wcm90b19pZCkgewoJCQlpZiAoIW1ubF9h dHRyX3B1dF91OF9jaGVjawoJCQkgICAgKGJ1Ziwgc2l6ZSwgVENBX0ZMT1dFUl9LRVlfSVBfUFJP VE8sCgkJCSAgICAgc3BlYy5pcHY0LT5oZHIubmV4dF9wcm90b19pZCkpCgkJCQlnb3RvIGVycm9y X25vYnVmczsKCQkJaXBfcHJvdG9fc2V0ID0gMTsKCQl9CgkJaWYgKChtYXNrLmlwdjQtPmhkci5z cmNfYWRkciAmJgoJCSAgICAgKCFtbmxfYXR0cl9wdXRfdTMyX2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJ CQkgICAgICBUQ0FfRkxPV0VSX0tFWV9JUFY0X1NSQywKLS0KCQkJCQkgICAgICBUQ0FfRkxPV0VS X0tFWV9JUFY0X0RTVCwKCQkJCQkgICAgICBzcGVjLmlwdjQtPmhkci5kc3RfYWRkcikgfHwKCQkg ICAgICAhbW5sX2F0dHJfcHV0X3UzMl9jaGVjayhidWYsIHNpemUsCgkJCQkJICAgICAgVENBX0ZM T1dFUl9LRVlfSVBWNF9EU1RfTUFTSywKCQkJCQkgICAgICBtYXNrLmlwdjQtPmhkci5kc3RfYWRk cikpKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJKytpdGVtOwoJCWJyZWFrOwoJY2FzZSBJVEVN X0lQVjY6CgkJaWYgKGl0ZW0tPnR5cGUgIT0gUlRFX0ZMT1dfSVRFTV9UWVBFX0lQVjYpCgkJCWdv dG8gdHJhbnM7CgkJbWFzay5pcHY2ID0gbWx4NV9ubF9mbG93X2l0ZW1fbWFzawoJCQkoaXRlbSwg JnJ0ZV9mbG93X2l0ZW1faXB2Nl9tYXNrLAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX3N1cHBvcnRl ZC5pcHY2LAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX2VtcHR5LmlwdjYsCgkJCSBzaXplb2YobWx4 NV9ubF9mbG93X21hc2tfc3VwcG9ydGVkLmlwdjYpLCBlcnJvcik7CgkJaWYgKCFtYXNrLmlwdjYp CgkJCXJldHVybiAtcnRlX2Vycm5vOwoJCWlmICgoIWV0aF90eXBlX3NldCB8fCAhdmxhbl9ldGhf dHlwZV9zZXQpICYmCgkJICAgICFtbmxfYXR0cl9wdXRfdTE2X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJ CQkgICAgdmxhbl9wcmVzZW50ID8KCQkJCQkgICAgVENBX0ZMT1dFUl9LRVlfVkxBTl9FVEhfVFlQ RSA6CgkJCQkJICAgIFRDQV9GTE9XRVJfS0VZX0VUSF9UWVBFLAoJCQkJCSAgICBSVEVfQkUxNihF VEhfUF9JUFY2KSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWV0aF90eXBlX3NldCA9IDE7CgkJ dmxhbl9ldGhfdHlwZV9zZXQgPSAxOwoJCWlmIChtYXNrLmlwdjYgPT0gJm1seDVfbmxfZmxvd19t YXNrX2VtcHR5LmlwdjYpIHsKCQkJKytpdGVtOwoJCQlicmVhazsKCQl9CgkJc3BlYy5pcHY2ID0g aXRlbS0+c3BlYzsKCQlpZiAobWFzay5pcHY2LT5oZHIucHJvdG8gJiYgbWFzay5pcHY2LT5oZHIu cHJvdG8gIT0gMHhmZikKCQkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9yLCBF Tk9UU1VQLCBSVEVfRkxPV19FUlJPUl9UWVBFX0lURU1fTUFTSywKCQkJCSBtYXNrLmlwdjYsCgkJ CQkgIm5vIHN1cHBvcnQgZm9yIHBhcnRpYWwgbWFzayBvbiIKCQkJCSAiIFwiaGRyLnByb3RvXCIg ZmllbGQiKTsKCQlpZiAobWFzay5pcHY2LT5oZHIucHJvdG8pIHsKCQkJaWYgKCFtbmxfYXR0cl9w dXRfdThfY2hlY2sKCQkJICAgIChidWYsIHNpemUsIFRDQV9GTE9XRVJfS0VZX0lQX1BST1RPLAoJ CQkgICAgIHNwZWMuaXB2Ni0+aGRyLnByb3RvKSkKCQkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCQlp cF9wcm90b19zZXQgPSAxOwoJCX0KCQlpZiAoKCFJTjZfSVNfQUREUl9VTlNQRUNJRklFRChtYXNr LmlwdjYtPmhkci5zcmNfYWRkcikgJiYKCQkgICAgICghbW5sX2F0dHJfcHV0X2NoZWNrKGJ1Ziwg c2l6ZSwKCQkJCQkgIFRDQV9GTE9XRVJfS0VZX0lQVjZfU1JDLAotLQoJCQkJCSAgc3BlYy5pcHY2 LT5oZHIuZHN0X2FkZHIpIHx8CgkJICAgICAgIW1ubF9hdHRyX3B1dF9jaGVjayhidWYsIHNpemUs CgkJCQkJICBUQ0FfRkxPV0VSX0tFWV9JUFY2X0RTVF9NQVNLLAoJCQkJCSAgc2l6ZW9mKG1hc2su aXB2Ni0+aGRyLmRzdF9hZGRyKSwKCQkJCQkgIG1hc2suaXB2Ni0+aGRyLmRzdF9hZGRyKSkpKQoJ CQlnb3RvIGVycm9yX25vYnVmczsKCQkrK2l0ZW07CgkJYnJlYWs7CgljYXNlIElURU1fVENQOgoJ CWlmIChpdGVtLT50eXBlICE9IFJURV9GTE9XX0lURU1fVFlQRV9UQ1ApCgkJCWdvdG8gdHJhbnM7 CgkJbWFzay50Y3AgPSBtbHg1X25sX2Zsb3dfaXRlbV9tYXNrCgkJCShpdGVtLCAmcnRlX2Zsb3df aXRlbV90Y3BfbWFzaywKCQkJICZtbHg1X25sX2Zsb3dfbWFza19zdXBwb3J0ZWQudGNwLAoJCQkg Jm1seDVfbmxfZmxvd19tYXNrX2VtcHR5LnRjcCwKCQkJIHNpemVvZihtbHg1X25sX2Zsb3dfbWFz a19zdXBwb3J0ZWQudGNwKSwgZXJyb3IpOwoJCWlmICghbWFzay50Y3ApCgkJCXJldHVybiAtcnRl X2Vycm5vOwoJCWlmICghaXBfcHJvdG9fc2V0ICYmCgkJICAgICFtbmxfYXR0cl9wdXRfdThfY2hl Y2soYnVmLCBzaXplLAoJCQkJCSAgIFRDQV9GTE9XRVJfS0VZX0lQX1BST1RPLAoJCQkJCSAgIElQ UFJPVE9fVENQKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJaWYgKG1hc2sudGNwID09ICZtbHg1 X25sX2Zsb3dfbWFza19lbXB0eS50Y3ApIHsKCQkJKytpdGVtOwoJCQlicmVhazsKCQl9CgkJc3Bl Yy50Y3AgPSBpdGVtLT5zcGVjOwotLQoJCQkJCSAgICAgIFRDQV9GTE9XRVJfS0VZX1RDUF9EU1Qs CgkJCQkJICAgICAgc3BlYy50Y3AtPmhkci5kc3RfcG9ydCkgfHwKCQkgICAgICAhbW5sX2F0dHJf cHV0X3UxNl9jaGVjayhidWYsIHNpemUsCgkJCQkJICAgICAgVENBX0ZMT1dFUl9LRVlfVENQX0RT VF9NQVNLLAoJCQkJCSAgICAgIG1hc2sudGNwLT5oZHIuZHN0X3BvcnQpKSkpCgkJCWdvdG8gZXJy b3Jfbm9idWZzOwoJCSsraXRlbTsKCQlicmVhazsKCWNhc2UgSVRFTV9VRFA6CgkJaWYgKGl0ZW0t PnR5cGUgIT0gUlRFX0ZMT1dfSVRFTV9UWVBFX1VEUCkKCQkJZ290byB0cmFuczsKCQltYXNrLnVk cCA9IG1seDVfbmxfZmxvd19pdGVtX21hc2sKCQkJKGl0ZW0sICZydGVfZmxvd19pdGVtX3VkcF9t YXNrLAoJCQkgJm1seDVfbmxfZmxvd19tYXNrX3N1cHBvcnRlZC51ZHAsCgkJCSAmbWx4NV9ubF9m bG93X21hc2tfZW1wdHkudWRwLAoJCQkgc2l6ZW9mKG1seDVfbmxfZmxvd19tYXNrX3N1cHBvcnRl ZC51ZHApLCBlcnJvcik7CgkJaWYgKCFtYXNrLnVkcCkKCQkJcmV0dXJuIC1ydGVfZXJybm87CgkJ aWYgKCFpcF9wcm90b19zZXQgJiYKCQkgICAgIW1ubF9hdHRyX3B1dF91OF9jaGVjayhidWYsIHNp emUsCgkJCQkJICAgVENBX0ZMT1dFUl9LRVlfSVBfUFJPVE8sCgkJCQkJICAgSVBQUk9UT19VRFAp KQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlpZiAobWFzay51ZHAgPT0gJm1seDVfbmxfZmxvd19t YXNrX2VtcHR5LnVkcCkgewoJCQkrK2l0ZW07CgkJCWJyZWFrOwoJCX0KCQlzcGVjLnVkcCA9IGl0 ZW0tPnNwZWM7Ci0tCgkJCQkJICAgICAgVENBX0ZMT1dFUl9LRVlfVURQX0RTVCwKCQkJCQkgICAg ICBzcGVjLnVkcC0+aGRyLmRzdF9wb3J0KSB8fAoJCSAgICAgICFtbmxfYXR0cl9wdXRfdTE2X2No ZWNrKGJ1Ziwgc2l6ZSwKCQkJCQkgICAgICBUQ0FfRkxPV0VSX0tFWV9VRFBfRFNUX01BU0ssCgkJ CQkJICAgICAgbWFzay51ZHAtPmhkci5kc3RfcG9ydCkpKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7 CgkJKytpdGVtOwoJCWJyZWFrOwoJY2FzZSBBQ1RJT05TOgoJCWlmIChpdGVtLT50eXBlICE9IFJU RV9GTE9XX0lURU1fVFlQRV9FTkQpCgkJCWdvdG8gdHJhbnM7CgkJYXNzZXJ0KG5hX2Zsb3dlcik7 CgkJYXNzZXJ0KCFuYV9mbG93ZXJfYWN0KTsKCQluYV9mbG93ZXJfYWN0ID0KCQkJbW5sX2F0dHJf bmVzdF9zdGFydF9jaGVjayhidWYsIHNpemUsIFRDQV9GTE9XRVJfQUNUKTsKCQlpZiAoIW5hX2Zs b3dlcl9hY3QpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWFjdF9pbmRleF9jdXIgPSAxOwoJCWJy ZWFrOwoJY2FzZSBBQ1RJT05fVk9JRDoKCQlpZiAoYWN0aW9uLT50eXBlICE9IFJURV9GTE9XX0FD VElPTl9UWVBFX1ZPSUQpCgkJCWdvdG8gdHJhbnM7Ci0tCgkJZWxzZQoJCQlmb3IgKGkgPSAwOyBw dG9pW2ldLmlmaW5kZXg7ICsraSkKCQkJCWlmIChwdG9pW2ldLnBvcnRfaWQgPT0gY29uZi5wb3J0 X2lkLT5pZCkKCQkJCQlicmVhazsKCQlpZiAoIXB0b2lbaV0uaWZpbmRleCkKCQkJcmV0dXJuIHJ0 ZV9mbG93X2Vycm9yX3NldAoJCQkJKGVycm9yLCBFTk9ERVYsIFJURV9GTE9XX0VSUk9SX1RZUEVf QUNUSU9OX0NPTkYsCgkJCQkgY29uZi5wb3J0X2lkLAoJCQkJICJtaXNzaW5nIGRhdGEgdG8gY29u dmVydCBwb3J0IElEIHRvIGlmaW5kZXgiKTsKCQlhY3RfaW5kZXggPQoJCQltbmxfYXR0cl9uZXN0 X3N0YXJ0X2NoZWNrKGJ1Ziwgc2l6ZSwgYWN0X2luZGV4X2N1cisrKTsKCQlpZiAoIWFjdF9pbmRl eCB8fAoJCSAgICAhbW5sX2F0dHJfcHV0X3N0cnpfY2hlY2soYnVmLCBzaXplLCBUQ0FfQUNUX0tJ TkQsICJtaXJyZWQiKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJYWN0ID0gbW5sX2F0dHJfbmVz dF9zdGFydF9jaGVjayhidWYsIHNpemUsIFRDQV9BQ1RfT1BUSU9OUyk7CgkJaWYgKCFhY3QpCgkJ CWdvdG8gZXJyb3Jfbm9idWZzOwoJCWlmICghbW5sX2F0dHJfcHV0X2NoZWNrKGJ1Ziwgc2l6ZSwg VENBX01JUlJFRF9QQVJNUywKCQkJCQlzaXplb2Yoc3RydWN0IHRjX21pcnJlZCksCgkJCQkJJihz dHJ1Y3QgdGNfbWlycmVkKXsKCQkJCQkJLmFjdGlvbiA9IFRDX0FDVF9TVE9MRU4sCgkJCQkJCS5l YWN0aW9uID0gVENBX0VHUkVTU19SRURJUiwKCQkJCQkJLmlmaW5kZXggPSBwdG9pW2ldLmlmaW5k ZXgsCgkJCQkJfSkpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCW1ubF9hdHRyX25lc3RfZW5kKGJ1 ZiwgYWN0KTsKCQltbmxfYXR0cl9uZXN0X2VuZChidWYsIGFjdF9pbmRleCk7CgkJKythY3Rpb247 CgkJYnJlYWs7CgljYXNlIEFDVElPTl9EUk9QOgotLQoJCQlnb3RvIHRyYW5zOwoJCWFjdF9pbmRl eCA9CgkJCW1ubF9hdHRyX25lc3Rfc3RhcnRfY2hlY2soYnVmLCBzaXplLCBhY3RfaW5kZXhfY3Vy KyspOwoJCWlmICghYWN0X2luZGV4IHx8CgkJICAgICFtbmxfYXR0cl9wdXRfc3Ryel9jaGVjayhi dWYsIHNpemUsIFRDQV9BQ1RfS0lORCwgImdhY3QiKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJ YWN0ID0gbW5sX2F0dHJfbmVzdF9zdGFydF9jaGVjayhidWYsIHNpemUsIFRDQV9BQ1RfT1BUSU9O Uyk7CgkJaWYgKCFhY3QpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWlmICghbW5sX2F0dHJfcHV0 X2NoZWNrKGJ1Ziwgc2l6ZSwgVENBX0dBQ1RfUEFSTVMsCgkJCQkJc2l6ZW9mKHN0cnVjdCB0Y19n YWN0KSwKCQkJCQkmKHN0cnVjdCB0Y19nYWN0KXsKCQkJCQkJLmFjdGlvbiA9IFRDX0FDVF9TSE9U LAoJCQkJCX0pKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQltbmxfYXR0cl9uZXN0X2VuZChidWYs IGFjdCk7CgkJbW5sX2F0dHJfbmVzdF9lbmQoYnVmLCBhY3RfaW5kZXgpOwoJCSsrYWN0aW9uOwoJ CWJyZWFrOwoJY2FzZSBBQ1RJT05fT0ZfUE9QX1ZMQU46Ci0tCmFjdGlvbl9vZl92bGFuOgoJCWFj dF9pbmRleCA9CgkJCW1ubF9hdHRyX25lc3Rfc3RhcnRfY2hlY2soYnVmLCBzaXplLCBhY3RfaW5k ZXhfY3VyKyspOwoJCWlmICghYWN0X2luZGV4IHx8CgkJICAgICFtbmxfYXR0cl9wdXRfc3Ryel9j aGVjayhidWYsIHNpemUsIFRDQV9BQ1RfS0lORCwgInZsYW4iKSkKCQkJZ290byBlcnJvcl9ub2J1 ZnM7CgkJYWN0ID0gbW5sX2F0dHJfbmVzdF9zdGFydF9jaGVjayhidWYsIHNpemUsIFRDQV9BQ1Rf T1BUSU9OUyk7CgkJaWYgKCFhY3QpCgkJCWdvdG8gZXJyb3Jfbm9idWZzOwoJCWlmICghbW5sX2F0 dHJfcHV0X2NoZWNrKGJ1Ziwgc2l6ZSwgVENBX1ZMQU5fUEFSTVMsCgkJCQkJc2l6ZW9mKHN0cnVj dCB0Y192bGFuKSwKCQkJCQkmKHN0cnVjdCB0Y192bGFuKXsKCQkJCQkJLmFjdGlvbiA9IFRDX0FD VF9QSVBFLAoJCQkJCQkudl9hY3Rpb24gPSBpLAoJCQkJCX0pKQoJCQlnb3RvIGVycm9yX25vYnVm czsKCQlpZiAoaSA9PSBUQ0FfVkxBTl9BQ1RfUE9QKSB7CgkJCW1ubF9hdHRyX25lc3RfZW5kKGJ1 ZiwgYWN0KTsKCQkJbW5sX2F0dHJfbmVzdF9lbmQoYnVmLCBhY3RfaW5kZXgpOwoJCQkrK2FjdGlv bjsKCQkJYnJlYWs7CgkJfQoJCWlmIChpID09IFRDQV9WTEFOX0FDVF9QVVNIICYmCgkJICAgICFt bmxfYXR0cl9wdXRfdTE2X2NoZWNrKGJ1Ziwgc2l6ZSwKCQkJCQkgICAgVENBX1ZMQU5fUFVTSF9W TEFOX1BST1RPQ09MLAoJCQkJCSAgICBjb25mLm9mX3B1c2hfdmxhbi0+ZXRoZXJ0eXBlKSkKCQkJ Z290byBlcnJvcl9ub2J1ZnM7CgkJbmFfdmxhbl9pZCA9IG1ubF9ubG1zZ19nZXRfcGF5bG9hZF90 YWlsKGJ1Zik7CgkJaWYgKCFtbmxfYXR0cl9wdXRfdTE2X2NoZWNrKGJ1Ziwgc2l6ZSwgVENBX1ZM QU5fUEFELCAwKSkKCQkJZ290byBlcnJvcl9ub2J1ZnM7CgkJbmFfdmxhbl9wcmlvcml0eSA9IG1u bF9ubG1zZ19nZXRfcGF5bG9hZF90YWlsKGJ1Zik7CgkJaWYgKCFtbmxfYXR0cl9wdXRfdThfY2hl Y2soYnVmLCBzaXplLCBUQ0FfVkxBTl9QQUQsIDApKQoJCQlnb3RvIGVycm9yX25vYnVmczsKCQlt bmxfYXR0cl9uZXN0X2VuZChidWYsIGFjdCk7CgkJbW5sX2F0dHJfbmVzdF9lbmQoYnVmLCBhY3Rf aW5kZXgpOwoJCWlmIChhY3Rpb24tPnR5cGUgPT0gUlRFX0ZMT1dfQUNUSU9OX1RZUEVfT0ZfU0VU X1ZMQU5fVklEKSB7Cm92ZXJyaWRlX25hX3ZsYW5faWQ6CgkJCW5hX3ZsYW5faWQtPm5sYV90eXBl ID0gVENBX1ZMQU5fUFVTSF9WTEFOX0lEOwotLQoJfQoJYmFjayA9IHRyYW5zOwoJdHJhbnMgPSBt bHg1X25sX2Zsb3dfdHJhbnNbdHJhbnNbbiAtIDFdXTsKCW4gPSAwOwoJZ290byB0cmFuczsKZXJy b3Jfbm9idWZzOgoJaWYgKGJ1ZiAhPSBidWZfdG1wKSB7CgkJYnVmID0gYnVmX3RtcDsKCQlzaXpl ID0gc2l6ZW9mKGJ1Zl90bXApOwoJCWdvdG8gaW5pdDsKCX0KCXJldHVybiBydGVfZmxvd19lcnJv cl9zZXQKCQkoZXJyb3IsIEVOT0JVRlMsIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQs IE5VTEwsCgkJICJnZW5lcmF0ZWQgVEMgbWVzc2FnZSBpcyB0b28gbGFyZ2UiKTsKfQoKLyoqCiAq IEJyYW5kIHJ0bmV0bGluayBidWZmZXIgd2l0aCB1bmlxdWUgaGFuZGxlLgotLQogKgogKiBAcGFy YW0gbmwKICogICBMaWJtbmwgc29ja2V0IHRvIHVzZS4KICogQHBhcmFtIGJ1ZgogKiAgIEZsb3cg cnVsZSBidWZmZXIgcHJldmlvdXNseSBpbml0aWFsaXplZCBieSBtbHg1X25sX2Zsb3dfdHJhbnNw b3NlKCkuCiAqIEBwYXJhbVtvdXRdIGVycm9yCiAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJl cG9ydGluZyBpZiBub3QgTlVMTC4KICoKICogQHJldHVybgogKiAgIDAgb24gc3VjY2VzcywgYSBu ZWdhdGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuCiAqLwpp bnQKbWx4NV9ubF9mbG93X2NyZWF0ZShzdHJ1Y3QgbW5sX3NvY2tldCAqbmwsIHZvaWQgKmJ1ZiwK CQkgICAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcikKewoJc3RydWN0IG5sbXNnaGRyICpu bGggPSBidWY7CgoJbmxoLT5ubG1zZ190eXBlID0gUlRNX05FV1RGSUxURVI7CglubGgtPm5sbXNn X2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX0NSRUFURSB8IE5MTV9GX0VYQ0w7CglpZiAo IW1seDVfbmxfZmxvd19ubF9hY2sobmwsIG5saCkpCgkJcmV0dXJuIDA7CglyZXR1cm4gcnRlX2Zs b3dfZXJyb3Jfc2V0CgkJKGVycm9yLCBydGVfZXJybm8sIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5T UEVDSUZJRUQsIE5VTEwsCgkJICJuZXRsaW5rOiBmYWlsZWQgdG8gY3JlYXRlIFRDIGZsb3cgcnVs ZSIpOwp9CgovKioKICogRGVzdHJveSBhIE5ldGxpbmsgZmxvdyBydWxlLgogKgogKiBAcGFyYW0g bmwKICogICBMaWJtbmwgc29ja2V0IHRvIHVzZS4KICogQHBhcmFtIGJ1ZgogKiAgIEZsb3cgcnVs ZSBidWZmZXIgcHJldmlvdXNseSBpbml0aWFsaXplZCBieSBtbHg1X25sX2Zsb3dfdHJhbnNwb3Nl KCkuCiAqIEBwYXJhbVtvdXRdIGVycm9yCiAqICAgUGVyZm9ybSB2ZXJib3NlIGVycm9yIHJlcG9y dGluZyBpZiBub3QgTlVMTC4KICoKICogQHJldHVybgogKiAgIDAgb24gc3VjY2VzcywgYSBuZWdh dGl2ZSBlcnJubyB2YWx1ZSBvdGhlcndpc2UgYW5kIHJ0ZV9lcnJubyBpcyBzZXQuCiAqLwppbnQK bWx4NV9ubF9mbG93X2Rlc3Ryb3koc3RydWN0IG1ubF9zb2NrZXQgKm5sLCB2b2lkICpidWYsCgkJ ICAgICBzdHJ1Y3QgcnRlX2Zsb3dfZXJyb3IgKmVycm9yKQp7CglzdHJ1Y3Qgbmxtc2doZHIgKm5s aCA9IGJ1ZjsKCglubGgtPm5sbXNnX3R5cGUgPSBSVE1fREVMVEZJTFRFUjsKCW5saC0+bmxtc2df ZmxhZ3MgPSBOTE1fRl9SRVFVRVNUOwoJaWYgKCFtbHg1X25sX2Zsb3dfbmxfYWNrKG5sLCBubGgp KQoJCXJldHVybiAwOwoJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3NldAoJCShlcnJvciwgZXJybm8s IFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsIE5VTEwsCgkJICJuZXRsaW5rOiBmYWls ZWQgdG8gZGVzdHJveSBUQyBmbG93IHJ1bGUiKTsKfQoKLyoqCiAqIEluaXRpYWxpemUgaW5ncmVz cyBxZGlzYyBvZiBhIGdpdmVuIG5ldHdvcmsgaW50ZXJmYWNlLgogKgogKiBAcGFyYW0gbmwKICog ICBMaWJtbmwgc29ja2V0IG9mIHRoZSBAcCBORVRMSU5LX1JPVVRFIGtpbmQuCiAqIEBwYXJhbSBp ZmluZGV4CiAqICAgSW5kZXggb2YgbmV0d29yayBpbnRlcmZhY2UgdG8gaW5pdGlhbGl6ZS4KICog QHBhcmFtW291dF0gZXJyb3IKICogICBQZXJmb3JtIHZlcmJvc2UgZXJyb3IgcmVwb3J0aW5nIGlm IG5vdCBOVUxMLgogKgogKiBAcmV0dXJuCiAqICAgMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVy cm5vIHZhbHVlIG90aGVyd2lzZSBhbmQgcnRlX2Vycm5vIGlzIHNldC4KICovCmludAptbHg1X25s X2Zsb3dfaW5pdChzdHJ1Y3QgbW5sX3NvY2tldCAqbmwsIHVuc2lnbmVkIGludCBpZmluZGV4LAoJ CSAgc3RydWN0IHJ0ZV9mbG93X2Vycm9yICplcnJvcikKewoJc3RydWN0IG5sbXNnaGRyICpubGg7 CglzdHJ1Y3QgdGNtc2cgKnRjbTsKCWFsaWduYXMoc3RydWN0IG5sbXNnaGRyKQoJdWludDhfdCBi dWZbbW5sX25sbXNnX3NpemUoc2l6ZW9mKCp0Y20pICsgMTI4KV07Ci0tCgl0Y20gPSBtbmxfbmxt c2dfcHV0X2V4dHJhX2hlYWRlcihubGgsIHNpemVvZigqdGNtKSk7Cgl0Y20tPnRjbV9mYW1pbHkg PSBBRl9VTlNQRUM7Cgl0Y20tPnRjbV9pZmluZGV4ID0gaWZpbmRleDsKCXRjbS0+dGNtX2hhbmRs ZSA9IFRDX0hfTUFLRShUQ19IX0lOR1JFU1MsIDApOwoJdGNtLT50Y21fcGFyZW50ID0gVENfSF9J TkdSRVNTOwoJLyogSWdub3JlIGVycm9ycyB3aGVuIHFkaXNjIGlzIGFscmVhZHkgYWJzZW50LiAq LwoJaWYgKG1seDVfbmxfZmxvd19ubF9hY2sobmwsIG5saCkgJiYKCSAgICBydGVfZXJybm8gIT0g RUlOVkFMICYmIHJ0ZV9lcnJubyAhPSBFTk9FTlQpCgkJcmV0dXJuIHJ0ZV9mbG93X2Vycm9yX3Nl dAoJCQkoZXJyb3IsIHJ0ZV9lcnJubywgUlRFX0ZMT1dfRVJST1JfVFlQRV9VTlNQRUNJRklFRCwK CQkJIE5VTEwsICJuZXRsaW5rOiBmYWlsZWQgdG8gcmVtb3ZlIGluZ3Jlc3MgcWRpc2MiKTsKCS8q IENyZWF0ZSBmcmVzaCBpbmdyZXNzIHFkaXNjLiAqLwoJbmxoID0gbW5sX25sbXNnX3B1dF9oZWFk ZXIoYnVmKTsKCW5saC0+bmxtc2dfdHlwZSA9IFJUTV9ORVdRRElTQzsKCW5saC0+bmxtc2dfZmxh Z3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfQ1JFQVRFIHwgTkxNX0ZfRVhDTDsKCXRjbSA9IG1u bF9ubG1zZ19wdXRfZXh0cmFfaGVhZGVyKG5saCwgc2l6ZW9mKCp0Y20pKTsKLS0KCXRjbS0+dGNt X2lmaW5kZXggPSBpZmluZGV4OwoJdGNtLT50Y21faGFuZGxlID0gVENfSF9NQUtFKFRDX0hfSU5H UkVTUywgMCk7Cgl0Y20tPnRjbV9wYXJlbnQgPSBUQ19IX0lOR1JFU1M7CgltbmxfYXR0cl9wdXRf c3Ryel9jaGVjayhubGgsIHNpemVvZihidWYpLCBUQ0FfS0lORCwgImluZ3Jlc3MiKTsKCWlmICht bHg1X25sX2Zsb3dfbmxfYWNrKG5sLCBubGgpKQoJCXJldHVybiBydGVfZmxvd19lcnJvcl9zZXQK CQkJKGVycm9yLCBydGVfZXJybm8sIFJURV9GTE9XX0VSUk9SX1RZUEVfVU5TUEVDSUZJRUQsCgkJ CSBOVUxMLCAibmV0bGluazogZmFpbGVkIHRvIGNyZWF0ZSBpbmdyZXNzIHFkaXNjIik7CglyZXR1 cm4gMDsKfQoKLyoqCiAqIENyZWF0ZSBhbmQgY29uZmlndXJlIGEgbGlibW5sIHNvY2tldCBmb3Ig TmV0bGluayBmbG93IHJ1bGVzLgotLQptbHg1X25sX2Zsb3dfc29ja2V0X2Rlc3Ryb3koc3RydWN0 IG1ubF9zb2NrZXQgKm5sKQp7Cgltbmxfc29ja2V0X2Nsb3NlKG5sKTsKfQoKZXJyb3I6IHBhdGNo IGZhaWxlZDogZHJpdmVycy9uZXQvbWx4NS9tbHg1X25sX2Zsb3cuYzoxCmVycm9yOiBkcml2ZXJz L25ldC9tbHg1L21seDVfbmxfZmxvdy5jOiBwYXRjaCBkb2VzIG5vdCBhcHBseQoqUmVwbzogZHBk ay1uZXh0LXZpcnRpbwpDaGVja2luZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlLi4u CmVycm9yOiB3aGlsZSBzZWFyY2hpbmcgZm9yOgpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxY NV9QTUQpICs9IG1seDVfZmxvd192ZXJicy5jClNSQ1MtJChDT05GSUdfUlRFX0xJQlJURV9NTFg1 X1BNRCkgKz0gbWx4NV9zb2NrZXQuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQp ICs9IG1seDVfbmwuYwpTUkNTLSQoQ09ORklHX1JURV9MSUJSVEVfTUxYNV9QTUQpICs9IG1seDVf bmxfZmxvdy5jCgppZmVxICgkKENPTkZJR19SVEVfTElCUlRFX01MWDVfRExPUEVOX0RFUFMpLHkp CklOU1RBTEwtJChDT05GSUdfUlRFX0xJQlJURV9NTFg1X1BNRCktbGliICs9ICQoTElCX0dMVUUp CgplcnJvcjogcGF0Y2ggZmFpbGVkOiBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlOjM1CmVycm9y OiBkcml2ZXJzL25ldC9tbHg1L01ha2VmaWxlOiBwYXRjaCBkb2VzIG5vdCBhcHBseQpDaGVja2lu ZyBwYXRjaCBkcml2ZXJzL25ldC9tbHg1L21seDUuYy4uLgpIdW5rICMxIHN1Y2NlZWRlZCBhdCAy ODIgKG9mZnNldCAtNCBsaW5lcykuCkh1bmsgIzIgc3VjY2VlZGVkIGF0IDExMjggKG9mZnNldCAt NyBsaW5lcykuCkh1bmsgIzMgc3VjY2VlZGVkIGF0IDExODAgKG9mZnNldCAtNyBsaW5lcykuCkNo ZWNraW5nIHBhdGNoIGRyaXZlcnMvbmV0L21seDUvbWx4NS5oLi4uCgpEUERLIFNUViB0ZWFt --===============0222398043628913181==--