From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IeVWH-0008PW-Hb for qemu-devel@nongnu.org; Sun, 07 Oct 2007 08:46:05 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IeVWF-0008Ou-49 for qemu-devel@nongnu.org; Sun, 07 Oct 2007 08:46:04 -0400 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IeVWE-0008Or-Uh for qemu-devel@nongnu.org; Sun, 07 Oct 2007 08:46:03 -0400 Received: from mu-out-0910.google.com ([209.85.134.184]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IeVWC-0003g9-Vk for qemu-devel@nongnu.org; Sun, 07 Oct 2007 08:46:02 -0400 Received: by mu-out-0910.google.com with SMTP id w8so1381825mue for ; Sun, 07 Oct 2007 05:45:59 -0700 (PDT) Message-ID: Date: Sun, 7 Oct 2007 15:45:59 +0300 From: "Blue Swirl" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_36400_23148973.1191761159598" Subject: [Qemu-devel] [RFC, PATCH] Support for loading 32 bit ELF files for 64 bit linux-user Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel ------=_Part_36400_23148973.1191761159598 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, This patch adds support for loading a 32 bit ELF file in the 64 bit user mode emulator. This means that qemu-sparc64 can be used to execute 32 bit ELF files containing V9 instructions (SPARC32PLUS). This format is used by Solaris/Sparc and maybe by Debian in the future. Other targets shouldn't be affected, but I have done only compile testing. Any comments? $ cat helloworld.c #define __KERNEL__ #include static int errno; static __inline__ _syscall1(void,exit,int,exitval) static inline _syscall3(int,write,int,fd,const char *,buf,long,count) int _start() { write(2, "Hello World!\n", sizeof("Hello World!\n")); exit(0); } $ gcc -o helloworld.sparc32plus helloworld.c -g -Wa,-xarch=v9b -Wa,-32 -m32 -mcpu=ultrasparc -static -nostdlib $ file helloworld.sparc32plus helloworld.sparc32plus: ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required, version 1 (SYSV), statically linked, not stripped $ ./qemu-sparc64 ./helloworld.sparc32plus Hello World! ------=_Part_36400_23148973.1191761159598 Content-Type: text/x-diff; name="elfload_32_and_64.diff" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="elfload_32_and_64.diff"; filename="elfload_32_and_64.diff"; filename="elfload_32_and_64.diff"; filename="elfload_32_and_64.diff" X-Attachment-Id: f_f7hjms8b SW5kZXg6IHFlbXUvbGludXgtdXNlci9lbGZsb2FkLmMKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmln L2xpbnV4LXVzZXIvZWxmbG9hZC5jCTIwMDctMTAtMDcgMDg6NDk6NTUuMDAwMDAwMDAwICswMDAw CisrKyBxZW11L2xpbnV4LXVzZXIvZWxmbG9hZC5jCTIwMDctMTAtMDcgMTI6MTc6NTYuMDAwMDAw MDAwICswMDAwCkBAIC00OCw3ICs0OCw2IEBACiAjZGVmaW5lIEVMRl9TVEFSVF9NTUFQIDB4MmFh YWFhYjAwMFVMTAogI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoICgoeCkgPT0gRUxGX0FSQ0gp ICkKIAotI2RlZmluZSBFTEZfQ0xBU1MgICAgICBFTEZDTEFTUzY0CiAjZGVmaW5lIEVMRl9EQVRB ICAgICAgIEVMRkRBVEEyTFNCCiAjZGVmaW5lIEVMRl9BUkNIICAgICAgIEVNX1g4Nl82NAogCkBA IC03MSw3ICs3MCw2IEBACiAvKgogICogVGhlc2UgYXJlIHVzZWQgdG8gc2V0IHBhcmFtZXRlcnMg aW4gdGhlIGNvcmUgZHVtcHMuCiAgKi8KLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKICNk ZWZpbmUgRUxGX0RBVEEJRUxGREFUQTJMU0IKICNkZWZpbmUgRUxGX0FSQ0gJRU1fMzg2CiAKQEAg LTEwMiw3ICsxMDAsNiBAQAogCiAjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICggKHgpID09IEVN X0FSTSApCiAKLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKICNpZmRlZiBUQVJHRVRfV09S RFNfQklHRU5ESUFOCiAjZGVmaW5lIEVMRl9EQVRBCUVMRkRBVEEyTVNCCiAjZWxzZQpAQCAtMTUz LDkgKzE1MCw4IEBACiAKICNkZWZpbmUgRUxGX1NUQVJUX01NQVAgMHg4MDAwMDAwMAogCi0jZGVm aW5lIGVsZl9jaGVja19hcmNoKHgpICggKHgpID09IEVNX1NQQVJDVjkgKQorI2RlZmluZSBlbGZf Y2hlY2tfYXJjaCh4KSAoICh4KSA9PSBFTV9TUEFSQ1Y5IHx8ICh4KSA9PSBFTV9TUEFSQzMyUExV UyApCiAKLSNkZWZpbmUgRUxGX0NMQVNTICAgRUxGQ0xBU1M2NAogI2RlZmluZSBFTEZfREFUQSAg ICBFTEZEQVRBMk1TQgogI2RlZmluZSBFTEZfQVJDSCAgICBFTV9TUEFSQ1Y5CiAKQEAgLTE2Nyw3 ICsxNjMsMTAgQEAKICAgICByZWdzLT5wYyA9IGluZm9wLT5lbnRyeTsKICAgICByZWdzLT5ucGMg PSByZWdzLT5wYyArIDQ7CiAgICAgcmVncy0+eSA9IDA7Ci0gICAgcmVncy0+dV9yZWdzWzE0XSA9 IGluZm9wLT5zdGFydF9zdGFjayAtIDE2ICogOCAtIFNUQUNLX0JJQVM7CisgICAgaWYgKGluZm9w LT5pc182NGJpdHMpCisgICAgICAgIHJlZ3MtPnVfcmVnc1sxNF0gPSBpbmZvcC0+c3RhcnRfc3Rh Y2sgLSAxNiAqIDggLSBTVEFDS19CSUFTOworICAgIGVsc2UKKyAgICAgICAgcmVncy0+dV9yZWdz WzE0XSA9IGluZm9wLT5zdGFydF9zdGFjayAtIDE2ICogNDsKIH0KIAogI2Vsc2UKQEAgLTE3NSw3 ICsxNzQsNiBAQAogCiAjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICggKHgpID09IEVNX1NQQVJD ICkKIAotI2RlZmluZSBFTEZfQ0xBU1MgICBFTEZDTEFTUzMyCiAjZGVmaW5lIEVMRl9EQVRBICAg IEVMRkRBVEEyTVNCCiAjZGVmaW5lIEVMRl9BUkNIICAgIEVNX1NQQVJDCiAKQEAgLTE5OSwxNCAr MTk3LDEwIEBACiAKICNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCAoeCkgPT0gRU1fUFBDNjQg KQogCi0jZGVmaW5lIEVMRl9DTEFTUwlFTEZDTEFTUzY0Ci0KICNlbHNlCiAKICNkZWZpbmUgZWxm X2NoZWNrX2FyY2goeCkgKCAoeCkgPT0gRU1fUFBDICkKIAotI2RlZmluZSBFTEZfQ0xBU1MJRUxG Q0xBU1MzMgotCiAjZW5kaWYKIAogI2lmZGVmIFRBUkdFVF9XT1JEU19CSUdFTkRJQU4KQEAgLTI4 NywxMSArMjgxLDYgQEAKIAogI2RlZmluZSBlbGZfY2hlY2tfYXJjaCh4KSAoICh4KSA9PSBFTV9N SVBTICkKIAotI2lmZGVmIFRBUkdFVF9NSVBTNjQKLSNkZWZpbmUgRUxGX0NMQVNTICAgRUxGQ0xB U1M2NAotI2Vsc2UKLSNkZWZpbmUgRUxGX0NMQVNTICAgRUxGQ0xBU1MzMgotI2VuZGlmCiAjaWZk ZWYgVEFSR0VUX1dPUkRTX0JJR0VORElBTgogI2RlZmluZSBFTEZfREFUQQlFTEZEQVRBMk1TQgog I2Vsc2UKQEAgLTMxNyw3ICszMDYsNiBAQAogCiAjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICgg KHgpID09IEVNX1NIICkKIAotI2RlZmluZSBFTEZfQ0xBU1MgRUxGQ0xBU1MzMgogI2RlZmluZSBF TEZfREFUQSAgRUxGREFUQTJMU0IKICNkZWZpbmUgRUxGX0FSQ0ggIEVNX1NICiAKQEAgLTMzOSw3 ICszMjcsNiBAQAogCiAjZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICggKHgpID09IEVNXzY4SyAp CiAKLSNkZWZpbmUgRUxGX0NMQVNTCUVMRkNMQVNTMzIKICNkZWZpbmUgRUxGX0RBVEEJRUxGREFU QTJNU0IKICNkZWZpbmUgRUxGX0FSQ0gJRU1fNjhLCiAKQEAgLTM2NCw3ICszNTEsNiBAQAogCiAj ZGVmaW5lIGVsZl9jaGVja19hcmNoKHgpICggKHgpID09IEVMRl9BUkNIICkKIAotI2RlZmluZSBF TEZfQ0xBU1MgICAgICBFTEZDTEFTUzY0CiAjZGVmaW5lIEVMRl9EQVRBICAgICAgIEVMRkRBVEEy TVNCCiAjZGVmaW5lIEVMRl9BUkNIICAgICAgIEVNX0FMUEhBCiAKQEAgLTM5MSw2ICszNzcsNyBA QAogI2RlZmluZSBFTEZfSFdDQVAgMAogI2VuZGlmCiAKKyNkZWZpbmUgRUxGX0NMQVNTICAgICAg IEVMRkNMQVNTMzIKICNpbmNsdWRlICJlbGYuaCIKIAogc3RydWN0IGV4ZWMKQEAgLTQ1Nyw1OSAr NDQ0LDYgQEAKIAogc3RhdGljIGludCBsb2FkX2FvdXRfaW50ZXJwKHZvaWQgKiBleHB0ciwgaW50 IGludGVycF9mZCk7CiAKLSNpZmRlZiBCU1dBUF9ORUVERUQKLXN0YXRpYyB2b2lkIGJzd2FwX2Vo ZHIoc3RydWN0IGVsZmhkciAqZWhkcikKLXsKLSAgICBic3dhcDE2cygmZWhkci0+ZV90eXBlKTsJ CQkvKiBPYmplY3QgZmlsZSB0eXBlICovCi0gICAgYnN3YXAxNnMoJmVoZHItPmVfbWFjaGluZSk7 CQkvKiBBcmNoaXRlY3R1cmUgKi8KLSAgICBic3dhcDMycygmZWhkci0+ZV92ZXJzaW9uKTsJCS8q IE9iamVjdCBmaWxlIHZlcnNpb24gKi8KLSAgICBic3dhcHRscygmZWhkci0+ZV9lbnRyeSk7CQkv KiBFbnRyeSBwb2ludCB2aXJ0dWFsIGFkZHJlc3MgKi8KLSAgICBic3dhcHRscygmZWhkci0+ZV9w aG9mZik7CQkvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLwotICAgIGJzd2Fw dGxzKCZlaGRyLT5lX3Nob2ZmKTsJCS8qIFNlY3Rpb24gaGVhZGVyIHRhYmxlIGZpbGUgb2Zmc2V0 ICovCi0gICAgYnN3YXAzMnMoJmVoZHItPmVfZmxhZ3MpOwkJLyogUHJvY2Vzc29yLXNwZWNpZmlj IGZsYWdzICovCi0gICAgYnN3YXAxNnMoJmVoZHItPmVfZWhzaXplKTsJCS8qIEVMRiBoZWFkZXIg c2l6ZSBpbiBieXRlcyAqLwotICAgIGJzd2FwMTZzKCZlaGRyLT5lX3BoZW50c2l6ZSk7CQkvKiBQ cm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyeSBzaXplICovCi0gICAgYnN3YXAxNnMoJmVoZHItPmVf cGhudW0pOwkJLyogUHJvZ3JhbSBoZWFkZXIgdGFibGUgZW50cnkgY291bnQgKi8KLSAgICBic3dh cDE2cygmZWhkci0+ZV9zaGVudHNpemUpOwkJLyogU2VjdGlvbiBoZWFkZXIgdGFibGUgZW50cnkg c2l6ZSAqLwotICAgIGJzd2FwMTZzKCZlaGRyLT5lX3NobnVtKTsJCS8qIFNlY3Rpb24gaGVhZGVy IHRhYmxlIGVudHJ5IGNvdW50ICovCi0gICAgYnN3YXAxNnMoJmVoZHItPmVfc2hzdHJuZHgpOwkJ LyogU2VjdGlvbiBoZWFkZXIgc3RyaW5nIHRhYmxlIGluZGV4ICovCi19Ci0KLXN0YXRpYyB2b2lk IGJzd2FwX3BoZHIoc3RydWN0IGVsZl9waGRyICpwaGRyKQotewotICAgIGJzd2FwMzJzKCZwaGRy LT5wX3R5cGUpOwkJCS8qIFNlZ21lbnQgdHlwZSAqLwotICAgIGJzd2FwdGxzKCZwaGRyLT5wX29m ZnNldCk7CQkvKiBTZWdtZW50IGZpbGUgb2Zmc2V0ICovCi0gICAgYnN3YXB0bHMoJnBoZHItPnBf dmFkZHIpOwkJLyogU2VnbWVudCB2aXJ0dWFsIGFkZHJlc3MgKi8KLSAgICBic3dhcHRscygmcGhk ci0+cF9wYWRkcik7CQkvKiBTZWdtZW50IHBoeXNpY2FsIGFkZHJlc3MgKi8KLSAgICBic3dhcHRs cygmcGhkci0+cF9maWxlc3opOwkJLyogU2VnbWVudCBzaXplIGluIGZpbGUgKi8KLSAgICBic3dh cHRscygmcGhkci0+cF9tZW1zeik7CQkvKiBTZWdtZW50IHNpemUgaW4gbWVtb3J5ICovCi0gICAg YnN3YXAzMnMoJnBoZHItPnBfZmxhZ3MpOwkJLyogU2VnbWVudCBmbGFncyAqLwotICAgIGJzd2Fw dGxzKCZwaGRyLT5wX2FsaWduKTsJCS8qIFNlZ21lbnQgYWxpZ25tZW50ICovCi19Ci0KLXN0YXRp YyB2b2lkIGJzd2FwX3NoZHIoc3RydWN0IGVsZl9zaGRyICpzaGRyKQotewotICAgIGJzd2FwMzJz KCZzaGRyLT5zaF9uYW1lKTsKLSAgICBic3dhcDMycygmc2hkci0+c2hfdHlwZSk7Ci0gICAgYnN3 YXB0bHMoJnNoZHItPnNoX2ZsYWdzKTsKLSAgICBic3dhcHRscygmc2hkci0+c2hfYWRkcik7Ci0g ICAgYnN3YXB0bHMoJnNoZHItPnNoX29mZnNldCk7Ci0gICAgYnN3YXB0bHMoJnNoZHItPnNoX3Np emUpOwotICAgIGJzd2FwMzJzKCZzaGRyLT5zaF9saW5rKTsKLSAgICBic3dhcDMycygmc2hkci0+ c2hfaW5mbyk7Ci0gICAgYnN3YXB0bHMoJnNoZHItPnNoX2FkZHJhbGlnbik7Ci0gICAgYnN3YXB0 bHMoJnNoZHItPnNoX2VudHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBic3dhcF9zeW0oc3RydWN0 IGVsZl9zeW0gKnN5bSkKLXsKLSAgICBic3dhcDMycygmc3ltLT5zdF9uYW1lKTsKLSAgICBic3dh cHRscygmc3ltLT5zdF92YWx1ZSk7Ci0gICAgYnN3YXB0bHMoJnN5bS0+c3Rfc2l6ZSk7Ci0gICAg YnN3YXAxNnMoJnN5bS0+c3Rfc2huZHgpOwotfQotI2VuZGlmCi0KIC8qCiAgKiAnY29weV9lbGZf c3RyaW5ncygpJyBjb3BpZXMgYXJndW1lbnQvZW52ZWxvcGUgc3RyaW5ncyBmcm9tIHVzZXIKICAq IG1lbW9yeSB0byBmcmVlIHBhZ2VzIGluIGtlcm5lbCBtZW0uIFRoZXNlIGFyZSBpbiBhIGZvcm1h dCByZWFkeQpAQCAtNTY2LDggKzUwMCw4IEBACiAgICAgcmV0dXJuIHA7CiB9CiAKLXVuc2lnbmVk IGxvbmcgc2V0dXBfYXJnX3BhZ2VzKHRhcmdldF91bG9uZyBwLCBzdHJ1Y3QgbGludXhfYmlucHJt ICogYnBybSwKLQkJCQkJICAgICAgc3RydWN0IGltYWdlX2luZm8gKiBpbmZvKQorc3RhdGljIHVu c2lnbmVkIGxvbmcgc2V0dXBfYXJnX3BhZ2VzKHRhcmdldF91bG9uZyBwLCBzdHJ1Y3QgbGludXhf YmlucHJtICpicHJtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBpbWFnZV9pbmZvICogaW5mbykKIHsKICAgICB0YXJnZXRfdWxvbmcgc3RhY2tfYmFzZSwgc2l6 ZSwgZXJyb3I7CiAgICAgaW50IGk7CkBAIC02NTgsNzAwICs1OTIsNTIgQEAKICAgICAgICAgfQog fQogCi0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIGNyZWF0ZV9lbGZfdGFibGVzKHRhcmdldF91bG9u ZyBwLCBpbnQgYXJnYywgaW50IGVudmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgZWxmaGRyICogZXhlYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZF9hZGRyLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb2FkX2JpYXMsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGludGVycF9sb2FkX2Fk ZHIsIGludCBpYmNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGltYWdlX2luZm8gKmluZm8pCi17Ci0gICAgICAgIHRhcmdldF91bG9uZyBzcDsKLSAgICAg ICAgaW50IHNpemU7Ci0gICAgICAgIHRhcmdldF91bG9uZyB1X3BsYXRmb3JtOwotICAgICAgICBj b25zdCBjaGFyICprX3BsYXRmb3JtOwotICAgICAgICBjb25zdCBpbnQgbiA9IHNpemVvZih0YXJn ZXRfdWxvbmcpOwotCi0gICAgICAgIHNwID0gcDsKLSAgICAgICAgdV9wbGF0Zm9ybSA9IDA7Ci0g ICAgICAgIGtfcGxhdGZvcm0gPSBFTEZfUExBVEZPUk07Ci0gICAgICAgIGlmIChrX3BsYXRmb3Jt KSB7Ci0gICAgICAgICAgICBzaXplX3QgbGVuID0gc3RybGVuKGtfcGxhdGZvcm0pICsgMTsKLSAg ICAgICAgICAgIHNwIC09IChsZW4gKyBuIC0gMSkgJiB+KG4gLSAxKTsKLSAgICAgICAgICAgIHVf cGxhdGZvcm0gPSBzcDsKLSAgICAgICAgICAgIG1lbWNweV90b190YXJnZXQoc3AsIGtfcGxhdGZv cm0sIGxlbik7Ci0gICAgICAgIH0KLQkvKgotCSAqIEZvcmNlIDE2IGJ5dGUgX2ZpbmFsXyBhbGln bm1lbnQgaGVyZSBmb3IgZ2VuZXJhbGl0eS4KLQkgKi8KLSAgICAgICAgc3AgPSBzcCAmfiAodGFy Z2V0X3Vsb25nKTE1OwotICAgICAgICBzaXplID0gKERMSU5GT19JVEVNUyArIDEpICogMjsKLSAg ICAgICAgaWYgKGtfcGxhdGZvcm0pCi0gICAgICAgICAgc2l6ZSArPSAyOwotI2lmZGVmIERMSU5G T19BUkNIX0lURU1TCi0Jc2l6ZSArPSBETElORk9fQVJDSF9JVEVNUyAqIDI7Ci0jZW5kaWYKLSAg ICAgICAgc2l6ZSArPSBlbnZjICsgYXJnYyArIDI7Ci0Jc2l6ZSArPSAoIWliY3MgPyAzIDogMSk7 CS8qIGFyZ2MgaXRzZWxmICovCi0gICAgICAgIHNpemUgKj0gbjsKLSAgICAgICAgaWYgKHNpemUg JiAxNSkKLSAgICAgICAgICAgIHNwIC09IDE2IC0gKHNpemUgJiAxNSk7Ci0KLSNkZWZpbmUgTkVX X0FVWF9FTlQoaWQsIHZhbCkgZG8geyBcCi0gICAgICAgICAgICBzcCAtPSBuOyB0cHV0bChzcCwg dmFsKTsgXAotICAgICAgICAgICAgc3AgLT0gbjsgdHB1dGwoc3AsIGlkKTsgXAotICAgICAgICAg IH0gd2hpbGUoMCkKLSAgICAgICAgTkVXX0FVWF9FTlQgKEFUX05VTEwsIDApOwotCi0gICAgICAg IC8qIFRoZXJlIG11c3QgYmUgZXhhY3RseSBETElORk9fSVRFTVMgZW50cmllcyBoZXJlLiAgKi8K LSAgICAgICAgTkVXX0FVWF9FTlQoQVRfUEhEUiwgKHRhcmdldF91bG9uZykobG9hZF9hZGRyICsg ZXhlYy0+ZV9waG9mZikpOwotICAgICAgICBORVdfQVVYX0VOVChBVF9QSEVOVCwgKHRhcmdldF91 bG9uZykoc2l6ZW9mIChzdHJ1Y3QgZWxmX3BoZHIpKSk7Ci0gICAgICAgIE5FV19BVVhfRU5UKEFU X1BITlVNLCAodGFyZ2V0X3Vsb25nKShleGVjLT5lX3BobnVtKSk7Ci0gICAgICAgIE5FV19BVVhf RU5UKEFUX1BBR0VTWiwgKHRhcmdldF91bG9uZykoVEFSR0VUX1BBR0VfU0laRSkpOwotICAgICAg ICBORVdfQVVYX0VOVChBVF9CQVNFLCAodGFyZ2V0X3Vsb25nKShpbnRlcnBfbG9hZF9hZGRyKSk7 Ci0gICAgICAgIE5FV19BVVhfRU5UKEFUX0ZMQUdTLCAodGFyZ2V0X3Vsb25nKTApOwotICAgICAg ICBORVdfQVVYX0VOVChBVF9FTlRSWSwgbG9hZF9iaWFzICsgZXhlYy0+ZV9lbnRyeSk7Ci0gICAg ICAgIE5FV19BVVhfRU5UKEFUX1VJRCwgKHRhcmdldF91bG9uZykgZ2V0dWlkKCkpOwotICAgICAg ICBORVdfQVVYX0VOVChBVF9FVUlELCAodGFyZ2V0X3Vsb25nKSBnZXRldWlkKCkpOwotICAgICAg ICBORVdfQVVYX0VOVChBVF9HSUQsICh0YXJnZXRfdWxvbmcpIGdldGdpZCgpKTsKLSAgICAgICAg TkVXX0FVWF9FTlQoQVRfRUdJRCwgKHRhcmdldF91bG9uZykgZ2V0ZWdpZCgpKTsKLSAgICAgICAg TkVXX0FVWF9FTlQoQVRfSFdDQVAsICh0YXJnZXRfdWxvbmcpIEVMRl9IV0NBUCk7Ci0gICAgICAg IGlmIChrX3BsYXRmb3JtKQotICAgICAgICAgICAgTkVXX0FVWF9FTlQoQVRfUExBVEZPUk0sIHVf cGxhdGZvcm0pOwotI2lmZGVmIEFSQ0hfRExJTkZPCi0JLyoKLQkgKiBBUkNIX0RMSU5GTyBtdXN0 IGNvbWUgbGFzdCBzbyBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIGNhbiBlbmZvcmNlCi0JICogc3Bl Y2lhbCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIG9uIHRoZSBBVVhWIGlmIG5lY2Vzc2FyeSAoZWcu IFBQQykuCi0JICovCi0gICAgICAgIEFSQ0hfRExJTkZPOwotI2VuZGlmCi0jdW5kZWYgTkVXX0FV WF9FTlQKLQotICAgICAgICBzcCA9IGxvYWRlcl9idWlsZF9hcmdwdHIoZW52YywgYXJnYywgc3As IHAsICFpYmNzKTsKLSAgICAgICAgcmV0dXJuIHNwOwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBs b25nIGxvYWRfZWxmX2ludGVycChzdHJ1Y3QgZWxmaGRyICogaW50ZXJwX2VsZl9leCwKLQkJCQkg ICAgIGludCBpbnRlcnByZXRlcl9mZCwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgKmludGVycF9s b2FkX2FkZHIpCi17Ci0Jc3RydWN0IGVsZl9waGRyICplbGZfcGhkYXRhICA9ICBOVUxMOwotCXN0 cnVjdCBlbGZfcGhkciAqZXBwbnQ7Ci0JdW5zaWduZWQgbG9uZyBsb2FkX2FkZHIgPSAwOwotCWlu dCBsb2FkX2FkZHJfc2V0ID0gMDsKLQlpbnQgcmV0dmFsOwotCXVuc2lnbmVkIGxvbmcgbGFzdF9i c3MsIGVsZl9ic3M7Ci0JdW5zaWduZWQgbG9uZyBlcnJvcjsKLQlpbnQgaTsKLQotCWVsZl9ic3Mg PSAwOwotCWxhc3RfYnNzID0gMDsKLQllcnJvciA9IDA7Ci0KLSNpZmRlZiBCU1dBUF9ORUVERUQK LSAgICAgICAgYnN3YXBfZWhkcihpbnRlcnBfZWxmX2V4KTsKLSNlbmRpZgotCS8qIEZpcnN0IG9m IGFsbCwgc29tZSBzaW1wbGUgY29uc2lzdGVuY3kgY2hlY2tzICovCi0JaWYgKChpbnRlcnBfZWxm X2V4LT5lX3R5cGUgIT0gRVRfRVhFQyAmJgotICAgICAgICAgICAgIGludGVycF9lbGZfZXgtPmVf dHlwZSAhPSBFVF9EWU4pIHx8Ci0JICAgIWVsZl9jaGVja19hcmNoKGludGVycF9lbGZfZXgtPmVf bWFjaGluZSkpIHsKLQkJcmV0dXJuIH4wVUw7Ci0JfQotCi0KLQkvKiBOb3cgcmVhZCBpbiBhbGwg b2YgdGhlIGhlYWRlciBpbmZvcm1hdGlvbiAqLwotCi0JaWYgKHNpemVvZihzdHJ1Y3QgZWxmX3Bo ZHIpICogaW50ZXJwX2VsZl9leC0+ZV9waG51bSA+IFRBUkdFVF9QQUdFX1NJWkUpCi0JICAgIHJl dHVybiB+MFVMOwotCi0JZWxmX3BoZGF0YSA9ICAoc3RydWN0IGVsZl9waGRyICopCi0JCW1hbGxv YyhzaXplb2Yoc3RydWN0IGVsZl9waGRyKSAqIGludGVycF9lbGZfZXgtPmVfcGhudW0pOwotCi0J aWYgKCFlbGZfcGhkYXRhKQotCSAgcmV0dXJuIH4wVUw7Ci0KLQkvKgotCSAqIElmIHRoZSBzaXpl IG9mIHRoaXMgc3RydWN0dXJlIGhhcyBjaGFuZ2VkLCB0aGVuIHB1bnQsIHNpbmNlCi0JICogd2Ug d2lsbCBiZSBkb2luZyB0aGUgd3JvbmcgdGhpbmcuCi0JICovCi0JaWYgKGludGVycF9lbGZfZXgt PmVfcGhlbnRzaXplICE9IHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpKSB7Ci0JICAgIGZyZWUoZWxm X3BoZGF0YSk7Ci0JICAgIHJldHVybiB+MFVMOwotICAgICAgICB9Ci0KLQlyZXR2YWwgPSBsc2Vl ayhpbnRlcnByZXRlcl9mZCwgaW50ZXJwX2VsZl9leC0+ZV9waG9mZiwgU0VFS19TRVQpOwotCWlm KHJldHZhbCA+PSAwKSB7Ci0JICAgIHJldHZhbCA9IHJlYWQoaW50ZXJwcmV0ZXJfZmQsCi0JCQkg ICAoY2hhciAqKSBlbGZfcGhkYXRhLAotCQkJICAgc2l6ZW9mKHN0cnVjdCBlbGZfcGhkcikgKiBp bnRlcnBfZWxmX2V4LT5lX3BobnVtKTsKLQl9Ci0JaWYgKHJldHZhbCA8IDApIHsKLQkJcGVycm9y KCJsb2FkX2VsZl9pbnRlcnAiKTsKLQkJZXhpdCgtMSk7Ci0JCWZyZWUgKGVsZl9waGRhdGEpOwot CQlyZXR1cm4gcmV0dmFsOwotIAl9Ci0jaWZkZWYgQlNXQVBfTkVFREVECi0JZXBwbnQgPSBlbGZf cGhkYXRhOwotCWZvciAoaT0wOyBpPGludGVycF9lbGZfZXgtPmVfcGhudW07IGkrKywgZXBwbnQr KykgewotICAgICAgICAgICAgYnN3YXBfcGhkcihlcHBudCk7Ci0gICAgICAgIH0KLSNlbmRpZgot Ci0gICAgICAgIGlmIChpbnRlcnBfZWxmX2V4LT5lX3R5cGUgPT0gRVRfRFlOKSB7Ci0gICAgICAg ICAgICAvKiBpbiBvcmRlciB0byBhdm9pZCBoYXJkY29kaW5nIHRoZSBpbnRlcnByZXRlciBsb2Fk Ci0gICAgICAgICAgICAgICBhZGRyZXNzIGluIHFlbXUsIHdlIGFsbG9jYXRlIGEgYmlnIGVub3Vn aCBtZW1vcnkgem9uZSAqLwotICAgICAgICAgICAgZXJyb3IgPSB0YXJnZXRfbW1hcCgwLCBJTlRF UlBfTUFQX1NJWkUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST1RfTk9ORSwg TUFQX1BSSVZBVEUgfCBNQVBfQU5PTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg LTEsIDApOwotICAgICAgICAgICAgaWYgKGVycm9yID09IC0xKSB7Ci0gICAgICAgICAgICAgICAg cGVycm9yKCJtbWFwIik7Ci0gICAgICAgICAgICAgICAgZXhpdCgtMSk7Ci0gICAgICAgICAgICB9 Ci0gICAgICAgICAgICBsb2FkX2FkZHIgPSBlcnJvcjsKLSAgICAgICAgICAgIGxvYWRfYWRkcl9z ZXQgPSAxOwotICAgICAgICB9Ci0KLQllcHBudCA9IGVsZl9waGRhdGE7Ci0JZm9yKGk9MDsgaTxp bnRlcnBfZWxmX2V4LT5lX3BobnVtOyBpKyssIGVwcG50KyspCi0JICBpZiAoZXBwbnQtPnBfdHlw ZSA9PSBQVF9MT0FEKSB7Ci0JICAgIGludCBlbGZfdHlwZSA9IE1BUF9QUklWQVRFIHwgTUFQX0RF TllXUklURTsKLQkgICAgaW50IGVsZl9wcm90ID0gMDsKLQkgICAgdW5zaWduZWQgbG9uZyB2YWRk ciA9IDA7Ci0JICAgIHVuc2lnbmVkIGxvbmcgazsKLQotCSAgICBpZiAoZXBwbnQtPnBfZmxhZ3Mg JiBQRl9SKSBlbGZfcHJvdCA9ICBQUk9UX1JFQUQ7Ci0JICAgIGlmIChlcHBudC0+cF9mbGFncyAm IFBGX1cpIGVsZl9wcm90IHw9IFBST1RfV1JJVEU7Ci0JICAgIGlmIChlcHBudC0+cF9mbGFncyAm IFBGX1gpIGVsZl9wcm90IHw9IFBST1RfRVhFQzsKLQkgICAgaWYgKGludGVycF9lbGZfZXgtPmVf dHlwZSA9PSBFVF9FWEVDIHx8IGxvYWRfYWRkcl9zZXQpIHsKLQkgICAgCWVsZl90eXBlIHw9IE1B UF9GSVhFRDsKLQkgICAgCXZhZGRyID0gZXBwbnQtPnBfdmFkZHI7Ci0JICAgIH0KLQkgICAgZXJy b3IgPSB0YXJnZXRfbW1hcChsb2FkX2FkZHIrVEFSR0VUX0VMRl9QQUdFU1RBUlQodmFkZHIpLAot CQkgZXBwbnQtPnBfZmlsZXN6ICsgVEFSR0VUX0VMRl9QQUdFT0ZGU0VUKGVwcG50LT5wX3ZhZGRy KSwKLQkJIGVsZl9wcm90LAotCQkgZWxmX3R5cGUsCi0JCSBpbnRlcnByZXRlcl9mZCwKLQkJIGVw cG50LT5wX29mZnNldCAtIFRBUkdFVF9FTEZfUEFHRU9GRlNFVChlcHBudC0+cF92YWRkcikpOwot Ci0JICAgIGlmIChlcnJvciA9PSAtMSkgewotCSAgICAgIC8qIFJlYWwgZXJyb3IgKi8KLQkgICAg ICBjbG9zZShpbnRlcnByZXRlcl9mZCk7Ci0JICAgICAgZnJlZShlbGZfcGhkYXRhKTsKLQkgICAg ICByZXR1cm4gfjBVTDsKLQkgICAgfQotCi0JICAgIGlmICghbG9hZF9hZGRyX3NldCAmJiBpbnRl cnBfZWxmX2V4LT5lX3R5cGUgPT0gRVRfRFlOKSB7Ci0JICAgICAgbG9hZF9hZGRyID0gZXJyb3I7 Ci0JICAgICAgbG9hZF9hZGRyX3NldCA9IDE7Ci0JICAgIH0KLQotCSAgICAvKgotCSAgICAgKiBG aW5kIHRoZSBlbmQgb2YgdGhlIGZpbGUgIG1hcHBpbmcgZm9yIHRoaXMgcGhkciwgYW5kIGtlZXAK LQkgICAgICogdHJhY2sgb2YgdGhlIGxhcmdlc3QgYWRkcmVzcyB3ZSBzZWUgZm9yIHRoaXMuCi0J ICAgICAqLwotCSAgICBrID0gbG9hZF9hZGRyICsgZXBwbnQtPnBfdmFkZHIgKyBlcHBudC0+cF9m aWxlc3o7Ci0JICAgIGlmIChrID4gZWxmX2JzcykgZWxmX2JzcyA9IGs7Ci0KLQkgICAgLyoKLQkg ICAgICogRG8gdGhlIHNhbWUgdGhpbmcgZm9yIHRoZSBtZW1vcnkgbWFwcGluZyAtIGJldHdlZW4K LQkgICAgICogZWxmX2JzcyBhbmQgbGFzdF9ic3MgaXMgdGhlIGJzcyBzZWN0aW9uLgotCSAgICAg Ki8KLQkgICAgayA9IGxvYWRfYWRkciArIGVwcG50LT5wX21lbXN6ICsgZXBwbnQtPnBfdmFkZHI7 Ci0JICAgIGlmIChrID4gbGFzdF9ic3MpIGxhc3RfYnNzID0gazsKLQkgIH0KLQotCS8qIE5vdyB1 c2UgbW1hcCB0byBtYXAgdGhlIGxpYnJhcnkgaW50byBtZW1vcnkuICovCi0KLQljbG9zZShpbnRl cnByZXRlcl9mZCk7Ci0KLQkvKgotCSAqIE5vdyBmaWxsIG91dCB0aGUgYnNzIHNlY3Rpb24uICBG aXJzdCBwYWQgdGhlIGxhc3QgcGFnZSB1cAotCSAqIHRvIHRoZSBwYWdlIGJvdW5kYXJ5LCBhbmQg dGhlbiBwZXJmb3JtIGEgbW1hcCB0byBtYWtlIHN1cmUKLQkgKiB0aGF0IHRoZXJlIGFyZSB6ZXJv bWFwcGVkIHBhZ2VzIHVwIHRvIGFuZCBpbmNsdWRpbmcgdGhlIGxhc3QKLQkgKiBic3MgcGFnZS4K LQkgKi8KLQlwYWR6ZXJvKGVsZl9ic3MsIGxhc3RfYnNzKTsKLQllbGZfYnNzID0gVEFSR0VUX0VM Rl9QQUdFU1RBUlQoZWxmX2JzcyArIHFlbXVfaG9zdF9wYWdlX3NpemUgLSAxKTsgLyogV2hhdCB3 ZSBoYXZlIG1hcHBlZCBzbyBmYXIgKi8KLQotCS8qIE1hcCB0aGUgbGFzdCBvZiB0aGUgYnNzIHNl Z21lbnQgKi8KLQlpZiAobGFzdF9ic3MgPiBlbGZfYnNzKSB7Ci0gICAgICAgICAgICB0YXJnZXRf bW1hcChlbGZfYnNzLCBsYXN0X2Jzcy1lbGZfYnNzLAotICAgICAgICAgICAgICAgICAgICAgICAg UFJPVF9SRUFEfFBST1RfV1JJVEV8UFJPVF9FWEVDLAotICAgICAgICAgICAgICAgICAgICAgICAg TUFQX0ZJWEVEfE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKLQl9Ci0JZnJlZShl bGZfcGhkYXRhKTsKLQotCSppbnRlcnBfbG9hZF9hZGRyID0gbG9hZF9hZGRyOwotCXJldHVybiAo KHVuc2lnbmVkIGxvbmcpIGludGVycF9lbGZfZXgtPmVfZW50cnkpICsgbG9hZF9hZGRyOwotfQot Ci0vKiBCZXN0IGF0dGVtcHQgdG8gbG9hZCBzeW1ib2xzIGZyb20gdGhpcyBFTEYgb2JqZWN0LiAq Lwotc3RhdGljIHZvaWQgbG9hZF9zeW1ib2xzKHN0cnVjdCBlbGZoZHIgKmhkciwgaW50IGZkKQot ewotICAgIHVuc2lnbmVkIGludCBpOwotICAgIHN0cnVjdCBlbGZfc2hkciBzZWNoZHIsIHN5bXRh Yiwgc3RydGFiOwotICAgIGNoYXIgKnN0cmluZ3M7Ci0gICAgc3RydWN0IHN5bWluZm8gKnM7Ci0j aWYgKEVMRl9DTEFTUyA9PSBFTEZDTEFTUzY0KQotICAgIC8vIERpc2FzIHVzZXMgMzIgYml0IHN5 bWJvbHMKLSAgICBzdHJ1Y3QgZWxmMzJfc3ltICpzeW1zMzIgPSBOVUxMOwotICAgIHN0cnVjdCBl bGZfc3ltICpzeW07Ci0jZW5kaWYKLQotICAgIGxzZWVrKGZkLCBoZHItPmVfc2hvZmYsIFNFRUtf U0VUKTsKLSAgICBmb3IgKGkgPSAwOyBpIDwgaGRyLT5lX3NobnVtOyBpKyspIHsKLQlpZiAocmVh ZChmZCwgJnNlY2hkciwgc2l6ZW9mKHNlY2hkcikpICE9IHNpemVvZihzZWNoZHIpKQotCSAgICBy ZXR1cm47Ci0jaWZkZWYgQlNXQVBfTkVFREVECi0JYnN3YXBfc2hkcigmc2VjaGRyKTsKLSNlbmRp ZgotCWlmIChzZWNoZHIuc2hfdHlwZSA9PSBTSFRfU1lNVEFCKSB7Ci0JICAgIHN5bXRhYiA9IHNl Y2hkcjsKLQkgICAgbHNlZWsoZmQsIGhkci0+ZV9zaG9mZgotCQkgICsgc2l6ZW9mKHNlY2hkcikg KiBzZWNoZHIuc2hfbGluaywgU0VFS19TRVQpOwotCSAgICBpZiAocmVhZChmZCwgJnN0cnRhYiwg c2l6ZW9mKHN0cnRhYikpCi0JCSE9IHNpemVvZihzdHJ0YWIpKQotCQlyZXR1cm47Ci0jaWZkZWYg QlNXQVBfTkVFREVECi0JICAgIGJzd2FwX3NoZHIoJnN0cnRhYik7Ci0jZW5kaWYKLQkgICAgZ290 byBmb3VuZDsKLQl9Ci0gICAgfQotICAgIHJldHVybjsgLyogU2hvdWxkbid0IGhhcHBlbi4uLiAq LwotCi0gZm91bmQ6Ci0gICAgLyogTm93IGtub3cgd2hlcmUgdGhlIHN0cnRhYiBhbmQgc3ltdGFi IGFyZS4gIFNuYXJmIHRoZW0uICovCi0gICAgcyA9IG1hbGxvYyhzaXplb2YoKnMpKTsKLSAgICBz LT5kaXNhc19zeW10YWIgPSBtYWxsb2Moc3ltdGFiLnNoX3NpemUpOwotI2lmIChFTEZfQ0xBU1Mg PT0gRUxGQ0xBU1M2NCkKLSAgICBzeW1zMzIgPSBtYWxsb2Moc3ltdGFiLnNoX3NpemUgLyBzaXpl b2Yoc3RydWN0IGVsZl9zeW0pCi0gICAgICAgICAgICAgICAgICAgICogc2l6ZW9mKHN0cnVjdCBl bGYzMl9zeW0pKTsKLSNlbmRpZgotICAgIHMtPmRpc2FzX3N0cnRhYiA9IHN0cmluZ3MgPSBtYWxs b2Moc3RydGFiLnNoX3NpemUpOwotICAgIGlmICghcy0+ZGlzYXNfc3ltdGFiIHx8ICFzLT5kaXNh c19zdHJ0YWIpCi0JcmV0dXJuOwotCi0gICAgbHNlZWsoZmQsIHN5bXRhYi5zaF9vZmZzZXQsIFNF RUtfU0VUKTsKLSAgICBpZiAocmVhZChmZCwgcy0+ZGlzYXNfc3ltdGFiLCBzeW10YWIuc2hfc2l6 ZSkgIT0gc3ltdGFiLnNoX3NpemUpCi0JcmV0dXJuOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHN5 bXRhYi5zaF9zaXplIC8gc2l6ZW9mKHN0cnVjdCBlbGZfc3ltKTsgaSsrKSB7Ci0jaWZkZWYgQlNX QVBfTkVFREVECi0JYnN3YXBfc3ltKHMtPmRpc2FzX3N5bXRhYiArIHNpemVvZihzdHJ1Y3QgZWxm X3N5bSkqaSk7Ci0jZW5kaWYKLSNpZiAoRUxGX0NMQVNTID09IEVMRkNMQVNTNjQpCi0gICAgICAg IHN5bSA9IHMtPmRpc2FzX3N5bXRhYiArIHNpemVvZihzdHJ1Y3QgZWxmX3N5bSkqaTsKLSAgICAg ICAgc3ltczMyW2ldLnN0X25hbWUgPSBzeW0tPnN0X25hbWU7Ci0gICAgICAgIHN5bXMzMltpXS5z dF9pbmZvID0gc3ltLT5zdF9pbmZvOwotICAgICAgICBzeW1zMzJbaV0uc3Rfb3RoZXIgPSBzeW0t PnN0X290aGVyOwotICAgICAgICBzeW1zMzJbaV0uc3Rfc2huZHggPSBzeW0tPnN0X3NobmR4Owot ICAgICAgICBzeW1zMzJbaV0uc3RfdmFsdWUgPSBzeW0tPnN0X3ZhbHVlICYgMHhmZmZmZmZmZjsK LSAgICAgICAgc3ltczMyW2ldLnN0X3NpemUgPSBzeW0tPnN0X3NpemUgJiAweGZmZmZmZmZmOwot I2VuZGlmCi0gICAgfQotCi0jaWYgKEVMRl9DTEFTUyA9PSBFTEZDTEFTUzY0KQotICAgIGZyZWUo cy0+ZGlzYXNfc3ltdGFiKTsKLSAgICBzLT5kaXNhc19zeW10YWIgPSBzeW1zMzI7Ci0jZW5kaWYK LSAgICBsc2VlayhmZCwgc3RydGFiLnNoX29mZnNldCwgU0VFS19TRVQpOwotICAgIGlmIChyZWFk KGZkLCBzdHJpbmdzLCBzdHJ0YWIuc2hfc2l6ZSkgIT0gc3RydGFiLnNoX3NpemUpCi0JcmV0dXJu OwotICAgIHMtPmRpc2FzX251bV9zeW1zID0gc3ltdGFiLnNoX3NpemUgLyBzaXplb2Yoc3RydWN0 IGVsZl9zeW0pOwotICAgIHMtPm5leHQgPSBzeW1pbmZvczsKLSAgICBzeW1pbmZvcyA9IHM7Ci19 CisjaWZuZGVmIGdsdWUKKyNkZWZpbmUgeGdsdWUoeCwgeSkgICAgIHggIyMgeQorI2RlZmluZSBn bHVlKHgsIHkpICAgICAgeGdsdWUoeCwgeSkKKyNkZWZpbmUgc3RyaW5naWZ5KHMpICAgIHRvc3Ry aW5nKHMpCisjZGVmaW5lIHRvc3RyaW5nKHMpICAgICAjcworI2VuZGlmCisKKyNkZWZpbmUgZWxm X3dvcmQgICAgICAgIHVpbnQzMl90CisjZGVmaW5lIGJzd2FwU1pzICAgICAgICBic3dhcDMycwor I2RlZmluZSBTWiAgICAgICAgICAgICAgMzIKKyNpbmNsdWRlICJlbGZsb2FkX29wcy5oIgorCisj dW5kZWYgZWxmaGRyCisjdW5kZWYgZWxmX3BoZHIKKyN1bmRlZiBlbGZfc2hkcgorI3VuZGVmIGVs Zl9zeW0KKyN1bmRlZiBlbGZfbm90ZQorI3VuZGVmIGVsZl93b3JkCisjdW5kZWYgYnN3YXBTWnMK KyN1bmRlZiBTWgorI2RlZmluZSBlbGZoZHIgICAgICAgICAgZWxmNjRfaGRyCisjZGVmaW5lIGVs Zl9waGRyICAgICAgICBlbGY2NF9waGRyCisjZGVmaW5lIGVsZl9zaGRyICAgICAgICBlbGY2NF9z aGRyCisjZGVmaW5lIGVsZl9zeW0gICAgICAgICBlbGY2NF9zeW0KKyNkZWZpbmUgZWxmX25vdGUg ICAgICAgIGVsZjY0X25vdGUKKyNkZWZpbmUgZWxmX3dvcmQgICAgICAgIHVpbnQ2NF90CisjZGVm aW5lIGJzd2FwU1pzICAgICAgICBic3dhcDY0cworI2RlZmluZSBTWiAgICAgICAgICAgICAgNjQK KyNpbmNsdWRlICJlbGZsb2FkX29wcy5oIgogCiBpbnQgbG9hZF9lbGZfYmluYXJ5KHN0cnVjdCBs aW51eF9iaW5wcm0gKiBicHJtLCBzdHJ1Y3QgdGFyZ2V0X3B0X3JlZ3MgKiByZWdzLAogICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaW1hZ2VfaW5mbyAqIGluZm8pCiB7Ci0gICAgc3RydWN0IGVs ZmhkciBlbGZfZXg7Ci0gICAgc3RydWN0IGVsZmhkciBpbnRlcnBfZWxmX2V4OwotICAgIHN0cnVj dCBleGVjIGludGVycF9leDsKLSAgICBpbnQgaW50ZXJwcmV0ZXJfZmQgPSAtMTsgLyogYXZvaWQg d2FybmluZyAqLwotICAgIHVuc2lnbmVkIGxvbmcgbG9hZF9hZGRyLCBsb2FkX2JpYXM7Ci0gICAg aW50IGxvYWRfYWRkcl9zZXQgPSAwOwotICAgIHVuc2lnbmVkIGludCBpbnRlcnByZXRlcl90eXBl ID0gSU5URVJQUkVURVJfTk9ORTsKLSAgICB1bnNpZ25lZCBjaGFyIGliY3MyX2ludGVycHJldGVy OwotICAgIGludCBpOwotICAgIHVuc2lnbmVkIGxvbmcgbWFwcGVkX2FkZHI7Ci0gICAgc3RydWN0 IGVsZl9waGRyICogZWxmX3BwbnQ7Ci0gICAgc3RydWN0IGVsZl9waGRyICplbGZfcGhkYXRhOwot ICAgIHVuc2lnbmVkIGxvbmcgZWxmX2JzcywgaywgZWxmX2JyazsKKyAgICBzdHJ1Y3QgZWxmaGRy ICplbGZfZXg7CiAgICAgaW50IHJldHZhbDsKLSAgICBjaGFyICogZWxmX2ludGVycHJldGVyOwot ICAgIHVuc2lnbmVkIGxvbmcgZWxmX2VudHJ5LCBpbnRlcnBfbG9hZF9hZGRyID0gMDsKLSAgICBp bnQgc3RhdHVzOwotICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZSwgZW5kX2NvZGUsIGVuZF9k YXRhOwotICAgIHVuc2lnbmVkIGxvbmcgcmVsb2NfZnVuY19kZXNjID0gMDsKLSAgICB1bnNpZ25l ZCBsb25nIGVsZl9zdGFjazsKLSAgICBjaGFyIHBhc3NlZF9maWxlbm9bNl07Ci0KLSAgICBpYmNz Ml9pbnRlcnByZXRlciA9IDA7Ci0gICAgc3RhdHVzID0gMDsKLSAgICBsb2FkX2FkZHIgPSAwOwot ICAgIGxvYWRfYmlhcyA9IDA7Ci0gICAgZWxmX2V4ID0gKigoc3RydWN0IGVsZmhkciAqKSBicHJt LT5idWYpOyAgICAgICAgICAvKiBleGVjLWhlYWRlciAqLwotI2lmZGVmIEJTV0FQX05FRURFRAot ICAgIGJzd2FwX2VoZHIoJmVsZl9leCk7Ci0jZW5kaWYKLQotICAgIC8qIEZpcnN0IG9mIGFsbCwg c29tZSBzaW1wbGUgY29uc2lzdGVuY3kgY2hlY2tzICovCi0gICAgaWYgKChlbGZfZXguZV90eXBl ICE9IEVUX0VYRUMgJiYgZWxmX2V4LmVfdHlwZSAhPSBFVF9EWU4pIHx8Ci0gICAgICAgCQkJCSgh IGVsZl9jaGVja19hcmNoKGVsZl9leC5lX21hY2hpbmUpKSkgewotCSAgICByZXR1cm4gLUVOT0VY RUM7Ci0gICAgfQotCi0gICAgYnBybS0+cCA9IGNvcHlfZWxmX3N0cmluZ3MoMSwgJmJwcm0tPmZp bGVuYW1lLCBicHJtLT5wYWdlLCBicHJtLT5wKTsKLSAgICBicHJtLT5wID0gY29weV9lbGZfc3Ry aW5ncyhicHJtLT5lbnZjLGJwcm0tPmVudnAsYnBybS0+cGFnZSxicHJtLT5wKTsKLSAgICBicHJt LT5wID0gY29weV9lbGZfc3RyaW5ncyhicHJtLT5hcmdjLGJwcm0tPmFyZ3YsYnBybS0+cGFnZSxi cHJtLT5wKTsKLSAgICBpZiAoIWJwcm0tPnApIHsKLSAgICAgICAgcmV0dmFsID0gLUUyQklHOwot ICAgIH0KIAotICAgIC8qIE5vdyByZWFkIGluIGFsbCBvZiB0aGUgaGVhZGVyIGluZm9ybWF0aW9u ICovCi0gICAgZWxmX3BoZGF0YSA9IChzdHJ1Y3QgZWxmX3BoZHIgKiltYWxsb2MoZWxmX2V4LmVf cGhlbnRzaXplKmVsZl9leC5lX3BobnVtKTsKLSAgICBpZiAoZWxmX3BoZGF0YSA9PSBOVUxMKSB7 Ci0JcmV0dXJuIC1FTk9NRU07CisgICAgZWxmX2V4ID0gKHN0cnVjdCBlbGZoZHIgKikgYnBybS0+ YnVmOyAgICAgICAgICAvKiBleGVjLWhlYWRlciAqLworICAgIGlmIChlbGZfZXgtPmVfaWRlbnRb RUlfQ0xBU1NdID09IEVMRkNMQVNTNjQpIHsKKyAgICAgICAgaW5mby0+aXNfNjRiaXRzID0gMTsK KyAgICAgICAgcmV0dmFsID0gbG9hZF9lbGZfYmluYXJ5NjQoYnBybSwgcmVncywgaW5mbyk7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgaW5mby0+aXNfNjRiaXRzID0gMDsKKyAgICAgICAgcmV0dmFs ID0gbG9hZF9lbGZfYmluYXJ5MzIoYnBybSwgcmVncywgaW5mbyk7CiAgICAgfQogCi0gICAgcmV0 dmFsID0gbHNlZWsoYnBybS0+ZmQsIGVsZl9leC5lX3Bob2ZmLCBTRUVLX1NFVCk7Ci0gICAgaWYo cmV0dmFsID4gMCkgewotCXJldHZhbCA9IHJlYWQoYnBybS0+ZmQsIChjaGFyICopIGVsZl9waGRh dGEsCi0JCQkJZWxmX2V4LmVfcGhlbnRzaXplICogZWxmX2V4LmVfcGhudW0pOwotICAgIH0KLQot ICAgIGlmIChyZXR2YWwgPCAwKSB7Ci0JcGVycm9yKCJsb2FkX2VsZl9iaW5hcnkiKTsKLQlleGl0 KC0xKTsKLQlmcmVlIChlbGZfcGhkYXRhKTsKLQlyZXR1cm4gLWVycm5vOwotICAgIH0KLQotI2lm ZGVmIEJTV0FQX05FRURFRAotICAgIGVsZl9wcG50ID0gZWxmX3BoZGF0YTsKLSAgICBmb3IgKGk9 MDsgaTxlbGZfZXguZV9waG51bTsgaSsrLCBlbGZfcHBudCsrKSB7Ci0gICAgICAgIGJzd2FwX3Bo ZHIoZWxmX3BwbnQpOwotICAgIH0KLSNlbmRpZgotICAgIGVsZl9wcG50ID0gZWxmX3BoZGF0YTsK LQotICAgIGVsZl9ic3MgPSAwOwotICAgIGVsZl9icmsgPSAwOwotCi0KLSAgICBlbGZfc3RhY2sg PSB+MFVMOwotICAgIGVsZl9pbnRlcnByZXRlciA9IE5VTEw7Ci0gICAgc3RhcnRfY29kZSA9IH4w VUw7Ci0gICAgZW5kX2NvZGUgPSAwOwotICAgIGVuZF9kYXRhID0gMDsKLQotICAgIGZvcihpPTA7 aSA8IGVsZl9leC5lX3BobnVtOyBpKyspIHsKLQlpZiAoZWxmX3BwbnQtPnBfdHlwZSA9PSBQVF9J TlRFUlApIHsKLQkgICAgaWYgKCBlbGZfaW50ZXJwcmV0ZXIgIT0gTlVMTCApCi0JICAgIHsKLQkJ ZnJlZSAoZWxmX3BoZGF0YSk7Ci0JCWZyZWUoZWxmX2ludGVycHJldGVyKTsKLQkJY2xvc2UoYnBy bS0+ZmQpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQkgICAgfQotCi0JICAgIC8qIFRoaXMgaXMgdGhl IHByb2dyYW0gaW50ZXJwcmV0ZXIgdXNlZCBmb3IKLQkgICAgICogc2hhcmVkIGxpYnJhcmllcyAt IGZvciBub3cgYXNzdW1lIHRoYXQgdGhpcwotCSAgICAgKiBpcyBhbiBhLm91dCBmb3JtYXQgYmlu YXJ5Ci0JICAgICAqLwotCi0JICAgIGVsZl9pbnRlcnByZXRlciA9IChjaGFyICopbWFsbG9jKGVs Zl9wcG50LT5wX2ZpbGVzeik7Ci0KLQkgICAgaWYgKGVsZl9pbnRlcnByZXRlciA9PSBOVUxMKSB7 Ci0JCWZyZWUgKGVsZl9waGRhdGEpOwotCQljbG9zZShicHJtLT5mZCk7Ci0JCXJldHVybiAtRU5P TUVNOwotCSAgICB9Ci0KLQkgICAgcmV0dmFsID0gbHNlZWsoYnBybS0+ZmQsIGVsZl9wcG50LT5w X29mZnNldCwgU0VFS19TRVQpOwotCSAgICBpZihyZXR2YWwgPj0gMCkgewotCQlyZXR2YWwgPSBy ZWFkKGJwcm0tPmZkLCBlbGZfaW50ZXJwcmV0ZXIsIGVsZl9wcG50LT5wX2ZpbGVzeik7Ci0JICAg IH0KLQkgICAgaWYocmV0dmFsIDwgMCkgewotCSAJcGVycm9yKCJsb2FkX2VsZl9iaW5hcnkyIik7 Ci0JCWV4aXQoLTEpOwotCSAgICB9Ci0KLQkgICAgLyogSWYgdGhlIHByb2dyYW0gaW50ZXJwcmV0 ZXIgaXMgb25lIG9mIHRoZXNlIHR3bywKLQkgICAgICAgdGhlbiBhc3N1bWUgYW4gaUJDUzIgaW1h Z2UuIE90aGVyd2lzZSBhc3N1bWUKLQkgICAgICAgYSBuYXRpdmUgbGludXggaW1hZ2UuICovCi0K LQkgICAgLyogSlJQIC0gTmVlZCB0byBhZGQgWDg2IGxpYiBkaXIgc3R1ZmYgaGVyZS4uLiAqLwot Ci0JICAgIGlmIChzdHJjbXAoZWxmX2ludGVycHJldGVyLCIvdXNyL2xpYi9saWJjLnNvLjEiKSA9 PSAwIHx8Ci0JCXN0cmNtcChlbGZfaW50ZXJwcmV0ZXIsIi91c3IvbGliL2xkLnNvLjEiKSA9PSAw KSB7Ci0JICAgICAgaWJjczJfaW50ZXJwcmV0ZXIgPSAxOwotCSAgICB9Ci0KLSNpZiAwCi0JICAg IHByaW50ZigiVXNpbmcgRUxGIGludGVycHJldGVyICVzXG4iLCBlbGZfaW50ZXJwcmV0ZXIpOwot I2VuZGlmCi0JICAgIGlmIChyZXR2YWwgPj0gMCkgewotCQlyZXR2YWwgPSBvcGVuKHBhdGgoZWxm X2ludGVycHJldGVyKSwgT19SRE9OTFkpOwotCQlpZihyZXR2YWwgPj0gMCkgewotCQkgICAgaW50 ZXJwcmV0ZXJfZmQgPSByZXR2YWw7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgICBwZXJyb3IoZWxmX2lu dGVycHJldGVyKTsKLQkJICAgIGV4aXQoLTEpOwotCQkgICAgLyogcmV0dmFsID0gLWVycm5vOyAq LwotCQl9Ci0JICAgIH0KLQotCSAgICBpZiAocmV0dmFsID49IDApIHsKLQkJcmV0dmFsID0gbHNl ZWsoaW50ZXJwcmV0ZXJfZmQsIDAsIFNFRUtfU0VUKTsKLQkJaWYocmV0dmFsID49IDApIHsKLQkJ ICAgIHJldHZhbCA9IHJlYWQoaW50ZXJwcmV0ZXJfZmQsYnBybS0+YnVmLDEyOCk7Ci0JCX0KLQkg ICAgfQotCSAgICBpZiAocmV0dmFsID49IDApIHsKLQkJaW50ZXJwX2V4ID0gKigoc3RydWN0IGV4 ZWMgKikgYnBybS0+YnVmKTsgLyogYW91dCBleGVjLWhlYWRlciAqLwotCQlpbnRlcnBfZWxmX2V4 PSooKHN0cnVjdCBlbGZoZHIgKikgYnBybS0+YnVmKTsgLyogZWxmIGV4ZWMtaGVhZGVyICovCi0J ICAgIH0KLQkgICAgaWYgKHJldHZhbCA8IDApIHsKLQkJcGVycm9yKCJsb2FkX2VsZl9iaW5hcnkz Iik7Ci0JCWV4aXQoLTEpOwotCQlmcmVlIChlbGZfcGhkYXRhKTsKLQkJZnJlZShlbGZfaW50ZXJw cmV0ZXIpOwotCQljbG9zZShicHJtLT5mZCk7Ci0JCXJldHVybiByZXR2YWw7Ci0JICAgIH0KLQl9 Ci0JZWxmX3BwbnQrKzsKLSAgICB9Ci0KLSAgICAvKiBTb21lIHNpbXBsZSBjb25zaXN0ZW5jeSBj aGVja3MgZm9yIHRoZSBpbnRlcnByZXRlciAqLwotICAgIGlmIChlbGZfaW50ZXJwcmV0ZXIpewot CWludGVycHJldGVyX3R5cGUgPSBJTlRFUlBSRVRFUl9FTEYgfCBJTlRFUlBSRVRFUl9BT1VUOwot Ci0JLyogTm93IGZpZ3VyZSBvdXQgd2hpY2ggZm9ybWF0IG91ciBiaW5hcnkgaXMgKi8KLQlpZiAo KE5fTUFHSUMoaW50ZXJwX2V4KSAhPSBPTUFHSUMpICYmIChOX01BR0lDKGludGVycF9leCkgIT0g Wk1BR0lDKSAmJgotCSAgICAJKE5fTUFHSUMoaW50ZXJwX2V4KSAhPSBRTUFHSUMpKSB7Ci0JICBp bnRlcnByZXRlcl90eXBlID0gSU5URVJQUkVURVJfRUxGOwotCX0KLQotCWlmIChpbnRlcnBfZWxm X2V4LmVfaWRlbnRbMF0gIT0gMHg3ZiB8fAotCSAgICAJc3RybmNtcCgmaW50ZXJwX2VsZl9leC5l X2lkZW50WzFdLCAiRUxGIiwzKSAhPSAwKSB7Ci0JICAgIGludGVycHJldGVyX3R5cGUgJj0gfklO VEVSUFJFVEVSX0VMRjsKLQl9Ci0KLQlpZiAoIWludGVycHJldGVyX3R5cGUpIHsKLQkgICAgZnJl ZShlbGZfaW50ZXJwcmV0ZXIpOwotCSAgICBmcmVlKGVsZl9waGRhdGEpOwotCSAgICBjbG9zZShi cHJtLT5mZCk7Ci0JICAgIHJldHVybiAtRUxJQkJBRDsKLQl9Ci0gICAgfQotCi0gICAgLyogT0ss IHdlIGFyZSBkb25lIHdpdGggdGhhdCwgbm93IHNldCB1cCB0aGUgYXJnIHN0dWZmLAotICAgICAg IGFuZCB0aGVuIHN0YXJ0IHRoaXMgc3Vja2VyIHVwICovCi0KLSAgICB7Ci0JY2hhciAqIHBhc3Nl ZF9wOwotCi0JaWYgKGludGVycHJldGVyX3R5cGUgPT0gSU5URVJQUkVURVJfQU9VVCkgewotCSAg ICBzbnByaW50ZihwYXNzZWRfZmlsZW5vLCBzaXplb2YocGFzc2VkX2ZpbGVubyksICIlZCIsIGJw cm0tPmZkKTsKLQkgICAgcGFzc2VkX3AgPSBwYXNzZWRfZmlsZW5vOwotCi0JICAgIGlmIChlbGZf aW50ZXJwcmV0ZXIpIHsKLQkJYnBybS0+cCA9IGNvcHlfZWxmX3N0cmluZ3MoMSwmcGFzc2VkX3As YnBybS0+cGFnZSxicHJtLT5wKTsKLQkJYnBybS0+YXJnYysrOwotCSAgICB9Ci0JfQotCWlmICgh YnBybS0+cCkgewotCSAgICBpZiAoZWxmX2ludGVycHJldGVyKSB7Ci0JICAgICAgICBmcmVlKGVs Zl9pbnRlcnByZXRlcik7Ci0JICAgIH0KLQkgICAgZnJlZSAoZWxmX3BoZGF0YSk7Ci0JICAgIGNs b3NlKGJwcm0tPmZkKTsKLQkgICAgcmV0dXJuIC1FMkJJRzsKLQl9Ci0gICAgfQotCi0gICAgLyog T0ssIFRoaXMgaXMgdGhlIHBvaW50IG9mIG5vIHJldHVybiAqLwotICAgIGluZm8tPmVuZF9kYXRh ID0gMDsKLSAgICBpbmZvLT5lbmRfY29kZSA9IDA7Ci0gICAgaW5mby0+c3RhcnRfbW1hcCA9ICh1 bnNpZ25lZCBsb25nKUVMRl9TVEFSVF9NTUFQOwotICAgIGluZm8tPm1tYXAgPSAwOwotICAgIGVs Zl9lbnRyeSA9ICh1bnNpZ25lZCBsb25nKSBlbGZfZXguZV9lbnRyeTsKLQotICAgIC8qIERvIHRo aXMgc28gdGhhdCB3ZSBjYW4gbG9hZCB0aGUgaW50ZXJwcmV0ZXIsIGlmIG5lZWQgYmUuICBXZSB3 aWxsCi0gICAgICAgY2hhbmdlIHNvbWUgb2YgdGhlc2UgbGF0ZXIgKi8KLSAgICBpbmZvLT5yc3Mg PSAwOwotICAgIGJwcm0tPnAgPSBzZXR1cF9hcmdfcGFnZXMoYnBybS0+cCwgYnBybSwgaW5mbyk7 Ci0gICAgaW5mby0+c3RhcnRfc3RhY2sgPSBicHJtLT5wOwotCi0gICAgLyogTm93IHdlIGRvIGEg bGl0dGxlIGdydW5neSB3b3JrIGJ5IG1tYXBpbmcgdGhlIEVMRiBpbWFnZSBpbnRvCi0gICAgICog dGhlIGNvcnJlY3QgbG9jYXRpb24gaW4gbWVtb3J5LiAgQXQgdGhpcyBwb2ludCwgd2UgYXNzdW1l IHRoYXQKLSAgICAgKiB0aGUgaW1hZ2Ugc2hvdWxkIGJlIGxvYWRlZCBhdCBmaXhlZCBhZGRyZXNz LCBub3QgYXQgYSB2YXJpYWJsZQotICAgICAqIGFkZHJlc3MuCi0gICAgICovCi0KLSAgICBmb3Io aSA9IDAsIGVsZl9wcG50ID0gZWxmX3BoZGF0YTsgaSA8IGVsZl9leC5lX3BobnVtOyBpKyssIGVs Zl9wcG50KyspIHsKLSAgICAgICAgaW50IGVsZl9wcm90ID0gMDsKLSAgICAgICAgaW50IGVsZl9m bGFncyA9IDA7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgZXJyb3I7Ci0KLQlpZiAoZWxmX3BwbnQt PnBfdHlwZSAhPSBQVF9MT0FEKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYg KGVsZl9wcG50LT5wX2ZsYWdzICYgUEZfUikgZWxmX3Byb3QgfD0gUFJPVF9SRUFEOwotICAgICAg ICBpZiAoZWxmX3BwbnQtPnBfZmxhZ3MgJiBQRl9XKSBlbGZfcHJvdCB8PSBQUk9UX1dSSVRFOwot ICAgICAgICBpZiAoZWxmX3BwbnQtPnBfZmxhZ3MgJiBQRl9YKSBlbGZfcHJvdCB8PSBQUk9UX0VY RUM7Ci0gICAgICAgIGVsZl9mbGFncyA9IE1BUF9QUklWQVRFIHwgTUFQX0RFTllXUklURTsKLSAg ICAgICAgaWYgKGVsZl9leC5lX3R5cGUgPT0gRVRfRVhFQyB8fCBsb2FkX2FkZHJfc2V0KSB7Ci0g ICAgICAgICAgICBlbGZfZmxhZ3MgfD0gTUFQX0ZJWEVEOwotICAgICAgICB9IGVsc2UgaWYgKGVs Zl9leC5lX3R5cGUgPT0gRVRfRFlOKSB7Ci0gICAgICAgICAgICAvKiBUcnkgYW5kIGdldCBkeW5h bWljIHByb2dyYW1zIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBkZWZhdWx0IG1tYXAKLSAgICAgICAg ICAgICAgIGJhc2UsIGFzIHdlbGwgYXMgd2hhdGV2ZXIgcHJvZ3JhbSB0aGV5IG1pZ2h0IHRyeSB0 byBleGVjLiAgVGhpcwotICAgICAgICAgICAgICAgaXMgYmVjYXVzZSB0aGUgYnJrIHdpbGwgZm9s bG93IHRoZSBsb2FkZXIsIGFuZCBpcyBub3QgbW92YWJsZS4gICovCi0gICAgICAgICAgICAvKiBO T1RFOiBmb3IgcWVtdSwgd2UgZG8gYSBiaWcgbW1hcCB0byBnZXQgZW5vdWdoIHNwYWNlCi0gICAg ICAgICAgICAgICB3aXRob3V0IGhhcmRjb2RpbmcgYW55IGFkZHJlc3MgKi8KLSAgICAgICAgICAg IGVycm9yID0gdGFyZ2V0X21tYXAoMCwgRVRfRFlOX01BUF9TSVpFLAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FOT04sCi0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLCAwKTsKLSAgICAgICAgICAgIGlmIChlcnJv ciA9PSAtMSkgewotICAgICAgICAgICAgICAgIHBlcnJvcigibW1hcCIpOwotICAgICAgICAgICAg ICAgIGV4aXQoLTEpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbG9hZF9iaWFzID0gVEFS R0VUX0VMRl9QQUdFU1RBUlQoZXJyb3IgLSBlbGZfcHBudC0+cF92YWRkcik7Ci0gICAgICAgIH0K LQotICAgICAgICBlcnJvciA9IHRhcmdldF9tbWFwKFRBUkdFVF9FTEZfUEFHRVNUQVJUKGxvYWRf YmlhcyArIGVsZl9wcG50LT5wX3ZhZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAo ZWxmX3BwbnQtPnBfZmlsZXN6ICsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFSR0VU X0VMRl9QQUdFT0ZGU0VUKGVsZl9wcG50LT5wX3ZhZGRyKSksCi0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgZWxmX3Byb3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1BUF9GSVhF RCB8IE1BUF9QUklWQVRFIHwgTUFQX0RFTllXUklURSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgYnBybS0+ZmQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVsZl9wcG50LT5w X29mZnNldCAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBUkdFVF9FTEZfUEFHRU9G RlNFVChlbGZfcHBudC0+cF92YWRkcikpKTsKLSAgICAgICAgaWYgKGVycm9yID09IC0xKSB7Ci0g ICAgICAgICAgICBwZXJyb3IoIm1tYXAiKTsKLSAgICAgICAgICAgIGV4aXQoLTEpOwotICAgICAg ICB9Ci0KLSNpZmRlZiBMT1dfRUxGX1NUQUNLCi0gICAgICAgIGlmIChUQVJHRVRfRUxGX1BBR0VT VEFSVChlbGZfcHBudC0+cF92YWRkcikgPCBlbGZfc3RhY2spCi0gICAgICAgICAgICBlbGZfc3Rh Y2sgPSBUQVJHRVRfRUxGX1BBR0VTVEFSVChlbGZfcHBudC0+cF92YWRkcik7Ci0jZW5kaWYKLQot ICAgICAgICBpZiAoIWxvYWRfYWRkcl9zZXQpIHsKLSAgICAgICAgICAgIGxvYWRfYWRkcl9zZXQg PSAxOwotICAgICAgICAgICAgbG9hZF9hZGRyID0gZWxmX3BwbnQtPnBfdmFkZHIgLSBlbGZfcHBu dC0+cF9vZmZzZXQ7Ci0gICAgICAgICAgICBpZiAoZWxmX2V4LmVfdHlwZSA9PSBFVF9EWU4pIHsK LSAgICAgICAgICAgICAgICBsb2FkX2JpYXMgKz0gZXJyb3IgLQotICAgICAgICAgICAgICAgICAg ICBUQVJHRVRfRUxGX1BBR0VTVEFSVChsb2FkX2JpYXMgKyBlbGZfcHBudC0+cF92YWRkcik7Ci0g ICAgICAgICAgICAgICAgbG9hZF9hZGRyICs9IGxvYWRfYmlhczsKLSAgICAgICAgICAgICAgICBy ZWxvY19mdW5jX2Rlc2MgPSBsb2FkX2JpYXM7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg ICAgICAgayA9IGVsZl9wcG50LT5wX3ZhZGRyOwotICAgICAgICBpZiAoayA8IHN0YXJ0X2NvZGUp Ci0gICAgICAgICAgICBzdGFydF9jb2RlID0gazsKLSAgICAgICAgayA9IGVsZl9wcG50LT5wX3Zh ZGRyICsgZWxmX3BwbnQtPnBfZmlsZXN6OwotICAgICAgICBpZiAoayA+IGVsZl9ic3MpCi0gICAg ICAgICAgICBlbGZfYnNzID0gazsKLSAgICAgICAgaWYgKChlbGZfcHBudC0+cF9mbGFncyAmIFBG X1gpICYmIGVuZF9jb2RlIDwgIGspCi0gICAgICAgICAgICBlbmRfY29kZSA9IGs7Ci0gICAgICAg IGlmIChlbmRfZGF0YSA8IGspCi0gICAgICAgICAgICBlbmRfZGF0YSA9IGs7Ci0gICAgICAgIGsg PSBlbGZfcHBudC0+cF92YWRkciArIGVsZl9wcG50LT5wX21lbXN6OwotICAgICAgICBpZiAoayA+ IGVsZl9icmspIGVsZl9icmsgPSBrOwotICAgIH0KLQotICAgIGVsZl9lbnRyeSArPSBsb2FkX2Jp YXM7Ci0gICAgZWxmX2JzcyArPSBsb2FkX2JpYXM7Ci0gICAgZWxmX2JyayArPSBsb2FkX2JpYXM7 Ci0gICAgc3RhcnRfY29kZSArPSBsb2FkX2JpYXM7Ci0gICAgZW5kX2NvZGUgKz0gbG9hZF9iaWFz OwotICAgIC8vICAgIHN0YXJ0X2RhdGEgKz0gbG9hZF9iaWFzOwotICAgIGVuZF9kYXRhICs9IGxv YWRfYmlhczsKLQotICAgIGlmIChlbGZfaW50ZXJwcmV0ZXIpIHsKLQlpZiAoaW50ZXJwcmV0ZXJf dHlwZSAmIDEpIHsKLQkgICAgZWxmX2VudHJ5ID0gbG9hZF9hb3V0X2ludGVycCgmaW50ZXJwX2V4 LCBpbnRlcnByZXRlcl9mZCk7Ci0JfQotCWVsc2UgaWYgKGludGVycHJldGVyX3R5cGUgJiAyKSB7 Ci0JICAgIGVsZl9lbnRyeSA9IGxvYWRfZWxmX2ludGVycCgmaW50ZXJwX2VsZl9leCwgaW50ZXJw cmV0ZXJfZmQsCi0JCQkJCSAgICAmaW50ZXJwX2xvYWRfYWRkcik7Ci0JfQotICAgICAgICByZWxv Y19mdW5jX2Rlc2MgPSBpbnRlcnBfbG9hZF9hZGRyOwotCi0JY2xvc2UoaW50ZXJwcmV0ZXJfZmQp OwotCWZyZWUoZWxmX2ludGVycHJldGVyKTsKLQotCWlmIChlbGZfZW50cnkgPT0gfjBVTCkgewot CSAgICBwcmludGYoIlVuYWJsZSB0byBsb2FkIGludGVycHJldGVyXG4iKTsKLQkgICAgZnJlZShl bGZfcGhkYXRhKTsKLQkgICAgZXhpdCgtMSk7Ci0JICAgIHJldHVybiAwOwotCX0KLSAgICB9Ci0K LSAgICBmcmVlKGVsZl9waGRhdGEpOwotCi0gICAgaWYgKGxvZ2xldmVsKQotCWxvYWRfc3ltYm9s cygmZWxmX2V4LCBicHJtLT5mZCk7Ci0KLSAgICBpZiAoaW50ZXJwcmV0ZXJfdHlwZSAhPSBJTlRF UlBSRVRFUl9BT1VUKSBjbG9zZShicHJtLT5mZCk7Ci0gICAgaW5mby0+cGVyc29uYWxpdHkgPSAo aWJjczJfaW50ZXJwcmV0ZXIgPyBQRVJfU1ZSNCA6IFBFUl9MSU5VWCk7Ci0KLSNpZmRlZiBMT1df RUxGX1NUQUNLCi0gICAgaW5mby0+c3RhcnRfc3RhY2sgPSBicHJtLT5wID0gZWxmX3N0YWNrIC0g NDsKLSNlbmRpZgotICAgIGJwcm0tPnAgPSBjcmVhdGVfZWxmX3RhYmxlcyhicHJtLT5wLAotCQkg ICAgYnBybS0+YXJnYywKLQkJICAgIGJwcm0tPmVudmMsCi0gICAgICAgICAgICAgICAgICAgICZl bGZfZXgsCi0gICAgICAgICAgICAgICAgICAgIGxvYWRfYWRkciwgbG9hZF9iaWFzLAotCQkgICAg aW50ZXJwX2xvYWRfYWRkciwKLQkJICAgIChpbnRlcnByZXRlcl90eXBlID09IElOVEVSUFJFVEVS X0FPVVQgPyAwIDogMSksCi0JCSAgICBpbmZvKTsKLSAgICBpbmZvLT5sb2FkX2FkZHIgPSByZWxv Y19mdW5jX2Rlc2M7Ci0gICAgaW5mby0+c3RhcnRfYnJrID0gaW5mby0+YnJrID0gZWxmX2JyazsK LSAgICBpbmZvLT5lbmRfY29kZSA9IGVuZF9jb2RlOwotICAgIGluZm8tPnN0YXJ0X2NvZGUgPSBz dGFydF9jb2RlOwotICAgIGluZm8tPnN0YXJ0X2RhdGEgPSBlbmRfY29kZTsKLSAgICBpbmZvLT5l bmRfZGF0YSA9IGVuZF9kYXRhOwotICAgIGluZm8tPnN0YXJ0X3N0YWNrID0gYnBybS0+cDsKLQot ICAgIC8qIENhbGxpbmcgc2V0X2JyayBlZmZlY3RpdmVseSBtbWFwcyB0aGUgcGFnZXMgdGhhdCB3 ZSBuZWVkIGZvciB0aGUgYnNzIGFuZCBicmVhawotICAgICAgIHNlY3Rpb25zICovCi0gICAgc2V0 X2JyayhlbGZfYnNzLCBlbGZfYnJrKTsKLQotICAgIHBhZHplcm8oZWxmX2JzcywgZWxmX2Jyayk7 Ci0KLSNpZiAwCi0gICAgcHJpbnRmKCIoc3RhcnRfYnJrKSAleFxuIiAsIGluZm8tPnN0YXJ0X2Jy ayk7Ci0gICAgcHJpbnRmKCIoZW5kX2NvZGUpICV4XG4iICwgaW5mby0+ZW5kX2NvZGUpOwotICAg IHByaW50ZigiKHN0YXJ0X2NvZGUpICV4XG4iICwgaW5mby0+c3RhcnRfY29kZSk7Ci0gICAgcHJp bnRmKCIoZW5kX2RhdGEpICV4XG4iICwgaW5mby0+ZW5kX2RhdGEpOwotICAgIHByaW50ZigiKHN0 YXJ0X3N0YWNrKSAleFxuIiAsIGluZm8tPnN0YXJ0X3N0YWNrKTsKLSAgICBwcmludGYoIihicmsp ICV4XG4iICwgaW5mby0+YnJrKTsKLSNlbmRpZgotCi0gICAgaWYgKCBpbmZvLT5wZXJzb25hbGl0 eSA9PSBQRVJfU1ZSNCApCi0gICAgewotCSAgICAvKiBXaHkgdGhpcywgeW91IGFzaz8/PyAgV2Vs bCBTVnI0IG1hcHMgcGFnZSAwIGFzIHJlYWQtb25seSwKLQkgICAgICAgYW5kIHNvbWUgYXBwbGlj YXRpb25zICJkZXBlbmQiIHVwb24gdGhpcyBiZWhhdmlvci4KLQkgICAgICAgU2luY2Ugd2UgZG8g bm90IGhhdmUgdGhlIHBvd2VyIHRvIHJlY29tcGlsZSB0aGVzZSwgd2UKLQkgICAgICAgZW11bGF0 ZSB0aGUgU1ZyNCBiZWhhdmlvci4gIFNpZ2guICAqLwotCSAgICBtYXBwZWRfYWRkciA9IHRhcmdl dF9tbWFwKDAsIHFlbXVfaG9zdF9wYWdlX3NpemUsIFBST1RfUkVBRCB8IFBST1RfRVhFQywKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFQX0ZJWEVEIHwgTUFQX1BSSVZB VEUsIC0xLCAwKTsKLSAgICB9Ci0KLSAgICBpbmZvLT5lbnRyeSA9IGVsZl9lbnRyeTsKLQotICAg IHJldHVybiAwOworICAgIHJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBpbnQgbG9hZF9hb3V0 X2ludGVycCh2b2lkICogZXhwdHIsIGludCBpbnRlcnBfZmQpCkluZGV4OiBxZW11L2xpbnV4LXVz ZXIvZWxmbG9hZF9vcHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwJMTk3MC0wMS0wMSAwMDow MDowMC4wMDAwMDAwMDAgKzAwMDAKKysrIHFlbXUvbGludXgtdXNlci9lbGZsb2FkX29wcy5oCTIw MDctMTAtMDcgMTE6NDQ6MDkuMDAwMDAwMDAwICswMDAwCkBAIC0wLDAgKzEsNzQ5IEBACisjaWZk ZWYgQlNXQVBfTkVFREVECitzdGF0aWMgdm9pZCBnbHVlKGJzd2FwX2VoZHIsIFNaKShzdHJ1Y3Qg ZWxmaGRyICplaGRyKQoreworICAgIGJzd2FwMTZzKCZlaGRyLT5lX3R5cGUpOyAgICAgICAgICAg IC8qIE9iamVjdCBmaWxlIHR5cGUgKi8KKyAgICBic3dhcDE2cygmZWhkci0+ZV9tYWNoaW5lKTsg ICAgICAgICAvKiBBcmNoaXRlY3R1cmUgKi8KKyAgICBic3dhcDMycygmZWhkci0+ZV92ZXJzaW9u KTsgICAgICAgICAvKiBPYmplY3QgZmlsZSB2ZXJzaW9uICovCisgICAgYnN3YXBTWnMoJmVoZHIt PmVfZW50cnkpOyAgICAgICAgICAgLyogRW50cnkgcG9pbnQgdmlydHVhbCBhZGRyZXNzICovCisg ICAgYnN3YXBTWnMoJmVoZHItPmVfcGhvZmYpOyAgICAgICAgICAgLyogUHJvZ3JhbSBoZWFkZXIg dGFibGUgZmlsZSBvZmZzZXQgKi8KKyAgICBic3dhcFNacygmZWhkci0+ZV9zaG9mZik7ICAgICAg ICAgICAvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBmaWxlIG9mZnNldCAqLworICAgIGJzd2FwMzJz KCZlaGRyLT5lX2ZsYWdzKTsgICAgICAgICAgIC8qIFByb2Nlc3Nvci1zcGVjaWZpYyBmbGFncyAq LworICAgIGJzd2FwMTZzKCZlaGRyLT5lX2Voc2l6ZSk7ICAgICAgICAgIC8qIEVMRiBoZWFkZXIg c2l6ZSBpbiBieXRlcyAqLworICAgIGJzd2FwMTZzKCZlaGRyLT5lX3BoZW50c2l6ZSk7ICAgICAg IC8qIFByb2dyYW0gaGVhZGVyIHRhYmxlIGVudHJ5IHNpemUgKi8KKyAgICBic3dhcDE2cygmZWhk ci0+ZV9waG51bSk7ICAgICAgICAgICAvKiBQcm9ncmFtIGhlYWRlciB0YWJsZSBlbnRyeSBjb3Vu dCAqLworICAgIGJzd2FwMTZzKCZlaGRyLT5lX3NoZW50c2l6ZSk7ICAgICAgIC8qIFNlY3Rpb24g aGVhZGVyIHRhYmxlIGVudHJ5IHNpemUgKi8KKyAgICBic3dhcDE2cygmZWhkci0+ZV9zaG51bSk7 ICAgICAgICAgICAvKiBTZWN0aW9uIGhlYWRlciB0YWJsZSBlbnRyeSBjb3VudCAqLworICAgIGJz d2FwMTZzKCZlaGRyLT5lX3Noc3RybmR4KTsgICAgICAgIC8qIFNlY3Rpb24gaGVhZGVyIHN0cmlu ZyB0YWJsZSBpbmRleCAqLworfQorCitzdGF0aWMgdm9pZCBnbHVlKGJzd2FwX3BoZHIsIFNaKShz dHJ1Y3QgZWxmX3BoZHIgKnBoZHIpCit7CisgICAgYnN3YXAzMnMoJnBoZHItPnBfdHlwZSk7ICAg ICAgICAgICAgLyogU2VnbWVudCB0eXBlICovCisgICAgYnN3YXBTWnMoJnBoZHItPnBfb2Zmc2V0 KTsgICAgICAgICAgLyogU2VnbWVudCBmaWxlIG9mZnNldCAqLworICAgIGJzd2FwU1pzKCZwaGRy LT5wX3ZhZGRyKTsgICAgICAgICAgIC8qIFNlZ21lbnQgdmlydHVhbCBhZGRyZXNzICovCisgICAg YnN3YXBTWnMoJnBoZHItPnBfcGFkZHIpOyAgICAgICAgICAgLyogU2VnbWVudCBwaHlzaWNhbCBh ZGRyZXNzICovCisgICAgYnN3YXBTWnMoJnBoZHItPnBfZmlsZXN6KTsgICAgICAgICAgLyogU2Vn bWVudCBzaXplIGluIGZpbGUgKi8KKyAgICBic3dhcFNacygmcGhkci0+cF9tZW1zeik7ICAgICAg ICAgICAvKiBTZWdtZW50IHNpemUgaW4gbWVtb3J5ICovCisgICAgYnN3YXAzMnMoJnBoZHItPnBf ZmxhZ3MpOyAgICAgICAgICAgLyogU2VnbWVudCBmbGFncyAqLworICAgIGJzd2FwU1pzKCZwaGRy LT5wX2FsaWduKTsgICAgICAgICAgIC8qIFNlZ21lbnQgYWxpZ25tZW50ICovCit9CisKK3N0YXRp YyB2b2lkIGdsdWUoYnN3YXBfc2hkciwgU1opKHN0cnVjdCBlbGZfc2hkciAqc2hkcikKK3sKKyAg ICBic3dhcDMycygmc2hkci0+c2hfbmFtZSk7CisgICAgYnN3YXAzMnMoJnNoZHItPnNoX3R5cGUp OworICAgIGJzd2FwU1pzKCZzaGRyLT5zaF9mbGFncyk7CisgICAgYnN3YXBTWnMoJnNoZHItPnNo X2FkZHIpOworICAgIGJzd2FwU1pzKCZzaGRyLT5zaF9vZmZzZXQpOworICAgIGJzd2FwU1pzKCZz aGRyLT5zaF9zaXplKTsKKyAgICBic3dhcDMycygmc2hkci0+c2hfbGluayk7CisgICAgYnN3YXAz MnMoJnNoZHItPnNoX2luZm8pOworICAgIGJzd2FwU1pzKCZzaGRyLT5zaF9hZGRyYWxpZ24pOwor ICAgIGJzd2FwU1pzKCZzaGRyLT5zaF9lbnRzaXplKTsKK30KKworc3RhdGljIHZvaWQgZ2x1ZShi c3dhcF9zeW0sIFNaKShzdHJ1Y3QgZWxmX3N5bSAqc3ltKQoreworICAgIGJzd2FwMzJzKCZzeW0t PnN0X25hbWUpOworICAgIGJzd2FwU1pzKCZzeW0tPnN0X3ZhbHVlKTsKKyAgICBic3dhcFNacygm c3ltLT5zdF9zaXplKTsKKyAgICBic3dhcDE2cygmc3ltLT5zdF9zaG5keCk7Cit9CisjZW5kaWYK Kworc3RhdGljIHVuc2lnbmVkIGxvbmcgZ2x1ZShjcmVhdGVfZWxmX3RhYmxlcywgU1opKHRhcmdl dF91bG9uZyBwLCBpbnQgYXJnYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgZW52YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZWxmaGRyICpleGVjLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZF9hZGRyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbG9hZF9iaWFzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50ZXJwX2xvYWRfYWRkciwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWJjcywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW1hZ2VfaW5mbyAq aW5mbykKK3sKKyAgICB0YXJnZXRfdWxvbmcgc3A7CisgICAgaW50IHNpemU7CisgICAgdGFyZ2V0 X3Vsb25nIHVfcGxhdGZvcm07CisgICAgY29uc3QgY2hhciAqa19wbGF0Zm9ybTsKKyAgICBjb25z dCBpbnQgbiA9IHNpemVvZih0YXJnZXRfdWxvbmcpOworCisgICAgc3AgPSBwOworICAgIHVfcGxh dGZvcm0gPSAwOworICAgIGtfcGxhdGZvcm0gPSBFTEZfUExBVEZPUk07CisgICAgaWYgKGtfcGxh dGZvcm0pIHsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHN0cmxlbihrX3BsYXRmb3JtKSArIDE7Cisg ICAgICAgIHNwIC09IChsZW4gKyBuIC0gMSkgJiB+KG4gLSAxKTsKKyAgICAgICAgdV9wbGF0Zm9y bSA9IHNwOworICAgICAgICBtZW1jcHlfdG9fdGFyZ2V0KHNwLCBrX3BsYXRmb3JtLCBsZW4pOwor ICAgIH0KKyAgICAvKgorICAgICAqIEZvcmNlIDE2IGJ5dGUgX2ZpbmFsXyBhbGlnbm1lbnQgaGVy ZSBmb3IgZ2VuZXJhbGl0eS4KKyAgICAgKi8KKyAgICBzcCA9IHNwICYgfih0YXJnZXRfdWxvbmcp MTU7CisgICAgc2l6ZSA9IChETElORk9fSVRFTVMgKyAxKSAqIDI7CisgICAgaWYgKGtfcGxhdGZv cm0pCisgICAgICAgIHNpemUgKz0gMjsKKyNpZmRlZiBETElORk9fQVJDSF9JVEVNUworICAgIHNp emUgKz0gRExJTkZPX0FSQ0hfSVRFTVMgKiAyOworI2VuZGlmCisgICAgc2l6ZSArPSBlbnZjICsg YXJnYyArIDI7CisgICAgc2l6ZSArPSAoIWliY3MgPyAzIDogMSk7ICAgIC8qIGFyZ2MgaXRzZWxm ICovCisgICAgc2l6ZSAqPSBuOworICAgIGlmIChzaXplICYgMTUpCisgICAgICAgIHNwIC09IDE2 IC0gKHNpemUgJiAxNSk7CisKKyNkZWZpbmUgTkVXX0FVWF9FTlQoaWQsIHZhbCkgZG8geyAgIFwK KyAgICAgICAgc3AgLT0gbjsgdHB1dGwoc3AsIHZhbCk7ICAgIFwKKyAgICAgICAgc3AgLT0gbjsg dHB1dGwoc3AsIGlkKTsgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCisgICAgTkVXX0FVWF9FTlQg KEFUX05VTEwsIDApOworCisgICAgLyogVGhlcmUgbXVzdCBiZSBleGFjdGx5IERMSU5GT19JVEVN UyBlbnRyaWVzIGhlcmUuICAqLworICAgIE5FV19BVVhfRU5UKEFUX1BIRFIsICh0YXJnZXRfdWxv bmcpKGxvYWRfYWRkciArIGV4ZWMtPmVfcGhvZmYpKTsKKyAgICBORVdfQVVYX0VOVChBVF9QSEVO VCwgKHRhcmdldF91bG9uZykoc2l6ZW9mIChzdHJ1Y3QgZWxmX3BoZHIpKSk7CisgICAgTkVXX0FV WF9FTlQoQVRfUEhOVU0sICh0YXJnZXRfdWxvbmcpKGV4ZWMtPmVfcGhudW0pKTsKKyAgICBORVdf QVVYX0VOVChBVF9QQUdFU1osICh0YXJnZXRfdWxvbmcpKFRBUkdFVF9QQUdFX1NJWkUpKTsKKyAg ICBORVdfQVVYX0VOVChBVF9CQVNFLCAodGFyZ2V0X3Vsb25nKShpbnRlcnBfbG9hZF9hZGRyKSk7 CisgICAgTkVXX0FVWF9FTlQoQVRfRkxBR1MsICh0YXJnZXRfdWxvbmcpMCk7CisgICAgTkVXX0FV WF9FTlQoQVRfRU5UUlksIGxvYWRfYmlhcyArIGV4ZWMtPmVfZW50cnkpOworICAgIE5FV19BVVhf RU5UKEFUX1VJRCwgKHRhcmdldF91bG9uZykgZ2V0dWlkKCkpOworICAgIE5FV19BVVhfRU5UKEFU X0VVSUQsICh0YXJnZXRfdWxvbmcpIGdldGV1aWQoKSk7CisgICAgTkVXX0FVWF9FTlQoQVRfR0lE LCAodGFyZ2V0X3Vsb25nKSBnZXRnaWQoKSk7CisgICAgTkVXX0FVWF9FTlQoQVRfRUdJRCwgKHRh cmdldF91bG9uZykgZ2V0ZWdpZCgpKTsKKyAgICBORVdfQVVYX0VOVChBVF9IV0NBUCwgKHRhcmdl dF91bG9uZykgRUxGX0hXQ0FQKTsKKyAgICBpZiAoa19wbGF0Zm9ybSkKKyAgICAgICAgTkVXX0FV WF9FTlQoQVRfUExBVEZPUk0sIHVfcGxhdGZvcm0pOworI2lmZGVmIEFSQ0hfRExJTkZPCisgICAg LyoKKyAgICAgKiBBUkNIX0RMSU5GTyBtdXN0IGNvbWUgbGFzdCBzbyBwbGF0Zm9ybSBzcGVjaWZp YyBjb2RlIGNhbiBlbmZvcmNlCisgICAgICogc3BlY2lhbCBhbGlnbm1lbnQgcmVxdWlyZW1lbnRz IG9uIHRoZSBBVVhWIGlmIG5lY2Vzc2FyeSAoZWcuIFBQQykuCisgICAgICovCisgICAgQVJDSF9E TElORk87CisjZW5kaWYKKyN1bmRlZiBORVdfQVVYX0VOVAorCisgICAgc3AgPSBsb2FkZXJfYnVp bGRfYXJncHRyKGVudmMsIGFyZ2MsIHNwLCBwLCAhaWJjcyk7CisgICAgcmV0dXJuIHNwOworfQor CitzdGF0aWMgdW5zaWduZWQgbG9uZyBnbHVlKGxvYWRfZWxmX2ludGVycCwgU1opKHN0cnVjdCBl bGZoZHIgKmludGVycF9lbGZfZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBpbnRlcnByZXRlcl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqaW50ZXJwX2xvYWRfYWRkcikK K3sKKyAgICBzdHJ1Y3QgZWxmX3BoZHIgKmVsZl9waGRhdGEgID0gIE5VTEw7CisgICAgc3RydWN0 IGVsZl9waGRyICplcHBudDsKKyAgICB1bnNpZ25lZCBsb25nIGxvYWRfYWRkciA9IDA7CisgICAg aW50IGxvYWRfYWRkcl9zZXQgPSAwOworICAgIGludCByZXR2YWw7CisgICAgdW5zaWduZWQgbG9u ZyBsYXN0X2JzcywgZWxmX2JzczsKKyAgICB1bnNpZ25lZCBsb25nIGVycm9yOworICAgIGludCBp OworCisgICAgZWxmX2JzcyA9IDA7CisgICAgbGFzdF9ic3MgPSAwOworICAgIGVycm9yID0gMDsK KworI2lmZGVmIEJTV0FQX05FRURFRAorICAgIGdsdWUoYnN3YXBfZWhkciwgU1opKGludGVycF9l bGZfZXgpOworI2VuZGlmCisgICAgLyogRmlyc3Qgb2YgYWxsLCBzb21lIHNpbXBsZSBjb25zaXN0 ZW5jeSBjaGVja3MgKi8KKyAgICBpZiAoKGludGVycF9lbGZfZXgtPmVfdHlwZSAhPSBFVF9FWEVD ICYmCisgICAgICAgICBpbnRlcnBfZWxmX2V4LT5lX3R5cGUgIT0gRVRfRFlOKSB8fAorICAgICAg ICAhZWxmX2NoZWNrX2FyY2goaW50ZXJwX2VsZl9leC0+ZV9tYWNoaW5lKSkgeworICAgICAgICBy ZXR1cm4gfjBVTDsKKyAgICB9CisKKyAgICAvKiBOb3cgcmVhZCBpbiBhbGwgb2YgdGhlIGhlYWRl ciBpbmZvcm1hdGlvbiAqLworCisgICAgaWYgKHNpemVvZihzdHJ1Y3QgZWxmX3BoZHIpICogaW50 ZXJwX2VsZl9leC0+ZV9waG51bSA+IFRBUkdFVF9QQUdFX1NJWkUpCisgICAgICAgIHJldHVybiB+ MFVMOworCisgICAgZWxmX3BoZGF0YSA9ICAoc3RydWN0IGVsZl9waGRyICopCisgICAgICAgIG1h bGxvYyhzaXplb2Yoc3RydWN0IGVsZl9waGRyKSAqIGludGVycF9lbGZfZXgtPmVfcGhudW0pOwor CisgICAgaWYgKCFlbGZfcGhkYXRhKQorICAgICAgICByZXR1cm4gfjBVTDsKKworICAgIC8qCisg ICAgICogSWYgdGhlIHNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgaGFzIGNoYW5nZWQsIHRoZW4gcHVu dCwgc2luY2UKKyAgICAgKiB3ZSB3aWxsIGJlIGRvaW5nIHRoZSB3cm9uZyB0aGluZy4KKyAgICAg Ki8KKyAgICBpZiAoaW50ZXJwX2VsZl9leC0+ZV9waGVudHNpemUgIT0gc2l6ZW9mKHN0cnVjdCBl bGZfcGhkcikpIHsKKyAgICAgICAgZnJlZShlbGZfcGhkYXRhKTsKKyAgICAgICAgcmV0dXJuIH4w VUw7CisgICAgfQorCisgICAgcmV0dmFsID0gbHNlZWsoaW50ZXJwcmV0ZXJfZmQsIGludGVycF9l bGZfZXgtPmVfcGhvZmYsIFNFRUtfU0VUKTsKKyAgICBpZiAocmV0dmFsID49IDApIHsKKyAgICAg ICAgcmV0dmFsID0gcmVhZChpbnRlcnByZXRlcl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAo Y2hhciAqKSBlbGZfcGhkYXRhLAorICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qg ZWxmX3BoZHIpICogaW50ZXJwX2VsZl9leC0+ZV9waG51bSk7CisgICAgfQorICAgIGlmIChyZXR2 YWwgPCAwKSB7CisgICAgICAgIHBlcnJvcigibG9hZF9lbGZfaW50ZXJwIik7CisgICAgICAgIGV4 aXQoLTEpOworICAgICAgICBmcmVlIChlbGZfcGhkYXRhKTsKKyAgICAgICAgcmV0dXJuIHJldHZh bDsKKyAgICB9CisjaWZkZWYgQlNXQVBfTkVFREVECisgICAgZXBwbnQgPSBlbGZfcGhkYXRhOwor ICAgIGZvciAoaSA9IDA7IGkgPCBpbnRlcnBfZWxmX2V4LT5lX3BobnVtOyBpKyssIGVwcG50Kysp IHsKKyAgICAgICAgZ2x1ZShic3dhcF9waGRyLCBTWikoZXBwbnQpOworICAgIH0KKyNlbmRpZgor CisgICAgaWYgKGludGVycF9lbGZfZXgtPmVfdHlwZSA9PSBFVF9EWU4pIHsKKyAgICAgICAgLyog aW4gb3JkZXIgdG8gYXZvaWQgaGFyZGNvZGluZyB0aGUgaW50ZXJwcmV0ZXIgbG9hZAorICAgICAg ICAgICBhZGRyZXNzIGluIHFlbXUsIHdlIGFsbG9jYXRlIGEgYmlnIGVub3VnaCBtZW1vcnkgem9u ZSAqLworICAgICAgICBlcnJvciA9IHRhcmdldF9tbWFwKDAsIElOVEVSUF9NQVBfU0laRSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9UX05PTkUsIE1BUF9QUklWQVRFIHwgTUFQX0FO T04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLTEsIDApOworICAgICAgICBpZiAoZXJy b3IgPT0gLTEpIHsKKyAgICAgICAgICAgIHBlcnJvcigibW1hcCIpOworICAgICAgICAgICAgZXhp dCgtMSk7CisgICAgICAgIH0KKyAgICAgICAgbG9hZF9hZGRyID0gZXJyb3I7CisgICAgICAgIGxv YWRfYWRkcl9zZXQgPSAxOworICAgIH0KKworICAgIGVwcG50ID0gZWxmX3BoZGF0YTsKKyAgICBm b3IgKGkgPSAwOyBpIDwgaW50ZXJwX2VsZl9leC0+ZV9waG51bTsgaSsrLCBlcHBudCsrKQorICAg ICAgICBpZiAoZXBwbnQtPnBfdHlwZSA9PSBQVF9MT0FEKSB7CisgICAgICAgICAgICBpbnQgZWxm X3R5cGUgPSBNQVBfUFJJVkFURSB8IE1BUF9ERU5ZV1JJVEU7CisgICAgICAgICAgICBpbnQgZWxm X3Byb3QgPSAwOworICAgICAgICAgICAgdW5zaWduZWQgbG9uZyB2YWRkciA9IDA7CisgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIGs7CisKKyAgICAgICAgICAgIGlmIChlcHBudC0+cF9mbGFncyAm IFBGX1IpCisgICAgICAgICAgICAgICAgZWxmX3Byb3QgPSAgUFJPVF9SRUFEOworICAgICAgICAg ICAgaWYgKGVwcG50LT5wX2ZsYWdzICYgUEZfVykKKyAgICAgICAgICAgICAgICBlbGZfcHJvdCB8 PSBQUk9UX1dSSVRFOworICAgICAgICAgICAgaWYgKGVwcG50LT5wX2ZsYWdzICYgUEZfWCkKKyAg ICAgICAgICAgICAgICBlbGZfcHJvdCB8PSBQUk9UX0VYRUM7CisgICAgICAgICAgICBpZiAoaW50 ZXJwX2VsZl9leC0+ZV90eXBlID09IEVUX0VYRUMgfHwgbG9hZF9hZGRyX3NldCkgeworICAgICAg ICAgICAgICAgIGVsZl90eXBlIHw9IE1BUF9GSVhFRDsKKyAgICAgICAgICAgICAgICB2YWRkciA9 IGVwcG50LT5wX3ZhZGRyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZXJyb3IgPSB0YXJn ZXRfbW1hcChsb2FkX2FkZHIgKyBUQVJHRVRfRUxGX1BBR0VTVEFSVCh2YWRkciksCisgICAgICAg ICAgICAgICAgIGVwcG50LT5wX2ZpbGVzeiArIFRBUkdFVF9FTEZfUEFHRU9GRlNFVChlcHBudC0+ cF92YWRkciksCisgICAgICAgICAgICAgICAgIGVsZl9wcm90LAorICAgICAgICAgICAgICAgICBl bGZfdHlwZSwKKyAgICAgICAgICAgICAgICAgaW50ZXJwcmV0ZXJfZmQsCisgICAgICAgICAgICAg ICAgIGVwcG50LT5wX29mZnNldCAtIFRBUkdFVF9FTEZfUEFHRU9GRlNFVChlcHBudC0+cF92YWRk cikpOworCisgICAgICAgICAgICBpZiAoZXJyb3IgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAv KiBSZWFsIGVycm9yICovCisgICAgICAgICAgICAgICAgY2xvc2UoaW50ZXJwcmV0ZXJfZmQpOwor ICAgICAgICAgICAgICAgIGZyZWUoZWxmX3BoZGF0YSk7CisgICAgICAgICAgICAgICAgcmV0dXJu IH4wVUw7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghbG9hZF9hZGRyX3NldCAm JiBpbnRlcnBfZWxmX2V4LT5lX3R5cGUgPT0gRVRfRFlOKSB7CisgICAgICAgICAgICAgICAgbG9h ZF9hZGRyID0gZXJyb3I7CisgICAgICAgICAgICAgICAgbG9hZF9hZGRyX3NldCA9IDE7CisgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGaW5kIHRoZSBlbmQg b2YgdGhlIGZpbGUgIG1hcHBpbmcgZm9yIHRoaXMgcGhkciwgYW5kIGtlZXAKKyAgICAgICAgICAg ICAqIHRyYWNrIG9mIHRoZSBsYXJnZXN0IGFkZHJlc3Mgd2Ugc2VlIGZvciB0aGlzLgorICAgICAg ICAgICAgICovCisgICAgICAgICAgICBrID0gbG9hZF9hZGRyICsgZXBwbnQtPnBfdmFkZHIgKyBl cHBudC0+cF9maWxlc3o7CisgICAgICAgICAgICBpZiAoayA+IGVsZl9ic3MpCisgICAgICAgICAg ICAgICAgZWxmX2JzcyA9IGs7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBEbyB0 aGUgc2FtZSB0aGluZyBmb3IgdGhlIG1lbW9yeSBtYXBwaW5nIC0gYmV0d2VlbgorICAgICAgICAg ICAgICogZWxmX2JzcyBhbmQgbGFzdF9ic3MgaXMgdGhlIGJzcyBzZWN0aW9uLgorICAgICAgICAg ICAgICovCisgICAgICAgICAgICBrID0gbG9hZF9hZGRyICsgZXBwbnQtPnBfbWVtc3ogKyBlcHBu dC0+cF92YWRkcjsKKyAgICAgICAgICAgIGlmIChrID4gbGFzdF9ic3MpCisgICAgICAgICAgICAg ICAgbGFzdF9ic3MgPSBrOworICAgICAgICB9CisKKyAgICAvKiBOb3cgdXNlIG1tYXAgdG8gbWFw IHRoZSBsaWJyYXJ5IGludG8gbWVtb3J5LiAqLworCisgICAgY2xvc2UoaW50ZXJwcmV0ZXJfZmQp OworCisgICAgLyoKKyAgICAgKiBOb3cgZmlsbCBvdXQgdGhlIGJzcyBzZWN0aW9uLiAgRmlyc3Qg cGFkIHRoZSBsYXN0IHBhZ2UgdXAKKyAgICAgKiB0byB0aGUgcGFnZSBib3VuZGFyeSwgYW5kIHRo ZW4gcGVyZm9ybSBhIG1tYXAgdG8gbWFrZSBzdXJlCisgICAgICogdGhhdCB0aGVyZSBhcmUgemVy b21hcHBlZCBwYWdlcyB1cCB0byBhbmQgaW5jbHVkaW5nIHRoZSBsYXN0CisgICAgICogYnNzIHBh Z2UuCisgICAgICovCisgICAgcGFkemVybyhlbGZfYnNzLCBsYXN0X2Jzcyk7CisgICAgLyogV2hh dCB3ZSBoYXZlIG1hcHBlZCBzbyBmYXIgKi8KKyAgICBlbGZfYnNzID0gVEFSR0VUX0VMRl9QQUdF U1RBUlQoZWxmX2JzcyArIHFlbXVfaG9zdF9wYWdlX3NpemUgLSAxKTsKKworICAgIC8qIE1hcCB0 aGUgbGFzdCBvZiB0aGUgYnNzIHNlZ21lbnQgKi8KKyAgICBpZiAobGFzdF9ic3MgPiBlbGZfYnNz KSB7CisgICAgICAgIHRhcmdldF9tbWFwKGVsZl9ic3MsIGxhc3RfYnNzLWVsZl9ic3MsCisgICAg ICAgICAgICAgICAgICAgIFBST1RfUkVBRCB8IFBST1RfV1JJVEUgfCBQUk9UX0VYRUMsCisgICAg ICAgICAgICAgICAgICAgIE1BUF9GSVhFRCB8IE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywg LTEsIDApOworICAgIH0KKyAgICBmcmVlKGVsZl9waGRhdGEpOworCisgICAgKmludGVycF9sb2Fk X2FkZHIgPSBsb2FkX2FkZHI7CisgICAgcmV0dXJuICgodW5zaWduZWQgbG9uZylpbnRlcnBfZWxm X2V4LT5lX2VudHJ5KSArIGxvYWRfYWRkcjsKK30KKworLyogQmVzdCBhdHRlbXB0IHRvIGxvYWQg c3ltYm9scyBmcm9tIHRoaXMgRUxGIG9iamVjdC4gKi8KK3N0YXRpYyB2b2lkIGdsdWUobG9hZF9z eW1ib2xzLCBTWikoc3RydWN0IGVsZmhkciAqaGRyLCBpbnQgZmQpCit7CisgICAgdW5zaWduZWQg aW50IGk7CisgICAgc3RydWN0IGVsZl9zaGRyIHNlY2hkciwgc3ltdGFiLCBzdHJ0YWI7CisgICAg Y2hhciAqc3RyaW5nczsKKyAgICBzdHJ1Y3Qgc3ltaW5mbyAqczsKKyNpZiAoRUxGX0NMQVNTID09 IEVMRkNMQVNTNjQpCisgICAgLy8gRGlzYXMgdXNlcyAzMiBiaXQgc3ltYm9scworICAgIHN0cnVj dCBlbGYzMl9zeW0gKnN5bXMzMiA9IE5VTEw7CisgICAgc3RydWN0IGVsZl9zeW0gKnN5bTsKKyNl bmRpZgorCisgICAgbHNlZWsoZmQsIGhkci0+ZV9zaG9mZiwgU0VFS19TRVQpOworICAgIGZvciAo aSA9IDA7IGkgPCBoZHItPmVfc2hudW07IGkrKykgeworICAgICAgICBpZiAocmVhZChmZCwgJnNl Y2hkciwgc2l6ZW9mKHNlY2hkcikpICE9IHNpemVvZihzZWNoZHIpKQorICAgICAgICAgICAgcmV0 dXJuOworI2lmZGVmIEJTV0FQX05FRURFRAorICAgICAgICBnbHVlKGJzd2FwX3NoZHIsIFNaKSgm c2VjaGRyKTsKKyNlbmRpZgorICAgICAgICBpZiAoc2VjaGRyLnNoX3R5cGUgPT0gU0hUX1NZTVRB QikgeworICAgICAgICAgICAgc3ltdGFiID0gc2VjaGRyOworICAgICAgICAgICAgbHNlZWsoZmQs IGhkci0+ZV9zaG9mZgorICAgICAgICAgICAgICAgICAgKyBzaXplb2Yoc2VjaGRyKSAqIHNlY2hk ci5zaF9saW5rLCBTRUVLX1NFVCk7CisgICAgICAgICAgICBpZiAocmVhZChmZCwgJnN0cnRhYiwg c2l6ZW9mKHN0cnRhYikpCisgICAgICAgICAgICAgICAgIT0gc2l6ZW9mKHN0cnRhYikpCisgICAg ICAgICAgICAgICAgcmV0dXJuOworI2lmZGVmIEJTV0FQX05FRURFRAorICAgICAgICAgICAgZ2x1 ZShic3dhcF9zaGRyLCBTWikoJnN0cnRhYik7CisjZW5kaWYKKyAgICAgICAgICAgIGdvdG8gZm91 bmQ7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuOyAvKiBTaG91bGRuJ3QgaGFwcGVuLi4u ICovCisKKyBmb3VuZDoKKyAgICAvKiBOb3cga25vdyB3aGVyZSB0aGUgc3RydGFiIGFuZCBzeW10 YWIgYXJlLiAgU25hcmYgdGhlbS4gKi8KKyAgICBzID0gbWFsbG9jKHNpemVvZigqcykpOworICAg IHMtPmRpc2FzX3N5bXRhYiA9IG1hbGxvYyhzeW10YWIuc2hfc2l6ZSk7CisjaWYgKEVMRl9DTEFT UyA9PSBFTEZDTEFTUzY0KQorICAgIHN5bXMzMiA9IG1hbGxvYyhzeW10YWIuc2hfc2l6ZSAvIHNp emVvZihzdHJ1Y3QgZWxmX3N5bSkKKyAgICAgICAgICAgICAgICAgICAgKiBzaXplb2Yoc3RydWN0 IGVsZjMyX3N5bSkpOworI2VuZGlmCisgICAgcy0+ZGlzYXNfc3RydGFiID0gc3RyaW5ncyA9IG1h bGxvYyhzdHJ0YWIuc2hfc2l6ZSk7CisgICAgaWYgKCFzLT5kaXNhc19zeW10YWIgfHwgIXMtPmRp c2FzX3N0cnRhYikKKyAgICAgICAgcmV0dXJuOworCisgICAgbHNlZWsoZmQsIHN5bXRhYi5zaF9v ZmZzZXQsIFNFRUtfU0VUKTsKKyAgICBpZiAocmVhZChmZCwgcy0+ZGlzYXNfc3ltdGFiLCBzeW10 YWIuc2hfc2l6ZSkgIT0gc3ltdGFiLnNoX3NpemUpCisgICAgICAgIHJldHVybjsKKworICAgIGZv ciAoaSA9IDA7IGkgPCBzeW10YWIuc2hfc2l6ZSAvIHNpemVvZihzdHJ1Y3QgZWxmX3N5bSk7IGkr KykgeworI2lmZGVmIEJTV0FQX05FRURFRAorICAgICAgICBnbHVlKGJzd2FwX3N5bSwgU1opKHMt PmRpc2FzX3N5bXRhYiArIHNpemVvZihzdHJ1Y3QgZWxmX3N5bSkqaSk7CisjZW5kaWYKKyNpZiAo RUxGX0NMQVNTID09IEVMRkNMQVNTNjQpCisgICAgICAgIHN5bSA9IHMtPmRpc2FzX3N5bXRhYiAr IHNpemVvZihzdHJ1Y3QgZWxmX3N5bSkqaTsKKyAgICAgICAgc3ltczMyW2ldLnN0X25hbWUgPSBz eW0tPnN0X25hbWU7CisgICAgICAgIHN5bXMzMltpXS5zdF9pbmZvID0gc3ltLT5zdF9pbmZvOwor ICAgICAgICBzeW1zMzJbaV0uc3Rfb3RoZXIgPSBzeW0tPnN0X290aGVyOworICAgICAgICBzeW1z MzJbaV0uc3Rfc2huZHggPSBzeW0tPnN0X3NobmR4OworICAgICAgICBzeW1zMzJbaV0uc3RfdmFs dWUgPSBzeW0tPnN0X3ZhbHVlICYgMHhmZmZmZmZmZjsKKyAgICAgICAgc3ltczMyW2ldLnN0X3Np emUgPSBzeW0tPnN0X3NpemUgJiAweGZmZmZmZmZmOworI2VuZGlmCisgICAgfQorCisjaWYgKEVM Rl9DTEFTUyA9PSBFTEZDTEFTUzY0KQorICAgIGZyZWUocy0+ZGlzYXNfc3ltdGFiKTsKKyAgICBz LT5kaXNhc19zeW10YWIgPSBzeW1zMzI7CisjZW5kaWYKKyAgICBsc2VlayhmZCwgc3RydGFiLnNo X29mZnNldCwgU0VFS19TRVQpOworICAgIGlmIChyZWFkKGZkLCBzdHJpbmdzLCBzdHJ0YWIuc2hf c2l6ZSkgIT0gc3RydGFiLnNoX3NpemUpCisgICAgICAgIHJldHVybjsKKyAgICBzLT5kaXNhc19u dW1fc3ltcyA9IHN5bXRhYi5zaF9zaXplIC8gc2l6ZW9mKHN0cnVjdCBlbGZfc3ltKTsKKyAgICBz LT5uZXh0ID0gc3ltaW5mb3M7CisgICAgc3ltaW5mb3MgPSBzOworfQorCitzdGF0aWMgaW50IGds dWUobG9hZF9lbGZfYmluYXJ5LCBTWikoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGFyZ2V0X3B0X3JlZ3MgKnJl Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGltYWdlX2lu Zm8gKmluZm8pCit7CisgICAgc3RydWN0IGVsZmhkciBlbGZfZXg7CisgICAgc3RydWN0IGVsZmhk ciBpbnRlcnBfZWxmX2V4OworICAgIHN0cnVjdCBleGVjIGludGVycF9leDsKKyAgICBpbnQgaW50 ZXJwcmV0ZXJfZmQgPSAtMTsgLyogYXZvaWQgd2FybmluZyAqLworICAgIHVuc2lnbmVkIGxvbmcg bG9hZF9hZGRyLCBsb2FkX2JpYXM7CisgICAgaW50IGxvYWRfYWRkcl9zZXQgPSAwOworICAgIHVu c2lnbmVkIGludCBpbnRlcnByZXRlcl90eXBlID0gSU5URVJQUkVURVJfTk9ORTsKKyAgICB1bnNp Z25lZCBjaGFyIGliY3MyX2ludGVycHJldGVyOworICAgIGludCBpOworICAgIHVuc2lnbmVkIGxv bmcgbWFwcGVkX2FkZHI7CisgICAgc3RydWN0IGVsZl9waGRyICogZWxmX3BwbnQ7CisgICAgc3Ry dWN0IGVsZl9waGRyICplbGZfcGhkYXRhOworICAgIHVuc2lnbmVkIGxvbmcgZWxmX2Jzcywgaywg ZWxmX2JyazsKKyAgICBpbnQgcmV0dmFsOworICAgIGNoYXIgKiBlbGZfaW50ZXJwcmV0ZXI7Cisg ICAgdW5zaWduZWQgbG9uZyBlbGZfZW50cnksIGludGVycF9sb2FkX2FkZHIgPSAwOworICAgIGlu dCBzdGF0dXM7CisgICAgdW5zaWduZWQgbG9uZyBzdGFydF9jb2RlLCBlbmRfY29kZSwgZW5kX2Rh dGE7CisgICAgdW5zaWduZWQgbG9uZyByZWxvY19mdW5jX2Rlc2MgPSAwOworICAgIHVuc2lnbmVk IGxvbmcgZWxmX3N0YWNrOworICAgIGNoYXIgcGFzc2VkX2ZpbGVub1s2XTsKKworICAgIGliY3My X2ludGVycHJldGVyID0gMDsKKyAgICBzdGF0dXMgPSAwOworICAgIGxvYWRfYWRkciA9IDA7Cisg ICAgbG9hZF9iaWFzID0gMDsKKyAgICBlbGZfZXggPSAqKChzdHJ1Y3QgZWxmaGRyICopIGJwcm0t PmJ1Zik7ICAgICAgICAgIC8qIGV4ZWMtaGVhZGVyICovCisjaWZkZWYgQlNXQVBfTkVFREVECisg ICAgZ2x1ZShic3dhcF9laGRyLCBTWikoJmVsZl9leCk7CisjZW5kaWYKKworICAgIC8qIEZpcnN0 IG9mIGFsbCwgc29tZSBzaW1wbGUgY29uc2lzdGVuY3kgY2hlY2tzICovCisgICAgaWYgKChlbGZf ZXguZV90eXBlICE9IEVUX0VYRUMgJiYgZWxmX2V4LmVfdHlwZSAhPSBFVF9EWU4pIHx8CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICghIGVsZl9jaGVja19hcmNoKGVsZl9leC5lX21h Y2hpbmUpKSkgeworICAgICAgICByZXR1cm4gLUVOT0VYRUM7CisgICAgfQorCisgICAgYnBybS0+ cCA9IGNvcHlfZWxmX3N0cmluZ3MoMSwgJmJwcm0tPmZpbGVuYW1lLCBicHJtLT5wYWdlLCBicHJt LT5wKTsKKyAgICBicHJtLT5wID0gY29weV9lbGZfc3RyaW5ncyhicHJtLT5lbnZjLCBicHJtLT5l bnZwLCBicHJtLT5wYWdlLCBicHJtLT5wKTsKKyAgICBicHJtLT5wID0gY29weV9lbGZfc3RyaW5n cyhicHJtLT5hcmdjLCBicHJtLT5hcmd2LCBicHJtLT5wYWdlLCBicHJtLT5wKTsKKyAgICBpZiAo IWJwcm0tPnApIHsKKyAgICAgICAgcmV0dmFsID0gLUUyQklHOworICAgIH0KKworICAgIC8qIE5v dyByZWFkIGluIGFsbCBvZiB0aGUgaGVhZGVyIGluZm9ybWF0aW9uICovCisgICAgZWxmX3BoZGF0 YSA9IChzdHJ1Y3QgZWxmX3BoZHIgKiltYWxsb2MoZWxmX2V4LmVfcGhlbnRzaXplICogZWxmX2V4 LmVfcGhudW0pOworICAgIGlmIChlbGZfcGhkYXRhID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJu IC1FTk9NRU07CisgICAgfQorCisgICAgcmV0dmFsID0gbHNlZWsoYnBybS0+ZmQsIGVsZl9leC5l X3Bob2ZmLCBTRUVLX1NFVCk7CisgICAgaWYgKHJldHZhbCA+IDApIHsKKyAgICAgICAgcmV0dmFs ID0gcmVhZChicHJtLT5mZCwgKGNoYXIgKillbGZfcGhkYXRhLAorICAgICAgICAgICAgICAgICAg ICAgIGVsZl9leC5lX3BoZW50c2l6ZSAqIGVsZl9leC5lX3BobnVtKTsKKyAgICB9CisKKyAgICBp ZiAocmV0dmFsIDwgMCkgeworICAgICAgICBwZXJyb3IoImxvYWRfZWxmX2JpbmFyeSIpOworICAg ICAgICBleGl0KC0xKTsKKyAgICB9CisKKyNpZmRlZiBCU1dBUF9ORUVERUQKKyAgICBlbGZfcHBu dCA9IGVsZl9waGRhdGE7CisgICAgZm9yIChpID0gMDsgaSA8IGVsZl9leC5lX3BobnVtOyBpKyss IGVsZl9wcG50KyspIHsKKyAgICAgICAgZ2x1ZShic3dhcF9waGRyLCBTWikoZWxmX3BwbnQpOwor ICAgIH0KKyNlbmRpZgorICAgIGVsZl9wcG50ID0gZWxmX3BoZGF0YTsKKworICAgIGVsZl9ic3Mg PSAwOworICAgIGVsZl9icmsgPSAwOworCisKKyAgICBlbGZfc3RhY2sgPSB+MFVMOworICAgIGVs Zl9pbnRlcnByZXRlciA9IE5VTEw7CisgICAgc3RhcnRfY29kZSA9IH4wVUw7CisgICAgZW5kX2Nv ZGUgPSAwOworICAgIGVuZF9kYXRhID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgPCBlbGZfZXgu ZV9waG51bTsgaSsrKSB7CisgICAgICAgIGlmIChlbGZfcHBudC0+cF90eXBlID09IFBUX0lOVEVS UCkgeworICAgICAgICAgICAgaWYgKGVsZl9pbnRlcnByZXRlciAhPSBOVUxMKSB7CisgICAgICAg ICAgICAgICAgZnJlZSAoZWxmX3BoZGF0YSk7CisgICAgICAgICAgICAgICAgZnJlZShlbGZfaW50 ZXJwcmV0ZXIpOworICAgICAgICAgICAgICAgIGNsb3NlKGJwcm0tPmZkKTsKKyAgICAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogVGhp cyBpcyB0aGUgcHJvZ3JhbSBpbnRlcnByZXRlciB1c2VkIGZvcgorICAgICAgICAgICAgICogc2hh cmVkIGxpYnJhcmllcyAtIGZvciBub3cgYXNzdW1lIHRoYXQgdGhpcworICAgICAgICAgICAgICog aXMgYW4gYS5vdXQgZm9ybWF0IGJpbmFyeQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBl bGZfaW50ZXJwcmV0ZXIgPSAoY2hhciAqKW1hbGxvYyhlbGZfcHBudC0+cF9maWxlc3opOworCisg ICAgICAgICAgICBpZiAoZWxmX2ludGVycHJldGVyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAg ICBmcmVlIChlbGZfcGhkYXRhKTsKKyAgICAgICAgICAgICAgICBjbG9zZShicHJtLT5mZCk7Cisg ICAgICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07CisgICAgICAgICAgICB9CisKKyAgICAgICAg ICAgIHJldHZhbCA9IGxzZWVrKGJwcm0tPmZkLCBlbGZfcHBudC0+cF9vZmZzZXQsIFNFRUtfU0VU KTsKKyAgICAgICAgICAgIGlmIChyZXR2YWwgPj0gMCkgeworICAgICAgICAgICAgICAgIHJldHZh bCA9IHJlYWQoYnBybS0+ZmQsIGVsZl9pbnRlcnByZXRlciwgZWxmX3BwbnQtPnBfZmlsZXN6KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXR2YWwgPCAwKSB7CisgICAgICAgICAg ICAgICAgcGVycm9yKCJsb2FkX2VsZl9iaW5hcnkyIik7CisgICAgICAgICAgICAgICAgZXhpdCgt MSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIElmIHRoZSBwcm9ncmFtIGludGVy cHJldGVyIGlzIG9uZSBvZiB0aGVzZSB0d28sCisgICAgICAgICAgICAgICB0aGVuIGFzc3VtZSBh biBpQkNTMiBpbWFnZS4gT3RoZXJ3aXNlIGFzc3VtZQorICAgICAgICAgICAgICAgYSBuYXRpdmUg bGludXggaW1hZ2UuICovCisKKyAgICAgICAgICAgIC8qIEpSUCAtIE5lZWQgdG8gYWRkIFg4NiBs aWIgZGlyIHN0dWZmIGhlcmUuLi4gKi8KKworICAgICAgICAgICAgaWYgKHN0cmNtcChlbGZfaW50 ZXJwcmV0ZXIsICIvdXNyL2xpYi9saWJjLnNvLjEiKSA9PSAwIHx8CisgICAgICAgICAgICAgICAg c3RyY21wKGVsZl9pbnRlcnByZXRlciwgIi91c3IvbGliL2xkLnNvLjEiKSA9PSAwKSB7CisgICAg ICAgICAgICAgICAgaWJjczJfaW50ZXJwcmV0ZXIgPSAxOworICAgICAgICAgICAgfQorCisjaWYg MAorICAgICAgICAgICAgcHJpbnRmKCJVc2luZyBFTEYgaW50ZXJwcmV0ZXIgJXNcbiIsIGVsZl9p bnRlcnByZXRlcik7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChyZXR2YWwgPj0gMCkgeworICAg ICAgICAgICAgICAgIHJldHZhbCA9IG9wZW4ocGF0aChlbGZfaW50ZXJwcmV0ZXIpLCBPX1JET05M WSk7CisgICAgICAgICAgICAgICAgaWYgKHJldHZhbCA+PSAwKSB7CisgICAgICAgICAgICAgICAg ICAgIGludGVycHJldGVyX2ZkID0gcmV0dmFsOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg ICAgICAgICAgICAgICAgICAgIHBlcnJvcihlbGZfaW50ZXJwcmV0ZXIpOworICAgICAgICAgICAg ICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGlmIChyZXR2YWwgPj0gMCkgeworICAgICAgICAgICAgICAgIHJldHZhbCA9IGxz ZWVrKGludGVycHJldGVyX2ZkLCAwLCBTRUVLX1NFVCk7CisgICAgICAgICAgICAgICAgaWYgKHJl dHZhbCA+PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHZhbCA9IHJlYWQoaW50ZXJwcmV0 ZXJfZmQsIGJwcm0tPmJ1ZiwgMTI4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgICAgICBpZiAocmV0dmFsID49IDApIHsKKyAgICAgICAgICAgICAgICBpbnRlcnBf ZXggPSAqKChzdHJ1Y3QgZXhlYyAqKWJwcm0tPmJ1Zik7IC8qIGFvdXQgZXhlYy1oZWFkZXIgKi8K KyAgICAgICAgICAgICAgICBpbnRlcnBfZWxmX2V4ID0gKigoc3RydWN0IGVsZmhkciAqKWJwcm0t PmJ1Zik7IC8qIGVsZiBleGVjLWhlYWRlciAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAg aWYgKHJldHZhbCA8IDApIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoImxvYWRfZWxmX2JpbmFy eTMiKTsKKyAgICAgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgICAgICBlbGZfcHBudCsrOworICAgIH0KKworICAgIC8qIFNvbWUgc2ltcGxlIGNvbnNp c3RlbmN5IGNoZWNrcyBmb3IgdGhlIGludGVycHJldGVyICovCisgICAgaWYgKGVsZl9pbnRlcnBy ZXRlcikgeworICAgICAgICBpbnRlcnByZXRlcl90eXBlID0gSU5URVJQUkVURVJfRUxGIHwgSU5U RVJQUkVURVJfQU9VVDsKKworICAgICAgICAvKiBOb3cgZmlndXJlIG91dCB3aGljaCBmb3JtYXQg b3VyIGJpbmFyeSBpcyAqLworICAgICAgICBpZiAoKE5fTUFHSUMoaW50ZXJwX2V4KSAhPSBPTUFH SUMpICYmIChOX01BR0lDKGludGVycF9leCkgIT0gWk1BR0lDKSAmJgorICAgICAgICAgICAgKE5f TUFHSUMoaW50ZXJwX2V4KSAhPSBRTUFHSUMpKSB7CisgICAgICAgICAgICBpbnRlcnByZXRlcl90 eXBlID0gSU5URVJQUkVURVJfRUxGOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVycF9l bGZfZXguZV9pZGVudFswXSAhPSAweDdmIHx8CisgICAgICAgICAgICBzdHJuY21wKCZpbnRlcnBf ZWxmX2V4LmVfaWRlbnRbMV0sICJFTEYiLCAzKSAhPSAwKSB7CisgICAgICAgICAgICBpbnRlcnBy ZXRlcl90eXBlICY9IH5JTlRFUlBSRVRFUl9FTEY7CisgICAgICAgIH0KKworICAgICAgICBpZiAo IWludGVycHJldGVyX3R5cGUpIHsKKyAgICAgICAgICAgIGZyZWUoZWxmX2ludGVycHJldGVyKTsK KyAgICAgICAgICAgIGZyZWUoZWxmX3BoZGF0YSk7CisgICAgICAgICAgICBjbG9zZShicHJtLT5m ZCk7CisgICAgICAgICAgICByZXR1cm4gLUVMSUJCQUQ7CisgICAgICAgIH0KKyAgICB9CisKKyAg ICAvKiBPSywgd2UgYXJlIGRvbmUgd2l0aCB0aGF0LCBub3cgc2V0IHVwIHRoZSBhcmcgc3R1ZmYs CisgICAgICAgYW5kIHRoZW4gc3RhcnQgdGhpcyBzdWNrZXIgdXAgKi8KKworICAgIHsKKyAgICAg ICAgY2hhciAqcGFzc2VkX3A7CisKKyAgICAgICAgaWYgKGludGVycHJldGVyX3R5cGUgPT0gSU5U RVJQUkVURVJfQU9VVCkgeworICAgICAgICAgICAgc25wcmludGYocGFzc2VkX2ZpbGVubywgc2l6 ZW9mKHBhc3NlZF9maWxlbm8pLCAiJWQiLCBicHJtLT5mZCk7CisgICAgICAgICAgICBwYXNzZWRf cCA9IHBhc3NlZF9maWxlbm87CisKKyAgICAgICAgICAgIGlmIChlbGZfaW50ZXJwcmV0ZXIpIHsK KyAgICAgICAgICAgICAgICBicHJtLT5wID0gY29weV9lbGZfc3RyaW5ncygxLCAmcGFzc2VkX3As IGJwcm0tPnBhZ2UsIGJwcm0tPnApOworICAgICAgICAgICAgICAgIGJwcm0tPmFyZ2MrKzsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIWJwcm0tPnApIHsKKyAgICAgICAg ICAgIGlmIChlbGZfaW50ZXJwcmV0ZXIpIHsKKyAgICAgICAgICAgICAgICBmcmVlKGVsZl9pbnRl cnByZXRlcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcmVlIChlbGZfcGhkYXRhKTsK KyAgICAgICAgICAgIGNsb3NlKGJwcm0tPmZkKTsKKyAgICAgICAgICAgIHJldHVybiAtRTJCSUc7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBPSywgVGhpcyBpcyB0aGUgcG9pbnQgb2Ygbm8g cmV0dXJuICovCisgICAgaW5mby0+ZW5kX2RhdGEgPSAwOworICAgIGluZm8tPmVuZF9jb2RlID0g MDsKKyAgICBpbmZvLT5zdGFydF9tbWFwID0gKHVuc2lnbmVkIGxvbmcpRUxGX1NUQVJUX01NQVA7 CisgICAgaW5mby0+bW1hcCA9IDA7CisgICAgZWxmX2VudHJ5ID0gKHVuc2lnbmVkIGxvbmcpIGVs Zl9leC5lX2VudHJ5OworCisgICAgLyogRG8gdGhpcyBzbyB0aGF0IHdlIGNhbiBsb2FkIHRoZSBp bnRlcnByZXRlciwgaWYgbmVlZCBiZS4gIFdlIHdpbGwKKyAgICAgICBjaGFuZ2Ugc29tZSBvZiB0 aGVzZSBsYXRlciAqLworICAgIGluZm8tPnJzcyA9IDA7CisgICAgYnBybS0+cCA9IHNldHVwX2Fy Z19wYWdlcyhicHJtLT5wLCBicHJtLCBpbmZvKTsKKyAgICBpbmZvLT5zdGFydF9zdGFjayA9IGJw cm0tPnA7CisKKyAgICAvKiBOb3cgd2UgZG8gYSBsaXR0bGUgZ3J1bmd5IHdvcmsgYnkgbW1hcGlu ZyB0aGUgRUxGIGltYWdlIGludG8KKyAgICAgKiB0aGUgY29ycmVjdCBsb2NhdGlvbiBpbiBtZW1v cnkuICBBdCB0aGlzIHBvaW50LCB3ZSBhc3N1bWUgdGhhdAorICAgICAqIHRoZSBpbWFnZSBzaG91 bGQgYmUgbG9hZGVkIGF0IGZpeGVkIGFkZHJlc3MsIG5vdCBhdCBhIHZhcmlhYmxlCisgICAgICog YWRkcmVzcy4KKyAgICAgKi8KKworICAgIGZvciAoaSA9IDAsIGVsZl9wcG50ID0gZWxmX3BoZGF0 YTsgaSA8IGVsZl9leC5lX3BobnVtOyBpKyssIGVsZl9wcG50KyspIHsKKyAgICAgICAgaW50IGVs Zl9wcm90ID0gMDsKKyAgICAgICAgaW50IGVsZl9mbGFncyA9IDA7CisgICAgICAgIHVuc2lnbmVk IGxvbmcgZXJyb3I7CisKKyAgICAgICAgaWYgKGVsZl9wcG50LT5wX3R5cGUgIT0gUFRfTE9BRCkK KyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChlbGZfcHBudC0+cF9mbGFncyAm IFBGX1IpCisgICAgICAgICAgICBlbGZfcHJvdCB8PSBQUk9UX1JFQUQ7CisgICAgICAgIGlmIChl bGZfcHBudC0+cF9mbGFncyAmIFBGX1cpCisgICAgICAgICAgICBlbGZfcHJvdCB8PSBQUk9UX1dS SVRFOworICAgICAgICBpZiAoZWxmX3BwbnQtPnBfZmxhZ3MgJiBQRl9YKQorICAgICAgICAgICAg ZWxmX3Byb3QgfD0gUFJPVF9FWEVDOworICAgICAgICBlbGZfZmxhZ3MgPSBNQVBfUFJJVkFURSB8 IE1BUF9ERU5ZV1JJVEU7CisgICAgICAgIGlmIChlbGZfZXguZV90eXBlID09IEVUX0VYRUMgfHwg bG9hZF9hZGRyX3NldCkgeworICAgICAgICAgICAgZWxmX2ZsYWdzIHw9IE1BUF9GSVhFRDsKKyAg ICAgICAgfSBlbHNlIGlmIChlbGZfZXguZV90eXBlID09IEVUX0RZTikgeworICAgICAgICAgICAg LyogVHJ5IGFuZCBnZXQgZHluYW1pYyBwcm9ncmFtcyBvdXQgb2YgdGhlIHdheSBvZiB0aGUgZGVm YXVsdCBtbWFwCisgICAgICAgICAgICAgICBiYXNlLCBhcyB3ZWxsIGFzIHdoYXRldmVyIHByb2dy YW0gdGhleSBtaWdodCB0cnkgdG8gZXhlYy4gIFRoaXMKKyAgICAgICAgICAgICAgIGlzIGJlY2F1 c2UgdGhlIGJyayB3aWxsIGZvbGxvdyB0aGUgbG9hZGVyLCBhbmQgaXMgbm90IG1vdmFibGUuICAq LworICAgICAgICAgICAgLyogTk9URTogZm9yIHFlbXUsIHdlIGRvIGEgYmlnIG1tYXAgdG8gZ2V0 IGVub3VnaCBzcGFjZQorICAgICAgICAgICAgICAgd2l0aG91dCBoYXJkY29kaW5nIGFueSBhZGRy ZXNzICovCisgICAgICAgICAgICBlcnJvciA9IHRhcmdldF9tbWFwKDAsIEVUX0RZTl9NQVBfU0la RSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPVF9OT05FLCBNQVBfUFJJVkFU RSB8IE1BUF9BTk9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtMSwgMCk7Cisg ICAgICAgICAgICBpZiAoZXJyb3IgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICBwZXJyb3IoIm1t YXAiKTsKKyAgICAgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGxvYWRfYmlhcyA9IFRBUkdFVF9FTEZfUEFHRVNUQVJUKGVycm9yIC0gZWxmX3BwbnQtPnBf dmFkZHIpOworICAgICAgICB9CisKKyAgICAgICAgZXJyb3IgPSB0YXJnZXRfbW1hcChUQVJHRVRf RUxGX1BBR0VTVEFSVChsb2FkX2JpYXMgKyBlbGZfcHBudC0+cF92YWRkciksCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKGVsZl9wcG50LT5wX2ZpbGVzeiArCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFRBUkdFVF9FTEZfUEFHRU9GRlNFVChlbGZfcHBudC0+cF92YWRkcikpLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZl9wcm90LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChNQVBfRklYRUQgfCBNQVBfUFJJVkFURSB8IE1BUF9ERU5ZV1JJVEUpLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJwcm0tPmZkLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChlbGZfcHBudC0+cF9vZmZzZXQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBUQVJHRVRfRUxGX1BBR0VPRkZTRVQoZWxmX3BwbnQtPnBfdmFkZHIpKSk7CisgICAgICAgIGlm IChlcnJvciA9PSAtMSkgeworICAgICAgICAgICAgcGVycm9yKCJtbWFwIik7CisgICAgICAgICAg ICBleGl0KC0xKTsKKyAgICAgICAgfQorCisjaWZkZWYgTE9XX0VMRl9TVEFDSworICAgICAgICBp ZiAoVEFSR0VUX0VMRl9QQUdFU1RBUlQoZWxmX3BwbnQtPnBfdmFkZHIpIDwgZWxmX3N0YWNrKQor ICAgICAgICAgICAgZWxmX3N0YWNrID0gVEFSR0VUX0VMRl9QQUdFU1RBUlQoZWxmX3BwbnQtPnBf dmFkZHIpOworI2VuZGlmCisKKyAgICAgICAgaWYgKCFsb2FkX2FkZHJfc2V0KSB7CisgICAgICAg ICAgICBsb2FkX2FkZHJfc2V0ID0gMTsKKyAgICAgICAgICAgIGxvYWRfYWRkciA9IGVsZl9wcG50 LT5wX3ZhZGRyIC0gZWxmX3BwbnQtPnBfb2Zmc2V0OworICAgICAgICAgICAgaWYgKGVsZl9leC5l X3R5cGUgPT0gRVRfRFlOKSB7CisgICAgICAgICAgICAgICAgbG9hZF9iaWFzICs9IGVycm9yIC0K KyAgICAgICAgICAgICAgICAgICAgVEFSR0VUX0VMRl9QQUdFU1RBUlQobG9hZF9iaWFzICsgZWxm X3BwbnQtPnBfdmFkZHIpOworICAgICAgICAgICAgICAgIGxvYWRfYWRkciArPSBsb2FkX2JpYXM7 CisgICAgICAgICAgICAgICAgcmVsb2NfZnVuY19kZXNjID0gbG9hZF9iaWFzOworICAgICAgICAg ICAgfQorICAgICAgICB9CisgICAgICAgIGsgPSBlbGZfcHBudC0+cF92YWRkcjsKKyAgICAgICAg aWYgKGsgPCBzdGFydF9jb2RlKQorICAgICAgICAgICAgc3RhcnRfY29kZSA9IGs7CisgICAgICAg IGsgPSBlbGZfcHBudC0+cF92YWRkciArIGVsZl9wcG50LT5wX2ZpbGVzejsKKyAgICAgICAgaWYg KGsgPiBlbGZfYnNzKQorICAgICAgICAgICAgZWxmX2JzcyA9IGs7CisgICAgICAgIGlmICgoZWxm X3BwbnQtPnBfZmxhZ3MgJiBQRl9YKSAmJiBlbmRfY29kZSA8ICBrKQorICAgICAgICAgICAgZW5k X2NvZGUgPSBrOworICAgICAgICBpZiAoZW5kX2RhdGEgPCBrKQorICAgICAgICAgICAgZW5kX2Rh dGEgPSBrOworICAgICAgICBrID0gZWxmX3BwbnQtPnBfdmFkZHIgKyBlbGZfcHBudC0+cF9tZW1z ejsKKyAgICAgICAgaWYgKGsgPiBlbGZfYnJrKQorICAgICAgICAgICAgZWxmX2JyayA9IGs7Cisg ICAgfQorCisgICAgZWxmX2VudHJ5ICs9IGxvYWRfYmlhczsKKyAgICBlbGZfYnNzICs9IGxvYWRf YmlhczsKKyAgICBlbGZfYnJrICs9IGxvYWRfYmlhczsKKyAgICBzdGFydF9jb2RlICs9IGxvYWRf YmlhczsKKyAgICBlbmRfY29kZSArPSBsb2FkX2JpYXM7CisgICAgLy8gICAgc3RhcnRfZGF0YSAr PSBsb2FkX2JpYXM7CisgICAgZW5kX2RhdGEgKz0gbG9hZF9iaWFzOworCisgICAgaWYgKGVsZl9p bnRlcnByZXRlcikgeworICAgICAgICBpZiAoaW50ZXJwcmV0ZXJfdHlwZSAmIDEpIHsKKyAgICAg ICAgICAgIGVsZl9lbnRyeSA9IGxvYWRfYW91dF9pbnRlcnAoJmludGVycF9leCwgaW50ZXJwcmV0 ZXJfZmQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGludGVycHJldGVyX3R5cGUgJiAy KSB7CisgICAgICAgICAgICBlbGZfZW50cnkgPSBnbHVlKGxvYWRfZWxmX2ludGVycCwgU1opKCZp bnRlcnBfZWxmX2V4LCBpbnRlcnByZXRlcl9mZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJmludGVycF9sb2FkX2FkZHIpOworICAgICAgICB9Cisg ICAgICAgIHJlbG9jX2Z1bmNfZGVzYyA9IGludGVycF9sb2FkX2FkZHI7CisKKyAgICAgICAgY2xv c2UoaW50ZXJwcmV0ZXJfZmQpOworICAgICAgICBmcmVlKGVsZl9pbnRlcnByZXRlcik7CisKKyAg ICAgICAgaWYgKGVsZl9lbnRyeSA9PSB+MFVMKSB7CisgICAgICAgICAgICBwcmludGYoIlVuYWJs ZSB0byBsb2FkIGludGVycHJldGVyXG4iKTsKKyAgICAgICAgICAgIGZyZWUoZWxmX3BoZGF0YSk7 CisgICAgICAgICAgICBleGl0KC0xKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyZWUoZWxm X3BoZGF0YSk7CisKKyAgICBpZiAobG9nbGV2ZWwpCisgICAgICAgIGdsdWUobG9hZF9zeW1ib2xz LCBTWikoJmVsZl9leCwgYnBybS0+ZmQpOworCisgICAgaWYgKGludGVycHJldGVyX3R5cGUgIT0g SU5URVJQUkVURVJfQU9VVCkKKyAgICAgICAgY2xvc2UoYnBybS0+ZmQpOworICAgIGluZm8tPnBl cnNvbmFsaXR5ID0gKGliY3MyX2ludGVycHJldGVyID8gUEVSX1NWUjQgOiBQRVJfTElOVVgpOwor CisjaWZkZWYgTE9XX0VMRl9TVEFDSworICAgIGluZm8tPnN0YXJ0X3N0YWNrID0gYnBybS0+cCA9 IGVsZl9zdGFjayAtIDQ7CisjZW5kaWYKKyAgICBicHJtLT5wID0gZ2x1ZShjcmVhdGVfZWxmX3Rh YmxlcywgU1opKGJwcm0tPnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBicHJtLT5hcmdjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYnBybS0+ZW52YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICZlbGZfZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2Fk X2FkZHIsIGxvYWRfYmlhcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludGVycF9sb2FkX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAoaW50ZXJwcmV0ZXJfdHlwZSA9PQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIElOVEVSUFJFVEVSX0FPVVQgPyAwIDogMSksCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvKTsKKyAgICBpbmZvLT5sb2FkX2FkZHIg PSByZWxvY19mdW5jX2Rlc2M7CisgICAgaW5mby0+c3RhcnRfYnJrID0gaW5mby0+YnJrID0gZWxm X2JyazsKKyAgICBpbmZvLT5lbmRfY29kZSA9IGVuZF9jb2RlOworICAgIGluZm8tPnN0YXJ0X2Nv ZGUgPSBzdGFydF9jb2RlOworICAgIGluZm8tPnN0YXJ0X2RhdGEgPSBlbmRfY29kZTsKKyAgICBp bmZvLT5lbmRfZGF0YSA9IGVuZF9kYXRhOworICAgIGluZm8tPnN0YXJ0X3N0YWNrID0gYnBybS0+ cDsKKworICAgIC8qIENhbGxpbmcgc2V0X2JyayBlZmZlY3RpdmVseSBtbWFwcyB0aGUgcGFnZXMg dGhhdCB3ZSBuZWVkIGZvciB0aGUgYnNzIGFuZCBicmVhaworICAgICAgIHNlY3Rpb25zICovCisg ICAgc2V0X2JyayhlbGZfYnNzLCBlbGZfYnJrKTsKKworICAgIHBhZHplcm8oZWxmX2JzcywgZWxm X2Jyayk7CisKKyNpZiAwCisgICAgcHJpbnRmKCIoc3RhcnRfYnJrKSAleFxuIiAsIGluZm8tPnN0 YXJ0X2Jyayk7CisgICAgcHJpbnRmKCIoZW5kX2NvZGUpICV4XG4iICwgaW5mby0+ZW5kX2NvZGUp OworICAgIHByaW50ZigiKHN0YXJ0X2NvZGUpICV4XG4iICwgaW5mby0+c3RhcnRfY29kZSk7Cisg ICAgcHJpbnRmKCIoZW5kX2RhdGEpICV4XG4iICwgaW5mby0+ZW5kX2RhdGEpOworICAgIHByaW50 ZigiKHN0YXJ0X3N0YWNrKSAleFxuIiAsIGluZm8tPnN0YXJ0X3N0YWNrKTsKKyAgICBwcmludGYo IihicmspICV4XG4iICwgaW5mby0+YnJrKTsKKyNlbmRpZgorCisgICAgaWYgKGluZm8tPnBlcnNv bmFsaXR5ID09IFBFUl9TVlI0KSB7CisgICAgICAgIC8qIFdoeSB0aGlzLCB5b3UgYXNrPz8/ICBX ZWxsIFNWcjQgbWFwcyBwYWdlIDAgYXMgcmVhZC1vbmx5LAorICAgICAgICAgICBhbmQgc29tZSBh cHBsaWNhdGlvbnMgImRlcGVuZCIgdXBvbiB0aGlzIGJlaGF2aW9yLgorICAgICAgICAgICBTaW5j ZSB3ZSBkbyBub3QgaGF2ZSB0aGUgcG93ZXIgdG8gcmVjb21waWxlIHRoZXNlLCB3ZQorICAgICAg ICAgICBlbXVsYXRlIHRoZSBTVnI0IGJlaGF2aW9yLiAgU2lnaC4gICovCisgICAgICAgIG1hcHBl ZF9hZGRyID0gdGFyZ2V0X21tYXAoMCwgcWVtdV9ob3N0X3BhZ2Vfc2l6ZSwgUFJPVF9SRUFEIHwg UFJPVF9FWEVDLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BUF9GSVhFRCB8 IE1BUF9QUklWQVRFLCAtMSwgMCk7CisgICAgfQorCisgICAgaW5mby0+ZW50cnkgPSBlbGZfZW50 cnk7CisKKyAgICByZXR1cm4gMDsKK30KSW5kZXg6IHFlbXUvbGludXgtdXNlci9tYWluLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQotLS0gcWVtdS5vcmlnL2xpbnV4LXVzZXIvbWFpbi5jCTIwMDctMTAtMDcgMTA6NTU6 NDUuMDAwMDAwMDAwICswMDAwCisrKyBxZW11L2xpbnV4LXVzZXIvbWFpbi5jCTIwMDctMTAtMDcg MTA6NTU6NTQuMDAwMDAwMDAwICswMDAwCkBAIC01NjQsNiArNTY0LDcgQEAKICAgICAgICAgY2Fz ZSAweDg4OgogICAgICAgICBjYXNlIDB4OTA6CiAjZWxzZQorICAgICAgICBjYXNlIDB4MTEwOgog ICAgICAgICBjYXNlIDB4MTZkOgogI2VuZGlmCiAgICAgICAgICAgICByZXQgPSBkb19zeXNjYWxs IChlbnYsIGVudi0+Z3JlZ3NbMV0sCkluZGV4OiBxZW11L2xpbnV4LXVzZXIvcWVtdS5oCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KLS0tIHFlbXUub3JpZy9saW51eC11c2VyL3FlbXUuaAkyMDA3LTEwLTA3IDEwOjUwOjA1 LjAwMDAwMDAwMCArMDAwMAorKysgcWVtdS9saW51eC11c2VyL3FlbXUuaAkyMDA3LTEwLTA3IDEw OjUxOjA5LjAwMDAwMDAwMCArMDAwMApAQCAtMzMsNiArMzMsNyBAQAogICAgICAgICB0YXJnZXRf dWxvbmcgICAgZGF0YV9vZmZzZXQ7CiAgICAgICAgIGNoYXIgICAgICAgICAgICAqKmhvc3RfYXJn djsKIAlpbnQJCXBlcnNvbmFsaXR5OworICAgICAgICBpbnQgICAgICAgICAgICAgaXNfNjRiaXRz OwogfTsKIAogI2lmZGVmIFRBUkdFVF9JMzg2CkluZGV4OiBxZW11L2xpbnV4LXVzZXIvc3BhcmM2 NC9zeXNjYWxsX25yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcWVtdS5vcmlnL2xpbnV4LXVzZXIvc3BhcmM2 NC9zeXNjYWxsX25yLmgJMjAwNy0xMC0wNyAxMTowMTowNi4wMDAwMDAwMDAgKzAwMDAKKysrIHFl bXUvbGludXgtdXNlci9zcGFyYzY0L3N5c2NhbGxfbnIuaAkyMDA3LTEwLTA3IDExOjExOjU4LjAw MDAwMDAwMCArMDAwMApAQCAtMjksMTEgKzI5LDExIEBACiAjZGVmaW5lIFRBUkdFVF9OUl9zaWdh bHRzdGFjawkgMjggLyogQ29tbW9uCQkJCQkgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfcGF1c2Ug ICAgICAgICAgICAgICAyOSAvKiBJcyBzaWdibG9jaygwKS0+c2lncGF1c2UoKSBpbiBTdW5PUyAg ICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl91dGltZSAgICAgICAgICAgICAgIDMwIC8qIElt cGxlbWVudGVkIHZpYSB1dGltZXMoKSB1bmRlciBTdW5PUyAgICAgICAgKi8KLS8qICNkZWZpbmUg VEFSR0VUX05SX2xjaG93bjMyICAgICAgICAgMzEgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAg ICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUQVJHRVRfTlJfZmNob3duMzIgICAg ICAgICAzMiAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICov CisjZGVmaW5lIFRBUkdFVF9OUl9sY2hvd24zMiAgICAgICAgICAgIDMxIC8qIExpbnV4IHNwYXJj MzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VUX05SX2Zj aG93bjMyICAgICAgICAgICAgMzIgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAg ICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfYWNjZXNzICAgICAgICAgICAgICAzMyAv KiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5l IFRBUkdFVF9OUl9uaWNlICAgICAgICAgICAgICAgIDM0IC8qIEltcGxlbWVudGVkIHZpYSBnZXQv c2V0cHJpb3JpdHkoKSBpbiBTdW5PUyAgKi8KLS8qICNkZWZpbmUgVEFSR0VUX05SX2Nob3duMzIg ICAgICAgICAgMzUgICAgTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAg ICAqLworI2RlZmluZSBUQVJHRVRfTlJfY2hvd24zMiAgICAgICAgICAgICAzNSAvKiAgTGludXgg c3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9O Ul9zeW5jICAgICAgICAgICAgICAgIDM2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2tpbGwgICAgICAgICAgICAgICAg MzcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2Rl ZmluZSBUQVJHRVRfTlJfc3RhdCAgICAgICAgICAgICAgICAzOCAvKiBDb21tb24gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00Miw3ICs0Miw3IEBACiAjZGVmaW5l IFRBUkdFVF9OUl9kdXAgICAgICAgICAgICAgICAgIDQxIC8qIENvbW1vbiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX3BpcGUgICAgICAg ICAgICAgICAgNDIgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLwogI2RlZmluZSBUQVJHRVRfTlJfdGltZXMgICAgICAgICAgICAgICA0MyAvKiBJbXBsZW1l bnRlZCB2aWEgZ2V0cnVzYWdlKCkgaW4gU3VuT1MgICAgICAgICovCi0vKiAjZGVmaW5lIFRBUkdF VF9OUl9nZXR1aWQzMiAgICAgICAgIDQ0ICAgIExpbnV4IHNwYXJjMzIgc3BlY2lmaWMgICAgICAg ICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VUX05SX2dldHVpZDMyICAgICAgICAgICAg NDQgLyogTGludXggc3BhcmMzMiBzcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwogI2Rl ZmluZSBUQVJHRVRfTlJfdW1vdW50MiAgICAgICAgICAgICA0NSAvKiBMaW51eCBTcGVjaWZpYyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9zZXRnaWQg ICAgICAgICAgICAgIDQ2IC8qIEltcGxlbWVudGVkIHZpYSBzZXRyZWdpZCgpIGluIFN1bk9TICAg ICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2dldGdpZCAgICAgICAgICAgICAgNDcgLyogQ29t bW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpAQCAtNTEsNDggKzUx LDQ4IEBACiAjZGVmaW5lIFRBUkdFVF9OUl9nZXRlZ2lkICAgICAgICAgICAgIDUwIC8qIFN1bk9T IGNhbGxzIGdldGdpZCgpICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VU X05SX2FjY3QgICAgICAgICAgICAgICAgNTEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfbWVtb3J5X29yZGVyaW5nCSA1 MiAvKiBMaW51eCBTcGVjaWZpYwkJCQkgICAqLwotLyogI2RlZmluZSBUQVJHRVRfTlJfZ2V0Z2lk MzIgICAgICAgICA1MyAgICBMaW51eCBzcGFyYzMyIHNwZWNpZmljICAgICAgICAgICAgICAgICAg ICAgICovCisjZGVmaW5lIFRBUkdFVF9OUl9nZXRnaWQzMiAgICAgICAgICAgIDUzIC8qIExpbnV4 IHNwYXJjMzIgc3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VU X05SX2lvY3RsICAgICAgICAgICAgICAgNTQgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfcmVib290ICAgICAgICAgICAg ICA1NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0v KiAjZGVmaW5lIFRBUkdFVF9OUl9tbWFwMgkJIDU2ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMg ICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VUX05SX21tYXAyCQkgICAgICA1 NiAvKiBMaW51eCBzcGFyYzMyIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVm aW5lIFRBUkdFVF9OUl9zeW1saW5rICAgICAgICAgICAgIDU3IC8qIENvbW1vbiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX3JlYWRsaW5r ICAgICAgICAgICAgNTggLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfZXhlY3ZlICAgICAgICAgICAgICA1OSAvKiBDb21t b24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdF VF9OUl91bWFzayAgICAgICAgICAgICAgIDYwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2Nocm9vdCAgICAgICAgICAg ICAgNjEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwog I2RlZmluZSBUQVJHRVRfTlJfZnN0YXQgICAgICAgICAgICAgICA2MiAvKiBDb21tb24gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFRBUkdFVF9OUl9m c3RhdDY0ICAgICAgICAgIDYzICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAgICAg ICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VUX05SX2ZzdGF0NjQgICAgICAgICAgICAgNjMgLyog TGludXggc3BhcmMzMiBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBU QVJHRVRfTlJfZ2V0cGFnZXNpemUgICAgICAgICA2NCAvKiBDb21tb24gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9tc3luYyAgICAgICAg ICAgICAgIDY1IC8qIENvbW1vbiBpbiBuZXdlciAxLjMueCByZXZzLi4uICAgICAgICAgICAgICAg Ki8KICNkZWZpbmUgVEFSR0VUX05SX3Zmb3JrICAgICAgICAgICAgICAgNjYgLyogQ29tbW9uICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJf cHJlYWQ2NCAgICAgICAgICAgICA2NyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9wd3JpdGU2NCAgICAgICAgICAgIDY4 IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNk ZWZpbmUgVEFSR0VUX05SX2dldGV1aWQzMiAgICAgICAgNjkgICAgTGludXggc3BhcmMzMiwgc2Jy ayB1bmRlciBTdW5PUyAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUQVJHRVRfTlJfZ2V0ZWdp ZDMyICAgICAgICA3MCAgICBMaW51eCBzcGFyYzMyLCBzc3RrIHVuZGVyIFN1bk9TICAgICAgICAg ICAgICovCisjZGVmaW5lIFRBUkdFVF9OUl9nZXRldWlkMzIgICAgICAgICAgIDY5IC8qIExpbnV4 IHNwYXJjMzIsIHNicmsgdW5kZXIgU3VuT1MgICAgICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VU X05SX2dldGVnaWQzMiAgICAgICAgICAgNzAgLyogTGludXggc3BhcmMzMiwgc3N0ayB1bmRlciBT dW5PUyAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfbW1hcCAgICAgICAgICAgICAg ICA3MSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0v KiAjZGVmaW5lIFRBUkdFVF9OUl9zZXRyZXVpZDMyICAgICAgIDcyICAgIExpbnV4IHNwYXJjMzIs IHZhZHZpc2UgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VUX05SX3NldHJl dWlkMzIgICAgICAgICAgNzIgLyogTGludXggc3BhcmMzMiwgdmFkdmlzZSB1bmRlciBTdW5PUyAg ICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfbXVubWFwICAgICAgICAgICAgICA3MyAvKiBD b21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRB UkdFVF9OUl9tcHJvdGVjdCAgICAgICAgICAgIDc0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX21hZHZpc2UgICAgICAg ICAgICAgNzUgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq LwogI2RlZmluZSBUQVJHRVRfTlJfdmhhbmd1cCAgICAgICAgICAgICA3NiAvKiBDb21tb24gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0vKiAjZGVmaW5lIFRBUkdFVF9O Ul90cnVuY2F0ZTY0ICAgICAgIDc3ICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMJCQkgICAqLwor I2RlZmluZSBUQVJHRVRfTlJfdHJ1bmNhdGU2NCAgICAgICAgICA3NyAvKiBMaW51eCBzcGFyYzMy IFNwZWNpZmljCQkJKi8KICNkZWZpbmUgVEFSR0VUX05SX21pbmNvcmUgICAgICAgICAgICAgNzgg LyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmlu ZSBUQVJHRVRfTlJfZ2V0Z3JvdXBzICAgICAgICAgICA3OSAvKiBDb21tb24gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9zZXRncm91cHMg ICAgICAgICAgIDgwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2dldHBncnAgICAgICAgICAgICAgODEgLyogQ29tbW9u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUQVJH RVRfTlJfc2V0Z3JvdXBzMzIgICAgICA4MiAgICBMaW51eCBzcGFyYzMyLCBzZXRwZ3JwIHVuZGVy IFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIFRBUkdFVF9OUl9zZXRncm91cHMzMiAgICAgICAg IDgyIC8qIExpbnV4IHNwYXJjMzIsIHNldHBncnAgdW5kZXIgU3VuT1MgICAgICAgICAgKi8KICNk ZWZpbmUgVEFSR0VUX05SX3NldGl0aW1lciAgICAgICAgICAgODMgLyogQ29tbW9uICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUQVJHRVRfTlJfZnRy dW5jYXRlNjQgICAgICA4NCAgICBMaW51eCBzcGFyYzMyIFNwZWNpZmljCQkJICAgKi8KKyNkZWZp bmUgVEFSR0VUX05SX2Z0cnVuY2F0ZTY0ICAgICAgICAgODQgLyogTGludXggc3BhcmMzMiBTcGVj aWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfc3dhcG9uICAg ICAgICAgICAgICA4NSAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9nZXRpdGltZXIgICAgICAgICAgIDg2IC8qIENvbW1v biAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVEFS R0VUX05SX3NldHVpZDMyICAgICAgICAgODcgICAgTGludXggc3BhcmMzMiwgZ2V0aG9zdG5hbWUg dW5kZXIgU3VuT1MgICAgICAqLworI2RlZmluZSBUQVJHRVRfTlJfc2V0dWlkMzIgICAgICAgICAg ICA4NyAvKiBMaW51eCBzcGFyYzMyLCBnZXRob3N0bmFtZSB1bmRlciBTdW5PUyAgICAgICovCiAj ZGVmaW5lIFRBUkdFVF9OUl9zZXRob3N0bmFtZSAgICAgICAgIDg4IC8qIENvbW1vbiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVEFSR0VUX05SX3Nl dGdpZDMyICAgICAgICAgODkgICAgTGludXggc3BhcmMzMiwgZ2V0ZHRhYmxlc2l6ZSB1bmRlciBT dW5PUyAgICAqLworI2RlZmluZSBUQVJHRVRfTlJfc2V0Z2lkMzIgICAgICAgICAgICA4OSAvKiBM aW51eCBzcGFyYzMyLCBnZXRkdGFibGVzaXplIHVuZGVyIFN1bk9TICAgICovCiAjZGVmaW5lIFRB UkdFVF9OUl9kdXAyICAgICAgICAgICAgICAgIDkwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVEFSR0VUX05SX3NldGZzdWlkMzIg ICAgICAgOTEgICAgTGludXggc3BhcmMzMiwgZ2V0ZG9wdCB1bmRlciBTdW5PUyAgICAgICAgICAq LworI2RlZmluZSBUQVJHRVRfTlJfc2V0ZnN1aWQzMiAgICAgICAgICA5MSAvKiBMaW51eCBzcGFy YzMyLCBnZXRkb3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9m Y250bCAgICAgICAgICAgICAgIDkyIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX3NlbGVjdCAgICAgICAgICAgICAgOTMg LyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2Rl ZmluZSBUQVJHRVRfTlJfc2V0ZnNnaWQzMiAgICAgICA5NCAgICBMaW51eCBzcGFyYzMyLCBzZXRk b3B0IHVuZGVyIFN1bk9TICAgICAgICAgICovCisjZGVmaW5lIFRBUkdFVF9OUl9zZXRmc2dpZDMy ICAgICAgICAgIDk0IC8qIExpbnV4IHNwYXJjMzIsIHNldGRvcHQgdW5kZXIgU3VuT1MgICAgICAg ICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2ZzeW5jICAgICAgICAgICAgICAgOTUgLyogQ29tbW9u ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRf TlJfc2V0cHJpb3JpdHkgICAgICAgICA5NiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9zb2NrZXQgICAgICAgICAgICAg IDk3IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAg LTExMCwxMCArMTEwLDEwIEBACiAjZGVmaW5lIFRBUkdFVF9OUl9nZXRyZXN1aWQgICAgICAgICAg MTA5IC8qIExpbnV4IFNwZWNpZmljLCBzaWdibG9jayB1bmRlciBTdW5PUwkgICAqLwogI2RlZmlu ZSBUQVJHRVRfTlJfc2V0cmVzZ2lkICAgICAgICAgIDExMCAvKiBMaW51eCBTcGVjaWZpYywgc2ln c2V0bWFzayB1bmRlciBTdW5PUwkgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfZ2V0cmVzZ2lkICAg ICAgICAgIDExMSAvKiBMaW51eCBTcGVjaWZpYywgc2lncGF1c2UgdW5kZXIgU3VuT1MJICAgKi8K LS8qICNkZWZpbmUgVEFSR0VUX05SX3NldHJlZ2lkMzIgICAgICAgNzUgICAgTGludXggc3BhcmMz Miwgc2lnc3RhY2sgdW5kZXIgU3VuT1MgICAgICAgICAqLworLyogI2RlZmluZSBUQVJHRVRfTlJf c2V0cmVnaWQzMiAgICAgICAgICA3NSAgTGludXggc3BhcmMzMiwgc2lnc3RhY2sgdW5kZXIgU3Vu T1MgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfcmVjdm1zZyAgICAgICAgICAgIDExMyAv KiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5l IFRBUkdFVF9OUl9zZW5kbXNnICAgICAgICAgICAgMTE0IC8qIENvbW1vbiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KLS8qICNkZWZpbmUgVEFSR0VUX05SX2dldGdyb3Vw czMyICAgICAxMTUgICAgTGludXggc3BhcmMzMiwgdnRyYWNlIHVuZGVyIFN1bk9TICAgICAgICAg ICAqLworI2RlZmluZSBUQVJHRVRfTlJfZ2V0Z3JvdXBzMzIgICAgICAgIDExNSAvKiBMaW51eCBz cGFyYzMyLCB2dHJhY2UgdW5kZXIgU3VuT1MgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9O Ul9nZXR0aW1lb2ZkYXkgICAgICAgMTE2IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2dldHJ1c2FnZSAgICAgICAgICAx MTcgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2Rl ZmluZSBUQVJHRVRfTlJfZ2V0c29ja29wdCAgICAgICAgIDExOCAvKiBDb21tb24gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xMzAsMTQgKzEzMCwxNCBAQAogI2Rl ZmluZSBUQVJHRVRfTlJfdHJ1bmNhdGUgICAgICAgICAgIDEyOSAvKiBDb21tb24gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9mdHJ1bmNh dGUgICAgICAgICAgMTMwIC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2Zsb2NrICAgICAgICAgICAgICAxMzEgLyogQ29t bW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBU QVJHRVRfTlJfbHN0YXQ2NAkJMTMyICAgIExpbnV4IHNwYXJjMzIgU3BlY2lmaWMgICAgICAgICAg ICAgICAgICAgICAgKi8KKyNkZWZpbmUgVEFSR0VUX05SX2xzdGF0NjQJICAgICAxMzIgLyogTGlu dXggc3BhcmMzMiBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJH RVRfTlJfc2VuZHRvICAgICAgICAgICAgIDEzMyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9zaHV0ZG93biAgICAgICAg ICAgMTM0IC8qIENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K ICNkZWZpbmUgVEFSR0VUX05SX3NvY2tldHBhaXIgICAgICAgICAxMzUgLyogQ29tbW9uICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfbWtk aXIgICAgICAgICAgICAgIDEzNiAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9ybWRpciAgICAgICAgICAgICAgMTM3IC8q IENvbW1vbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUg VEFSR0VUX05SX3V0aW1lcyAgICAgICAgICAgICAxMzggLyogU3VuT1MgU3BlY2lmaWMgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqLwotLyogI2RlZmluZSBUQVJHRVRfTlJfc3RhdDY0CQkx MzkgICAgTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCisjZGVmaW5lIFRBUkdFVF9OUl9z dGF0NjQJICAgICAxMzkgLyogTGludXggc3BhcmMzMiBTcGVjaWZpYwkJCSAgICovCiAjZGVmaW5l IFRBUkdFVF9OUl9zZW5kZmlsZTY0ICAgICAgICAgMTQwIC8qIGFkanRpbWUgdW5kZXIgU3VuT1Mg ICAgICAgICAgICAgICAgICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX2dldHBlZXJuYW1l ICAgICAgICAxNDEgLyogQ29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAqLwogI2RlZmluZSBUQVJHRVRfTlJfZnV0ZXggICAgICAgICAgICAgIDE0MiAvKiBnZXRob3N0 aWQgdW5kZXIgU3VuT1MgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNTMsNyArMTUzLDcg QEAKIC8qICNkZWZpbmUgVEFSR0VUX05SX3B1dG1zZyAgICAgICAgICAxNTIgICAgU3VuT1MgU3Bl Y2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJf cG9sbCAgICAgICAgICAgICAgIDE1MyAvKiBDb21tb24gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9nZXRkZW50czY0CQkxNTQgLyogTGlu dXggc3BlY2lmaWMJCQkJICAgKi8KLS8qICNkZWZpbmUgVEFSR0VUX05SX2ZjbnRsNjQgICAgICAg ICAxNTUgICAgTGludXggc3BhcmMzMiBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAqLwor I2RlZmluZSBUQVJHRVRfTlJfZmNudGw2NCAgICAgICAgICAgIDE1NSAvKiBMaW51eCBzcGFyYzMy IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAjZGVmaW5lIFRBUkdFVF9OUl9n ZXRkaXJlbnRyaWVzICAgMTU2ICAgIFN1bk9TIFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KICNkZWZpbmUgVEFSR0VUX05SX3N0YXRmcyAgICAgICAgICAgICAxNTcgLyog Q29tbW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBU QVJHRVRfTlJfZnN0YXRmcyAgICAgICAgICAgIDE1OCAvKiBDb21tb24gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0yMjksOSArMjI5LDcgQEAKICNkZWZpbmUgVEFS R0VUX05SX3NldGZzdWlkICAgICAgICAgICAyMjggLyogTGludXggU3BlY2lmaWMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRfTlJfc2V0ZnNnaWQgICAgICAg ICAgIDIyOSAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICov CiAjZGVmaW5lIFRBUkdFVF9OUl9fbmV3c2VsZWN0ICAgICAgICAgMjMwIC8qIExpbnV4IFNwZWNp ZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSNpZmRlZiBfX0tFUk5FTF9fCi0j ZGVmaW5lIFRBUkdFVF9OUl90aW1lCQkyMzEgLyogTGludXggc3BhcmMzMiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAqLwotI2VuZGlmCisjZGVmaW5lIFRBUkdFVF9OUl90aW1lICAgICAg ICAgICAgICAgMjMxIC8qIExpbnV4IHNwYXJjMzIgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKi8KIC8qICNkZWZpbmUgVEFSR0VUX05SX29sZHN0YXQgICAgICAgICAyMzIgICAgTGludXgg U3BlY2lmaWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2RlZmluZSBUQVJHRVRf TlJfc3RpbWUgICAgICAgICAgICAgIDIzMyAvKiBMaW51eCBTcGVjaWZpYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICovCiAjZGVmaW5lIFRBUkdFVF9OUl9zdGF0ZnM2NCAgICAgICAgICAg MjM0IC8qIExpbnV4IFNwZWNpZmljICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8K ------=_Part_36400_23148973.1191761159598--