From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S261634AbVDRDZ7 (ORCPT ); Sun, 17 Apr 2005 23:25:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S261636AbVDRDZ7 (ORCPT ); Sun, 17 Apr 2005 23:25:59 -0400 Received: from tama5.ecl.ntt.co.jp ([129.60.39.102]:11707 "EHLO tama5.ecl.ntt.co.jp") by vger.kernel.org with ESMTP id S261634AbVDRDWM (ORCPT ); Sun, 17 Apr 2005 23:22:12 -0400 Message-ID: <4263277F.6020206@lab.ntt.co.jp> Date: Mon, 18 Apr 2005 12:20:31 +0900 From: Takashi Ikebe User-Agent: Mozilla Thunderbird 1.0 (X11/20041206) X-Accept-Language: en-us, en MIME-Version: 1.0 To: linux-kernel@vger.kernel.org Subject: [PATCH i386] Live Patching Function on 2.6.11.7 Content-Type: multipart/mixed; boundary="------------020103020104090009060403" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --------------020103020104090009060403 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit The patch was over 50k, so I separate it to each architecture and in line.. This patch add function called "Live patching" which is defined on OSDL's carrier grade linux requiremnt definition to linux 2.6.11.7 kernel. The live patching allows process to patch on-line (without restarting process) on i386 and x86_64 architectures, by overwriting jump assembly code on entry point of functions which you want to fix, to patched functions. The live patching function is very common on high-availability system such as carrier system, and this patch realize it also on linux. (Patch & process restart time is very critical on such high-availability system, live patch allows you to milliseconds order process stopping time to apply new patch.) The basis is below: 1. Live patch command loads the patch modules to target process's memory area, 2. Live patch command resolve patch symbol. 3. Live patch command overwrite jump code to the entry point of function which you want to fix, to the patch module's symbol. Kernel patch and user mode tools are required, and both of them are available at http://pannus.sourceforge.net Please take a look and give us comments! This patch add following system calls and function. o mmap3: maps patch to target process's memory area with security check. o accesspvm: access(read/write) target process's memory area. o init_pend: initialization of live patch sequence on target process. o rt_handlereturn: run initialize root of each patch (same as signal handler). o check_init: check that the initialization is finished or not. o munmap3: unmap patch from target process's memory area. -- Takashi Ikebe NTT Network Service Systems Laboratories 9-11, Midori-Cho 3-Chome Musashino-Shi, Tokyo 180-8585 Japan Tel : +81 422 59 4246, Fax : +81 422 60 4012 e-mail : ikebe.takashi@lab.ntt.co.jp --------------020103020104090009060403 Content-Type: text/plain; name="pannus-2.6.11.7-i386.patch" Content-Transfer-Encoding: base64 Content-Disposition: inline; filename="pannus-2.6.11.7-i386.patch" ZGlmZiAtdXJwTiBsaW51eC0yLjYuMTEuNy12YW5pbGxhL2FyY2gvaTM4Ni9rZXJuZWwvTWFr ZWZpbGUgbGludXgtMi42LjExLjctcGFubnVzLWkzODYvYXJjaC9pMzg2L2tlcm5lbC9NYWtl ZmlsZQotLS0gbGludXgtMi42LjExLjctdmFuaWxsYS9hcmNoL2kzODYva2VybmVsL01ha2Vm aWxlCTIwMDUtMDQtMDggMDM6NTc6MjIuMDAwMDAwMDAwICswOTAwCisrKyBsaW51eC0yLjYu MTEuNy1wYW5udXMtaTM4Ni9hcmNoL2kzODYva2VybmVsL01ha2VmaWxlCTIwMDUtMDQtMTgg MTI6MzI6MTMuMDAwMDAwMDAwICswOTAwCkBAIC03LDcgKzcsNyBAQCBleHRyYS15IDo9IGhl YWQubyBpbml0X3Rhc2subyB2bWxpbnV4LmxkCiBvYmoteQk6PSBwcm9jZXNzLm8gc2VtYXBo b3JlLm8gc2lnbmFsLm8gZW50cnkubyB0cmFwcy5vIGlycS5vIHZtODYubyBcCiAJCXB0cmFj ZS5vIHRpbWUubyBpb3BvcnQubyBsZHQubyBzZXR1cC5vIGk4MjU5Lm8gc3lzX2kzODYubyBc CiAJCXBjaS1kbWEubyBpMzg2X2tzeW1zLm8gaTM4Ny5vIGRtaV9zY2FuLm8gYm9vdGZsYWcu byBcCi0JCWRvdWJsZWZhdWx0Lm8gcXVpcmtzLm8KKwkJZG91YmxlZmF1bHQubyBxdWlya3Mu byBhY2Nlc3Nwdm0ubyBleGVjaGFuZGxlLm8KIAogb2JqLXkJCQkJKz0gY3B1Lwogb2JqLXkJ CQkJKz0gdGltZXJzLwpkaWZmIC11cnBOIGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvYXJjaC9p Mzg2L2tlcm5lbC9hY2Nlc3Nwdm0uYyBsaW51eC0yLjYuMTEuNy1wYW5udXMtaTM4Ni9hcmNo L2kzODYva2VybmVsL2FjY2Vzc3B2bS5jCi0tLSBsaW51eC0yLjYuMTEuNy12YW5pbGxhL2Fy Y2gvaTM4Ni9rZXJuZWwvYWNjZXNzcHZtLmMJMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAw MDAgKzA5MDAKKysrIGxpbnV4LTIuNi4xMS43LXBhbm51cy1pMzg2L2FyY2gvaTM4Ni9rZXJu ZWwvYWNjZXNzcHZtLmMJMjAwNS0wNC0xOCAxMjozMjoxMy4wMDAwMDAwMDAgKzA5MDAKQEAg LTAsMCArMSwxMjggQEAKKy8qIAorICogYWNjZXNzcHZtLmMKKyAqIENvcHlyaWdodCAoQykg MjAwNCBOVFQgQ29ycG9yYXRpb24KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUklDVUxBUiBQVVJQT1NFLiBTZWUgdGhlCisg KiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3Mg QXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworLyoKKyAqIFByb3ZpZGUg dGhlIHN5c3RlbSBjYWxsIHRvIHJlYWQvd3JpdGUgdGhlIHNwZWNpZmljIGRhdGEgaW4gdGhl IHVzZXIgcHJvY2Vzcy4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5j bHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUg PGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8 bGludXgvZXJybm8uaD4KKworI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8 bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKworLyoKKyAqIFBy b3ZpZGUgdGhlIHN5c3RlbSBjYWxsIHRvIHJlYWQvd3JpdGUgdGhlIHNwZWNpZmljIGRhdGEg aW4gdGhlIHVzZXIgcHJvY2Vzcy4KKyAqIHBhcmFtIHBpZCA6IHByb2Nlc3MgSUQKKyAqIHBh cmFtIGFkZHIgOiBhZGRyZXNzIG9mIHRhcmdldCdzIG1lbW9yeQorICogcGFyYW0gZGF0YXAg OiBhZGRyZXNzIG9mIHRoZSB1c2VyIHNwYWNlIG1lbW9yeQorICogcGFyYW0gbGVuIDogbGVu Z3RoIG9mIHRoZSBrZXJuZWwgc3BhY2UgbWVtb3J5IHRvIGdldAorICogcGFyYW0gZmxhZyA6 IGZsYWcgd2hpY2ggc3BlY2lmaWVzIGFjdGlvbihyZWFkOjAsIHdyaXRlOjEpCisgKiByZXR1 cm4gOiBlcnJvciBjb2RlKHBhcmFtZXRlciBlcnJvcjpFUEVSTSwgbm8tbWVtb3J5IGVycm9y OkVOT01FTSwgSS9PIGVycm9yOkVJTykKKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX2FjY2Vz c3B2bShsb25nIHBpZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBsb25nIGRhdGFwLCBpbnQgbGVu LCBpbnQgZmxhZykKK3sKKyAgICAgICAJc3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisJaW50 IHJldCA9IC1FUEVSTTsKKwlsb25nICpwID0gTlVMTDsKKworCS8vIGdldCB0aGUgdGFza19z dHJ1Y3Qgc3BlY2lmaWVkIGJ5IHBpZC4KKwlyZWFkX2xvY2soJnRhc2tsaXN0X2xvY2spOyAv LyBsb2NrIHRhc2tsaXN0CisJdHNrID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCWlmICh0 c2spCisJCWdldF90YXNrX3N0cnVjdCh0c2spOyAvLyBnZXQgdGFza19zdHJ1Y3QKKwlyZWFk X3VubG9jaygmdGFza2xpc3RfbG9jayk7IC8vIHVubG9jayB0YXNrbGlzdAorCWlmICghdHNr KSB7CisJCXJldCA9IC1FU1JDSDsKKwkJZ290byBvdXQ7CisJfQorCisJLy8gaWYgcGlkPDEs IHRoZW4gcGFyYW10ZXIgZXJyb3IuCisJaWYgKHBpZCA8PSAxKQkJLy8geW91IG1heSBub3Qg bWVzcyB3aXRoIGtlcm5lbCB0aHJlYWQgb3IgaW5pdC4KKwkJZ290byBvdXRfdHNrOworCQor CWlmKCgoY3VycmVudC0+dWlkICE9IHRzay0+ZXVpZCkgfHwKKwkgICAgKGN1cnJlbnQtPnVp ZCAhPSB0c2stPnN1aWQpIHx8CisJICAgIChjdXJyZW50LT51aWQgIT0gdHNrLT51aWQpIHx8 CisJICAgIChjdXJyZW50LT5naWQgIT0gdHNrLT5lZ2lkKSB8fAorCSAgICAoY3VycmVudC0+ Z2lkICE9IHRzay0+c2dpZCkgfHwKKwkgICAgKGN1cnJlbnQtPmdpZCAhPSB0c2stPmdpZCkp ICYmICFjYXBhYmxlKENBUF9TWVNfUEFOTlVTKSkgeworICAgICAgICAgICAgICAgIC8vIGlu dmFsaWQgdXNlciBpbiBzeXNfYWNjZXNzcHZtCisgICAgICAgICAgICAgICAgcmV0dXJuIC1F UEVSTTsKKyAgICAgICAgfQorCisJLy8gYWxsb2NhdGUgbWVtb3J5IGZvciB0ZW1wb3JhbCBi dWZmZXIuCisJcCA9IHZtYWxsb2MobGVuKTsKKwlpZighcCl7CisJCXByaW50aygiYWNjZXNz cHZtOiBDYW5ub3QgYWxsb2NhdGUgYnkgdm1hbGxvY1xuIik7CisJCXJldCA9IC1FTk9NRU07 CisJCWdvdG8gb3V0X3RzazsKKwl9CisKKwlpZihmbGFnID09IDApeworCQkvLyBSZWFkIHRo ZSBkYXRhIGluIHRoZSBzcGVjaWZpZWQgdGFzaworCQlpZihhY2Nlc3NfcHJvY2Vzc192bSh0 c2ssIGFkZHIsIHAsIGxlbiwgZmxhZykgIT0gbGVuKSB7CisJCQl2ZnJlZShwKTsKKwkJCXJl dCA9IC1FSU87CisJCQlnb3RvIG91dF90c2s7CisJCX0KKworCQkvLyBjb3B5IGtlcm5lbCBz cGFjZSBkYXRhIHRvIHVzZXIgc3BhY2UuCisJCWlmKGNvcHlfdG9fdXNlcigodm9pZCAqKWRh dGFwLChjb25zdCB2b2lkICopcCxsZW4pKXsKKwkJCXByaW50aygiYWNjZXNzcHZtOiBDb3B5 X3RvX3VzZXIgZXJyb3JcbiIpOworCQkJdmZyZWUocCk7CisJCQlyZXQgPSAtRUlPOworCQkJ Z290byBvdXRfdHNrOworCQl9CisJCXJldCA9IDA7CisJCXZmcmVlKHApOworCisJfSAKKwll bHNlIGlmKGZsYWcgPT0gMSkgeworCQkvLyBjb3B5IHVzZXIgc3BhY2UgZGF0YSB0byBrZXJu ZWwgc3BhY2UuCisJCWlmKGNvcHlfZnJvbV91c2VyKHAsKHZvaWQgKilkYXRhcCxsZW4pKXsK KwkJCXByaW50aygiYWNjZXNzcHZtOiBDb3B5X2Zyb21fdXNlciBlcnJvclxuIik7CisJCQl2 ZnJlZShwKTsKKwkJCXJldCA9IC1FSU87CisJCQlnb3RvIG91dF90c2s7CisJCX0KKworCQkv LyBjaGFuZ2UgdGhlIGRhdGEgb2Ygc3BlY2lmaWVkIHRhc2suCisJCWlmIChhY2Nlc3NfcHJv Y2Vzc192bSh0c2ssIGFkZHIsIHAsIGxlbiwgZmxhZykgPT0gbGVuKXsKKwkJCXZmcmVlKHAp OworCQkJcmV0ID0gMDsKKwkJCWdvdG8gb3V0X3RzazsKKwkJfQorCQlyZXQgPSAtRUlPOwor CQl2ZnJlZShwKTsKKwl9CisJIGVsc2UgeworCQl2ZnJlZShwKTsKKwl9CisKK291dF90c2s6 CisJcHV0X3Rhc2tfc3RydWN0KHRzayk7IC8vIHJlbGVhc2UgdGhlIHRhc2tfc3RydWN0Citv dXQ6CisJcmV0dXJuIHJldDsKK30KZGlmZiAtdXJwTiBsaW51eC0yLjYuMTEuNy12YW5pbGxh L2FyY2gvaTM4Ni9rZXJuZWwvYXNtLW9mZnNldHMuYyBsaW51eC0yLjYuMTEuNy1wYW5udXMt aTM4Ni9hcmNoL2kzODYva2VybmVsL2FzbS1vZmZzZXRzLmMKLS0tIGxpbnV4LTIuNi4xMS43 LXZhbmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9hc20tb2Zmc2V0cy5jCTIwMDUtMDQtMDggMDM6 NTc6MzAuMDAwMDAwMDAwICswOTAwCisrKyBsaW51eC0yLjYuMTEuNy1wYW5udXMtaTM4Ni9h cmNoL2kzODYva2VybmVsL2FzbS1vZmZzZXRzLmMJMjAwNS0wNC0xOCAxMjozMjoxMy4wMDAw MDAwMDAgKzA5MDAKQEAgLTUyLDYgKzUyLDcgQEAgdm9pZCBmb28odm9pZCkKIAlPRkZTRVQo VElfcHJlZW1wdF9jb3VudCwgdGhyZWFkX2luZm8sIHByZWVtcHRfY291bnQpOwogCU9GRlNF VChUSV9hZGRyX2xpbWl0LCB0aHJlYWRfaW5mbywgYWRkcl9saW1pdCk7CiAJT0ZGU0VUKFRJ X3Jlc3RhcnRfYmxvY2ssIHRocmVhZF9pbmZvLCByZXN0YXJ0X2Jsb2NrKTsKKwlPRkZTRVQo VElfaW5pcGVuZGluZywgdGhyZWFkX2luZm8sIGluaXBlbmRpbmcpOwogCUJMQU5LKCk7CiAK IAlPRkZTRVQoRVhFQ19ET01BSU5faGFuZGxlciwgZXhlY19kb21haW4sIGhhbmRsZXIpOwpk aWZmIC11cnBOIGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9lbnRy eS5TIGxpbnV4LTIuNi4xMS43LXBhbm51cy1pMzg2L2FyY2gvaTM4Ni9rZXJuZWwvZW50cnku UwotLS0gbGludXgtMi42LjExLjctdmFuaWxsYS9hcmNoL2kzODYva2VybmVsL2VudHJ5LlMJ MjAwNS0wNC0wOCAwMzo1NzoyNi4wMDAwMDAwMDAgKzA5MDAKKysrIGxpbnV4LTIuNi4xMS43 LXBhbm51cy1pMzg2L2FyY2gvaTM4Ni9rZXJuZWwvZW50cnkuUwkyMDA1LTA0LTE4IDEyOjMy OjEzLjAwMDAwMDAwMCArMDkwMApAQCAtMTcyLDggKzE3MiwxNSBAQCBFTlRSWShyZXN1bWVf dXNlcnNwYWNlKQogCWFuZGwgJF9USUZfV09SS19NQVNLLCAlZWN4CSMgaXMgdGhlcmUgYW55 IHdvcmsgdG8gYmUgZG9uZSBvbgogCQkJCQkjIGludC9leGNlcHRpb24gcmV0dXJuPwogCWpu ZSB3b3JrX3BlbmRpbmcKKwljbXBsICQwLFRJX2luaXBlbmRpbmcoJWVicCkJI2ZvciBsaXZl IHBhdGNoaW5nIGZvb2suCisJam5lIHJlc3VtZV9pbml0CQkJCiAJam1wIHJlc3RvcmVfYWxs CiAKK3Jlc3VtZV9pbml0OgorCW1vdmwgJDAsVElfaW5pcGVuZGluZyglZWJwKQorCWNhbGwg ZG9faW5pdAorCWptcCByZXN1bWVfdXNlcnNwYWNlCisJCQogI2lmZGVmIENPTkZJR19QUkVF TVBUCiBFTlRSWShyZXN1bWVfa2VybmVsKQogCWNsaQpAQCAtMjYzLDYgKzI3MCw5IEBAIHJl c3RvcmVfYWxsOgogCSMgcGVyZm9ybSB3b3JrIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBpbW1l ZGlhdGVseSBiZWZvcmUgcmVzdW1wdGlvbgogCUFMSUdOCiB3b3JrX3BlbmRpbmc6CisJY21w bCAkMCxUSV9pbmlwZW5kaW5nKCVlYnApCisJam5lIHdvcmtfaW5pdAord29ya19wZW5kaW5n MjoKIAl0ZXN0YiAkX1RJRl9ORUVEX1JFU0NIRUQsICVjbAogCWp6IHdvcmtfbm90aWZ5c2ln CiB3b3JrX3Jlc2NoZWQ6CkBAIC0yOTcsNiArMzA3LDI5IEBAIHdvcmtfbm90aWZ5c2lnX3Y4 NjoKIAljYWxsIGRvX25vdGlmeV9yZXN1bWUKIAlqbXAgcmVzdG9yZV9hbGwKIAorCSMgcGVy Zm9ybSBsaXZlIHBhdGNoaW5nCisJQUxJR04KK3dvcmtfaW5pdDoKKwl0ZXN0bCAkVk1fTUFT SywgRUZMQUdTKCVlc3ApCisJbW92bCAlZXNwLCAlZWF4CisJam5lIHdvcmtfaW5pdF92ODYK KworCW1vdmwgJDAsVElfaW5pcGVuZGluZyglZWJwKQorCXhvcmwgJWVkeCwgJWVkeAorCWNh bGwgZG9faW5pdAorCWptcCB3b3JrX3BlbmRpbmcyCisKKwlBTElHTgord29ya19pbml0X3Y4 NjoKKwltb3ZsICQwLFRJX2luaXBlbmRpbmcoJWVicCkKKwlwdXNobCAlZWN4CQkJIyBzYXZl IHRpX2ZsYWdzIGZvciBkb19ub3RpZnlfcmVzdW1lCisJY2FsbCBzYXZlX3Y4Nl9zdGF0ZQkJ IyAlZWF4IGNvbnRhaW5zIHB0X3JlZ3MgcG9pbnRlcgorCXBvcGwgJWVjeAorCW1vdmwgJWVh eCwgJWVzcAorCXhvcmwgJWVkeCwgJWVkeAorCWNhbGwgZG9faW5pdF92ODYKKwlqbXAgd29y a19wZW5kaW5nMgorCQogCSMgcGVyZm9ybSBzeXNjYWxsIGV4aXQgdHJhY2luZwogCUFMSUdO CiBzeXNjYWxsX3RyYWNlX2VudHJ5OgpAQCAtODYyLDUgKzg5NSwxMSBAQCBFTlRSWShzeXNf Y2FsbF90YWJsZSkKIAkubG9uZyBzeXNfYWRkX2tleQogCS5sb25nIHN5c19yZXF1ZXN0X2tl eQogCS5sb25nIHN5c19rZXljdGwKKwkubG9uZyBzeXNfbW1hcDMKKwkubG9uZyBzeXNfYWNj ZXNzcHZtCQkvKiAyOTAgKi8KKwkubG9uZyBzeXNfaW5pdF9wZW5kCisJLmxvbmcgc3lzX3J0 X2hhbmRsZXJldHVybgorCS5sb25nIHN5c19jaGVja19pbml0CisJLmxvbmcgc3lzX211bm1h cDMKIAogc3lzY2FsbF90YWJsZV9zaXplPSguLXN5c19jYWxsX3RhYmxlKQpkaWZmIC11cnBO IGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9leGVjaGFuZGxlLmMg bGludXgtMi42LjExLjctcGFubnVzLWkzODYvYXJjaC9pMzg2L2tlcm5lbC9leGVjaGFuZGxl LmMKLS0tIGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9leGVjaGFu ZGxlLmMJMTk3MC0wMS0wMSAwOTowMDowMC4wMDAwMDAwMDAgKzA5MDAKKysrIGxpbnV4LTIu Ni4xMS43LXBhbm51cy1pMzg2L2FyY2gvaTM4Ni9rZXJuZWwvZXhlY2hhbmRsZS5jCTIwMDUt MDQtMTggMTI6MzI6MTMuMDAwMDAwMDAwICswOTAwCkBAIC0wLDAgKzEsNjExIEBACisvKgor ICogZXhlY2hhbmRsZS5jCisgKiBDb3B5cmlnaHQgKEMpICAyMDA0LTIwMDUgTlRUIENvcnBv cmF0aW9uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBM aWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUyBGT1IgQSBQQVJJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor ICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdl LCBNQSAwMjEzOSwgVVNBLgorICovCisKKy8qCisgKiBJbml0YWxpemF0aW9uIG1vZHVsZS4K KyAqLworCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5o PgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+ CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+ CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+Cisj aW5jbHVkZSA8bGludXgvcHRyYWNlLmg+CisjaW5jbHVkZSA8bGludXgvdW5pc3RkLmg+Cisj aW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvdHR5Lmg+CisjaW5j bHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5o PgorI2luY2x1ZGUgPGxpbnV4L2JpbmZtdHMuaD4KKyNpbmNsdWRlIDxhc20vdWNvbnRleHQu aD4KKyNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9pMzg3Lmg+Cisj aW5jbHVkZSA8YXNtL2V4ZWNoYW5kbGUuaD4KKworLy8jZGVmaW5lIERFQlVHX0lOSSAxCisj ZGVmaW5lIHJvdW5kX2Rvd24oeCx5KSAoKHgpICYgfigoeSktMSkpCisKK3ZvaWQgaW5pdF9m YXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgdm9pZCAqZnJhbWUsIHN0cnVjdCB0YXNrX3N0 cnVjdCAqbWUsIGNoYXIgKndoZXJlKTsKKworLyoKKyAqIEluaXRpYWxpemF0aW9uIGZyYW1l CisgKiBTdG9yZSB0aGUgc3RhY2sgd2hlbmV2ZXIgaW5pdGlhbGl6ZS4KKyAqLworc3RydWN0 IHJ0X2luaXRmcmFtZQoreworCWNoYXIgKnByZXRjb2RlOyAgICAgICAvKiBSZXR1cm4gYWRk cmVzcyBhZnRlciBfaW5pdCAqLworCXN0cnVjdCB1Y29udGV4dCB1YzsgICAvKiB1c2VyIG1v ZGUgY29udGV4dCBiZWZvcmUgZXhlY3V0ZSBfaW5pdCAqLworCXN0cnVjdCBzaWdpbmZvIGlu Zm87ICAvKiBzaWduYWwgaW5mb3JtYXRpb24gYmVmb3JlIGV4ZWN1dGUgX2luaXQgKi8KK307 CisKKy8qCisgKiBSZXN0b3JlIHRoZSBjb250ZXh0IGJlZm9yZSBleGVjdXRlIF9pbml0Lgor ICogcGFyYW06cmVncyByZWdpc3RlciBzdHJ1Y3QKKyAqIHBhcmFtOnNjICAgY29udGV4dCBi ZWZvcmUgX2luaXQKKyAqIHBhcmFtOnByYXggcG9pbnRlciBmb3IgcmF4IHJlZ2lzdGVyCisg KiByZXR1cm46bm9ybWFsOnJldHVybiB2YWx1ZSBmcm9tIF9fZ2V0X3VzZXIvaWxsZWdhbDox CisgKi8KKworc3RhdGljIGludAorcmVzdG9yZV9pbml0Y29udGV4dChzdHJ1Y3QgcHRfcmVn cyAqcmVncywgc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICpzYywgaW50ICpwZWF4KQorewor CXVuc2lnbmVkIGludCBlcnIgPSAwOworCisKKyNkZWZpbmUgQ09QWSh4KQkJZXJyIHw9IF9f Z2V0X3VzZXIocmVncy0+eCwgJnNjLT54KQorCisjZGVmaW5lIENPUFlfU0VHKHNlZykJCQkJ CQkJXAorCXsgdW5zaWduZWQgc2hvcnQgdG1wOwkJCQkJCVwKKwkgIGVyciB8PSBfX2dldF91 c2VyKHRtcCwgJnNjLT5zZWcpOwkJCQlcCisJICByZWdzLT54IyNzZWcgPSB0bXA7IH0KKwor I2RlZmluZSBDT1BZX1NFR19TVFJJQ1Qoc2VnKQkJCQkJCVwKKwl7IHVuc2lnbmVkIHNob3J0 IHRtcDsJCQkJCQlcCisJICBlcnIgfD0gX19nZXRfdXNlcih0bXAsICZzYy0+c2VnKTsJCQkJ XAorCSAgcmVncy0+eCMjc2VnID0gdG1wfDM7IH0KKworI2RlZmluZSBHRVRfU0VHKHNlZykJ CQkJCQkJXAorCXsgdW5zaWduZWQgc2hvcnQgdG1wOwkJCQkJCVwKKwkgIGVyciB8PSBfX2dl dF91c2VyKHRtcCwgJnNjLT5zZWcpOwkJCQlcCisJICBsb2Fkc2VnbWVudChzZWcsdG1wKTsg fQorCisjZGVmaW5lCUZJWF9FRkxBR1MJKFg4Nl9FRkxBR1NfQUMgfCBYODZfRUZMQUdTX09G IHwgWDg2X0VGTEFHU19ERiB8IFwKKwkJCSBYODZfRUZMQUdTX1RGIHwgWDg2X0VGTEFHU19T RiB8IFg4Nl9FRkxBR1NfWkYgfCBcCisJCQkgWDg2X0VGTEFHU19BRiB8IFg4Nl9FRkxBR1Nf UEYgfCBYODZfRUZMQUdTX0NGKQorCisJR0VUX1NFRyhncyk7CisJR0VUX1NFRyhmcyk7CisJ Q09QWV9TRUcoZXMpOworCUNPUFlfU0VHKGRzKTsKKwlDT1BZKGVkaSk7CisJQ09QWShlc2kp OworCUNPUFkoZWJwKTsKKwlDT1BZKGVzcCk7CisJQ09QWShlYngpOworCUNPUFkoZWR4KTsK KwlDT1BZKGVjeCk7CisJQ09QWShlaXApOworCUNPUFlfU0VHX1NUUklDVChjcyk7CisJQ09Q WV9TRUdfU1RSSUNUKHNzKTsKKwkKKwl7CisJCXVuc2lnbmVkIGludCB0bXBmbGFnczsKKwkJ ZXJyIHw9IF9fZ2V0X3VzZXIodG1wZmxhZ3MsICZzYy0+ZWZsYWdzKTsKKwkJcmVncy0+ZWZs YWdzID0gKHJlZ3MtPmVmbGFncyAmIH5GSVhfRUZMQUdTKSB8ICh0bXBmbGFncyAmIEZJWF9F RkxBR1MpOworCQlyZWdzLT5vcmlnX2VheCA9IC0xOwkJLyogZGlzYWJsZSBzeXNjYWxsIGNo ZWNrcyAqLworCX0KKworCXsKKwkJc3RydWN0IF9mcHN0YXRlIF9fdXNlciAqIGJ1ZjsKKwkJ ZXJyIHw9IF9fZ2V0X3VzZXIoYnVmLCAmc2MtPmZwc3RhdGUpOworCisJfQorCisJZXJyIHw9 IF9fZ2V0X3VzZXIoKnBlYXgsICZzYy0+ZWF4KTsKKwlyZXR1cm4gZXJyOworCit9CisKKwor YXNtbGlua2FnZSBsb25nIHN5c19ydF9oYW5kbGVyZXR1cm4odW5zaWduZWQgbG9uZyBfX3Vu dXNlZCkKK3sKKyAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MgPSAoc3RydWN0IHB0X3JlZ3MgKikg Jl9fdW51c2VkOworCXN0cnVjdCBydF9pbml0ZnJhbWUgKmZyYW1lID0gKHN0cnVjdCBydF9p bml0ZnJhbWUgKikocmVncy0+ZXNwIC0gNCk7CisJc3RhY2tfdCBzdDsKKwlpbnQgZWF4Owor CXN0cnVjdCB0YXNrX3N0cnVjdCAqbWUgPSBjdXJyZW50OworCisjaWYgREVCVUdfSU5JCisg ICAgICAgIHByaW50aygiSU5JVF9DUDpzeXNfcnRfaGFuZGxlcmV0dXJuOjAxXG4iKTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIHByaW50aygiZnJhbWUgYWRkcmVz cyA9ICVwXG4iLGZyYW1lKTsKKyAgICAgICAgcHJpbnRrKCJlc3A6ICVseFxuIixyZWdzLT5l c3ApOworICAgICAgICBwcmludGsoImVpcDogJWx4XG4iLHJlZ3MtPmVpcCk7CisgICAgICAg IHByaW50aygiZWR4OiAlbHhcbiIscmVncy0+ZWR4KTsKKyAgICAgICAgcHJpbnRrKCJlc2k6 ICVseFxuIixyZWdzLT5lc2kpOworI2VuZGlmCisJLyogQ2hlY2sgZnJhbWUgcG9pbnRlciAq LworCWlmICh2ZXJpZnlfYXJlYShWRVJJRllfUkVBRCwgZnJhbWUsIHNpemVvZigqZnJhbWUp KSkgeworCQlnb3RvIGJhZGZyYW1lOworCX0KKworI2lmIERFQlVHX0lOSQorICAgICAgICBw cmludGsoIklOSVRfQ1A6c3lzX3J0X2hhbmRsZXJldHVybjowMlxuIik7CisjZW5kaWYKKwkv KiBSZXN0b3JlIGhhcmR3YXJlIGNvbnRleHQgKi8KKwlpZiAocmVzdG9yZV9pbml0Y29udGV4 dChyZWdzLCAmZnJhbWUtPnVjLnVjX21jb250ZXh0LCAmZWF4KSkgeworI2lmIERFQlVHX0lO SQorICAgICAgICAgICAgICAgIHByaW50aygiSU5JVF9DUDpzeXNfcnRfaGFuZGxlcmV0dXJu L3Jlc3RvcmVfaW5pdGNvbnRleHQ6MDFcbiIpOworI2VuZGlmCisJCWdvdG8gYmFkZnJhbWU7 CisJfQorCisjaWYgREVCVUdfSU5JCisgICAgICAgIHByaW50aygiJWQgc2lncmV0dXJuIHJp cDolbHggcnNwOiVseCBmcmFtZTolcCBlYXg6JWRcbiIsY3VycmVudC0+cGlkLHJlZ3MtPmVp cCxyZWdzLT5lc3AsZnJhbWUsZWF4KTsKKyNlbmRpZgorCS8qIFNoaWZ0IHN0YWNrIHBvaW50 ZXIgKi8KKwlpZiAoX19jb3B5X2Zyb21fdXNlcigmc3QsICZmcmFtZS0+dWMudWNfc3RhY2ss IHNpemVvZihzdCkpKSB7CisjaWYgREVCVUdfSU5JCisgICAgICAgICAgICAgICBwcmludGso IklOSVRfQ1A6c3lzX3J0X2hhbmRsZXJldHVybi9jb3B5X2Zyb21fdXNlcjowMVxuIik7Cisj ZW5kaWYKKwkJZ290byBiYWRmcmFtZTsKKwl9CisKKwkvKiBDbGVhciBpbml0YWxpemF0aW9u IGZsYWcgKi8KKwltZS0+dGhyZWFkX2luZm8tPmluaWZpbmlzaD0wOworI2lmIERFQlVHX0lO SQorCXByaW50aygiSU5JVF9DUDpzeXNfcnRfaGFuZGxlcmV0dXJuOjAzXG4iKTsKKwlwcmlu dGsoIm1lLT50aHJlYWRfaW5mby0+aW5pZmluaXNoID0gMFxuIik7CisjZW5kaWYKKwlyZXR1 cm4gZWF4OworCisgICAgICBiYWRmcmFtZToKKwltZS0+dGhyZWFkX2luZm8tPmluaWZpbmlz aD0tMTsKKyNpZiBERUJVR19JTkkKKwlwcmludGsoIklOSVRfQ1A6c3lzX3J0X2hhbmRsZXJl dHVybi9iYWRmcmFtZVxuIik7CisJcHJpbnRrKCJtZS0+dGhyZWFkX2luZm8tPmluaWZpbmlz aCA9IC0xXG4iKTsKKyNlbmRpZgorCWluaXRfZmF1bHQocmVncyxmcmFtZSxtZSwiaGFuZGxl cmV0dXJuIik7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBTZXQgdXAgaGFyZHdhcmUgY29u dGV4dCBmb3IgaW5pdGlhbGl6YXRpb24uCisgKiBwYXJhbTpzYyAgIGNvbnRleHQgYmVmb3Jl IGluaXRpYWxpemF0aW9uCisgKiBwYXJhbTpyZWdzIHJlZ2lzdGVyIHN0cnVjdAorICogcGFy YW06bWFzayBzaWduYWwgbWFzaworICogcGFyYW06bWUgICBjdXJyZW50IHRhc2sgc3RydWN0 CisgKiByZXR1cm46bm9ybWFsOnJldHVybiB2YWx1ZSBmcm9tIF9fcHV0X3VzZXIvaWxsZWdh bDpub25lCisgKi8KKworc3RhdGljIGlubGluZSBpbnQKK3NldHVwX2luaXRjb250ZXh0KHN0 cnVjdCBzaWdjb250ZXh0ICpzYywgc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHVuc2lnbmVkIGxv bmcgbWFzaywgc3RydWN0IHRhc2tfc3RydWN0ICptZSkKK3sKKwlpbnQgdG1wLCBlcnIgPSAw OworCisJdG1wID0gMDsKKwlfX2FzbV9fKCJtb3ZsICUlZ3MsJTAiIDogIj1yIih0bXApOiAi MCIodG1wKSk7CisJZXJyIHw9IF9fcHV0X3VzZXIodG1wLCAodW5zaWduZWQgaW50IF9fdXNl ciAqKSZzYy0+Z3MpOworCV9fYXNtX18oIm1vdmwgJSVmcywlMCIgOiAiPXIiKHRtcCk6ICIw Iih0bXApKTsKKwllcnIgfD0gX19wdXRfdXNlcih0bXAsICh1bnNpZ25lZCBpbnQgX191c2Vy ICopJnNjLT5mcyk7CisKKwllcnIgfD0gX19wdXRfdXNlcihyZWdzLT54ZXMsICh1bnNpZ25l ZCBpbnQgX191c2VyICopJnNjLT5lcyk7CisJZXJyIHw9IF9fcHV0X3VzZXIocmVncy0+eGRz LCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+ZHMpOworCWVyciB8PSBfX3B1dF91c2Vy KHJlZ3MtPmVkaSwgJnNjLT5lZGkpOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVzaSwg JnNjLT5lc2kpOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVicCwgJnNjLT5lYnApOwor CWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVzcCwgJnNjLT5lc3ApOworCWVyciB8PSBfX3B1 dF91c2VyKHJlZ3MtPmVieCwgJnNjLT5lYngpOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3Mt PmVkeCwgJnNjLT5lZHgpOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVjeCwgJnNjLT5l Y3gpOworCWVyciB8PSBfX3B1dF91c2VyKHJlZ3MtPmVheCwgJnNjLT5lYXgpOworCWVyciB8 PSBfX3B1dF91c2VyKG1lLT50aHJlYWQudHJhcF9ubywgJnNjLT50cmFwbm8pOworCWVyciB8 PSBfX3B1dF91c2VyKG1lLT50aHJlYWQuZXJyb3JfY29kZSwgJnNjLT5lcnIpOworCWVyciB8 PSBfX3B1dF91c2VyKHJlZ3MtPmVpcCwgJnNjLT5laXApOworCWVyciB8PSBfX3B1dF91c2Vy KHJlZ3MtPnhjcywgKHVuc2lnbmVkIGludCBfX3VzZXIgKikmc2MtPmNzKTsKKwllcnIgfD0g X19wdXRfdXNlcihyZWdzLT5lZmxhZ3MsICZzYy0+ZWZsYWdzKTsKKwllcnIgfD0gX19wdXRf dXNlcihyZWdzLT5lc3AsICZzYy0+ZXNwX2F0X3NpZ25hbCk7CisJZXJyIHw9IF9fcHV0X3Vz ZXIocmVncy0+eHNzLCAodW5zaWduZWQgaW50IF9fdXNlciAqKSZzYy0+c3MpOworCisJLyog bm9uLWlCQ1MyIGV4dGVuc2lvbnMuLiAqLworCWVyciB8PSBfX3B1dF91c2VyKG1hc2ssICZz Yy0+b2xkbWFzayk7CisJZXJyIHw9IF9fcHV0X3VzZXIoY3VycmVudC0+dGhyZWFkLmNyMiwg JnNjLT5jcjIpOworCisJcmV0dXJuIGVycjsKK30KKworCisvKgorICogRml4IHN0YWNrIHBv aW50ZXIuCisgKiBwYXJhbTpyZWdzIHJlZ2lzdGVyIHN0cnVjdAorICogcGFyYW06c2l6ZSBz dGFjayBzaXplCisgKiByZXR1cm46bm9ybWFsOnN0YWNrIHBvaW50ZXIgdmFsdWUvaWxsZWdh bDpub25lCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3VzZXIgKgorZ2V0X2luaXRmcmFt ZShzdHJ1Y3QgcHRfcmVncyAqIHJlZ3MsIHNpemVfdCBmcmFtZV9zaXplKQoreworCXVuc2ln bmVkIGxvbmcgZXNwOworCisJLyogRGVmYXVsdCB0byB1c2luZyBub3JtYWwgc3RhY2sgKi8K Kwllc3AgPSByZWdzLT5lc3A7CisKKwlyZXR1cm4gKHZvaWQgX191c2VyICopKChlc3AgLSBm cmFtZV9zaXplKSAmIC04dWwpOworfQorCisKKy8qCisgKiBTZXQgaW5pdGlhbGl6YXRpb24g ZnJhbWUgYW5kIHJlZ2lzdGVyLgorICogcGFyYW06a2EgaW5mb3JtYXRpb24gZm9yIGluaXRp YWxpemF0aW9uCisgKiBwYXJhbTpyZWdzIHJlZ2lzdGVyIHN0cnVjdAorICogcGFyYW06c2V0 IHNpZ25hbCBzZXQKKyAqIHBhcmFtOm1lIGN1cnJlbnQgdGFzayBzdHJ1Y3QKKyAqIHJldHVy bjpub25lCisgKi8KK3N0YXRpYyB2b2lkIHNldHVwX2luaXRfZnJhbWUoc3RydWN0IGtfaW5p dGFjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICogcmVncywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2lnc2V0X3QgKnNldCwgc3RydWN0IHRhc2tfc3RydWN0ICptZSkKK3sK KwlzdHJ1Y3QgcnRfaW5pdGZyYW1lIF9fdXNlciAqZnJhbWU7CisJaW50IGVyciA9IDA7CisJ ZnJhbWUgPSBnZXRfaW5pdGZyYW1lKHJlZ3MsIHNpemVvZihzdHJ1Y3QgcnRfaW5pdGZyYW1l KSkgLSA4OworCisJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1dSSVRFLCBmcmFtZSwgc2l6ZW9m KCpmcmFtZSkpKQorCQlnb3RvIGdpdmVfc2lnc2VndjsKKworCS8qIENyZWF0ZSB0aGUgdWNv bnRleHQuICAqLworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfZmxhZ3Mp OworCWVyciB8PSBfX3B1dF91c2VyKDAsICZmcmFtZS0+dWMudWNfbGluayk7CisJZXJyIHw9 IF9fcHV0X3VzZXIoY3VycmVudC0+c2FzX3NzX3NwLCAmZnJhbWUtPnVjLnVjX3N0YWNrLnNz X3NwKTsKKwllcnIgfD0gX19wdXRfdXNlcihzYXNfc3NfZmxhZ3MocmVncy0+ZXNwKSwKKwkJ CSAgJmZyYW1lLT51Yy51Y19zdGFjay5zc19mbGFncyk7CisJZXJyIHw9IF9fcHV0X3VzZXIo Y3VycmVudC0+c2FzX3NzX3NpemUsICZmcmFtZS0+dWMudWNfc3RhY2suc3Nfc2l6ZSk7CisJ ZXJyIHw9IHNldHVwX2luaXRjb250ZXh0KCZmcmFtZS0+dWMudWNfbWNvbnRleHQsIHJlZ3Ms IHNldC0+c2lnWzBdLCBtZSk7CisJLy9lcnIgfD0gX19jb3B5X3RvX3VzZXIoJmZyYW1lLT51 Yy51Y19zaWdtYXNrLCBzZXQsIHNpemVvZigqc2V0KSk7CisJaWYgKGVycikKKwkJZ290byBn aXZlX3NpZ3NlZ3Y7CisKKwkvKiBTZXQgdXAgdG8gcmV0dXJuIGZyb20gdXNlcnNwYWNlLiAg Ki8KKwllcnIgfD0gX19wdXRfdXNlcihrYS0+aWEucmVzdG9yZXIsICZmcmFtZS0+cHJldGNv ZGUpOworCSAKKworCWlmIChlcnIpCisJCWdvdG8gZ2l2ZV9zaWdzZWd2OworCisJLyogU2V0 IHVwIHJlZ2lzdGVycyBmb3Igc2lnbmFsIGhhbmRsZXIgKi8KKwlyZWdzLT5lc3AgPSAodW5z aWduZWQgbG9uZykgZnJhbWU7CisJcmVncy0+ZWlwID0gKHVuc2lnbmVkIGxvbmcpIGthLT5p YS5pbml0aGFuZGxlcjsKKwlyZWdzLT5lYXggPSAodW5zaWduZWQgbG9uZykgMDsKKwlyZWdz LT5lZHggPSAodW5zaWduZWQgbG9uZykgJmZyYW1lLT5pbmZvOworCXJlZ3MtPmVjeCA9ICh1 bnNpZ25lZCBsb25nKSAmZnJhbWUtPnVjOworCisJc2V0X2ZzKFVTRVJfRFMpOworCXJlZ3Mt PnhkcyA9IF9fVVNFUl9EUzsKKwlyZWdzLT54ZXMgPSBfX1VTRVJfRFM7CisJcmVncy0+eHNz ID0gX19VU0VSX0RTOworCXJlZ3MtPnhjcyA9IF9fVVNFUl9DUzsKKworCS8qCisJICogQ2xl YXIgVEYgd2hlbiBlbnRlcmluZyB0aGUgc2lnbmFsIGhhbmRsZXIsIGJ1dAorCSAqIG5vdGlm eSBhbnkgdHJhY2VyIHRoYXQgd2FzIHNpbmdsZS1zdGVwcGluZyBpdC4KKwkgKiBUaGUgdHJh Y2VyIG1heSB3YW50IHRvIHNpbmdsZS1zdGVwIGluc2lkZSB0aGUKKwkgKiBoYW5kbGVyIHRv by4KKwkgKi8KKwlyZWdzLT5lZmxhZ3MgJj0gflRGX01BU0s7CisKKyNpZiBERUJVR19JTkkK KwlwcmludGsoIklOSSBkZWxpdmVyICglczolZCk6IHNwPSVwIHBjPSVseCByYT0lcFxuIiwK KwkJY3VycmVudC0+Y29tbSwgY3VycmVudC0+cGlkLCBmcmFtZSwgcmVncy0+ZWlwLCBmcmFt ZS0+cHJldGNvZGUpOworI2VuZGlmCisKKwlyZXR1cm47CisKK2dpdmVfc2lnc2VndjoKKwlt ZS0+dGhyZWFkX2luZm8tPmluaXBlbmRpbmc9MDsKKyAgICAgICAgbWUtPnRocmVhZF9pbmZv LT5pbmlmaW5pc2g9LTE7CisgICAgICAgIGluaXRfZmF1bHQocmVncyxmcmFtZSxtZSwiaGFu ZGxlIGRlbGl2ZXIiKTsKKyAgICAgICAgcmV0dXJuOworfQorCisKKy8qCisgKiBDaGVjayBj YWxsZXIgYW5kIGludm9rZSBzZXR1cF9pbml0X2ZyYW1lLgorICogcGFyYW06cmVncyAgIHJl Z2lzdGVyIHN0cnVjdAorICogcGFyYW06a2EgICAgIGluZm9ybWF0aW9uIGZvciBpbml0aWFs aXphdGlvbgorICogcGFyYW06b2xkc2V0IHNpZ25hbCBzZXQKKyAqIHJldHVybjpub25lCisg Ki8KK3ZvaWQKK2hhbmRsZV9pbml0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3Qga19p bml0YWN0aW9uICprYSwgc2lnc2V0X3QgKm9sZHNldCkKK3sKKworI2lmIERFQlVHX0lOSQor ICAgICAgICBwcmludGsoIklOSVRfQ1A6aGFuZGxlX2luaXQ6MDFcbiIpOworI2VuZGlmCisJ LyogQ2hlY2sgdGhlIGNhbGxlciBpcyBrZXJuZWwgb3Igbm90ICovCisJaWYgKHJlZ3MtPm9y aWdfZWF4ID49IDApIHsKKwkJLyogUmV0dXJuIEVJTlRFUiwgaWYgdGhlIGNhbGxlciBpcyBk dXJpbmcgc3lzdGVtY2FsbC4gKi8KKwkJc3dpdGNoIChyZWdzLT5lYXgpIHsKKwkJCWNhc2Ug LUVSRVNUQVJUX1JFU1RBUlRCTE9DSzoKKwkJICAgICAgY2FzZSAtRVJFU1RBUlROT0hBTkQ6 CisJCQlyZWdzLT5lYXggPSAtRUlOVFI7CisjaWYgREVCVUdfSU5JCisJCQlwcmludGsoIkVS RVNUQVJUTk9IQU5cbiIpOworI2VuZGlmCisJCQlicmVhazsKKworCQkgICAgICBjYXNlIC1F UkVTVEFSVFNZUzoKKwkJCXJlZ3MtPmVheCA9IC1FSU5UUjsKKyNpZiBERUJVR19JTkkKKwkJ CXByaW50aygiRVJFU1RBUlRTWVNcbiIpOworI2VuZGlmCisJCQlicmVhazsKKwkJCS8qIFNr aXAgaWYgdGhlIHZhbHVlIGluIHJheCBpcyBlcnJvciBmcm9tIHRoZSBiZWdpbm5pbmcuKi8K KwkJICAgICAgY2FzZSAtRVJFU1RBUlROT0lOVFI6CisJCQlyZWdzLT5lYXggPSByZWdzLT5v cmlnX2VheDsKKwkJCXJlZ3MtPmVpcCAtPSAyOworI2lmIERFQlVHX0lOSQorCQkJcHJpbnRr KCJFUkVTVEFSVE5PSU5UUlxuIik7CisjZW5kaWYKKwkJCWJyZWFrOworCisJCQlkZWZhdWx0 OgorI2lmIERFQlVHX0lOSQorCQkJcHJpbnRrKCJyZWdzLT5lYXg9JWxkXG4iLHJlZ3MtPmVh eCk7CisjZW5kaWYKKwkJCWJyZWFrOworCQl9CisJfQorCisJc2V0dXBfaW5pdF9mcmFtZShr YSwgcmVncywgb2xkc2V0LCBjdXJyZW50KTsKKworfQordm9pZCBkb19pbml0X3Y4NihzdHJ1 Y3QgcHRfcmVncyAqcmVncywgc2lnc2V0X3QgKm9sZHNldCkKK3sKKyNpZiBERUJVR19JTkkK KyAgcHJpbnRrKCJkb19pbml0X3Y4NlxuIik7CisgIGRvX2luaXQocmVncyxvbGRzZXQpOwor I2VuZGlmCit9CisKKy8qCisgKiBDaGVjayB0aGUgcmVnaXN0ZXIgYW5kIGludm9rZSBoYW5k bGVfaW5pdC4KKyAqIHBhcmFtOnJlZ3MgcmVnaXN0ZXIgc3RydWN0CisgKiBwYXJhbTpvbGRz ZXQgc2lnbmFsIHNldAorICogcmV0dXJuOm5vbmUKKyAqLwordm9pZCBkb19pbml0KHN0cnVj dCBwdF9yZWdzICpyZWdzLCBzaWdzZXRfdCAqb2xkc2V0KQoreworCisJc3RydWN0IGtfaW5p dGFjdGlvbiAqa2E9JmN1cnJlbnQtPmtfaWE7CisKKyNpZiBERUJVR19JTkkKKyAgICAgICAg cHJpbnRrKCJJTklUX0NQOmRvX2luaXQ6MDFcbiIpOworI2VuZGlmCisJLyogRXhpdCBpZiB0 aGUgdGhpcmQgZmxhZyBvZiBDUyByZWdpc3RlciBpcyBub3QgMy4gKi8KKwkKKwlpZiAoKHJl Z3MtPnhjcyAmIDMpICE9IDMpIHsKKyNpZiBERUJVR19JTkkKKwkJcHJpbnRrKCJyZWdzLT54 Y3MgIT0gM1xuIik7CisJCXByaW50aygiY3VycmVudC0+dGhyZWFkX2luZm8tPmluaWZpbmlz aCA9IDJcbiIpOworI2VuZGlmCisJCWN1cnJlbnQtPnRocmVhZF9pbmZvLT5pbmlmaW5pc2g9 MjsKKwkJcmV0dXJuOworCX0KKwkKKwkvKiBCbG9jayBpZiB0aGVyZSBpcyBzaWduYWwgc2V0 LiovCisJaWYgKCFvbGRzZXQpeworI2lmIERFQlVHX0lOSQorCXByaW50aygiIW9sZHNldFxu Iik7CisjZW5kaWYKKwkJb2xkc2V0ID0gJmN1cnJlbnQtPmJsb2NrZWQ7CisJfQorCisJLyog IENsZWFyIGRlYnVnIHdhdGNoIHBvaW50IHJlZ2lzdGVyLiovCisJaWYgKGN1cnJlbnQtPnRo cmVhZC5kZWJ1Z3JlZ1s3XSl7CisjaWYgREVCVUdfSU5JCisJCXByaW50aygieW91IGhhdmUg Y3VycmVudC0+dGhyZWFkLmRlYnVncmVnWzddXG4iKTsKKyNlbmRpZgorCQlhc20gdm9sYXRp bGUoIm1vdmwgJTAsJSVkYjciIDo6ICJyIiAoY3VycmVudC0+dGhyZWFkLmRlYnVncmVnWzdd KSk7CisJfQorCisJaGFuZGxlX2luaXQocmVncyxrYSxvbGRzZXQpOworCisJcmV0dXJuOwor fQorCisvKgorICogT3V0cHV0IGVycm9yIGluIGNhc2Ugb2YgaWxsZWdhbC4KKyAqIHBhcmFt OnJlZ3MgcmVnaXN0ZXIgc3RydWN0CisgKiBwYXJhbTpmcmFtZSBzdGFjayBmcmFtZQorICog cGFyYW06bWUgY3VycmVudCB0YXNrIHN0cnVjdAorICogcGFyYW06d2hlcmUgb3V0cHV0IGxv ZyBzdHJpbmcKKyAqIHJldHVybjpub25lCisgKi8KK3ZvaWQgaW5pdF9mYXVsdChzdHJ1Y3Qg cHRfcmVncyAqcmVncywgdm9pZCAqZnJhbWUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqbWUsIGNo YXIgKndoZXJlKQoreworCisjaWYgREVCVUdfSU5JCisJcHJpbnRrKCJJTklUX0NQOmluaXRf ZmF1bHQ6MDFcbiIpOworI2VuZGlmCisJLyogT3V0cHV0IG1lc3NhZ2VzIGlmIGl0IGlzIGls bGVnYWwuKi8KKwlwcmludGsoIiVzWyVkXSBiYWQgZnJhbWUgaW4gJXMgZnJhbWU6JXAgcmlw OiVseCByc3A6JWx4IG9yYXg6JWx4XG4iLAorCSAgICAgICBtZS0+Y29tbSxtZS0+cGlkLHdo ZXJlLGZyYW1lLHJlZ3MtPmVpcCxyZWdzLT5lc3AscmVncy0+b3JpZ19lYXgpOworCit9IAor CisvKgorICogU2V0IGluaXBlbmRpbmcgZmxhZy4KKyAqIHBhcmFtOnRhcmdldCBQSUQgZm9y IHNldHRpbmcgcGlkIGZsYWcKKyAqIHBhcmFtOnVzZXJfa19pYSBpbml0aWFsaXphdGlvbiBp bmZvcm1hdGlvbgorICogcmV0dXJuOm5vcm1hbDowL2lsbGVnYWw6ZXJyb3IgY29kZQorICov Cithc21saW5rYWdlIGludCBzeXNfaW5pdF9wZW5kKHBpZF90IHBpZCwgc3RydWN0IGtfaW5p dGFjdGlvbiAqdXNlcl9rX2lhKQoreworCXN0cnVjdCBrX2luaXRhY3Rpb24ga2E7CisJc3Ry dWN0IHRhc2tfc3RydWN0ICp0c2s7CisJaW50IGVycm9yOworCisjaWYgREVCVUdfSU5JCisJ cHJpbnRrKCJzeXNfaW5pdF9wZW5kXG4iKTsKKyNlbmRpZgorCS8qIENvcHkgaW5pdGlhbGl6 YXRpb24gaW5mb3JtYXRpb24gZnJvbSB1c2VyIGFyZWEgdG8ga2VybmVsIGFyZWEuICovCisJ ZXJyb3IgPSAtRUZBVUxUOworCWlmKGNvcHlfZnJvbV91c2VyKCZrYSx1c2VyX2tfaWEsc2l6 ZW9mKGthKSkpCisJCWdvdG8gb3V0OworCisJLyogaWYgcGlkIDw9IDEsIHBhcmFtZXRlciBl cnJvciAqLworCWVycm9yID0gLUVQRVJNOworCWlmIChwaWQgPD0gMSkKKwkJZ290byBvdXQ7 CisKKwkvKiAgR2V0IHRhc2sgc3RydWN0IGZyb20gUElELiAqLworCWVycm9yID0gLUVTUkNI OworCXJlYWRfbG9jaygmdGFza2xpc3RfbG9jayk7CisJdHNrID0gZmluZF90YXNrX2J5X3Bp ZCgocGlkX3QpcGlkKTsKKwlpZih0c2spCisJCWdldF90YXNrX3N0cnVjdCh0c2spOworCXJl YWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsKKwlpZighdHNrKQorCQlnb3RvIG91dDsKKwor CS8qIGNhcGFiaWxpdHkgY2hlY2suICovCisJaWYoKChjdXJyZW50LT51aWQgIT0gdHNrLT5l dWlkKSB8fAorCSAgICAoY3VycmVudC0+dWlkICE9IHRzay0+c3VpZCkgfHwKKwkgICAgKGN1 cnJlbnQtPnVpZCAhPSB0c2stPnVpZCkgfHwKKwkgICAgKGN1cnJlbnQtPmdpZCAhPSB0c2st PmVnaWQpIHx8CisJICAgIChjdXJyZW50LT5naWQgIT0gdHNrLT5zZ2lkKSB8fAorCSAgICAo Y3VycmVudC0+Z2lkICE9IHRzay0+Z2lkKSkgJiYgIWNhcGFibGUoQ0FQX1NZU19QQU5OVVMp KSB7CisJCS8qIEludmFsaWQgdXNlciAqLworCQllcnJvciA9IC1FUEVSTTsKKwkJcmV0dXJu IGVycm9yOworCX0KKworCWVycm9yPS1FUEVSTTsKKwkvKiBmbGFnIHBlbmRpbmcgKi8KKyNp ZiBERUJVR19JTkkKKwlwcmludGsoInRzay0+dGhyZWFkX2luZm8tPmluaXBlbmRpbmcgPSAx XG4iKTsKKwlwcmludGsoInRzay0+dGhyZWFkX2luZm8tPmluaWZpbmlzaCA9IDFcbiIpOwor I2VuZGlmCisJdHNrLT50aHJlYWRfaW5mby0+aW5pcGVuZGluZz0xOworCXRzay0+dGhyZWFk X2luZm8tPmluaWZpbmlzaD0xOworCisJLyogc2V0IGtfaWEgKi8KKwl0c2stPmtfaWEgPSBr YTsKKworCXNtcF9tYigpOworCisjaWYgREVCVUdfSU5JCisJc3dpdGNoKHRzay0+c3RhdGUp IHsKKwljYXNlIFRBU0tfSU5URVJSVVBUSUJMRToKKwkJcHJpbnRrKCJJTklUX0NQOnRhc2st c3RhdGU6IFRBU0tfSU5URVJSVVBUSUJMRVxuIik7CisJCWJyZWFrOworCWNhc2UgVEFTS19T VE9QUEVEOgorCQlwcmludGsoIklOSVRfQ1A6dGFzay1zdGF0ZTogVEFTS19TVE9QUEVEXG4i KTsKKwkJYnJlYWs7CisJY2FzZSBUQVNLX1JVTk5JTkc6CisJCXByaW50aygiSU5JVF9DUDp0 YXNrLXN0YXRlOiBUQVNLX1JVTk5JTkdcbiIpOworCQlicmVhazsKKwljYXNlIFRBU0tfVU5J TlRFUlJVUFRJQkxFOgorCQlwcmludGsoIklOSVRfQ1A6dGFzay1zdGF0ZTogVEFTS19VTklO VEVSUlVQVElCTEVcbiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlwcmludGsoIklOSVRf Q1A6dGFzay1zdGF0ZTogT3RoZXJzXG4iKTsKKwl9CisjZW5kaWYKKworCXJldHVybiAwOwor b3V0OgorCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIENoZWNrIGluaWZpbmlzaC4KKyAq IHBhcmFtOnBpZCB0YXJnZXQgcGlkIG9mIGZsYWcgY2hlY2sKKyAqIHJldHVybjpub3JtYWw6 MC9pbGxlZ2FsOmVycm9yIGNvZGUKKyAqLworYXNtbGlua2FnZSBpbnQgc3lzX2NoZWNrX2lu aXQocGlkX3QgcGlkKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrOworCWludCBlcnJv cjsKKworI2lmIERFQlVHX0lOSQorCXByaW50aygic3lzX2NoZWNrX2luaXQscGlkPSVkXG4i LHBpZCk7CisjZW5kaWYKKwkvKiBpZiBwaWQgPD0gMSwgcGFyYW1ldGVyIGVycm9yICovCisJ ZXJyb3IgPSAtRVBFUk07CisJaWYgKHBpZCA8PSAxKXsKKwkgIHByaW50aygiYmFkIHBhcmFt ZXRlcixwaWQ9JWRcbiIscGlkKTsKKwkJZ290byBvdXQ7CisJfQorCS8qIEdldCB0YXNrIHN0 cnVjdCBmcm9tIHBpZC4qLworCWVycm9yID0gLUVTUkNIOworCXJlYWRfbG9jaygmdGFza2xp c3RfbG9jayk7CisJdHNrID0gZmluZF90YXNrX2J5X3BpZChwaWQpOworCWlmKHRzaykKKwkg IGdldF90YXNrX3N0cnVjdCh0c2spOworCXJlYWRfdW5sb2NrKCZ0YXNrbGlzdF9sb2NrKTsK KyNpZiBERUJVR19JTkkKKwlwcmludGsoInRhc2s9JXBcbiIsdHNrKTsKKyNlbmRpZgorCWlm KCF0c2speworI2lmIERFQlVHX0lOSQorCSAgcHJpbnRrKCJzeXNfY2hlY2tfaW5pdCxjYW4g bm90IGZpbmQgdGFza19zdHJ1Y3QgYnkgcGlkXG4iKTsKKyNlbmRpZgorCQlnb3RvIG91dDsK Kwl9CisJLyogY2FwYWJpbGl0eSBjaGVjay4gKi8KKwllcnJvciA9IC1FUEVSTTsKKyAgICAg ICAgaWYoKChjdXJyZW50LT51aWQgIT0gdHNrLT5ldWlkKSB8fAorICAgICAgICAgICAgKGN1 cnJlbnQtPnVpZCAhPSB0c2stPnN1aWQpIHx8CisgICAgICAgICAgICAoY3VycmVudC0+dWlk ICE9IHRzay0+dWlkKSB8fAorICAgICAgICAgICAgKGN1cnJlbnQtPmdpZCAhPSB0c2stPmVn aWQpIHx8CisgICAgICAgICAgICAoY3VycmVudC0+Z2lkICE9IHRzay0+c2dpZCkgfHwKKyAg ICAgICAgICAgIChjdXJyZW50LT5naWQgIT0gdHNrLT5naWQpKSAmJiAhY2FwYWJsZShDQVBf U1lTX1BBTk5VUykpIHsKKyAgICAgICAgICAgIC8qIEludmFsaWQgdXNlciAqLworI2lmIERF QlVHX0lOSQorCSAgcHJpbnRrKCJzeXNfY2hlY2tfaW5pdCxJbnZhbGlkIHVzZXJcbiIpOwor I2VuZGlmICAKKwkJZ290byBvdXQ7CisgICAgICAgIH0KKworCS8qIAorCSAqIENoZWNrIGlu aWZpbmlzaCBpbiB0YXNrIHN0cnVjdC4KKwkgKiBJZiBpdCBpcyAwLCByZXR1cm4gMCwgaWYg aXQgaXMgIC0xLCByZXR1cm4gLTEsIGVsc2UgcmV0dXJuIEVBR0FJTi4KKwkgKi8KKwlpZih0 c2stPnRocmVhZF9pbmZvLT5pbmlmaW5pc2g9PTApeworCQlyZXR1cm4gMDsKKwl9ZWxzZSBp Zih0c2stPnRocmVhZF9pbmZvLT5pbmlmaW5pc2g9PS0xKXsKKwkJZXJyb3IgPSAtRUlOVkFM OworCQlwcmludGsoImluaWZuaWNoID0gLTEsIGludmFsaWQgdmFsdWVcbiIpOworCQlnb3Rv IG91dDsKKwl9ZWxzZSBpZih0c2stPnRocmVhZF9pbmZvLT5pbmlmaW5pc2g9PTIpewkJCisJ ICAgICAgICBjdXJyZW50LT50aHJlYWRfaW5mby0+aW5pZmluaXNoPTE7CisJCWN1cnJlbnQt PnRocmVhZF9pbmZvLT5pbmlwZW5kaW5nPTE7CisJCXJldHVybiAxOyAvL21lYW5zIHJldHJ5 IGF0dGFjaC9kZXR0YWNoCisJfWVsc2V7CisJCWVycm9yID0gLUVBR0FJTjsKKwkgICAgICAg IHByaW50aygidHJ5IGFnYWluISBlcnJvcj0lZCwgLUVBR0FJTj0lZFxuIixlcnJvciwtRUFH QUlOKTsKKwkJZ290byBvdXQ7CisJfQorCitvdXQ6CisJcmV0dXJuIGVycm9yOworfQpkaWZm IC11cnBOIGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvYXJjaC9pMzg2L2tlcm5lbC9zeXNfaTM4 Ni5jIGxpbnV4LTIuNi4xMS43LXBhbm51cy1pMzg2L2FyY2gvaTM4Ni9rZXJuZWwvc3lzX2kz ODYuYwotLS0gbGludXgtMi42LjExLjctdmFuaWxsYS9hcmNoL2kzODYva2VybmVsL3N5c19p Mzg2LmMJMjAwNS0wNC0wOCAwMzo1ODozMS4wMDAwMDAwMDAgKzA5MDAKKysrIGxpbnV4LTIu Ni4xMS43LXBhbm51cy1pMzg2L2FyY2gvaTM4Ni9rZXJuZWwvc3lzX2kzODYuYwkyMDA1LTA0 LTE4IDEyOjMyOjEzLjAwMDAwMDAwMCArMDkwMApAQCAtMTksNiArMTksNyBAQAogI2luY2x1 ZGUgPGxpbnV4L21tYW4uaD4KICNpbmNsdWRlIDxsaW51eC9maWxlLmg+CiAjaW5jbHVkZSA8 bGludXgvdXRzbmFtZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKICNpbmNsdWRl IDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9pcGMuaD4KQEAgLTQ0LDEwICs0NSwx MSBAQCBhc21saW5rYWdlIGludCBzeXNfcGlwZSh1bnNpZ25lZCBsb25nIF9fCiBzdGF0aWMg aW5saW5lIGxvbmcgZG9fbW1hcDIoCiAJdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBs b25nIGxlbiwKIAl1bnNpZ25lZCBsb25nIHByb3QsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCi0J dW5zaWduZWQgbG9uZyBmZCwgdW5zaWduZWQgbG9uZyBwZ29mZikKKwl1bnNpZ25lZCBsb25n IGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCBpbnQgcGlkKQogewogCWludCBlcnJvciA9IC1F QkFERjsKIAlzdHJ1Y3QgZmlsZSAqIGZpbGUgPSBOVUxMOworCXN0cnVjdCB0YXNrX3N0cnVj dCAqdHNrOwogCiAJZmxhZ3MgJj0gfihNQVBfRVhFQ1VUQUJMRSB8IE1BUF9ERU5ZV1JJVEUp OwogCWlmICghKGZsYWdzICYgTUFQX0FOT05ZTU9VUykpIHsKQEAgLTU1LDEwICs1NywzNCBA QCBzdGF0aWMgaW5saW5lIGxvbmcgZG9fbW1hcDIoCiAJCWlmICghZmlsZSkKIAkJCWdvdG8g b3V0OwogCX0KKyAgICAgICAgaWYocGlkID4gMCl7CisgICAgICAgICAgICAgICAgcmVhZF9s b2NrKCZ0YXNrbGlzdF9sb2NrKTsKKyAgICAgICAgICAgICAgICB0c2sgPSBmaW5kX3Rhc2tf YnlfcGlkKChwaWRfdClwaWQpOworICAgICAgICAgICAgICAgIGlmICh0c2spCisgICAgICAg ICAgICAgICAgICAgICAgICBnZXRfdGFza19zdHJ1Y3QodHNrKTsKKyAgICAgICAgICAgICAg ICByZWFkX3VubG9jaygmdGFza2xpc3RfbG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCF0 c2spCisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKwkJaWYoKChjdXJyZW50 LT51aWQgIT0gdHNrLT5ldWlkKSB8fAorCQkgICAgKGN1cnJlbnQtPnVpZCAhPSB0c2stPnN1 aWQpIHx8CisJCSAgICAoY3VycmVudC0+dWlkICE9IHRzay0+dWlkKSB8fAorCQkgICAgKGN1 cnJlbnQtPmdpZCAhPSB0c2stPmVnaWQpIHx8CisJCSAgICAoY3VycmVudC0+Z2lkICE9IHRz ay0+c2dpZCkgfHwKKwkJICAgIChjdXJyZW50LT5naWQgIT0gdHNrLT5naWQpKSAmJiAhY2Fw YWJsZShDQVBfU1lTX1BBTk5VUykpIHsKKwkJICAvLyBpbnZhbGlkIHVzZXIgaW4gc3lzX2Fj Y2Vzc3B2bQorCQkgIHJldHVybiAtRVBFUk07CisJCX0KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgZG93bl93cml0ZSgmdHNrLT5tbS0+bW1h cF9zZW0pOworICAgICAgICAgICAgICAgIGVycm9yID0gZG9fbW1hcF9wZ29mZjIoZmlsZSwg YWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYsIHRzayk7CisgICAgICAgICAgICAgICAg dXBfd3JpdGUoJnRzay0+bW0tPm1tYXBfc2VtKTsKKyAgICAgICAgfSBlbHNlIHsKKwogCiAJ ZG93bl93cml0ZSgmY3VycmVudC0+bW0tPm1tYXBfc2VtKTsKIAllcnJvciA9IGRvX21tYXBf cGdvZmYoZmlsZSwgYWRkciwgbGVuLCBwcm90LCBmbGFncywgcGdvZmYpOwogCXVwX3dyaXRl KCZjdXJyZW50LT5tbS0+bW1hcF9zZW0pOworCX0KIAogCWlmIChmaWxlKQogCQlmcHV0KGZp bGUpOwpAQCAtNzAsNyArOTYsNDQgQEAgYXNtbGlua2FnZSBsb25nIHN5c19tbWFwMih1bnNp Z25lZCBsb25nIAogCXVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncywK IAl1bnNpZ25lZCBsb25nIGZkLCB1bnNpZ25lZCBsb25nIHBnb2ZmKQogewotCXJldHVybiBk b19tbWFwMihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYpOworCXJldHVybiBk b19tbWFwMihhZGRyLCBsZW4sIHByb3QsIGZsYWdzLCBmZCwgcGdvZmYsMCk7Cit9CisKKy8q CisgKiBQcm92aWRlIHRoZSBtbWFwMyBzeXN0ZW0gY2FsbCB3aGljaCBtYXBzIHRoZSBmaWxl IHRvIHRoZSBzcGVjaWZpZWQgcHJvY2VzcydzIG1lbW9yeS4KKyAqIHBhcmFtIGFyZyA6IHN0 cnVjdCB3aGljaCBoYXMgbWVtb3J5IG1hcHBpbmcgaW5mb3JtYXRpb24KKyAqIHJldHVybiA6 IG5vcm1hbCBlbmQgOiB0aGUgc3RhcnQgYWRkcmVzcyBvZiBtYXBwZWQgbWVtb3J5CisgKiBy ZXR1cm4gOiBhYm5vcm1hbCBlbmQgOiBlcnJvciBjb2RlKGNhbid0IHJlYWQgdGhlIHN0cnVj dDpFRkFVTFQsIHBhcmFtZXRlciBlcnJvciBvZiBwZ29mZjpFSU5WQUwsIHBhcmFtZXRlciBl cnJvciBvZiBmaWxlOkVCQURGKQorICovCithc21saW5rYWdlIGxvbmcgc3lzX21tYXAzKHN0 cnVjdCBfbW1hcDNfYXJnX3N0cnVjdCBfX3VzZXIgKmFyZykKK3sKKyAgbG9uZyBlcnJvcjsK KyAgc3RydWN0IF9tbWFwM19hcmdfc3RydWN0IGE7CisgIGludCByZXQ7CisgIC8vIGNvcHkg dGhlIHN0cnVjdCBpbiB1c2VyIHNwYWNlIHRvIGtlcm5lbCBzcGFjZQorICBlcnJvciA9IC1F RkFVTFQ7CisgIHByaW50aygic3lzX21tYXAzIGNhbGxlZCwgYXJnPSVwLCYoYXJnLmFkZHIp PSVwXG4iLGFyZywmKGFyZy0+YWRkcikpOworICBwcmludGsoImFyZy5hZGRyPSVseCxhcmcu bGVuPSVseCxhcmcucHJvdD0lbHgiLGFyZy0+YWRkcixhcmctPmxlbixhcmctPnByb3QpOwor ICBwcmludGsoImFyZy5mbGFncz0lbHgsYXJnLmZkPSVseCxhcmcucGdvZmY9JWx4LGFyZy5w aWQ9JWx4XG4iLGFyZy0+ZmxhZ3MsYXJnLT5mZCxhcmctPnBnb2ZmLGFyZy0+cGlkKTsKKy8q ICByZXQ9YWNjZXNzX29rKFZFUklGWV9SRUFELGFyZyxzaXplb2YoYSkpOworICBpZihyZXQp eworICAgIHByaW50aygiYWNjZXNzX29rISBzaXplb2YoYSk9JWQsJWRieXRlIHJlYWRlZFxu IixzaXplb2YoYSkscmV0KTsKKyAgICB9Ki8KKworICByZXQ9Y29weV9mcm9tX3VzZXIoJmEs IGFyZywgc2l6ZW9mKGEpKTsKKyAgaWYocmV0KXsKKyAgICBwcmludGsoIm1tYXAzIGNvcHlf ZnJvbV91c2VyIGVycm9yLi4gJWQgYnl0ZSBsZWZ0XG4iLHJldCk7CisgICAgcHJpbnRrKCJh ZGRyPSVseCxsZW49JWx4LHByb3Q9JWx4LGZsYWdzPSVseCxmZD0lbHgscGdvZmY9JWx4LHBp ZD0lbGRcbiIsYS5hZGRyLGEubGVuLCBhLnByb3QsIGEuZmxhZ3MsIGEuZmQsIGEucGdvZmYs IGEucGlkKTsKKyAgICBnb3RvIG91dDsKKyAgfWVsc2V7CisgICAgcHJpbnRrKCJDb3B5X2Zy b21fVXNlciBmaW5pc2ggY29sbGVjdHksICVkYnl0ZXMgbGVmdC4uLlxuIiwgcmV0KTsKKyAg ICBwcmludGsoImFkZHI9JWx4LGxlbj0lbHgscHJvdD0lbHgsZmxhZ3M9JWx4LGZkPSVseCxw Z29mZj0lbHgscGlkPSVsZFxuIixhLmFkZHIsYS5sZW4sIGEucHJvdCwgYS5mbGFncywgYS5m ZCwgYS5wZ29mZiwgYS5waWQpOworICB9CisgIGVycm9yID0gZG9fbW1hcDIoYS5hZGRyLCBh LmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLCBhLnBnb2ZmLCBhLnBpZCk7CisKKyBvdXQ6 CisgIHByaW50aygibW1hcDMgb3V0LCByZXR1cm49JWx4XG4iLGVycm9yKTsKKyAgcmV0dXJu IGVycm9yOwogfQogCiAvKgpAQCAtMTAxLDcgKzE2NCw3IEBAIGFzbWxpbmthZ2UgaW50IG9s ZF9tbWFwKHN0cnVjdCBtbWFwX2FyZ18KIAlpZiAoYS5vZmZzZXQgJiB+UEFHRV9NQVNLKQog CQlnb3RvIG91dDsKIAotCWVyciA9IGRvX21tYXAyKGEuYWRkciwgYS5sZW4sIGEucHJvdCwg YS5mbGFncywgYS5mZCwgYS5vZmZzZXQgPj4gUEFHRV9TSElGVCk7CisJZXJyID0gZG9fbW1h cDIoYS5hZGRyLCBhLmxlbiwgYS5wcm90LCBhLmZsYWdzLCBhLmZkLCBhLm9mZnNldCA+PiBQ QUdFX1NISUZULDApOwogb3V0OgogCXJldHVybiBlcnI7CiB9CmRpZmYgLXVycE4gbGludXgt Mi42LjExLjctdmFuaWxsYS9hcmNoL2kzODYvbW0vbW1hcC5jIGxpbnV4LTIuNi4xMS43LXBh bm51cy1pMzg2L2FyY2gvaTM4Ni9tbS9tbWFwLmMKLS0tIGxpbnV4LTIuNi4xMS43LXZhbmls bGEvYXJjaC9pMzg2L21tL21tYXAuYwkyMDA1LTA0LTA4IDAzOjU3OjM2LjAwMDAwMDAwMCAr MDkwMAorKysgbGludXgtMi42LjExLjctcGFubnVzLWkzODYvYXJjaC9pMzg2L21tL21tYXAu YwkyMDA1LTA0LTE4IDEyOjMyOjEzLjAwMDAwMDAwMCArMDkwMApAQCAtNjIsMTAgKzYyLDEy IEBAIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0KHN0cnVjdCBtbV9zdHIKIAkJCWN1cnJl bnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5J VFkpIHsKIAkJbW0tPm1tYXBfYmFzZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKIAkJbW0tPmdl dF91bm1hcHBlZF9hcmVhID0gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYTsKKwkJbW0tPmdldF91 bm1hcHBlZF9hcmVhMiA9IGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEyOwogCQltbS0+dW5tYXBf YXJlYSA9IGFyY2hfdW5tYXBfYXJlYTsKIAl9IGVsc2UgewogCQltbS0+bW1hcF9iYXNlID0g bW1hcF9iYXNlKG1tKTsKIAkJbW0tPmdldF91bm1hcHBlZF9hcmVhID0gYXJjaF9nZXRfdW5t YXBwZWRfYXJlYV90b3Bkb3duOworCQltbS0+Z2V0X3VubWFwcGVkX2FyZWEyID0gYXJjaF9n ZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duMjsKIAkJbW0tPnVubWFwX2FyZWEgPSBhcmNoX3Vu bWFwX2FyZWFfdG9wZG93bjsKIAl9CiB9CmRpZmYgLXVycE4gbGludXgtMi42LjExLjctdmFu aWxsYS9pbmNsdWRlL2FzbS1pMzg2L2V4ZWNoYW5kbGUuaCBsaW51eC0yLjYuMTEuNy1wYW5u dXMtaTM4Ni9pbmNsdWRlL2FzbS1pMzg2L2V4ZWNoYW5kbGUuaAotLS0gbGludXgtMi42LjEx LjctdmFuaWxsYS9pbmNsdWRlL2FzbS1pMzg2L2V4ZWNoYW5kbGUuaAkxOTcwLTAxLTAxIDA5 OjAwOjAwLjAwMDAwMDAwMCArMDkwMAorKysgbGludXgtMi42LjExLjctcGFubnVzLWkzODYv aW5jbHVkZS9hc20taTM4Ni9leGVjaGFuZGxlLmgJMjAwNS0wNC0xOCAxMjozMjoxMy4wMDAw MDAwMDAgKzA5MDAKQEAgLTAsMCArMSwyMSBAQAorI2lmbmRlZiBfQVNNX1g4Nl82NF9FWEVD SEFORExFX0gKKyNkZWZpbmUgX0FTTV9YODZfNjRfRVhFQ0hBTkRMRV9ICisKKyNpbmNsdWRl IDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisKKworc3RydWN0IGlu aXRhY3Rpb24KK3sKKwl2b2lkICgqaW5pdGhhbmRsZXIpKGludCk7CisJdm9pZCAoKnJlc3Rv cmVyKSh2b2lkKTsKK307CisKK3N0cnVjdCBrX2luaXRhY3Rpb24KK3sKKyAgICAgICAgc3Ry dWN0IGluaXRhY3Rpb24gaWE7Cit9OworCit2b2lkIGRvX2luaXQoc3RydWN0IHB0X3JlZ3Mg KnJlZ3MsIHNpZ3NldF90ICpvbGRzZXQpOworCisjZW5kaWYKZGlmZiAtdXJwTiBsaW51eC0y LjYuMTEuNy12YW5pbGxhL2luY2x1ZGUvYXNtLWkzODYvdGhyZWFkX2luZm8uaCBsaW51eC0y LjYuMTEuNy1wYW5udXMtaTM4Ni9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgKLS0t IGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvaW5jbHVkZS9hc20taTM4Ni90aHJlYWRfaW5mby5o CTIwMDUtMDQtMDggMDM6NTc6MTQuMDAwMDAwMDAwICswOTAwCisrKyBsaW51eC0yLjYuMTEu Ny1wYW5udXMtaTM4Ni9pbmNsdWRlL2FzbS1pMzg2L3RocmVhZF9pbmZvLmgJMjAwNS0wNC0x OCAxMjozMjoxMy4wMDAwMDAwMDAgKzA5MDAKQEAgLTQ0LDYgKzQ0LDkgQEAgc3RydWN0IHRo cmVhZF9pbmZvIHsKIAkJCQkJCSAgIG9mIG5lc3RlZCAoSVJRKSBzdGFja3MKIAkJCQkJCSov CiAJX191OAkJCXN1cGVydmlzb3Jfc3RhY2tbMF07CisJCisgIF9fdTMyCQkJaW5pcGVuZGlu ZzsgICAgIC8qIFBlbmRpbmcgZmxhZ3MgZm9yIGxpdmUgcGF0Y2ggKi8KKyAgX191MzIJCQlp bmlmaW5pc2g7IC8qIEZpbmlzaCBmbGFncyBmb3IgbGl2ZSBwYXRjaCAqLwogfTsKIAogI2Vs c2UgLyogIV9fQVNTRU1CTFlfXyAqLwpkaWZmIC11cnBOIGxpbnV4LTIuNi4xMS43LXZhbmls bGEvaW5jbHVkZS9hc20taTM4Ni91bmlzdGQuaCBsaW51eC0yLjYuMTEuNy1wYW5udXMtaTM4 Ni9pbmNsdWRlL2FzbS1pMzg2L3VuaXN0ZC5oCi0tLSBsaW51eC0yLjYuMTEuNy12YW5pbGxh L2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgJMjAwNS0wNC0wOCAwMzo1Nzo0Ni4wMDAwMDAw MDAgKzA5MDAKKysrIGxpbnV4LTIuNi4xMS43LXBhbm51cy1pMzg2L2luY2x1ZGUvYXNtLWkz ODYvdW5pc3RkLmgJMjAwNS0wNC0xOCAxMjozMjoxMy4wMDAwMDAwMDAgKzA5MDAKQEAgLTI5 NCw4ICsyOTQsMTQgQEAKICNkZWZpbmUgX19OUl9hZGRfa2V5CQkyODYKICNkZWZpbmUgX19O Ul9yZXF1ZXN0X2tleQkyODcKICNkZWZpbmUgX19OUl9rZXljdGwJCTI4OAorI2RlZmluZSBf X05SX21tYXAzCQkyODkKKyNkZWZpbmUgX19OUl9hY2Nlc3Nwdm0JCShfX05SX21tYXAzKzEp CisjZGVmaW5lIF9fTlJfaW5pdF9wZW5kCQkoX19OUl9tbWFwMysyKQorI2RlZmluZSBfX05S X3J0X2hhbmRsZXJldHVybgkoX19OUl9tbWFwMyszKQorI2RlZmluZSBfX05SX2NoZWNrX2lu aXQJCShfX05SX21tYXAzKzQpCisjZGVmaW5lIF9fTlJfbXVubWFwMwkJKF9fTlJfbW1hcDMr NSkKIAotI2RlZmluZSBOUl9zeXNjYWxscyAyODkKKyNkZWZpbmUgTlJfc3lzY2FsbHMgMjk0 CiAKIC8qCiAgKiB1c2VyLXZpc2libGUgZXJyb3IgbnVtYmVycyBhcmUgaW4gdGhlIHJhbmdl IC0xIC0gLTEyODogc2VlCmRpZmYgLXVycE4gbGludXgtMi42LjExLjctdmFuaWxsYS9pbmNs dWRlL2xpbnV4L2NhcGFiaWxpdHkuaCBsaW51eC0yLjYuMTEuNy1wYW5udXMtaTM4Ni9pbmNs dWRlL2xpbnV4L2NhcGFiaWxpdHkuaAotLS0gbGludXgtMi42LjExLjctdmFuaWxsYS9pbmNs dWRlL2xpbnV4L2NhcGFiaWxpdHkuaAkyMDA1LTA0LTA4IDAzOjU3OjI2LjAwMDAwMDAwMCAr MDkwMAorKysgbGludXgtMi42LjExLjctcGFubnVzLWkzODYvaW5jbHVkZS9saW51eC9jYXBh YmlsaXR5LmgJMjAwNS0wNC0xOCAxMjozMjoxMy4wMDAwMDAwMDAgKzA5MDAKQEAgLTI4OCw2 ICsyODgsMTAgQEAgdHlwZWRlZiBfX3UzMiBrZXJuZWxfY2FwX3Q7CiAKICNkZWZpbmUgQ0FQ X0FVRElUX0NPTlRST0wgICAgMzAKIAorLyogQWxsb3cgdXNlIG9mIG1lbW9yeSBhY2Nlc3Mg c3lzdGVtIGNhbGxzIGZvciBMaXZlIFBhdGNoaW5nICovCisKKyNkZWZpbmUgQ0FQX1NZU19Q QU5OVVMgICAgICAgMzEKKwogI2lmZGVmIF9fS0VSTkVMX18KIC8qIAogICogQm91bmRpbmcg c2V0CmRpZmYgLXVycE4gbGludXgtMi42LjExLjctdmFuaWxsYS9pbmNsdWRlL2xpbnV4L21t LmggbGludXgtMi42LjExLjctcGFubnVzLWkzODYvaW5jbHVkZS9saW51eC9tbS5oCi0tLSBs aW51eC0yLjYuMTEuNy12YW5pbGxhL2luY2x1ZGUvbGludXgvbW0uaAkyMDA1LTA0LTA4IDAz OjU3OjA5LjAwMDAwMDAwMCArMDkwMAorKysgbGludXgtMi42LjExLjctcGFubnVzLWkzODYv aW5jbHVkZS9saW51eC9tbS5oCTIwMDUtMDQtMTggMTI6MzI6MTMuMDAwMDAwMDAwICswOTAw CkBAIC02MTQsNiArNjE0LDcgQEAgZXh0ZXJuIGludCBpbnN0YWxsX3BhZ2Uoc3RydWN0IG1t X3N0cnVjdAogZXh0ZXJuIGludCBpbnN0YWxsX2ZpbGVfcHRlKHN0cnVjdCBtbV9zdHJ1Y3Qg Km1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1 bnNpZ25lZCBsb25nIHBnb2ZmLCBwZ3Byb3RfdCBwcm90KTsKIGV4dGVybiBpbnQgaGFuZGxl X21tX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq dm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsIGludCB3cml0ZV9hY2Nlc3MpOwogZXh0ZXJu IGludCBtYWtlX3BhZ2VzX3ByZXNlbnQodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBs b25nIGVuZCk7CitleHRlcm4gaW50IG1ha2VfcGFnZXNfcHJlc2VudDIodW5zaWduZWQgbG9u ZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spOwog ZXh0ZXJuIGludCBhY2Nlc3NfcHJvY2Vzc192bShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywg dW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpidWYsIGludCBsZW4sIGludCB3cml0ZSk7CiB2 b2lkIGluc3RhbGxfYXJnX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHN0cnVjdCBw YWdlICosIHVuc2lnbmVkIGxvbmcpOwogCkBAIC03MzAsMTAgKzczMSwxNiBAQCBleHRlcm4g dm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqCiAKIGV4dGVybiB1bnNpZ25lZCBs b25nIGdldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVu c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCitleHRlcm4g dW5zaWduZWQgbG9uZyBnZXRfdW5tYXBwZWRfYXJlYTIoc3RydWN0IGZpbGUgKiwgdW5zaWdu ZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywg c3RydWN0IHRhc2tfc3RydWN0ICopOworCiBleHRlcm4gdW5zaWduZWQgbG9uZyBkb19tbWFw X3Bnb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJdW5zaWdu ZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKIAl1bnNpZ25lZCBsb25nIGZsYWcs IHVuc2lnbmVkIGxvbmcgcGdvZmYpOwogCitleHRlcm4gdW5zaWduZWQgbG9uZyBkb19tbWFw X3Bnb2ZmMihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCXVuc2ln bmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCisJdW5zaWduZWQgbG9uZyBmbGFn LCB1bnNpZ25lZCBsb25nIHBnb2ZmLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CisKIHN0YXRp YyBpbmxpbmUgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNp Z25lZCBsb25nIGFkZHIsCiAJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJv dCwKIAl1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQpkaWZmIC11 cnBOIGxpbnV4LTIuNi4xMS43LXZhbmlsbGEvaW5jbHVkZS9saW51eC9tbWFuLmggbGludXgt Mi42LjExLjctcGFubnVzLWkzODYvaW5jbHVkZS9saW51eC9tbWFuLmgKLS0tIGxpbnV4LTIu Ni4xMS43LXZhbmlsbGEvaW5jbHVkZS9saW51eC9tbWFuLmgJMjAwNS0wNC0wOCAwMzo1Nzox My4wMDAwMDAwMDAgKzA5MDAKKysrIGxpbnV4LTIuNi4xMS43LXBhbm51cy1pMzg2L2luY2x1 ZGUvbGludXgvbW1hbi5oCTIwMDUtMDQtMTggMTI6MzI6MTMuMDAwMDAwMDAwICswOTAwCkBA IC02NCw0ICs2NCwxNyBAQCBjYWxjX3ZtX2ZsYWdfYml0cyh1bnNpZ25lZCBsb25nIGZsYWdz KQogCSAgICAgICBfY2FsY192bV90cmFucyhmbGFncywgTUFQX0xPQ0tFRCwgICAgIFZNX0xP Q0tFRCAgICApOwogfQogCisvKgorICogU3RydWN0IG9mIGFyZ3VtZW50IHRvIHBhc3MgdGhl IG1tYXAzIHN5c3RlbSBjYWxsLgorICovIAordHlwZWRlZiBzdHJ1Y3QgX21tYXAzX2FyZ19z dHJ1Y3QgeworCXVuc2lnbmVkIGxvbmcgYWRkcjsgLyogYWRkcmVzcyB3aGVyZSBmaWxlIGlz IGxvYWRlZCAqLworCXVuc2lnbmVkIGxvbmcgbGVuOyAvKiBsZW5ndGggb2YgZGF0YSB0byBi ZSBtYXBlZCAqLworCXVuc2lnbmVkIGxvbmcgcHJvdDsgLyogcGVybWlzc2lvbiBvZiB0aGUg bWVtb3J5IHdoZXJlIHRoZSBmaWxlIGlzIG1hcHBlZCAqLworCXVuc2lnbmVkIGxvbmcgZmxh Z3M7IC8qIGZsYWcgb2YgbWFwcGVkIG1lbW9yeSAqLworCXVuc2lnbmVkIGxvbmcgZmQ7IC8q IGZpbGUgZGVzY3JpcHRvciBvZiBkYXRhIHRvIGJlIG1hcHBlZCAqLworCXVuc2lnbmVkIGxv bmcgcGdvZmY7IC8qIHBhZ2Ugb2Zmc2V0IG9mIGRhdGEgdG8gYmUgbWFwcGVkICovCisJdW5z aWduZWQgbG9uZyBwaWQ7IC8qIHByb2Nlc3MgSUQgKi8KK30gbW1hcDNfYXJnX3N0cnVjdF90 OworCiAjZW5kaWYgLyogX0xJTlVYX01NQU5fSCAqLwpkaWZmIC11cnBOIGxpbnV4LTIuNi4x MS43LXZhbmlsbGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGxpbnV4LTIuNi4xMS43LXBhbm51 cy1pMzg2L2luY2x1ZGUvbGludXgvc2NoZWQuaAotLS0gbGludXgtMi42LjExLjctdmFuaWxs YS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgJMjAwNS0wNC0wOCAwMzo1NzoxMi4wMDAwMDAwMDAg KzA5MDAKKysrIGxpbnV4LTIuNi4xMS43LXBhbm51cy1pMzg2L2luY2x1ZGUvbGludXgvc2No ZWQuaAkyMDA1LTA0LTE4IDEyOjMyOjEzLjAwMDAwMDAwMCArMDkwMApAQCAtMjEsNiArMjEs NyBAQAogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vbW11Lmg+CiAj aW5jbHVkZSA8YXNtL2NwdXRpbWUuaD4KKyNpbmNsdWRlIDxhc20vZXhlY2hhbmRsZS5oPgog CiAjaW5jbHVkZSA8bGludXgvc21wLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CkBAIC0x OTcsOSArMTk4LDE5IEBAIGV4dGVybiB1bnNpZ25lZCBsb25nCiBhcmNoX2dldF91bm1hcHBl ZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsCiAJ CSAgICAgICB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKIGV4dGVybiB1bnNpZ25l ZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVhMihzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25l ZCBsb25nLCB1bnNpZ25lZCBsb25nLAorCQkgICAgICAgdW5zaWduZWQgbG9uZywgdW5zaWdu ZWQgbG9uZywgc3RydWN0IHRhc2tfc3RydWN0ICopOworCitleHRlcm4gdW5zaWduZWQgbG9u ZwogYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1 bnNpZ25lZCBsb25nIGFkZHIsCiAJCQkgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBs b25nIHBnb2ZmLAogCQkJICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKworZXh0ZXJuIHVuc2ln bmVkIGxvbmcKK2FyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bjIoc3RydWN0IGZpbGUg KmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgdW5zaWduZWQgbG9uZyBsZW4sIHVu c2lnbmVkIGxvbmcgcGdvZmYsCisJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHN0cnVjdCB0 YXNrX3N0cnVjdCAqKTsKKwogZXh0ZXJuIHZvaWQgYXJjaF91bm1hcF9hcmVhKHN0cnVjdCB2 bV9hcmVhX3N0cnVjdCAqYXJlYSk7CiBleHRlcm4gdm9pZCBhcmNoX3VubWFwX2FyZWFfdG9w ZG93bihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmFyZWEpOwogCkBAIC0yMTEsNiArMjIyLDEx IEBAIHN0cnVjdCBtbV9zdHJ1Y3QgewogCXVuc2lnbmVkIGxvbmcgKCpnZXRfdW5tYXBwZWRf YXJlYSkgKHN0cnVjdCBmaWxlICpmaWxwLAogCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5z aWduZWQgbG9uZyBsZW4sCiAJCQkJdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9u ZyBmbGFncyk7CisJdW5zaWduZWQgbG9uZyAoKmdldF91bm1hcHBlZF9hcmVhMikgKHN0cnVj dCBmaWxlICpmaWxwLAorCQkJCXVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBs ZW4sCisJCQkJdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgCisJ CQkJc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKTsKKwogCXZvaWQgKCp1bm1hcF9hcmVhKSAo c3RydWN0IHZtX2FyZWFfc3RydWN0ICphcmVhKTsKIAl1bnNpZ25lZCBsb25nIG1tYXBfYmFz ZTsJCS8qIGJhc2Ugb2YgbW1hcCBhcmVhICovCiAJdW5zaWduZWQgbG9uZyBmcmVlX2FyZWFf Y2FjaGU7CQkvKiBmaXJzdCBob2xlICovCkBAIC02ODUsNiArNzAxLDcgQEAgc3RydWN0IHRh c2tfc3RydWN0IHsKICAgCXN0cnVjdCBtZW1wb2xpY3kgKm1lbXBvbGljeTsKIAlzaG9ydCBp bF9uZXh0OwogI2VuZGlmCisJc3RydWN0IGtfaW5pdGFjdGlvbiBrX2lhOyAvKkluaWFsaXph dGlvbiBpbmZvIGZvciBsaXZlIHBhdGNoICovCiB9OwogCiBzdGF0aWMgaW5saW5lIHBpZF90 IHByb2Nlc3NfZ3JvdXAoc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCkBAIC0xMTczLDYgKzEx OTAsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9waWNrX21tYXBfbGF5b3V0CiB7CiAJ bW0tPm1tYXBfYmFzZSA9IFRBU0tfVU5NQVBQRURfQkFTRTsKIAltbS0+Z2V0X3VubWFwcGVk X2FyZWEgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhOworCW1tLT5nZXRfdW5tYXBwZWRfYXJl YTIgPSBhcmNoX2dldF91bm1hcHBlZF9hcmVhMjsKIAltbS0+dW5tYXBfYXJlYSA9IGFyY2hf dW5tYXBfYXJlYTsKIH0KICNlbmRpZgpkaWZmIC11cnBOIGxpbnV4LTIuNi4xMS43LXZhbmls bGEva2VybmVsL2ZvcmsuYyBsaW51eC0yLjYuMTEuNy1wYW5udXMtaTM4Ni9rZXJuZWwvZm9y ay5jCi0tLSBsaW51eC0yLjYuMTEuNy12YW5pbGxhL2tlcm5lbC9mb3JrLmMJMjAwNS0wNC0w OCAwMzo1NzoxMi4wMDAwMDAwMDAgKzA5MDAKKysrIGxpbnV4LTIuNi4xMS43LXBhbm51cy1p Mzg2L2tlcm5lbC9mb3JrLmMJMjAwNS0wNC0xOCAxMjozMjoxMy4wMDAwMDAwMDAgKzA5MDAK QEAgLTIsNiArMiw3IEBACiAgKiAgbGludXgva2VybmVsL2ZvcmsuYwogICoKICAqICBDb3B5 cmlnaHQgKEMpIDE5OTEsIDE5OTIgIExpbnVzIFRvcnZhbGRzCisgKiAgQ29weXJpZ2h0IChD KSAgMjAwNC0yMDA1IE5UVCBDb3Jwb3JhdGlvbgogICovCiAKIC8qCkBAIC00MTIsNiArNDEz LDEyIEBAIHZvaWQgbW1fcmVsZWFzZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRzaywKIAkJdTMy IF9fdXNlciAqIHRpZHB0ciA9IHRzay0+Y2xlYXJfY2hpbGRfdGlkOwogCQl0c2stPmNsZWFy X2NoaWxkX3RpZCA9IE5VTEw7CiAKKwkJLyogaW5pdGlhbGl6ZSBmbGFnIGFuZCBpbmZvcm1h dGlvbiBmb3IgbGl2ZSBwYXRjaCAqLworCQl0c2stPnRocmVhZF9pbmZvLT5pbmlwZW5kaW5n PTA7CisJCXRzay0+dGhyZWFkX2luZm8tPmluaWZpbmlzaD0wOworCQl0c2stPmtfaWEuaWEu aW5pdGhhbmRsZXI9TlVMTDsKKwkJdHNrLT5rX2lhLmlhLnJlc3RvcmVyPU5VTEw7CisKIAkJ LyoKIAkJICogV2UgZG9uJ3QgY2hlY2sgdGhlIGVycm9yIGNvZGUgLSBpZiB1c2Vyc3BhY2Ug aGFzCiAJCSAqIG5vdCBzZXQgdXAgYSBwcm9wZXIgcG9pbnRlciB0aGVuIHRvdWdoIGx1Y2su CmRpZmYgLXVycE4gbGludXgtMi42LjExLjctdmFuaWxsYS9tbS9tZW1vcnkuYyBsaW51eC0y LjYuMTEuNy1wYW5udXMtaTM4Ni9tbS9tZW1vcnkuYwotLS0gbGludXgtMi42LjExLjctdmFu aWxsYS9tbS9tZW1vcnkuYwkyMDA1LTA0LTA4IDAzOjU3OjM2LjAwMDAwMDAwMCArMDkwMAor KysgbGludXgtMi42LjExLjctcGFubnVzLWkzODYvbW0vbWVtb3J5LmMJMjAwNS0wNC0xOCAx MjozMjoxMy4wMDAwMDAwMDAgKzA5MDAKQEAgLTIyMDksNiArMjIwOSwyNyBAQCBpbnQgbWFr ZV9wYWdlc19wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkCiAJcmV0dXJuIHJldCA9PSBsZW4g PyAwIDogLTE7CiB9CiAKK2ludCBtYWtlX3BhZ2VzX3ByZXNlbnQyKHVuc2lnbmVkIGxvbmcg YWRkciwgdW5zaWduZWQgbG9uZyBlbmQsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQorewor CWludCByZXQsIGxlbiwgd3JpdGU7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hOwor CisJdm1hID0gZmluZF92bWEodHNrLT5tbSwgYWRkcik7CisJaWYgKCF2bWEpCisJCXJldHVy biAtMTsKKwl3cml0ZSA9ICh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpICE9IDA7CisJaWYg KGFkZHIgPj0gZW5kKQorCQlCVUcoKTsKKwlpZiAoZW5kID4gdm1hLT52bV9lbmQpCisJCUJV RygpOworCWxlbiA9IChlbmQrUEFHRV9TSVpFLTEpL1BBR0VfU0laRS1hZGRyL1BBR0VfU0la RTsKKwlyZXQgPSBnZXRfdXNlcl9wYWdlcyh0c2ssIHRzay0+bW0sIGFkZHIsCisJCQlsZW4s IHdyaXRlLCAwLCBOVUxMLCBOVUxMKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsK KwlyZXR1cm4gcmV0ID09IGxlbiA/IDAgOiAtMTsKK30KKwogLyogCiAgKiBNYXAgYSB2bWFs bG9jKCktc3BhY2UgdmlydHVhbCBhZGRyZXNzIHRvIHRoZSBwaHlzaWNhbCBwYWdlLgogICov CmRpZmYgLXVycE4gbGludXgtMi42LjExLjctdmFuaWxsYS9tbS9tbWFwLmMgbGludXgtMi42 LjExLjctcGFubnVzLWkzODYvbW0vbW1hcC5jCi0tLSBsaW51eC0yLjYuMTEuNy12YW5pbGxh L21tL21tYXAuYwkyMDA1LTA0LTA4IDAzOjU3OjQ1LjAwMDAwMDAwMCArMDkwMAorKysgbGlu dXgtMi42LjExLjctcGFubnVzLWkzODYvbW0vbW1hcC5jCTIwMDUtMDQtMTggMTI6MzI6MTMu MDAwMDAwMDAwICswOTAwCkBAIC0xMTQzLDYgKzExNDMsMjM5IEBAIHVuYWNjdF9lcnJvcjoK IAogRVhQT1JUX1NZTUJPTChkb19tbWFwX3Bnb2ZmKTsKIAorLyoKKyAqIG1hcCB0aGUgZGF0 YSB3aGljaCBoYXZlIHRoZSBsZW5ndGggc3BlY2lmaWVkIGluIHRoZSBmaWxlIHRvIHRoZSBt ZW1vcnkgb2YKKyAqIHRoZSBzcGVjaWZpZWQgdGFzay4oY2xvbmUgb2YgZG9fbW1hcF9wZ29m ZikKKyAqLworCit1bnNpZ25lZCBsb25nIGRvX21tYXBfcGdvZmYyKHN0cnVjdCBmaWxlICog ZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJdW5zaWduZWQgbG9uZyBsZW4sIHVuc2ln bmVkIGxvbmcgcHJvdCwKKwkJCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcg cGdvZmYsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKQoreworCXN0cnVjdCBtbV9zdHJ1Y3Qg KiBtbSA9IHRzay0+bW07CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCAqIHByZXY7 CisJc3RydWN0IGlub2RlICppbm9kZTsKKwl1bnNpZ25lZCBpbnQgdm1fZmxhZ3M7CisJaW50 IGNvcnJlY3Rfd2NvdW50ID0gMDsKKwlpbnQgZXJyb3I7CisJc3RydWN0IHJiX25vZGUgKiog cmJfbGluaywgKiByYl9wYXJlbnQ7CisJaW50IGFjY291bnRhYmxlID0gMTsKKwl1bnNpZ25l ZCBsb25nIGNoYXJnZWQgPSAwOworCisJaWYgKGZpbGUpIHsKKwkJaWYgKGlzX2ZpbGVfaHVn ZXBhZ2VzKGZpbGUpKQorCQkJYWNjb3VudGFibGUgPSAwOworCisJCWlmICghZmlsZS0+Zl9v cCB8fCAhZmlsZS0+Zl9vcC0+bW1hcCkKKwkJCXJldHVybiAtRU5PREVWOworCisJCWlmICgo cHJvdCAmIFBST1RfRVhFQykgJiYKKwkJICAgIChmaWxlLT5mX3Zmc21udC0+bW50X2ZsYWdz ICYgTU5UX05PRVhFQykpCisJCQlyZXR1cm4gLUVQRVJNOworCX0KKworCWlmICgocHJvdCAm IFBST1RfUkVBRCkgJiYgKHRzay0+cGVyc29uYWxpdHkgJiBSRUFEX0lNUExJRVNfRVhFQykp CisJCWlmICghKGZpbGUgJiYgKGZpbGUtPmZfdmZzbW50LT5tbnRfZmxhZ3MgJiBNTlRfTk9F WEVDKSkpCisJCQlwcm90IHw9IFBST1RfRVhFQzsKKwlpZiAoIWxlbikKKwkJcmV0dXJuIGFk ZHI7CisKKwlsZW4gPSBQQUdFX0FMSUdOKGxlbik7CisJaWYgKCFsZW4gfHwgbGVuID4gVEFT S19TSVpFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmICgocGdvZmYgKyAobGVuID4+IFBB R0VfU0hJRlQpKSA8IHBnb2ZmKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChtbS0+bWFw X2NvdW50ID4gc3lzY3RsX21heF9tYXBfY291bnQpCisJCXJldHVybiAtRU5PTUVNOworCisJ YWRkciA9IGdldF91bm1hcHBlZF9hcmVhMihmaWxlLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFn cywgdHNrKTsKKwlpZiAoYWRkciAmIH5QQUdFX01BU0spCisJCXJldHVybiBhZGRyOworCisJ dm1fZmxhZ3MgPSBjYWxjX3ZtX3Byb3RfYml0cyhwcm90KSB8IGNhbGNfdm1fZmxhZ19iaXRz KGZsYWdzKSB8CisJCQltbS0+ZGVmX2ZsYWdzIHwgVk1fTUFZUkVBRCB8IFZNX01BWVdSSVRF IHwgVk1fTUFZRVhFQzsKKworCWlmIChmbGFncyAmIE1BUF9MT0NLRUQpIHsKKwkJaWYgKCFj YW5fZG9fbWxvY2soKSkKKwkJCXJldHVybiAtRVBFUk07CisJCXZtX2ZsYWdzIHw9IFZNX0xP Q0tFRDsKKwl9CisJaWYgKHZtX2ZsYWdzICYgVk1fTE9DS0VEKSB7CisJCXVuc2lnbmVkIGxv bmcgbG9ja2VkLCBsb2NrX2xpbWl0OworCQlsb2NrZWQgPSBtbS0+bG9ja2VkX3ZtIDw8IFBB R0VfU0hJRlQ7CisJCWxvY2tfbGltaXQgPSB0c2stPnNpZ25hbC0+cmxpbVtSTElNSVRfTUVN TE9DS10ucmxpbV9jdXI7CisJCWxvY2tlZCArPSBsZW47CisJCWlmIChsb2NrZWQgPiBsb2Nr X2xpbWl0ICYmICFjYXBhYmxlKENBUF9JUENfTE9DSykpCisJCQlyZXR1cm4gLUVBR0FJTjsK Kwl9CisKKwlpbm9kZSA9IGZpbGUgPyBmaWxlLT5mX2RlbnRyeS0+ZF9pbm9kZSA6IE5VTEw7 CisKKwlpZiAoZmlsZSkgeworCQlzd2l0Y2ggKGZsYWdzICYgTUFQX1RZUEUpIHsKKwkJY2Fz ZSBNQVBfU0hBUkVEOgorCQkJaWYgKChwcm90JlBST1RfV1JJVEUpICYmICEoZmlsZS0+Zl9t b2RlJkZNT0RFX1dSSVRFKSkKKwkJCQlyZXR1cm4gLUVBQ0NFUzsKKworCQkJaWYgKElTX0FQ UEVORChpbm9kZSkgJiYgKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKKwkJCQlyZXR1 cm4gLUVBQ0NFUzsKKworCQkJaWYgKGxvY2tzX3ZlcmlmeV9sb2NrZWQoaW5vZGUpKQorCQkJ CXJldHVybiAtRUFHQUlOOworCisJCQl2bV9mbGFncyB8PSBWTV9TSEFSRUQgfCBWTV9NQVlT SEFSRTsKKwkJCWlmICghKGZpbGUtPmZfbW9kZSAmIEZNT0RFX1dSSVRFKSkKKwkJCQl2bV9m bGFncyAmPSB+KFZNX01BWVdSSVRFIHwgVk1fU0hBUkVEKTsKKworCQljYXNlIE1BUF9QUklW QVRFOgorCQkJaWYgKCEoZmlsZS0+Zl9tb2RlICYgRk1PREVfUkVBRCkpCisJCQkJcmV0dXJu IC1FQUNDRVM7CisJCQlicmVhazsKKworCQlkZWZhdWx0OgorCQkJcmV0dXJuIC1FSU5WQUw7 CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKGZsYWdzICYgTUFQX1RZUEUpIHsKKwkJY2Fz ZSBNQVBfU0hBUkVEOgorCQkJdm1fZmxhZ3MgfD0gVk1fU0hBUkVEIHwgVk1fTUFZU0hBUkU7 CisJCQlicmVhazsKKwkJY2FzZSBNQVBfUFJJVkFURToKKwkJCXBnb2ZmID0gYWRkciA+PiBQ QUdFX1NISUZUOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gLUVJTlZBTDsK KwkJfQorCX0KKworCWVycm9yID0gc2VjdXJpdHlfZmlsZV9tbWFwKGZpbGUsIHByb3QsIGZs YWdzKTsKKwlpZiAoZXJyb3IpCisJCXJldHVybiBlcnJvcjsKKwkJCisJZXJyb3IgPSAtRU5P TUVNOworbXVubWFwX2JhY2s6CisJdm1hID0gZmluZF92bWFfcHJlcGFyZShtbSwgYWRkciwg JnByZXYsICZyYl9saW5rLCAmcmJfcGFyZW50KTsKKwlpZiAodm1hICYmIHZtYS0+dm1fc3Rh cnQgPCBhZGRyICsgbGVuKSB7CisJCWlmIChkb19tdW5tYXAobW0sIGFkZHIsIGxlbikpCisJ CQlyZXR1cm4gLUVOT01FTTsKKwkJZ290byBtdW5tYXBfYmFjazsKKwl9CisJaWYgKChtbS0+ dG90YWxfdm0gPDwgUEFHRV9TSElGVCkgKyBsZW4KKwkgICAgPiB0c2stPnNpZ25hbC0+cmxp bVtSTElNSVRfQVNdLnJsaW1fY3VyKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhY2Nv dW50YWJsZSAmJiAoIShmbGFncyAmIE1BUF9OT1JFU0VSVkUpIHx8CisJCQkgICAgc3lzY3Rs X292ZXJjb21taXRfbWVtb3J5ID09IE9WRVJDT01NSVRfTkVWRVIpKSB7CisJCWlmICh2bV9m bGFncyAmIFZNX1NIQVJFRCkgeworCQkJdm1fZmxhZ3MgfD0gVk1fQUNDT1VOVDsKKwkJfSBl bHNlIGlmICh2bV9mbGFncyAmIFZNX1dSSVRFKSB7CisJCQljaGFyZ2VkID0gbGVuID4+IFBB R0VfU0hJRlQ7CisJCQlpZiAoc2VjdXJpdHlfdm1fZW5vdWdoX21lbW9yeShjaGFyZ2VkKSkK KwkJCQlyZXR1cm4gLUVOT01FTTsKKwkJCXZtX2ZsYWdzIHw9IFZNX0FDQ09VTlQ7CisJCX0K Kwl9CisKKwlpZiAoIWZpbGUgJiYgISh2bV9mbGFncyAmIFZNX1NIQVJFRCkgJiYKKwkgICAg dm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCBhZGRyICsgbGVuLCB2bV9mbGFncywKKwkJCQkJ TlVMTCwgTlVMTCwgcGdvZmYsIE5VTEwpKQorCQlnb3RvIG91dDsKKworCXZtYSA9IGttZW1f Y2FjaGVfYWxsb2Modm1fYXJlYV9jYWNoZXAsIFNMQUJfS0VSTkVMKTsKKwlpZiAoIXZtYSkg eworCQllcnJvciA9IC1FTk9NRU07CisJCWdvdG8gdW5hY2N0X2Vycm9yOworCX0KKwltZW1z ZXQodm1hLCAwLCBzaXplb2YoKnZtYSkpOworCisJdm1hLT52bV9tbSA9IG1tOworCXZtYS0+ dm1fc3RhcnQgPSBhZGRyOworCXZtYS0+dm1fZW5kID0gYWRkciArIGxlbjsKKwl2bWEtPnZt X2ZsYWdzID0gdm1fZmxhZ3M7CisJdm1hLT52bV9wYWdlX3Byb3QgPSBwcm90ZWN0aW9uX21h cFt2bV9mbGFncyAmIDB4MGZdOworCXZtYS0+dm1fcGdvZmYgPSBwZ29mZjsKKworCWlmIChm aWxlKSB7CisJCWVycm9yID0gLUVJTlZBTDsKKwkJaWYgKHZtX2ZsYWdzICYgKFZNX0dST1dT RE9XTnxWTV9HUk9XU1VQKSkKKwkJCWdvdG8gZnJlZV92bWE7CisJCWlmICh2bV9mbGFncyAm IFZNX0RFTllXUklURSkgeworCQkJZXJyb3IgPSBkZW55X3dyaXRlX2FjY2VzcyhmaWxlKTsK KwkJCWlmIChlcnJvcikKKwkJCQlnb3RvIGZyZWVfdm1hOworCQkJY29ycmVjdF93Y291bnQg PSAxOworCQl9CisJCXZtYS0+dm1fZmlsZSA9IGZpbGU7CisJCWdldF9maWxlKGZpbGUpOwor CQllcnJvciA9IGZpbGUtPmZfb3AtPm1tYXAoZmlsZSwgdm1hKTsKKwkJaWYgKGVycm9yKQor CQkJZ290byB1bm1hcF9hbmRfZnJlZV92bWE7CisJfSBlbHNlIGlmICh2bV9mbGFncyAmIFZN X1NIQVJFRCkgeworCQllcnJvciA9IHNobWVtX3plcm9fc2V0dXAodm1hKTsKKwkJaWYgKGVy cm9yKQorCQkJZ290byBmcmVlX3ZtYTsKKwl9CisKKwlpZiAoKHZtX2ZsYWdzICYgKFZNX1NI QVJFRHxWTV9BQ0NPVU5UKSkgPT0gKFZNX1NIQVJFRHxWTV9BQ0NPVU5UKSkKKwkJdm1hLT52 bV9mbGFncyAmPSB+Vk1fQUNDT1VOVDsKKworCisJYWRkciA9IHZtYS0+dm1fc3RhcnQ7CisJ cGdvZmYgPSB2bWEtPnZtX3Bnb2ZmOworCXZtX2ZsYWdzID0gdm1hLT52bV9mbGFnczsKKwor CWlmICghZmlsZSB8fCAhdm1hX21lcmdlKG1tLCBwcmV2LCBhZGRyLCB2bWEtPnZtX2VuZCwK KwkJCXZtYS0+dm1fZmxhZ3MsIE5VTEwsIGZpbGUsIHBnb2ZmLCB2bWFfcG9saWN5KHZtYSkp KSB7CisJCWZpbGUgPSB2bWEtPnZtX2ZpbGU7CisJCXZtYV9saW5rKG1tLCB2bWEsIHByZXYs IHJiX2xpbmssIHJiX3BhcmVudCk7CisJCWlmIChjb3JyZWN0X3djb3VudCkKKwkJCWF0b21p Y19pbmMoJmlub2RlLT5pX3dyaXRlY291bnQpOworCX0gZWxzZSB7CisJCWlmIChmaWxlKSB7 CisJCQlpZiAoY29ycmVjdF93Y291bnQpCisJCQkJYXRvbWljX2luYygmaW5vZGUtPmlfd3Jp dGVjb3VudCk7CisJCQlmcHV0KGZpbGUpOworCQl9CisJCW1wb2xfZnJlZSh2bWFfcG9saWN5 KHZtYSkpOworCQlrbWVtX2NhY2hlX2ZyZWUodm1fYXJlYV9jYWNoZXAsIHZtYSk7CisJfQor CitvdXQ6CisJbW0tPnRvdGFsX3ZtICs9IGxlbiA+PiBQQUdFX1NISUZUOworCV9fdm1fc3Rh dF9hY2NvdW50KG1tLCB2bV9mbGFncywgZmlsZSwgbGVuID4+IFBBR0VfU0hJRlQpOworCWlm ICh2bV9mbGFncyAmIFZNX0xPQ0tFRCkgeworCQltbS0+bG9ja2VkX3ZtICs9IGxlbiA+PiBQ QUdFX1NISUZUOworCQltYWtlX3BhZ2VzX3ByZXNlbnQyKGFkZHIsIGFkZHIgKyBsZW4sIHRz ayk7CisJfQorCWlmIChmbGFncyAmIE1BUF9QT1BVTEFURSkgeworCQl1cF93cml0ZSgmbW0t Pm1tYXBfc2VtKTsKKwkJc3lzX3JlbWFwX2ZpbGVfcGFnZXMoYWRkciwgbGVuLCAwLAorCQkJ CQlwZ29mZiwgZmxhZ3MgJiBNQVBfTk9OQkxPQ0spOworCQlkb3duX3dyaXRlKCZtbS0+bW1h cF9zZW0pOworCX0KKwlhY2N0X3VwZGF0ZV9pbnRlZ3JhbHMoKTsKKwl1cGRhdGVfbWVtX2hp d2F0ZXIoKTsKKwlyZXR1cm4gYWRkcjsKKwordW5tYXBfYW5kX2ZyZWVfdm1hOgorCWlmIChj b3JyZWN0X3djb3VudCkKKwkJYXRvbWljX2luYygmaW5vZGUtPmlfd3JpdGVjb3VudCk7CisJ dm1hLT52bV9maWxlID0gTlVMTDsKKwlmcHV0KGZpbGUpOworCisJemFwX3BhZ2VfcmFuZ2Uo dm1hLCB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCAtIHZtYS0+dm1fc3RhcnQsIE5VTEwp OworZnJlZV92bWE6CisJa21lbV9jYWNoZV9mcmVlKHZtX2FyZWFfY2FjaGVwLCB2bWEpOwor dW5hY2N0X2Vycm9yOgorCWlmIChjaGFyZ2VkKQorCQl2bV91bmFjY3RfbWVtb3J5KGNoYXJn ZWQpOworCXJldHVybiBlcnJvcjsKK30KK0VYUE9SVF9TWU1CT0woZG9fbW1hcF9wZ29mZjIp OworCisKIC8qIEdldCBhbiBhZGRyZXNzIHJhbmdlIHdoaWNoIGlzIGN1cnJlbnRseSB1bm1h cHBlZC4KICAqIEZvciBzaG1hdCgpIHdpdGggYWRkcj0wLgogICoKQEAgLTExOTksNiArMTQz Miw0OCBAQCBmdWxsX3NlYXJjaDoKIAkJYWRkciA9IHZtYS0+dm1fZW5kOwogCX0KIH0KKwor LyoKKyAqIEdldCB0aGUgYXJlYSBpbiB0aGUgc3BlY2lmaWMgcHJvY2VzcyB3aGVyZSBub3Ro aW5nIGlzIG1hcHBlZC4KKyAqIChjbG9uZSBvZiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKQor ICovCit1bnNpZ25lZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVhMihzdHJ1Y3QgZmls ZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLAorCQl1bnNpZ25lZCBsb25nIGxlbiwgdW5z aWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHRhc2tfc3Ry dWN0ICp0c2spCit7CisgCisJc3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0c2stPm1tOworCXN0 cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcjsK KwlpZiAobGVuID4gVEFTS19TSVpFKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWlmIChhZGRy KSB7CisJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOworCQl2bWEgPSBmaW5kX3ZtYShtbSwg YWRkcik7CisJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAmJgorCQkgICAgKCF2bWEg fHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCXJldHVybiBhZGRyOworCX0K KwlzdGFydF9hZGRyID0gYWRkciA9IG1tLT5mcmVlX2FyZWFfY2FjaGU7CisKK2Z1bGxfc2Vh cmNoOgorCWZvciAodm1hID0gZmluZF92bWEobW0sIGFkZHIpOyA7IHZtYSA9IHZtYS0+dm1f bmV4dCkgeworCQlpZiAoVEFTS19TSVpFIC0gbGVuIDwgYWRkcikgeworCQkJaWYgKHN0YXJ0 X2FkZHIgIT0gVEFTS19VTk1BUFBFRF9CQVNFKSB7CisJCQkJc3RhcnRfYWRkciA9IGFkZHIg PSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJCQkJZ290byBmdWxsX3NlYXJjaDsKKwkJCX0KKwkJ CXJldHVybiAtRU5PTUVNOworCQl9CisJCWlmICghdm1hIHx8IGFkZHIgKyBsZW4gPD0gdm1h LT52bV9zdGFydCkgeworCQkJbW0tPmZyZWVfYXJlYV9jYWNoZSA9IGFkZHIgKyBsZW47CisJ CQlyZXR1cm4gYWRkcjsKKwkJfQorCQlhZGRyID0gdm1hLT52bV9lbmQ7CisJfQorfQorCiAj ZW5kaWYJCiAKIHZvaWQgYXJjaF91bm1hcF9hcmVhKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq YXJlYSkKQEAgLTEzMDAsNiArMTU3NSw2NiBAQCBmYWlsOgogCiAJcmV0dXJuIGFkZHI7CiB9 CisKKy8qCisgKiBHZXQgdGhlIGFyZWEgaW4gdGhlIHNwZWNpZmljIHByb2Nlc3Mgd2hlcmUg bm90aGluZyBpcyBtYXBwZWQuCisgKiAoY2xvbmUgb2YgYXJjaF9nZXRfdW5tYXBwZWRfYXJl YV90b3Bkb3duKQorICovCit1bnNpZ25lZCBsb25nCithcmNoX2dldF91bm1hcHBlZF9hcmVh X3RvcGRvd24yKHN0cnVjdCBmaWxlICpmaWxwLCBjb25zdCB1bnNpZ25lZCBsb25nIGFkZHIw LAorCQkJICBjb25zdCB1bnNpZ25lZCBsb25nIGxlbiwgY29uc3QgdW5zaWduZWQgbG9uZyBw Z29mZiwKKwkJCSAgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHRhc2tfc3Ry dWN0ICp0c2spCit7CisJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsICpwcmV2X3ZtYTsK KwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRzay0+bW07CisJdW5zaWduZWQgbG9uZyBiYXNl ID0gbW0tPm1tYXBfYmFzZSwgYWRkciA9IGFkZHIwOworCWludCBmaXJzdF90aW1lID0gMTsK KworCWlmIChsZW4gPiBUQVNLX1NJWkUpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKG1t LT5mcmVlX2FyZWFfY2FjaGUgPiBiYXNlKQorCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFz ZTsKKworCWlmIChhZGRyKSB7CisJCWFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpOworCQl2bWEg PSBmaW5kX3ZtYShtbSwgYWRkcik7CisJCWlmIChUQVNLX1NJWkUgLSBsZW4gPj0gYWRkciAm JgorCQkgICAgKCF2bWEgfHwgYWRkciArIGxlbiA8PSB2bWEtPnZtX3N0YXJ0KSkKKwkJCXJl dHVybiBhZGRyOworCX0KKwordHJ5X2FnYWluOgorCWlmIChtbS0+ZnJlZV9hcmVhX2NhY2hl IDwgbGVuKQorCQlnb3RvIGZhaWw7CisKKwlhZGRyID0gKG1tLT5mcmVlX2FyZWFfY2FjaGUg LSBsZW4pICYgUEFHRV9NQVNLOworCWRvIHsKKwkgIGlmICghKHZtYSA9IGZpbmRfdm1hX3By ZXYobW0sIGFkZHIsICZwcmV2X3ZtYSkpKQorCQkJcmV0dXJuIGFkZHI7CisKKwkJaWYgKGFk ZHIrbGVuIDw9IHZtYS0+dm1fc3RhcnQgJiYKKwkJCQkoIXByZXZfdm1hIHx8IChhZGRyID49 IHByZXZfdm1hLT52bV9lbmQpKSkKKwkJCXJldHVybiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9 IGFkZHIpOworCQllbHNlCisJCQlpZiAobW0tPmZyZWVfYXJlYV9jYWNoZSA9PSB2bWEtPnZt X2VuZCkKKwkJCQltbS0+ZnJlZV9hcmVhX2NhY2hlID0gdm1hLT52bV9zdGFydDsKKworCQlh ZGRyID0gdm1hLT52bV9zdGFydC1sZW47CisJfSB3aGlsZSAobGVuIDw9IHZtYS0+dm1fc3Rh cnQpOworCitmYWlsOgorCWlmIChmaXJzdF90aW1lKSB7CisJCW1tLT5mcmVlX2FyZWFfY2Fj aGUgPSBiYXNlOworCQlmaXJzdF90aW1lID0gMDsKKwkJZ290byB0cnlfYWdhaW47CisJfQor CW1tLT5mcmVlX2FyZWFfY2FjaGUgPSBUQVNLX1VOTUFQUEVEX0JBU0U7CisJYWRkciA9IGFy Y2hfZ2V0X3VubWFwcGVkX2FyZWEyKGZpbHAsIGFkZHIwLCBsZW4sIHBnb2ZmLCBmbGFncywg dHNrKTsKKwltbS0+ZnJlZV9hcmVhX2NhY2hlID0gYmFzZTsKKwlyZXR1cm4gYWRkcjsKK30K KwogI2VuZGlmCiAKIHZvaWQgYXJjaF91bm1hcF9hcmVhX3RvcGRvd24oc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICphcmVhKQpAQCAtMTM1MCw2ICsxNjg1LDM1IEBAIGdldF91bm1hcHBlZF9h cmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnMKIAogRVhQT1JUX1NZTUJPTChnZXRfdW5tYXBw ZWRfYXJlYSk7CiAKKy8qCisgKiBHZXQgdGhlIGFyZWEgaW4gdGhlIHNwZWNpZmljIHByb2Nl c3Mgd2hlcmUgbm90aGluZyBpcyBtYXBwZWQuCisgKiAoY2xvbmUgb2YgZ2V0X3VubWFwcGVk X2FyZWEpCisgKi8KK3Vuc2lnbmVkIGxvbmcKK2dldF91bm1hcHBlZF9hcmVhMihzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKKwkJ dW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgc3RydWN0IHRhc2tf c3RydWN0ICp0c2spCit7CisJaWYgKGZsYWdzICYgTUFQX0ZJWEVEKSB7CisJCXVuc2lnbmVk IGxvbmcgcmV0OworCisJCWlmIChhZGRyID4gVEFTS19TSVpFIC0gbGVuKQorCQkJcmV0dXJu IC1FTk9NRU07CisJCWlmIChhZGRyICYgflBBR0VfTUFTSykKKwkJCXJldHVybiAtRUlOVkFM OworCQlpZiAoZmlsZSAmJiBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKSkgIHsKKwkJCXJldCA9 IHByZXBhcmVfaHVnZXBhZ2VfcmFuZ2UoYWRkciwgbGVuKTsKKwkJfSBlbHNlIHsKKwkJCXJl dCA9IGlzX2h1Z2VwYWdlX29ubHlfcmFuZ2UoYWRkciwgbGVuKTsKKwkJfQorCQlpZiAocmV0 KQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCXJldHVybiBhZGRyOworCX0KKwlyZXR1cm4gdHNr LT5tbS0+Z2V0X3VubWFwcGVkX2FyZWEyKGZpbGUsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdz LCB0c2spOworfQorCitFWFBPUlRfU1lNQk9MKGdldF91bm1hcHBlZF9hcmVhMik7CisKIC8q IExvb2sgdXAgdGhlIGZpcnN0IFZNQSB3aGljaCBzYXRpc2ZpZXMgIGFkZHIgPCB2bV9lbmQs ICBOVUxMIGlmIG5vbmUuICovCiBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiBmaW5kX3ZtYShz dHJ1Y3QgbW1fc3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKQEAgLTE4Nzgs NiArMjI0Miw0OSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmVyaWZ5X21tX3dyaXRlbG9ja2Vk CiAjZW5kaWYKIH0KIAorCisKKy8qCisgKiBDbGVhciB0aGUgc3BlY2lmaWVkIG1hcHBlZCBh cmVhIGluIHNwZWNpZmllZCBwcm9jZXNzLgorICogUHJvdmlkZSB0aGUgc3lzdGVtIGNhbGwg bXVubWFwMy4KKyAqIFNlbmQgbWVtb3J5IG1hcCBpbmZvcm1hdGlvbiBzdHJ1Y3QgdG8gZG9f bXVubWFwLgorICovCithc21saW5rYWdlIGxvbmcgc3lzX211bm1hcDModW5zaWduZWQgbG9u ZyBhZGRyLCBzaXplX3QgbGVuLCBwaWRfdCBwaWQpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qg bW1fc3RydWN0ICptbTsKKworCS8qIHRhcmdldCBwcm9jZXNzIHRhc2sgc3RydWN0ICovCisJ c3RydWN0IHRhc2tfc3RydWN0ICp0c2s7CisKKwkvKiBnZXQgc3BlY2lmaWVkIHByb2Nlc3Mg dGFzayBzdHJ1Y3QgZnJvbSBwaWQuKi8gICAgICAgICAgCisJcmVhZF9sb2NrKCZ0YXNrbGlz dF9sb2NrKTsKKwl0c2sgPSBmaW5kX3Rhc2tfYnlfcGlkKHBpZCk7CisJcmVhZF91bmxvY2so JnRhc2tsaXN0X2xvY2spOworCisJaWYgKCF0c2spCisJCXJldHVybiAtRVNSQ0g7CisKKwkv LyBjYXBhYmlsaXR5IGNoZWNrCQorCWlmKCgoY3VycmVudC0+dWlkICE9IHRzay0+ZXVpZCkg fHwKKwkoY3VycmVudC0+dWlkICE9IHRzay0+c3VpZCkgfHwKKwkoY3VycmVudC0+dWlkICE9 IHRzay0+dWlkKSB8fAorCShjdXJyZW50LT5naWQgIT0gdHNrLT5lZ2lkKSB8fAorCShjdXJy ZW50LT5naWQgIT0gdHNrLT5zZ2lkKSB8fAorCShjdXJyZW50LT5naWQgIT0gdHNrLT5naWQp KSAmJiAhY2FwYWJsZShDQVBfU1lTX1BBTk5VUykpIHsKKwkJLy8gaW52YWxpZCB1c2VyIGlu IG11bmFtcDMKKwkJLy8gRVBFUk06MSBPcGVyYXRpb24gbm90IHBlcm1pdHRlZAorCQlyZXR1 cm4gLUVQRVJNOworCX0KKyAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwltbSA9IHRz ay0+bW07CisJZG93bl93cml0ZSgmbW0tPm1tYXBfc2VtKTsKKwlyZXQgPSBkb19tdW5tYXAo bW0sIGFkZHIsIGxlbik7CisJdXBfd3JpdGUoJm1tLT5tbWFwX3NlbSk7CisJcmV0dXJuIHJl dDsKK30KKwogLyoKICAqICB0aGlzIGlzIHJlYWxseSBhIHNpbXBsaWZpZWQgImRvX21tYXAi LiAgaXQgb25seSBoYW5kbGVzCiAgKiAgYW5vbnltb3VzIG1hcHMuICBldmVudHVhbGx5IHdl IG1heSBiZSBhYmxlIHRvIGRvIHNvbWUK --------------020103020104090009060403--