From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 16491 invoked by alias); 17 Oct 2007 02:04:40 -0000 Received: (qmail 16454 invoked by uid 22791); 17 Oct 2007 02:04:38 -0000 X-Spam-Check-By: sourceware.org Received: from nz-out-0506.google.com (HELO nz-out-0506.google.com) (64.233.162.227) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 17 Oct 2007 02:04:33 +0000 Received: by nz-out-0506.google.com with SMTP id k1so1373804nzf for ; Tue, 16 Oct 2007 19:04:31 -0700 (PDT) Received: by 10.142.191.2 with SMTP id o2mr2377425wff.1192586670350; Tue, 16 Oct 2007 19:04:30 -0700 (PDT) Received: by 10.143.36.21 with HTTP; Tue, 16 Oct 2007 19:04:30 -0700 (PDT) Message-ID: Date: Wed, 17 Oct 2007 02:04:00 -0000 From: Tea To: gdb@sources.redhat.com Subject: GDB record target 0.1.0 for MIPS GDB-6.6 release (It make GDB support Reversible Debugging) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_795_30041771.1192586670372" X-IsSubscribed: yes Mailing-List: contact gdb-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-owner@sourceware.org X-SW-Source: 2007-10/txt/msg00122.txt.bz2 ------=_Part_795_30041771.1192586670372 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Content-length: 4090 Hi all, The old version of GDB record cannot show the value of the variable because it doesn't record the memory change. GDB record target 0.1.0 disassemble the instruction that will be executed to get which memory and register will be changed and record them to record all the program running message. Because need add disassemble the instruction function on the arch, the record only support MIPS. I only test record with QEMU and Linux Kernel because the condition is limited. Please give me your thought about the "record". Thanks a lot. To make and install the GDB record target 0.1.0 with GDB-6.6-mips: tar vxjf gdb-6.6.tar.bz2 patch -p0 < gdb-6.6-record-0.1.0.patch tar vxjf gdb-6.6.tar.bz2 patch -p0 < gdb-6.6-record-0.1.0.patch mkdir bgdb cd bgdb ../gdb-6.6/configure --target=mips make make install The following is how to use the record: mips-gdb ../../../qemu/linux-2.6.18.2/vmlinux (gdb) target remote localhost:1234 #You need run QEMU with the options "-S -s" before use this command. (gdb) b main.c:499 Breakpoint 1 at 0x8010e64c: file init/main.c, line 499. (gdb) c Continuing. Breakpoint 1, start_kernel () at init/main.c:499 499 printk(KERN_NOTICE "Kernel command line: %s\n", saved_command_line); (gdb) record record: record and reverse function is started. #The abbreviation of this command is "rec". (gdb) n #It need wait a moment because record will spend some time. 500 parse_early_param(); (gdb) reverse record: GDB is set to reverse debug mode. #The abbreviation of this command is "rev". (gdb) b vprintk Breakpoint 2 at 0x800307b8: file kernel/printk.c, line 515. (gdb) c Continuing. Breakpoint 2, vprintk (fmt=0x0, args=0x0) at kernel/printk.c:515 515 if (unlikely(oops_in_progress) && printk_cpu == smp_processor_id()) (gdb) reverse record: GDB is set to normal debug mode. #But the running message is still gotten from the record message. (gdb) n 507 { (gdb) 515 if (unlikely(oops_in_progress) && printk_cpu == smp_processor_id()) (gdb) 521 local_irq_save(flags); (gdb) 527 printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); (gdb) 524 printk_cpu = smp_processor_id(); (gdb) 527 printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); (gdb) p printk_cpu $1 = 4294967295 (gdb) n 524 printk_cpu = smp_processor_id(); (gdb) p printk_cpu $2 = 4294967295 (gdb) n 527 printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); (gdb) p printk_cpu $3 = 0 (gdb) p printed_len $4 = 0 (gdb) n warning: GDB can't find the start of the function at 0xffffffff. GDB is unable to find the start of the function at 0xffffffff and thus can't determine the size of that function's stack frame. This means that GDB may be unable to access that stack frame, or the frames below it. This problem is most likely caused by an invalid program counter or stack pointer. However, if you think GDB should simply search farther back from 0xffffffff for code which looks like the beginning of a function, you can increase the range of the search using the `set heuristic-fence-post' command. 533 for (p = printk_buf; *p; p++) { (gdb) p printed_len $5 = 0 (gdb) n 534 if (log_level_unknown) { (gdb) p printed_len $6 = 87 (gdb) rev record: GDB is set to reverse debug mode. (gdb) n 0xffffffff80030878 533 for (p = printk_buf; *p; p++) { (gdb) warning: GDB can't find the start of the function at 0xffffffff. 0xffffffff80030868 527 printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); (gdb) p printed_len $7 = 0 (gdb) p printk_cpu $8 = 0 (gdb) n 524 printk_cpu = smp_processor_id(); (gdb) 0xffffffff8003085c 527 printed_len = vscnprintf(printk_buf, sizeof(printk_buf), fmt, args); (gdb) p printk_cpu $9 = 4294967295 You can find out the change of the values of printk_cpu and printed_len when the GDB normal debug and reverse debug. Thanks, teawater Signed-Off-By: Teawater Zhu ------=_Part_795_30041771.1192586670372 Content-Type: application/octet-stream; name="gdb-6.6-record-0.1.0.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gdb-6.6-record-0.1.0.patch" X-Attachment-Id: f_f7v793tp Content-length: 53233 ZGlmZiAtcnVOYSAtLWV4Y2x1ZGU9Q1ZTIGdkYi02LjYvZ2RiL2dkYmFyY2gu YyBnZGItNi42LXJlY29yZC9nZGIvZ2RiYXJjaC5jCi0tLSBnZGItNi42L2dk Yi9nZGJhcmNoLmMJMjAwNi0xMS0xMSAwMzoyMDozNS4wMDAwMDAwMDAgKzA4 MDAKKysrIGdkYi02LjYtcmVjb3JkL2dkYi9nZGJhcmNoLmMJMjAwNy0xMC0x MCAxMDo0ODoxMC4wMDAwMDAwMDAgKzA4MDAKQEAgLTIzNCw2ICsyMzQsMTAg QEAKICAgZ2RiYXJjaF9yZWdpc3Rlcl9yZWdncm91cF9wX2Z0eXBlICpyZWdp c3Rlcl9yZWdncm91cF9wOwogICBnZGJhcmNoX2ZldGNoX3BvaW50ZXJfYXJn dW1lbnRfZnR5cGUgKmZldGNoX3BvaW50ZXJfYXJndW1lbnQ7CiAgIGdkYmFy Y2hfcmVnc2V0X2Zyb21fY29yZV9zZWN0aW9uX2Z0eXBlICpyZWdzZXRfZnJv bV9jb3JlX3NlY3Rpb247CisvKnRlYXdhdGVyIHJlYyBiZWdpbi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworCWdkYmFyY2hfcmVjb3JkX2Z0eXBlCQkqcmVjb3JkOworCWdk YmFyY2hfcmVjb3JkX2Rhc21fZnR5cGUJKnJlY29yZF9kYXNtOworLyp0ZWF3 YXRlciByZWMgZW5kLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIH07CiAKIApAQCAtMzU5 LDYgKzM2MywxMCBAQAogICBkZWZhdWx0X3JlZ2lzdGVyX3JlZ2dyb3VwX3As ICAvKiByZWdpc3Rlcl9yZWdncm91cF9wICovCiAgIDAsICAvKiBmZXRjaF9w b2ludGVyX2FyZ3VtZW50ICovCiAgIDAsICAvKiByZWdzZXRfZnJvbV9jb3Jl X3NlY3Rpb24gKi8KKy8qdGVhd2F0ZXIgcmVjIGJlZ2luLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCisgIE5VTEwsCisgIE5VTEwsCisvKnRlYXdhdGVyIHJlYyBlbmQtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLwogICAvKiBzdGFydHVwX2dkYmFyY2goKSAqLwogfTsK IApAQCAtNDE1NCw2ICs0MTYyLDQ3IEBACiAgIGZsdXNoX2NhY2hlZF9mcmFt ZXMgKCk7CiB9CiAKKy8qdGVhd2F0ZXIgcmVjIGJlZ2luLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSovCitpbnQKK2dkYmFyY2hfcmVjb3JkX3AgKHN0cnVjdCBnZGJhcmNoICpn ZGJhcmNoKQoreworCWdkYl9hc3NlcnQgKGdkYmFyY2ggIT0gTlVMTCk7CisJ cmV0dXJuIChnZGJhcmNoLT5yZWNvcmQgIT0gTlVMTCk7Cit9CisKK2ludAor Z2RiYXJjaF9yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKQorewor CWdkYl9hc3NlcnQgKGdkYmFyY2ggIT0gTlVMTCk7CisJZ2RiX2Fzc2VydCAo Z2RiYXJjaC0+cmVjb3JkICE9IE5VTEwpOworCWlmIChnZGJhcmNoX2RlYnVn ID49IDIpCisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgImdk YmFyY2hfcmVjb3JkIGNhbGxlZFxuIik7CisJcmV0dXJuIChnZGJhcmNoLT5y ZWNvcmQgKCkpOworfQorCit2b2lkCitzZXRfZ2RiYXJjaF9yZWNvcmQgKHN0 cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBnZGJhcmNoX3JlY29yZF9mdHlwZSAq cmVjb3JkKQoreworCWdkYmFyY2gtPnJlY29yZCA9IHJlY29yZDsKK30KKwor dm9pZAorZ2RiYXJjaF9yZWNvcmRfZGFzbSAoc3RydWN0IGdkYmFyY2ggKmdk YmFyY2gpCit7CisJZ2RiX2Fzc2VydCAoZ2RiYXJjaCAhPSBOVUxMKTsKKwln ZGJfYXNzZXJ0IChnZGJhcmNoLT5yZWNvcmRfZGFzbSAhPSBOVUxMKTsKKwlp ZiAoZ2RiYXJjaF9kZWJ1ZyA+PSAyKQorCQlmcHJpbnRmX3VuZmlsdGVyZWQg KGdkYl9zdGRsb2csICJnZGJhcmNoX3JlY29yZF9kYXNtIGNhbGxlZFxuIik7 CisJZ2RiYXJjaC0+cmVjb3JkX2Rhc20gKCk7Cit9CisKK3ZvaWQKK3NldF9n ZGJhcmNoX3JlY29yZF9kYXNtIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCwg Z2RiYXJjaF9yZWNvcmRfZGFzbV9mdHlwZSAqcmVjb3JkX2Rhc20pCit7CisJ Z2RiYXJjaC0+cmVjb3JkX2Rhc20gPSByZWNvcmRfZGFzbTsKK30KKy8qdGVh d2F0ZXIgcmVjIGVuZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKIGV4dGVybiB2b2lk IF9pbml0aWFsaXplX2dkYmFyY2ggKHZvaWQpOwogCiB2b2lkCmRpZmYgLXJ1 TmEgLS1leGNsdWRlPUNWUyBnZGItNi42L2dkYi9nZGJhcmNoLmggZ2RiLTYu Ni1yZWNvcmQvZ2RiL2dkYmFyY2guaAotLS0gZ2RiLTYuNi9nZGIvZ2RiYXJj aC5oCTIwMDYtMTEtMTEgMDM6MjA6MzYuMDAwMDAwMDAwICswODAwCisrKyBn ZGItNi42LXJlY29yZC9nZGIvZ2RiYXJjaC5oCTIwMDctMTAtMTAgMTA6NTM6 MzYuMDAwMDAwMDAwICswODAwCkBAIC0xNjEyLDQgKzE2MTIsMTQgQEAKIAog ZXh0ZXJuIHZvaWQgZ2RiYXJjaF9kdW1wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaCwgc3RydWN0IHVpX2ZpbGUgKmZpbGUpOwogCisvKnRlYXdhdGVyIHJl YyBiZWdpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZXh0ZXJuIGludAlnZGJhcmNoX3Jl Y29yZF9wIChzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCk7Cit0eXBlZGVmIGlu dAkoZ2RiYXJjaF9yZWNvcmRfZnR5cGUpICh2b2lkKTsKK2V4dGVybiBpbnQJ Z2RiYXJjaF9yZWNvcmQgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoKTsKK2V4 dGVybiB2b2lkCXNldF9nZGJhcmNoX3JlY29yZCAoc3RydWN0IGdkYmFyY2gg KmdkYmFyY2gsIGdkYmFyY2hfcmVjb3JkX2Z0eXBlICpyZWNvcmQpOwordHlw ZWRlZiB2b2lkCShnZGJhcmNoX3JlY29yZF9kYXNtX2Z0eXBlKSAodm9pZCk7 CitleHRlcm4gdm9pZAlnZGJhcmNoX3JlY29yZF9kYXNtIChzdHJ1Y3QgZ2Ri YXJjaCAqZ2RiYXJjaCk7CitleHRlcm4gdm9pZAlzZXRfZ2RiYXJjaF9yZWNv cmRfZGFzbSAoc3RydWN0IGdkYmFyY2ggKmdkYmFyY2gsIGdkYmFyY2hfcmVj b3JkX2Rhc21fZnR5cGUgKnJlY29yZF9kYXNtKTsKKy8qdGVhd2F0ZXIgcmVj IGVuZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICNlbmRpZgpkaWZmIC1ydU5hIC0t ZXhjbHVkZT1DVlMgZ2RiLTYuNi9nZGIvaW5mcnVuLmMgZ2RiLTYuNi1yZWNv cmQvZ2RiL2luZnJ1bi5jCi0tLSBnZGItNi42L2dkYi9pbmZydW4uYwkyMDA2 LTEwLTE5IDAwOjU2OjEzLjAwMDAwMDAwMCArMDgwMAorKysgZ2RiLTYuNi1y ZWNvcmQvZ2RiL2luZnJ1bi5jCTIwMDctMTAtMTEgMTY6MzY6NDEuMDAwMDAw MDAwICswODAwCkBAIC01Miw2ICs1MiwxMSBAQAogI2luY2x1ZGUgImdkYl9h c3NlcnQuaCIKICNpbmNsdWRlICJtaS9taS1jb21tb24uaCIKIAorLyp0ZWF3 YXRlciByZWMgYmVnaW4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNpbmNsdWRlICJyZWNv cmQuaCIKK3N0YXRpYyBpbnQJCXJlY29yZF9yZXN1bWVfc3RlcCA9IDA7Cisv KnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAvKiBQcm90 b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlvbnMgKi8KIAogc3RhdGljIHZvaWQg c2lnbmFsc19pbmZvIChjaGFyICosIGludCk7CkBAIC01MzIsNiArNTM3LDIw IEBACiAgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiaW5m cnVuOiByZXN1bWUgKHN0ZXA9JWQsIHNpZ25hbD0lZClcbiIsCiAJCQlzdGVw LCBzaWcpOwogCisvKnRlYXdhdGVyIHJlYyBiZWdpbi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0q LworCWlmIChnZGJfaXNfcmVjb3JkaW5nKSB7CisJCWlmIChyZWNvcmRfbGlz dCAmJiAocmVjb3JkX2xpc3QtPm5leHQgfHwgZ2RiX2lzX3JldmVyc2UpKSB7 CisJCQlkaXNjYXJkX2NsZWFudXBzIChvbGRfY2xlYW51cHMpOworCQkJcmVj b3JkX3dhaXRfc3RlcCA9IHN0ZXA7CisJCQlyZXR1cm47CisJCX0KKwkJZWxz ZSB7CisJCQlzdGVwID0gMTsKKwkJCXJlY29yZF9tZXNzYWdlICgpOworCQl9 CisJfQorLyp0ZWF3YXRlciByZWMgZW5kLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwog ICAvKiBGSVhNRTogY2FsbGluZyBicmVha3BvaW50X2hlcmVfcCAocmVhZF9w YyAoKSkgdGhyZWUgdGltZXMhICovCiAKIApAQCAtMTAwMCwxMCArMTAxOSwx OSBAQAogCiAgIHdoaWxlICgxKQogICAgIHsKKy8qdGVhd2F0ZXIgcmVjIGJl Z2luLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLSovCisJaWYgKHJlY29yZF9saXN0ICYmIChyZWNv cmRfbGlzdC0+bmV4dCB8fCBnZGJfaXNfcmV2ZXJzZSkpIHsKKwkJZWNzLT5w dGlkID0gcmVjb3JkX3dhaXQgKGVjcy0+d2FpdG9uX3B0aWQsIGVjcy0+d3Ap OworCX0KKwllbHNlIHsKKy8qdGVhd2F0ZXIgcmVjIGVuZC0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSovCiAgICAgICBpZiAoZGVwcmVjYXRlZF90YXJnZXRfd2FpdF9ob29r KQogCWVjcy0+cHRpZCA9IGRlcHJlY2F0ZWRfdGFyZ2V0X3dhaXRfaG9vayAo ZWNzLT53YWl0b25fcHRpZCwgZWNzLT53cCk7CiAgICAgICBlbHNlCiAJZWNz LT5wdGlkID0gdGFyZ2V0X3dhaXQgKGVjcy0+d2FpdG9uX3B0aWQsIGVjcy0+ d3ApOworLyp0ZWF3YXRlciByZWMgYmVnaW4tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKwl9 CisvKnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogCiAgICAg ICAvKiBOb3cgZmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggdGhlIHJlc3Vs dCBvZiB0aGUgcmVzdWx0LiAgKi8KICAgICAgIGhhbmRsZV9pbmZlcmlvcl9l dmVudCAoZWNzKTsKQEAgLTE5MTYsMTEgKzE5NDQsMTkgQEAKICAgICAgICAg IGJlIG5lY2Vzc2FyeSBmb3IgY2FsbCBkdW1taWVzIG9uIGEgbm9uLWV4ZWN1 dGFibGUgc3RhY2sgb24KICAgICAgICAgIFNQQVJDLiAgKi8KIAotICAgICAg aWYgKHN0b3Bfc2lnbmFsID09IFRBUkdFVF9TSUdOQUxfVFJBUCkKLQllY3Mt PnJhbmRvbV9zaWduYWwKLQkgID0gIShicHN0YXRfZXhwbGFpbnNfc2lnbmFs IChzdG9wX2Jwc3RhdCkKLQkgICAgICB8fCB0cmFwX2V4cGVjdGVkCi0JICAg ICAgfHwgKHN0ZXBfcmFuZ2VfZW5kICYmIHN0ZXBfcmVzdW1lX2JyZWFrcG9p bnQgPT0gTlVMTCkpOworLyp0ZWF3YXRlciByZWMgYmVnaW4tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKi8KKyAgICAgIGlmIChzdG9wX3NpZ25hbCA9PSBUQVJHRVRfU0lHTkFM X1RSQVApIHsKKwkJaWYgKGdkYl9pc19yZXZlcnNlIHx8IGdkYl9pc19yZWNv cmRpbmcpIHsKKwkJCWVjcy0+cmFuZG9tX3NpZ25hbCA9IDA7CisJCX0KKwkJ ZWxzZSB7CisJCQllY3MtPnJhbmRvbV9zaWduYWwKKwkJCSAgPSAhKGJwc3Rh dF9leHBsYWluc19zaWduYWwgKHN0b3BfYnBzdGF0KQorCQkJICAgICAgfHwg dHJhcF9leHBlY3RlZAorCQkJICAgICAgfHwgKHN0ZXBfcmFuZ2VfZW5kICYm IHN0ZXBfcmVzdW1lX2JyZWFrcG9pbnQgPT0gTlVMTCkpOworCQl9CisJfQor Lyp0ZWF3YXRlciByZWMgZW5kLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KICAgICAgIGVs c2UKIAl7CiAJICBlY3MtPnJhbmRvbV9zaWduYWwgPSAhYnBzdGF0X2V4cGxh aW5zX3NpZ25hbCAoc3RvcF9icHN0YXQpOwpAQCAtMjQyNCw2ICsyNDYwLDE2 IEBACiAJICAvKiBXZSdyZSBkb2luZyBhICJuZXh0Iiwgc2V0IGEgYnJlYWtw b2ludCBhdCBjYWxsZWUncyByZXR1cm4KIAkgICAgIGFkZHJlc3MgKHRoZSBh ZGRyZXNzIGF0IHdoaWNoIHRoZSBjYWxsZXIgd2lsbAogCSAgICAgcmVzdW1l KS4gICovCisKKy8qdGVhd2F0ZXIgcmVjIGJlZ2luLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSov CisJCWlmIChnZGJfaXNfcmV2ZXJzZSB8fCBnZGJfaXNfcmVjb3JkaW5nKSB7 CisJCQlyZWNvcmRfcmVzdW1lX3N0ZXAgPSAxOworCQkJa2VlcF9nb2luZyAo ZWNzKTsKKwkJCXJlY29yZF9yZXN1bWVfc3RlcCA9IDA7CisJCQlyZXR1cm47 CisJCX0KKy8qdGVhd2F0ZXIgcmVjIGVuZC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisK IAkgIGluc2VydF9zdGVwX3Jlc3VtZV9icmVha3BvaW50X2F0X2NhbGxlciAo Z2V0X2N1cnJlbnRfZnJhbWUgKCkpOwogCSAga2VlcF9nb2luZyAoZWNzKTsK IAkgIHJldHVybjsKQEAgLTI0ODUsNiArMjUzMSwxNSBAQAogCSAgcmV0dXJu OwogCX0KIAorLyp0ZWF3YXRlciByZWMgYmVnaW4tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8K KwlpZiAoKGdkYl9pc19yZXZlcnNlIHx8IGdkYl9pc19yZWNvcmRpbmcpICYm IHN0ZXBfb3Zlcl9jYWxscyA9PSBTVEVQX09WRVJfVU5ERUJVR0dBQkxFKSB7 CisJCXJlY29yZF9yZXN1bWVfc3RlcCA9IDE7CisJCWtlZXBfZ29pbmcgKGVj cyk7CisJCXJlY29yZF9yZXN1bWVfc3RlcCA9IDA7CisJCXJldHVybjsKKwl9 CisvKnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAgICAg ICAvKiBTZXQgYSBicmVha3BvaW50IGF0IGNhbGxlZSdzIHJldHVybiBhZGRy ZXNzICh0aGUgYWRkcmVzcyBhdAogICAgICAgICAgd2hpY2ggdGhlIGNhbGxl ciB3aWxsIHJlc3VtZSkuICAqLwogICAgICAgaW5zZXJ0X3N0ZXBfcmVzdW1l X2JyZWFrcG9pbnRfYXRfY2FsbGVyIChnZXRfY3VycmVudF9mcmFtZSAoKSk7 CkBAIC0yNTI2LDYgKzI1ODEsMTkgQEAKIAogICBlY3MtPnNhbCA9IGZpbmRf cGNfbGluZSAoc3RvcF9wYywgMCk7CiAKKy8qdGVhd2F0ZXIgcmVjIGJlZ2lu LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCisJaWYgKCFmcmFtZV9pZF9lcSAoZ2V0X2ZyYW1l X2lkIChnZXRfY3VycmVudF9mcmFtZSAoKSksIHN0ZXBfZnJhbWVfaWQpICYm IChnZGJfaXNfcmV2ZXJzZSB8fCBnZGJfaXNfcmVjb3JkaW5nKSkgeworCQlp ZiAoKHN0b3BfcGMgIT0gZWNzLT5zYWwucGMgJiYgZ2RiX2lzX3JldmVyc2Up IHx8ICggc3RlcF9vdmVyX2NhbGxzID09IFNURVBfT1ZFUl9BTEwgJiYgZ2Ri X2lzX3JlY29yZGluZykpIHsKKwkJCWlmIChkZWJ1Z19pbmZydW4pCisJCQkJ ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAiaW5mcnVuOiBtYXli ZSBzdGVwcGVkIGludG8gc3Vicm91dGluZVxuIik7CisJCQlyZWNvcmRfcmVz dW1lX3N0ZXAgPSAxOworCQkJa2VlcF9nb2luZyAoZWNzKTsKKwkJCXJlY29y ZF9yZXN1bWVfc3RlcCA9IDA7CisJCQlyZXR1cm47CisJCX0KKwl9CisvKnRl YXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCiAgIC8qIE5PVEU6 IHRhdXNxLzIwMDQtMDUtMjQ6IFRoaXMgaWYgYmxvY2sgdXNlZCB0byBiZSBk b25lIGJlZm9yZSBhbGwKICAgICAgdGhlIHRyYW1wb2xpbmUgcHJvY2Vzc2lu ZyBsb2dpYywgaG93ZXZlciwgdGhlcmUgYXJlIHNvbWUgdHJhbXBvbGluZXMg CiAgICAgIHRoYXQgaGF2ZSBubyBuYW1lcywgc28gd2Ugc2hvdWxkIGRvIHRy YW1wb2xpbmUgaGFuZGxpbmcgZmlyc3QuICAqLwpAQCAtMjUzNiw2ICsyNjA0 LDE1IEBACiAgICAgICBpZiAoZGVidWdfaW5mcnVuKQogCSBmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJpbmZydW46IHN0ZXBwZWQgaW50byB1 bmRlYnVnZ2FibGUgZnVuY3Rpb25cbiIpOwogCisvKnRlYXdhdGVyIHJlYyBi ZWdpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLworCWlmIChnZGJfaXNfcmV2ZXJzZSB8fCBn ZGJfaXNfcmVjb3JkaW5nKSB7CisJCXJlY29yZF9yZXN1bWVfc3RlcCA9IDE7 CisJCWtlZXBfZ29pbmcgKGVjcyk7CisJCXJlY29yZF9yZXN1bWVfc3RlcCA9 IDA7CisJCXJldHVybjsKKwl9CisvKnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworCiAgICAgICAvKiBUaGUgaW5mZXJpb3IganVzdCBzdGVw cGVkIGludG8sIG9yIHJldHVybmVkIHRvLCBhbgogICAgICAgICAgdW5kZWJ1 Z2dhYmxlIGZ1bmN0aW9uICh3aGVyZSB0aGVyZSBpcyBubyBkZWJ1Z2dpbmcg aW5mb3JtYXRpb24KICAgICAgICAgIGFuZCBubyBsaW5lIG51bWJlciBjb3Jy ZXNwb25kaW5nIHRvIHRoZSBhZGRyZXNzIHdoZXJlIHRoZQpAQCAtMjU4NSwx NSArMjY2MiwyOCBAQAogICAgICAgICAgb3IgY2FuIHRoaXMgaGFwcGVuIGFz IGEgcmVzdWx0IG9mIGEgcmV0dXJuIG9yIGxvbmdqbXA/KS4gICovCiAgICAg ICBpZiAoZGVidWdfaW5mcnVuKQogCSBmcHJpbnRmX3VuZmlsdGVyZWQgKGdk Yl9zdGRsb2csICJpbmZydW46IG5vIGxpbmUgbnVtYmVyIGluZm9cbiIpOwor CisvKnRlYXdhdGVyIHJlYyBiZWdpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCWlmICgo c3RlcF9vdmVyX2NhbGxzID09IFNURVBfT1ZFUl9BTEwgJiYgZ2RiX2lzX3Jl dmVyc2UpIHx8IGdkYl9pc19yZWNvcmRpbmcpIHsKKwkJcmVjb3JkX3Jlc3Vt ZV9zdGVwID0gMTsKKwkJa2VlcF9nb2luZyAoZWNzKTsKKwkJcmVjb3JkX3Jl c3VtZV9zdGVwID0gMDsKKwkJcmV0dXJuOworCX0KKy8qdGVhd2F0ZXIgcmVj IGVuZC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSovCisKICAgICAgIHN0b3Bfc3RlcCA9IDE7 CiAgICAgICBwcmludF9zdG9wX3JlYXNvbiAoRU5EX1NURVBQSU5HX1JBTkdF LCAwKTsKICAgICAgIHN0b3Bfc3RlcHBpbmcgKGVjcyk7CiAgICAgICByZXR1 cm47CiAgICAgfQogCi0gIGlmICgoc3RvcF9wYyA9PSBlY3MtPnNhbC5wYykK Ky8qdGVhd2F0ZXIgcmVjIGJlZ2luLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisgICAgLy9p ZiAoKHN0b3BfcGMgPT0gZWNzLT5zYWwucGMpCisgICAgaWYgKCgoc3RvcF9w YyA9PSBlY3MtPnNhbC5wYyAmJiAhZ2RiX2lzX3JldmVyc2UpIHx8IChzdG9w X3BjID49IGVjcy0+c2FsLnBjICYmIHN0b3BfcGMgPCBlY3MtPnNhbC5lbmQg JiYgZ2RiX2lzX3JldmVyc2UpKQogICAgICAgJiYgKGVjcy0+Y3VycmVudF9s aW5lICE9IGVjcy0+c2FsLmxpbmUKIAkgIHx8IGVjcy0+Y3VycmVudF9zeW10 YWIgIT0gZWNzLT5zYWwuc3ltdGFiKSkKKy8qdGVhd2F0ZXIgcmVjIGVuZC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCiAgICAgewogICAgICAgLyogV2UgYXJlIGF0IHRo ZSBzdGFydCBvZiBhIGRpZmZlcmVudCBsaW5lLiAgU28gc3RvcC4gIE5vdGUg dGhhdAogICAgICAgICAgd2UgZG9uJ3Qgc3RvcCBpZiB3ZSBzdGVwIGludG8g dGhlIG1pZGRsZSBvZiBhIGRpZmZlcmVudCBsaW5lLgpAQCAtMjYyMyw2ICsy NzEzLDEyIEBACiAgICAgICAgICB3ZSB3aWxsIGJlIGluIG1pZC1saW5lLiAg Ki8KICAgICAgIGlmIChkZWJ1Z19pbmZydW4pCiAJIGZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgImluZnJ1bjogc3RlcHBlZCB0byBhIGRpZmZl cmVudCBmdW5jdGlvblxuIik7CisvKnRlYXdhdGVyIHJlYyBiZWdpbi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLworCWlmIChnZGJfaXNfcmVjb3JkaW5nKSB7CisJCWtlZXBf Z29pbmcgKGVjcyk7CisJCXJldHVybjsKKwl9CisvKnRlYXdhdGVyIHJlYyBl bmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0qLwogICAgICAgc3RvcF9zdGVwID0gMTsKICAg ICAgIHByaW50X3N0b3BfcmVhc29uIChFTkRfU1RFUFBJTkdfUkFOR0UsIDAp OwogICAgICAgc3RvcF9zdGVwcGluZyAoZWNzKTsKQEAgLTI2NjksMTEgKzI3 NjUsMTMgQEAKIHN0YXRpYyBpbnQKIGN1cnJlbnRseV9zdGVwcGluZyAoc3Ry dWN0IGV4ZWN1dGlvbl9jb250cm9sX3N0YXRlICplY3MpCiB7CisvKnRlYXdh dGVyIHJlYyBiZWdpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogICByZXR1cm4gKCghZWNz LT5oYW5kbGluZ19sb25nam1wCiAJICAgJiYgKChzdGVwX3JhbmdlX2VuZCAm JiBzdGVwX3Jlc3VtZV9icmVha3BvaW50ID09IE5VTEwpCiAJICAgICAgIHx8 IHRyYXBfZXhwZWN0ZWQpKQogCSAgfHwgZWNzLT5zdGVwcGluZ190aHJvdWdo X3NvbGliX2FmdGVyX2NhdGNoCi0JICB8fCBicHN0YXRfc2hvdWxkX3N0ZXAg KCkpOworCSAgfHwgYnBzdGF0X3Nob3VsZF9zdGVwICgpIHx8IHJlY29yZF9y ZXN1bWVfc3RlcCk7CisvKnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLwogfQogCiAvKiBTdWJyb3V0aW5lIGNhbGwgd2l0aCBzb3VyY2UgY29k ZSB3ZSBzaG91bGQgbm90IHN0ZXAgb3Zlci4gIERvIHN0ZXAKZGlmZiAtcnVO YSAtLWV4Y2x1ZGU9Q1ZTIGdkYi02LjYvZ2RiL01ha2VmaWxlLmluIGdkYi02 LjYtcmVjb3JkL2dkYi9NYWtlZmlsZS5pbgotLS0gZ2RiLTYuNi9nZGIvTWFr ZWZpbGUuaW4JMjAwNi0xMS0yNSAwMzo1NDoxNC4wMDAwMDAwMDAgKzA4MDAK KysrIGdkYi02LjYtcmVjb3JkL2dkYi9NYWtlZmlsZS5pbgkyMDA3LTA4LTA5 IDE2OjAxOjU2LjAwMDAwMDAwMCArMDgwMApAQCAtNTE1LDYgKzUxNSw3IEBA CiAjIExpbmtzIG1hZGUgYXQgY29uZmlndXJhdGlvbiB0aW1lIHNob3VsZCBu b3QgYmUgc3BlY2lmaWVkIGhlcmUsIHNpbmNlCiAjIFNGSUxFUyBpcyB1c2Vk IGluIGJ1aWxkaW5nIHRoZSBkaXN0cmlidXRpb24gYXJjaGl2ZS4KIAorI3Rl YXdhdGVyIHJlYyBiZWdpbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNGSUxFUyA9IGFk YS1leHAueSBhZGEtbGFuZy5jIGFkYS10eXBlcHJpbnQuYyBhZGEtdmFscHJp bnQuYyAgXAogCWF4LWdlbmVyYWwuYyBheC1nZGIuYyBcCiAJYmNhY2hlLmMg XApAQCAtNTYyLDcgKzU2Myw5IEBACiAJdXNlci1yZWdzLmMgXAogCXZhbGFy aXRoLmMgdmFsb3BzLmMgdmFscHJpbnQuYyB2YWx1ZS5jIHZhcm9iai5jIHZl Yy5jIFwKIAl3cmFwcGVyLmMgXAotCXhtbC1zdXBwb3J0LmMKKwl4bWwtc3Vw cG9ydC5jIFwKKwlyZWNvcmQuYworI3RlYXdhdGVyIHJlYyBlbmQtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KIAogTElOVEZJTEVTID0gJChTRklMRVMpICQoWVlGSUxF UykgJChDT05GSUdfU1JDUykgaW5pdC5jCiAKQEAgLTkxOSw2ICs5MjIsNyBA QAogCSQoQ09ORklHX1NSQ1MpCiBUQUdGSUxFU19XSVRIX1NSQ0RJUiA9ICQo SEZJTEVTX1dJVEhfU1JDRElSKQogCisjdGVhd2F0ZXIgcmVjIGJlZ2luLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQogQ09NTU9OX09CUyA9ICQoREVQRklMRVMpICQoQ09O RklHX09CUykgJChZWU9CSikgXAogCXZlcnNpb24ubyBcCiAJYW5ub3RhdGUu byBcCkBAIC05NjcsNyArOTcxLDkgQEAKIAl0cmFkLWZyYW1lLm8gXAogCXRy YW1wLWZyYW1lLm8gXAogCXNvbGliLm8gc29saWItbnVsbC5vIFwKLQlwcm9s b2d1ZS12YWx1ZS5vIG1lbW9yeS1tYXAubyB4bWwtc3VwcG9ydC5vIHRhcmdl dC1tZW1vcnkubworCXByb2xvZ3VlLXZhbHVlLm8gbWVtb3J5LW1hcC5vIHht bC1zdXBwb3J0Lm8gdGFyZ2V0LW1lbW9yeS5vIFwKKwlyZWNvcmQubworI3Rl YXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogVFNPQlMgPSBp bmZsb3cubwogCmRpZmYgLXJ1TmEgLS1leGNsdWRlPUNWUyBnZGItNi42L2dk Yi9taXBzLXRkZXAuYyBnZGItNi42LXJlY29yZC9nZGIvbWlwcy10ZGVwLmMK LS0tIGdkYi02LjYvZ2RiL21pcHMtdGRlcC5jCTIwMDYtMDgtMDkgMDU6MzI6 MzcuMDAwMDAwMDAwICswODAwCisrKyBnZGItNi42LXJlY29yZC9nZGIvbWlw cy10ZGVwLmMJMjAwNy0xMC0xNSAxNzoxNjozNi4wMDAwMDAwMDAgKzA4MDAK QEAgLTU2LDYgKzU2LDExIEBACiAjaW5jbHVkZSAiaW5mY2FsbC5oIgogI2lu Y2x1ZGUgImZsb2F0Zm9ybWF0LmgiCiAKKy8qdGVhd2F0ZXIgcmVjIGJlZ2lu LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSovCisjaW5jbHVkZSAicmVjb3JkLmgiCisjaW5jbHVk ZSA8c3RkaW50Lmg+CisvKnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0qLworCiBzdGF0aWMgY29uc3Qgc3RydWN0IG9iamZpbGVfZGF0YSAqbWlw c19wZHJfZGF0YTsKIAogc3RhdGljIHN0cnVjdCB0eXBlICptaXBzX3JlZ2lz dGVyX3R5cGUgKHN0cnVjdCBnZGJhcmNoICpnZGJhcmNoLCBpbnQgcmVnbnVt KTsKQEAgLTQ3MTEsNiArNDcxNiw1OTEgQEAKICAgaW50ZXJuYWxfZXJyb3Ig KF9fRklMRV9fLCBfX0xJTkVfXywgXygidW5rbm93biBBQkkgc3RyaW5nIikp OwogfQogCisvKnRlYXdhdGVyIHJlYyBiZWdpbi0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwor c3RhdGljIENPUkVfQUREUgltaXBzX2RlbGF5X3Nsb3RfYWRkcjsKK3N0YXRp YyBDT1JFX0FERFIJbWlwc190YXJnZXRfYWRkcjsKKworc3RhdGljIGludAor bWlwc19yZWNvcmRfMzIgKENPUkVfQUREUiBwYykKK3sKKwl1aW50MzJfdAkJ CWluc24gPSAodWludDMyX3QpbWlwc19mZXRjaF9pbnN0cnVjdGlvbiAocGMp OworCXVpbnQzMl90CQkJb3Bjb2RlOworCWNvbnN0IHN0cnVjdCBtaXBzX3Jl Z251bQkqcmVnbnVtID0gbWlwc19yZWdudW0gKGN1cnJlbnRfZ2RiYXJjaCk7 CisJaW50CQkJCWFkZF9wYyA9IDE7CisKKwlpZiAoZGVidWdfcmVjb3JkKSB7 CisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDog bWlwc19yZWNvcmRfMzIgaW5zbiA9IDB4JTA4eFxuIiwgKHVuc2lnbmVkIGlu dClpbnNuKTsKKwl9CisKKwlvcGNvZGUgPSBpbnNuID4+IDI2OworCXN3aXRj aCAob3Bjb2RlKSB7CisJCWNhc2UgMHgwMDoKKwkJCXN3aXRjaCAoKGluc24g Pj4gMCkgJiAweDNmKSB7CisJCQkJLyogc2xsICovCisJCQkJY2FzZSAweDAw OgorCQkJCS8qIHNybCAqLworCQkJCWNhc2UgMHgwMjoKKwkJCQkvKiBzcmEg Ki8KKwkJCQljYXNlIDB4MDM6CisJCQkJLyogc2xsdiAqLworCQkJCWNhc2Ug MHgwNDoKKwkJCQkvKiBzcmx2ICovCisJCQkJY2FzZSAweDA2OgorCQkJCS8q IHNyYXYgKi8KKwkJCQljYXNlIDB4MDc6CisJCQkJLyogbW92eiAqLworCQkJ CWNhc2UgMHgwYToKKwkJCQkvKiBtb3ZuICovCisJCQkJY2FzZSAweDBiOgor CQkJCS8qIG1maGkgKi8KKwkJCQljYXNlIDB4MTA6CisJCQkJLyogbWZsbyAq LworCQkJCWNhc2UgMHgxMjoKKwkJCQkvKiBhZGQgKi8KKwkJCQljYXNlIDB4 MjA6CisJCQkJLyogYWRkdSAqLworCQkJCWNhc2UgMHgyMToKKwkJCQkvKiBz dWIgKi8KKwkJCQljYXNlIDB4MjI6CisJCQkJLyogc3VidSAqLworCQkJCWNh c2UgMHgyMzoKKwkJCQkvKiBhbmQgKi8KKwkJCQljYXNlIDB4MjQ6CisJCQkJ Lyogb3IgKi8KKwkJCQljYXNlIDB4MjU6CisJCQkJLyogeG9yICovCisJCQkJ Y2FzZSAweDI2OgorCQkJCS8qIG5vciAqLworCQkJCWNhc2UgMHgyNzoKKwkJ CQkvKiBzbHQgKi8KKwkJCQljYXNlIDB4MmE6CisJCQkJLyogc2x0dSAqLwor CQkJCWNhc2UgMHgyYjoKKwkJCQkJZ290byBzZXRfcmQ7CisJCQkJCWJyZWFr OworCQkJCS8qIGpyICovCisJCQkJY2FzZSAweDA4OgorCQkJCQltaXBzX3Rh cmdldF9hZGRyID0gcmVhZF9yZWdpc3RlciAoKGluc24gPj4gMjEpICYgMHgx Zik7CisJCQkJCWdvdG8gc2V0X2RlbGF5X3Nsb3RfcGM7CisJCQkJCWJyZWFr OworCQkJCS8qIGphbHIgKi8KKwkJCQljYXNlIDB4MDk6CisJCQkJCXsKKwkJ CQkJCXVpbnQzMl90CXJkID0gKGluc24gPj4gMTEpICYgMHgxZjsKKwkJCQkJ CWlmIChyZCAhPSAwKSB7CisJCQkJCQkJaWYgKHJlY29yZF9hcmNoX2xpc3Rf YWRkX3JlZyAocmQpKSB7CisJCQkJCQkJCXJldHVybiAoLTEpOworCQkJCQkJ CX0KKwkJCQkJCX0KKwkJCQkJCW1pcHNfdGFyZ2V0X2FkZHIgPSByZWFkX3Jl Z2lzdGVyICgoaW5zbiA+PiAyMSkgJiAweDFmKTsKKwkJCQkJCWdvdG8gc2V0 X2RlbGF5X3Nsb3RfcGM7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJLyog c3luYyAqLworCQkJCWNhc2UgMHgwZjoKKwkJCQkJYnJlYWs7CisJCQkJLyog bXRoaSAqLworCQkJCWNhc2UgMHgxMToKKwkJCQkJaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAocmVnbnVtLT5oaSkpIHsKKwkJCQkJCXJldHVybiAo LTEpOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCS8qIG10bG8gKi8KKwkJ CQljYXNlIDB4MTM6CisJCQkJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9y ZWcgKHJlZ251bS0+bG8pKSB7CisJCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQkJ fQorCQkJCQlicmVhazsKKwkJCQkvKiBtdWx0ICovCisJCQkJY2FzZSAweDE4 OgorCQkJCS8qIG11bHR1ICovCisJCQkJY2FzZSAweDE5OgorCQkJCS8qIGRp diAqLworCQkJCWNhc2UgMHgxYToKKwkJCQkvKiBkaXZ1ICovCisJCQkJY2Fz ZSAweDFiOgorCQkJCQlnb3RvIHNldF9oaV9sbzsKKwkJCQkJYnJlYWs7CisJ CQkJZGVmYXVsdDoKKwkJCQkJZ290byBub19zdXBwb3J0OworCQkJCQlicmVh azsKKwkJCX0KKwkJCWJyZWFrOworCisJCWNhc2UgMHgwMToKKwkJCXN3aXRj aCAoKGluc24gPj4gMTYpICYgMHgxZikgeworCQkJCS8qIGJsdHogKi8KKwkJ CQljYXNlIDB4MDA6CisJCQkJCWlmIChyZWFkX3JlZ2lzdGVyICgoaW5zbiA+ PiAyMSkgJiAweDFmKSA8IDApIHsKKwkJCQkJCWdvdG8gc2V0X2ltbV9kZWxh eV9zbG90X3BjOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCS8qIGJnZXog Ki8KKwkJCQljYXNlIDB4MDE6CisJCQkJCWlmIChyZWFkX3JlZ2lzdGVyICgo aW5zbiA+PiAyMSkgJiAweDFmKSA+PSAwKSB7CisJCQkJCQlnb3RvIHNldF9p bW1fZGVsYXlfc2xvdF9wYzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQkv KiBibHR6bCAqLworCQkJCWNhc2UgMHgwMjoKKwkJCQkJaWYgKHJlYWRfcmVn aXN0ZXIgKChpbnNuID4+IDIxKSAmIDB4MWYpIDwgMCkgeworCQkJCQkJZ290 byBzZXRfaW1tX2RlbGF5X3Nsb3RfcGM7CisJCQkJCX0KKwkJCQkJZWxzZSB7 CisJCQkJCQlnb3RvIHNldF9wYzsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJ CQkvKiBiZ2V6bCAqLworCQkJCWNhc2UgMHgwMzoKKwkJCQkJaWYgKHJlYWRf cmVnaXN0ZXIgKChpbnNuID4+IDIxKSAmIDB4MWYpID49IDApIHsKKwkJCQkJ CWdvdG8gc2V0X2ltbV9kZWxheV9zbG90X3BjOworCQkJCQl9CisJCQkJCWVs c2UgeworCQkJCQkJZ290byBzZXRfcGM7CisJCQkJCX0KKwkJCQkJYnJlYWs7 CisJCQkJLyogYmx0emFsICovCisJCQkJY2FzZSAweDEwOgorCQkJCQlpZiAo cmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnICgzMSkpIHsKKwkJCQkJCXJldHVy biAoLTEpOworCQkJCQl9CisJCQkJCWlmIChyZWFkX3JlZ2lzdGVyICgoaW5z biA+PiAyMSkgJiAweDFmKSA8IDApIHsKKwkJCQkJCWdvdG8gc2V0X2ltbV9k ZWxheV9zbG90X3BjOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCS8qIGJn ZXphbCAqLworCQkJCWNhc2UgMHgxMToKKwkJCQkJaWYgKHJlY29yZF9hcmNo X2xpc3RfYWRkX3JlZyAoMzEpKSB7CisJCQkJCQlyZXR1cm4gKC0xKTsKKwkJ CQkJfQorCQkJCQlpZiAocmVhZF9yZWdpc3RlciAoKGluc24gPj4gMjEpICYg MHgxZikgPj0gMCkgeworCQkJCQkJZ290byBzZXRfaW1tX2RlbGF5X3Nsb3Rf cGM7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJLyogYmx0emFsbCAqLwor CQkJCWNhc2UgMHgxMjoKKwkJCQkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRk X3JlZyAoMzEpKSB7CisJCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQkJfQorCQkJ CQlpZiAocmVhZF9yZWdpc3RlciAoKGluc24gPj4gMjEpICYgMHgxZikgPCAw KSB7CisJCQkJCQlnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkJCQkJ fQorCQkJCQllbHNlIHsKKwkJCQkJCWdvdG8gc2V0X3BjOworCQkJCQl9CisJ CQkJCWJyZWFrOworCQkJCS8qIGJnZXphbGwgKi8KKwkJCQljYXNlIDB4MTM6 CisJCQkJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKDMxKSkgewor CQkJCQkJcmV0dXJuICgtMSk7CisJCQkJCX0KKwkJCQkJaWYgKHJlYWRfcmVn aXN0ZXIgKChpbnNuID4+IDIxKSAmIDB4MWYpID49IDApIHsKKwkJCQkJCWdv dG8gc2V0X2ltbV9kZWxheV9zbG90X3BjOworCQkJCQl9CisJCQkJCWVsc2Ug eworCQkJCQkJZ290byBzZXRfcGM7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJ CQkJZGVmYXVsdDoKKwkJCQkJZ290byBub19zdXBwb3J0OworCQkJCQlicmVh azsKKwkJCX0KKwkJCWJyZWFrOworCisJCS8qIGogKi8KKwkJY2FzZSAweDAy OgorCQkJbWlwc190YXJnZXRfYWRkciA9IChwYyAmIDB4ZjAwMDAwMDApIHwg KCgoaW5zbiA+PiAwKSAmIDB4MDNmZmZmZmYpIDw8IDIpOworCQkJZ290byBz ZXRfZGVsYXlfc2xvdF9wYzsKKwkJCWJyZWFrOworCisJCS8qIGJlcSAqLwor CQljYXNlIDB4MDQ6CisJCQlpZiAocmVhZF9yZWdpc3RlciAoKGluc24gPj4g MjEpICYgMHgxZikgPT0gcmVhZF9yZWdpc3RlciAoKGluc24gPj4gMTYpICYg MHgxZikpIHsKKwkJCQlnb3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkJ CX0KKwkJCWJyZWFrOworCisJCS8qIGJuZSAqLworCQljYXNlIDB4MDU6CisJ CQlpZiAocmVhZF9yZWdpc3RlciAoKGluc24gPj4gMjEpICYgMHgxZikgIT0g cmVhZF9yZWdpc3RlciAoKGluc24gPj4gMTYpICYgMHgxZikpIHsKKwkJCQln b3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkJCX0KKwkJCWJyZWFrOwor CisJCS8qIGJsZXogKi8KKwkJY2FzZSAweDA2OgorCQkJaWYgKHJlYWRfcmVn aXN0ZXIgKChpbnNuID4+IDIxKSAmIDB4MWYpIDw9IDApIHsKKwkJCQlnb3Rv IHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkJCX0KKwkJCWJyZWFrOworCisJ CS8qIGJndHogKi8KKwkJY2FzZSAweDA3OgorCQkJaWYgKHJlYWRfcmVnaXN0 ZXIgKChpbnNuID4+IDIxKSAmIDB4MWYpID4gMCkgeworCQkJCWdvdG8gc2V0 X2ltbV9kZWxheV9zbG90X3BjOworCQkJfQorCQkJYnJlYWs7CisKKwkJLyog YmVxbCAqLworCQljYXNlIDB4MTQ6CisJCQlpZiAocmVhZF9yZWdpc3RlciAo KGluc24gPj4gMjEpICYgMHgxZikgPT0gcmVhZF9yZWdpc3RlciAoKGluc24g Pj4gMTYpICYgMHgxZikpIHsKKwkJCQlnb3RvIHNldF9pbW1fZGVsYXlfc2xv dF9wYzsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWdvdG8gc2V0X3BjOworCQkJ fQorCQkJYnJlYWs7CisKKwkJLyogYm5lbCAqLworCQljYXNlIDB4MTU6CisJ CQlpZiAocmVhZF9yZWdpc3RlciAoKGluc24gPj4gMjEpICYgMHgxZikgIT0g cmVhZF9yZWdpc3RlciAoKGluc24gPj4gMTYpICYgMHgxZikpIHsKKwkJCQln b3RvIHNldF9pbW1fZGVsYXlfc2xvdF9wYzsKKwkJCX0KKwkJCWVsc2Ugewor CQkJCWdvdG8gc2V0X3BjOworCQkJfQorCQkJYnJlYWs7CisKKwkJLyogYmxl emwgKi8KKwkJY2FzZSAweDE2OgorCQkJaWYgKHJlYWRfcmVnaXN0ZXIgKChp bnNuID4+IDIxKSAmIDB4MWYpIDw9IDApIHsKKwkJCQlnb3RvIHNldF9pbW1f ZGVsYXlfc2xvdF9wYzsKKwkJCX0KKwkJCWVsc2UgeworCQkJCWdvdG8gc2V0 X3BjOworCQkJfQorCQkJYnJlYWs7CisKKwkJLyogYmd0emwgKi8KKwkJY2Fz ZSAweDE3OgorCQkJaWYgKHJlYWRfcmVnaXN0ZXIgKChpbnNuID4+IDIxKSAm IDB4MWYpID4gMCkgeworCQkJCWdvdG8gc2V0X2ltbV9kZWxheV9zbG90X3Bj OworCQkJfQorCQkJZWxzZSB7CisJCQkJZ290byBzZXRfcGM7CisJCQl9CisJ CQlicmVhazsKKworCQkvKiBqYWwgKi8KKwkJY2FzZSAweDAzOgorCQkJaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAoMzEpKSB7CisJCQkJcmV0dXJu ICgtMSk7CisJCQl9CisJCQltaXBzX3RhcmdldF9hZGRyID0gKHBjICYgMHhm MDAwMDAwMCkgfCAoKChpbnNuID4+IDApICYgMHgwM2ZmZmZmZikgPDwgMik7 CisJCQlnb3RvIHNldF9kZWxheV9zbG90X3BjOworCQkJYnJlYWs7CisKKwkJ LyogamFseCAqLworCQljYXNlIDB4MWQ6CisJCQlnb3RvIG5vX3N1cHBvcnQ7 CisJCQlicmVhazsKKworCQkvKiBhZGRpICovCisJCWNhc2UgMHgwODoKKwkJ LyogYWRkaXUgKi8KKwkJY2FzZSAweDA5OgorCQkvKiBzbHRpICovCisJCWNh c2UgMHgwYToKKwkJLyogc2x0aXUgKi8KKwkJY2FzZSAweDBiOgorCQkvKiBh bmRpICovCisJCWNhc2UgMHgwYzoKKwkJLyogb3JpICovCisJCWNhc2UgMHgw ZDoKKwkJLyogeG9yaSAqLworCQljYXNlIDB4MGU6CisJCS8qIGx1aSAqLwor CQljYXNlIDB4MGY6CisJCQlnb3RvIHNldF9ydDsKKwkJCWJyZWFrOworCisJ CS8qIENPUDAgKi8KKwkJY2FzZSAweDEwOgorCQkJaWYgKChpbnNuID4+IDI1 KSAmIDB4MSkgeworCQkJCXN3aXRjaCAoKGluc24gPj4gMCkgJiAweDNmKSB7 CisJCQkJCS8qIGVyZXQgKi8KKwkJCQkJY2FzZSAweDE4OgorCQkJCQkJZ290 byBzZXRfcGM7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJ CWdvdG8gbm9fc3VwcG9ydDsKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0K KwkJCWVsc2UgeworCQkJCXN3aXRjaCAoKGluc24gPj4gMjEpICYgMHgxZikg eworCQkJCQkvKiBtZmMwICovCisJCQkJCWNhc2UgMHgwMDoKKwkJCQkJCWdv dG8gc2V0X3J0OworCQkJCQkJYnJlYWs7CisJCQkJCS8qIG10YzAgKi8KKwkJ CQkJY2FzZSAweDA0OgorCQkJCQkJeworCQkJCQkJCXN3aXRjaCAoKGluc24g Pj4gMTEpICYgMHgxZikgeworCQkJCQkJCQljYXNlIDEzOgorCQkJCQkJCQkJ LyogQ2F1c2UgKi8KKwkJCQkJCQkJCWlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKHJlZ251bS0+Y2F1c2UpKSB7CisJCQkJCQkJCQkJcmV0dXJuICgt MSk7CisJCQkJCQkJCQl9CisJCQkJCQkJCWNhc2UgODoKKwkJCQkJCQkJCS8q IGJhZHZhZGRyICovCisJCQkJCQkJCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChyZWdudW0tPmJhZHZhZGRyKSkgeworCQkJCQkJCQkJCXJldHVy biAoLTEpOworCQkJCQkJCQkJfQorCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJ CWJyZWFrOworCQkJCQlkZWZhdWx0OgorCQkJCQkJZ290byBub19zdXBwb3J0 OworCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisKKwkJ Y2FzZSAweDFjOgorCQkJc3dpdGNoICgoaW5zbiA+PiAwKSAmIDB4M2YpIHsK KwkJCQkvKiBtYWRkICovCisJCQkJY2FzZSAweDAwOgorCQkJCS8qIG1hZGR1 ICovCisJCQkJY2FzZSAweDAxOgorCQkJCS8qIG1zdWIgKi8KKwkJCQljYXNl IDB4MDQ6CisJCQkJLyogbXN1YnUgKi8KKwkJCQljYXNlIDB4MDU6CisJCQkJ CWdvdG8gc2V0X2hpX2xvOworCQkJCQlicmVhazsKKwkJCQkvKiBtdWwgKi8K KwkJCQljYXNlIDB4MDI6CisJCQkJCXsKKwkJCQkJCXVpbnQzMl90CXJkID0g KGluc24gPj4gMTEpICYgMHgxZjsKKwkJCQkJCWlmIChyZCAhPSAwKSB7CisJ CQkJCQkJaWYgKHJlY29yZF9hcmNoX2xpc3RfYWRkX3JlZyAocmQpKSB7CisJ CQkJCQkJCXJldHVybiAoLTEpOworCQkJCQkJCX0KKwkJCQkJCX0KKwkJCQkJ CWdvdG8gc2V0X2hpX2xvOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCS8q IGNsbyAqLworCQkJCWNhc2UgMHgyMToKKwkJCQkvKiBjbHogKi8KKwkJCQlj YXNlIDB4MjA6CisJCQkJCWdvdG8gc2V0X3JkOworCQkJCQlicmVhazsKKwkJ CQlkZWZhdWx0OgorCQkJCQlnb3RvIG5vX3N1cHBvcnQ7CisJCQkJCWJyZWFr OworCQkJfQorCQkJYnJlYWs7CisKKwkJLyogbGIgKi8KKwkJY2FzZSAweDIw OgorCQkvKiBsaCAqLworCQljYXNlIDB4MjE6CisJCS8qIGx3bCAqLworCQlj YXNlIDB4MjI6CisJCS8qIGx3ICovCisJCWNhc2UgMHgyMzoKKwkJLyogbGJ1 ICovCisJCWNhc2UgMHgyNDoKKwkJLyogbGh1ICovCisJCWNhc2UgMHgyNToK KwkJLyogbHdyICovCisJCWNhc2UgMHgyNjoKKwkJLyogbGwgKi8KKwkJY2Fz ZSAweDMwOgorCQkJZ290byBzZXRfcnQ7CisJCQlicmVhazsKKworCQkvKiBz YiAqLworCQljYXNlIDB4Mjg6CisJCS8qIHNoICovCisJCWNhc2UgMHgyOToK KwkJLyogc3dsICovCisJCWNhc2UgMHgyYToKKwkJLyogc3cgKi8KKwkJY2Fz ZSAweDJiOgorCQkvKiBzd3IgKi8KKwkJY2FzZSAweDJlOgorCQkvKiBzYyAq LworCQljYXNlIDB4Mzg6CisJCQl7CisJCQkJdWludDMyX3QJYWRkcjsKKwor CQkJCS8qIGFkZHIgKi8KKwkJCQkvKiBiYXNlICovCisJCQkJYWRkciA9IChp bnNuID4+IDIxKSAmIDB4MWY7CisJCQkJYWRkciA9IHJlYWRfcmVnaXN0ZXIg KGFkZHIpOworCQkJCS8qIG9mZnNldCAqLworCQkJCWFkZHIgKz0gKGluc24g Pj4gMCkgJiAweGZmZmY7CisKKwkJCQlzd2l0Y2ggKG9wY29kZSkgeworCQkJ CQkvKiBzYiAqLworCQkJCQljYXNlIDB4Mjg6CisJCQkJCQlpZiAocmVjb3Jk X2FyY2hfbGlzdF9hZGRfbWVtIChhZGRyLCAxKSkgeworCQkJCQkJCXJldHVy biAoLTEpOworCQkJCQkJfQorCQkJCQkJYnJlYWs7CisJCQkJCS8qIHNoICov CisJCQkJCWNhc2UgMHgyOToKKwkJCQkJCWlmIChyZWNvcmRfYXJjaF9saXN0 X2FkZF9tZW0gKGFkZHIsIDIpKSB7CisJCQkJCQkJcmV0dXJuICgtMSk7CisJ CQkJCQl9CisJCQkJCQlicmVhazsKKwkJCQkJLyogc3dsICovCisJCQkJCWNh c2UgMHgyYToKKwkJCQkJLyogc3dyICovCisJCQkJCWNhc2UgMHgyZToKKwkJ CQkJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIgJiAweGZm ZmZmZjAwLCAyKSkgeworCQkJCQkJCXJldHVybiAoLTEpOworCQkJCQkJfQor CQkJCQkJYnJlYWs7CisJCQkJCS8qIHN3ICovCisJCQkJCWNhc2UgMHgyYjoK KwkJCQkJCWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9tZW0gKGFkZHIsIDQp KSB7CisJCQkJCQkJcmV0dXJuICgtMSk7CisJCQkJCQl9CisJCQkJCQlicmVh azsKKwkJCQkJLyogc2MgKi8KKwkJCQkJY2FzZSAweDM4OgorCQkJCQkJaWYg KHJlY29yZF9hcmNoX2xpc3RfYWRkX21lbSAoYWRkciwgNCkpIHsKKwkJCQkJ CQlyZXR1cm4gKC0xKTsKKwkJCQkJCX0KKwkJCQkJCWdvdG8gc2V0X3J0Owor CQkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCS8qIHBy ZWYgKi8KKwkJY2FzZSAweDMzOgorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoK KwkJCWdvdG8gbm9fc3VwcG9ydDsKKwkJCWJyZWFrOworCX0KKworb3V0Ogor CWlmIChyZWNvcmRfZGVsYXlfc2xvdCkgeworCQlpZiAoYWRkX3BjKSB7CisJ CQlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdudW0tPnBjKSkg eworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJYWRkX3BjID0gMDsKKwkJ fQorCX0KKwlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfZW5kIChhZGRfcGMp KSB7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKDApOworCitub19z dXBwb3J0OgorCXByaW50Zl91bmZpbHRlcmVkIChfKCJyZWNvcmQ6IHJlY29y ZCBhbmQgcmV2ZXJzZSBmdW5jdGlvbiBkb24ndCBzdXBwb3J0IDMyIGJpdHMg aW5zdHJ1Y3Rpb24gMHglMDh4LlxuIiksICh1bnNpZ25lZCBpbnQpaW5zbik7 CisJcmV0dXJuICgtMSk7CisKK3NldF9yZDoKKwl7CisJCXVpbnQzMl90CXJk ID0gKGluc24gPj4gMTEpICYgMHgxZjsKKwkJaWYgKHJkICE9IDApIHsKKwkJ CWlmIChyZWNvcmRfYXJjaF9saXN0X2FkZF9yZWcgKHJkKSkgeworCQkJCXJl dHVybiAoLTEpOworCQkJfQorCQl9CisJfQorCWdvdG8gb3V0OworCitzZXRf cnQ6CisJeworCQl1aW50MzJfdAlydCA9IChpbnNuID4+IDE2KSAmIDB4MWY7 CisJCWlmIChydCAhPSAwKSB7CisJCQlpZiAocmVjb3JkX2FyY2hfbGlzdF9h ZGRfcmVnIChydCkpIHsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQor CX0KKwlnb3RvIG91dDsKKworc2V0X2ltbV9kZWxheV9zbG90X3BjOgorCXsK KwkJdWludDMyX3QJaW1tID0gKGluc24gPj4gMCkgJiAweGZmZmY7CisJCWlm IChpbW0gPj4gMTUpIHsKKwkJCWltbSB8PSAweGZmZmYwMDAwOworCQl9CisJ CWltbSA8PD0gMjsKKwkJbWlwc190YXJnZXRfYWRkciA9IHBjICsgNCArIGlt bTsKKwl9CisJZ290byBzZXRfZGVsYXlfc2xvdF9wYzsKKworc2V0X2RlbGF5 X3Nsb3RfcGM6CisJbWlwc19kZWxheV9zbG90X2FkZHIgPSBwYyArIDQ7CisJ cmVjb3JkX2RlbGF5X3Nsb3QgKys7CisJZ290byBzZXRfcGM7CisKK3NldF9w YzoKKwlpZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdudW0tPnBj KSkgeworCQlyZXR1cm4gKC0xKTsKKwl9CisJYWRkX3BjID0gMDsKKwlnb3Rv IG91dDsKKworc2V0X2hpX2xvOgorCWlmIChyZWNvcmRfYXJjaF9saXN0X2Fk ZF9yZWcgKHJlZ251bS0+aGkpKSB7CisJCXJldHVybiAoLTEpOworCX0KKwlp ZiAocmVjb3JkX2FyY2hfbGlzdF9hZGRfcmVnIChyZWdudW0tPmxvKSkgewor CQlyZXR1cm4gKC0xKTsKKwl9CisJZ290byBvdXQ7Cit9CisKK3N0YXRpYyBp bnQKK21pcHNfcmVjb3JkICh2b2lkKQoreworCUNPUkVfQUREUglwYyA9IHJl YWRfcGMgKCk7CisKKwlpZiAoZGVidWdfcmVjb3JkKSB7CisJCWZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogbWlwc19yZWNvcmQg cGMgPSAweCVzXG4iLCBwYWRkcl9ueiAocGMpKTsKKwl9CisKKwlpZiAobWlw c19wY19pc19taXBzMTYgKHBjKSkgeworCQlwcmludGZfdW5maWx0ZXJlZCAo XygicmVjb3JkOiByZWNvcmQgYW5kIHJldmVyc2UgZnVuY3Rpb24gZG9uJ3Qg c3VwcG9ydCBtaXBzMTYuXG4iKSk7CisJCXJldHVybiAoLTEpOworCX0KKwor CWlmIChyZWNvcmRfZGVsYXlfc2xvdCkgeworCQlpZiAobWlwc19yZWNvcmRf MzIgKG1pcHNfZGVsYXlfc2xvdF9hZGRyKSkgeworCQkJcmV0dXJuICgtMSk7 CisJCX0KKwkJaWYgKG1pcHNfcmVjb3JkXzMyIChtaXBzX3RhcmdldF9hZGRy KSkgeworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJcmVjb3JkX2RlbGF5X3Ns b3QgLS07CisJfQorCXJldHVybiAobWlwc19yZWNvcmRfMzIgKHBjKSk7Cit9 CisKK3N0YXRpYyB2b2lkCittaXBzX3JlY29yZF9kYXNtICh2b2lkKQorewor CWNvbnN0IHN0cnVjdCBtaXBzX3JlZ251bQkqcmVnbnVtOworCVVMT05HRVNU CQkJcGM7CisKKwlpZiAobWlwc19wY19pc19taXBzMTYgKHJlYWRfcGMgKCkp KSB7CisJCWVycm9yIChfKCJyZWNvcmQ6IHJlY29yZCBhbmQgcmV2ZXJzZSBm dW5jdGlvbiBkb24ndCBzdXBwb3J0IG1pcHMxNi5cbiIpKTsKKwl9CisKKwly ZWdudW0gPSBtaXBzX3JlZ251bSAoY3VycmVudF9nZGJhcmNoKTsKKwlyZWdj YWNoZV9jb29rZWRfcmVhZF91bnNpZ25lZCAoY3VycmVudF9yZWdjYWNoZSwg cmVnbnVtLT5wYywgJnBjKTsKKwlpZiAoZ2RiX2lzX3JldmVyc2UpIHsKKwkJ cGMgLT0gNDsKKwl9CisJZWxzZSB7CisJCXBjICs9IDQ7CisJfQorCXJlZ2Nh Y2hlX2Nvb2tlZF93cml0ZV91bnNpZ25lZCAoY3VycmVudF9yZWdjYWNoZSwg cmVnbnVtLT5wYywgcGMpOworfQorLyp0ZWF3YXRlciByZWMgZW5kLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKwogc3RhdGljIHN0cnVjdCBnZGJhcmNoICoKIG1pcHNf Z2RiYXJjaF9pbml0IChzdHJ1Y3QgZ2RiYXJjaF9pbmZvIGluZm8sIHN0cnVj dCBnZGJhcmNoX2xpc3QgKmFyY2hlcykKIHsKQEAgLTUxNjMsNiArNTc1Mywx MSBAQAogICBmcmFtZV9iYXNlX2FwcGVuZF9zbmlmZmVyIChnZGJhcmNoLCBt aXBzX2luc24xNl9mcmFtZV9iYXNlX3NuaWZmZXIpOwogICBmcmFtZV9iYXNl X2FwcGVuZF9zbmlmZmVyIChnZGJhcmNoLCBtaXBzX2luc24zMl9mcmFtZV9i YXNlX3NuaWZmZXIpOwogCisvKnRlYXdhdGVyIHJlYyBiZWdpbi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0qLworICBzZXRfZ2RiYXJjaF9yZWNvcmQgKGdkYmFyY2gsIG1pcHNf cmVjb3JkKTsKKyAgc2V0X2dkYmFyY2hfcmVjb3JkX2Rhc20gKGdkYmFyY2gs IG1pcHNfcmVjb3JkX2Rhc20pOworLyp0ZWF3YXRlciByZWMgZW5kLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tKi8KKwogICByZXR1cm4gZ2RiYXJjaDsKIH0KIApkaWZmIC1y dU5hIC0tZXhjbHVkZT1DVlMgZ2RiLTYuNi9nZGIvcmVjb3JkLmMgZ2RiLTYu Ni1yZWNvcmQvZ2RiL3JlY29yZC5jCi0tLSBnZGItNi42L2dkYi9yZWNvcmQu YwkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAwMCArMDgwMAorKysgZ2Ri LTYuNi1yZWNvcmQvZ2RiL3JlY29yZC5jCTIwMDctMTAtMTYgMTE6NDY6MTYu MDAwMDAwMDAwICswODAwCkBAIC0wLDAgKzEsNDMyIEBACisvKiBSZWNvcmQg djAuMS4wIGZvciBHREIsIHRoZSBHTlUgZGVidWdnZXIuCisgICBXcml0dGVu IGJ5IFRlYXdhdGVyIFpodSA8dGVhd2F0ZXJAZ21haWwuY29tPgorCisgICBU aGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisKKyAgIFRoaXMgcHJvZ3JhbSBp cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv b3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBv ZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxh dGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRl ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0 IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAg IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJv Z3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAg Rm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMw LAorICAgQm9zdG9uLCBNQSAwMjExMS0xMzA3LCBVU0EuICAqLworCisjaW5j bHVkZSAiZGVmcy5oIgorI2luY2x1ZGUgImluZmVyaW9yLmgiCisjaW5jbHVk ZSAiYmZkLmgiCisjaW5jbHVkZSAic3ltZmlsZS5oIgorI2luY2x1ZGUgImdk YmNtZC5oIgorI2luY2x1ZGUgImdkYmNvcmUuaCIKKyNpbmNsdWRlICJzZXJp YWwuaCIKKyNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNsdWRlICJleGNlcHRp b25zLmgiCisjaW5jbHVkZSAicmVtb3RlLXV0aWxzLmgiCisjaW5jbHVkZSAi Z2RiX3N0cmluZy5oIgorI2luY2x1ZGUgImdkYl9zdGF0LmgiCisjaW5jbHVk ZSAicmVnY2FjaGUuaCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUg PHN0ZGludC5oPgorI2luY2x1ZGUgIm1pcHMtdGRlcC5oIgorI2luY2x1ZGUg PGZjbnRsLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3lz L21tYW4uaD4KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUgImZy YW1lLXVud2luZC5oIgorI2luY2x1ZGUgImdkYnRocmVhZC5oIgorI2luY2x1 ZGUgImV4Y2VwdGlvbnMuaCIKKyNpbmNsdWRlICJpbmZjYWxsLmgiCisjaW5j bHVkZSAic291cmNlLmgiCisjaW5jbHVkZSAicmVjb3JkLmgiCisKK2V4dGVy biBzdHJ1Y3QgYnBfbG9jYXRpb24JKmJwX2xvY2F0aW9uX2NoYWluOworCity ZWNvcmRfdAkJKnJlY29yZF9saXN0ID0gTlVMTDsKK3JlY29yZF90CQkqcmVj b3JkX2FyY2hfbGlzdF9oZWFkID0gTlVMTDsKK3JlY29yZF90CQkqcmVjb3Jk X2FyY2hfbGlzdF90YWlsID0gTlVMTDsKK3Vuc2lnbmVkIGludAkJZ2RiX2lz X3JlY29yZGluZyA9IDA7CitpbnQJCQlnZGJfaXNfcmV2ZXJzZSA9IDA7Citp bnQJCQlkZWJ1Z19yZWNvcmQgPSAwOworaW50CQkJcmVjb3JkX3dhaXRfc3Rl cCA9IDA7CitpbnQJCQlyZWNvcmRfZGVsYXlfc2xvdCA9IDA7CitzdGF0aWMg c2lnc2V0X3QJCXJlY29yZF9tYXNrYWxsOworc3RhdGljIGludAkJcmVjb3Jk X2dldF9zaWcgPSAwOworCitzdGF0aWMgdm9pZAorc2hvd19kZWJ1Z19yZWNv cmQgKHN0cnVjdCB1aV9maWxlICpmaWxlLCBpbnQgZnJvbV90dHksIHN0cnVj dCBjbWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sK KwlmcHJpbnRmX2ZpbHRlcmVkIChmaWxlLCBfKCJSZWNvcmQgZGVidWdnaW5n IGlzICVzLlxuIiksIHZhbHVlKTsKK30KKworc3RhdGljIHZvaWQKK3JlY29y ZF9saXN0X3JlbGVhc2UgKHJlY29yZF90ICpyZWMpCit7CisJcmVjb3JkX3QJ KnRtcDsKKworCXdoaWxlIChyZWMpIHsKKwkJdG1wID0gcmVjOworCQlyZWMg PSByZWMtPnByZXY7CisJCXhmcmVlICh0bXApOworCX0KK30KKwordm9pZAor cmVjb3JkX21lc3NhZ2UgKHZvaWQpCit7CisJaW50CXJldDsKKwlpbnQJbmVl ZF9kYXNtID0gMDsKKworCXJlY29yZF9hcmNoX2xpc3RfaGVhZCA9IE5VTEw7 CisJcmVjb3JkX2FyY2hfbGlzdF90YWlsID0gTlVMTDsKKworCWlmIChnZGJh cmNoX3JlY29yZCAoY3VycmVudF9nZGJhcmNoKSkgeworCQlyZWNvcmRfZGVs YXlfc2xvdCA9IDA7CisJCXJlY29yZF9saXN0X3JlbGVhc2UgKHJlY29yZF9h cmNoX2xpc3RfdGFpbCk7CisJCWVycm9yIChfKCJyZWNvcmQ6IHJlY29yZCBt ZXNzYWdlIGVycm9yLiIpKTsKKwl9CisKKwlpZiAocmVjb3JkX2xpc3QpIHsK KwkJcmVjb3JkX2xpc3QtPm5leHQgPSByZWNvcmRfYXJjaF9saXN0X2hlYWQ7 CisJCXJlY29yZF9hcmNoX2xpc3RfaGVhZC0+cHJldiA9IHJlY29yZF9saXN0 OworCQlyZWNvcmRfbGlzdCA9IHJlY29yZF9hcmNoX2xpc3RfdGFpbDsKKwl9 CisJZWxzZSB7CisJCXJlY29yZF9saXN0ID0gcmVjb3JkX2FyY2hfbGlzdF90 YWlsOworCX0KK30KKworc3RhdGljIHZvaWQKK3JlY29yZF9hcmNoX2xpc3Rf YWRkIChyZWNvcmRfdCAqcmVjKQoreworCWlmIChyZWNvcmRfYXJjaF9saXN0 X3RhaWwpIHsKKwkJcmVjb3JkX2FyY2hfbGlzdF90YWlsLT5uZXh0ID0gcmVj OworCQlyZWMtPnByZXYgPSByZWNvcmRfYXJjaF9saXN0X3RhaWw7CisJCXJl Y29yZF9hcmNoX2xpc3RfdGFpbCA9IHJlYzsKKwl9CisJZWxzZSB7CisJCXJl Y29yZF9hcmNoX2xpc3RfaGVhZCA9IHJlYzsKKwkJcmVjb3JkX2FyY2hfbGlz dF90YWlsID0gcmVjOworCX0KK30KKworaW50CityZWNvcmRfYXJjaF9saXN0 X2FkZF9yZWcgKGludCBudW0pCit7CisJcmVjb3JkX3QJKnJlYzsKKworCWlm IChkZWJ1Z19yZWNvcmQpIHsKKwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJf c3RkbG9nLCAicmVjb3JkOiBhZGQgcmVnIG51bSA9ICVkIHRvIGFyY2ggbGlz dC5cbiIsIG51bSk7CisJfQorCisJcmVjID0gKHJlY29yZF90ICopeG1hbGxv YyAoc2l6ZW9mIChyZWNvcmRfdCkpOworCWlmICghcmVjKSB7CisJCWZwcmlu dGZfdW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogYWxsb2MgbWVt b3J5IGVycm9yLlxuIik7CisJCXJldHVybiAoLTEpOworCX0KKwlyZWMtPnUu cmVnLnZhbCA9IChnZGJfYnl0ZSAqKXhtYWxsb2MgKE1BWF9SRUdJU1RFUl9T SVpFKTsKKwlpZiAoIXJlYy0+dS5yZWcudmFsKSB7CisJCWZwcmludGZfdW5m aWx0ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogYWxsb2MgbWVtb3J5IGVy cm9yLlxuIik7CisJCXhmcmVlIChyZWMpOworCQlyZXR1cm4gKC0xKTsKKwl9 CisJcmVjLT5wcmV2ID0gTlVMTDsKKwlyZWMtPm5leHQgPSBOVUxMOworCXJl Yy0+dHlwZSA9IDE7CisJcmVjLT51LnJlZy5udW0gPSBudW07CisKKwlyZWdj YWNoZV9jb29rZWRfcmVhZCAoY3VycmVudF9yZWdjYWNoZSwgbnVtLCByZWMt PnUucmVnLnZhbCk7CisKKwlyZWNvcmRfYXJjaF9saXN0X2FkZCAocmVjKTsK KworCXJldHVybiAoMCk7Cit9CisKK2ludAorcmVjb3JkX2FyY2hfbGlzdF9h ZGRfbWVtIChDT1JFX0FERFIgYWRkciwgaW50IGxlbikKK3sKKwlyZWNvcmRf dAkqcmVjOworCisJaWYgKGRlYnVnX3JlY29yZCkgeworCQlmcHJpbnRmX3Vu ZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IGFkZCBtZW0gYWRkciA9 IDB4JXMgbGVuID0gJWQgdG8gYXJjaCBsaXN0LlxuIiwgcGFkZHJfbnogKGFk ZHIpLCBsZW4pOworCX0KKworCXJlYyA9IChyZWNvcmRfdCAqKXhtYWxsb2Mg KHNpemVvZiAocmVjb3JkX3QpKTsKKwlpZiAoIXJlYykgeworCQlmcHJpbnRm X3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IGFsbG9jIG1lbW9y eSBlcnJvci5cbiIpOworCQlyZXR1cm4gKC0xKTsKKwl9CisJcmVjLT51Lm1l bS52YWwgPSAoZ2RiX2J5dGUgKil4bWFsbG9jIChsZW4pOworCWlmICghcmVj LT51Lm1lbS52YWwpIHsKKwkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3Rk bG9nLCAicmVjb3JkOiBhbGxvYyBtZW1vcnkgZXJyb3IuXG4iKTsKKwkJeGZy ZWUgKHJlYyk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZWMtPnByZXYgPSBO VUxMOworCXJlYy0+bmV4dCA9IE5VTEw7CisJcmVjLT50eXBlID0gMjsKKwly ZWMtPnUubWVtLmFkZHIgPSBhZGRyOworCXJlYy0+dS5tZW0ubGVuID0gbGVu OworCisJaWYgKHRhcmdldF9yZWFkX21lbW9yeSAoYWRkciwgcmVjLT51Lm1l bS52YWwsIGxlbikpIHsKKwkJeGZyZWUgKHJlYy0+dS5yZWcudmFsKTsKKwkJ eGZyZWUgKHJlYyk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJlY29yZF9h cmNoX2xpc3RfYWRkIChyZWMpOworCisJcmV0dXJuICgwKTsKK30KKworaW50 CityZWNvcmRfYXJjaF9saXN0X2FkZF9lbmQgKGludCBuZWVkX2Rhc20pCit7 CisJcmVjb3JkX3QJKnJlYzsKKworCWlmIChkZWJ1Z19yZWNvcmQpIHsKKwkJ ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAicmVjb3JkOiBhZGQg ZW5kIG5lZWRfZGFzbSA9ICVkIHRvIGFyY2ggbGlzdC5cbiIsIG5lZWRfZGFz bSk7CisJfQorCisJcmVjID0gKHJlY29yZF90ICopeG1hbGxvYyAoc2l6ZW9m IChyZWNvcmRfdCkpOworCWlmICghcmVjKSB7CisJCWZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogYWxsb2MgbWVtb3J5IGVycm9y LlxuIik7CisJCXJldHVybiAoLTEpOworCX0KKwlyZWMtPnByZXYgPSBOVUxM OworCXJlYy0+bmV4dCA9IE5VTEw7CisJcmVjLT50eXBlID0gMDsKKworCXJl Yy0+dS5uZWVkX2Rhc20gPSBuZWVkX2Rhc207CisKKwlyZWNvcmRfYXJjaF9s aXN0X2FkZCAocmVjKTsKKworCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2 b2lkCityZWNvcmRfc2lnX2hhbmRsZXIgKGludCBzaWdubykKK3sKKwlpZiAo ZGVidWdfcmVjb3JkKSB7CisJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2RiX3N0 ZGxvZywgInJlY29yZDogZ2V0IGEgc2lnbmFsXG4iKTsKKwl9CisJcmVjb3Jk X3dhaXRfc3RlcCA9IDE7CisJcmVjb3JkX2dldF9zaWcgPSAxOworfQorCitw dGlkX3QKK3JlY29yZF93YWl0IChwdGlkX3QgcHRpZCwgc3RydWN0IHRhcmdl dF93YWl0c3RhdHVzICpzdGF0dXMpCit7CisJc3RydWN0IHNpZ2FjdGlvbglh Y3QsIG9sZF9hY3Q7CisJc3RhdGljIGludAkJc3RhdGUgPSAwOwkvKiAwIG5v cm1hbCAxIHRvIHRoZSBlbmQgMiB0byB0aGUgYmVnaW4gKi8KKwlpbnQJCQlj b24gPSAxOworCWludAkJCWluc25fZW5kID0gMDsKKwlpbnQJCQluZWVkX2Rh c20gPSAwOworCQorCWlmIChkZWJ1Z19yZWNvcmQpIHsKKwkJZnByaW50Zl91 bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAicmVjb3JkOiByZWNvcmRfd2FpdCBz dGVwID0gJWRcbiIsIHJlY29yZF93YWl0X3N0ZXApOworCX0KKworCXJlY29y ZF9nZXRfc2lnID0gMDsKKwlhY3Quc2FfaGFuZGxlciA9IHJlY29yZF9zaWdf aGFuZGxlcjsKKwlhY3Quc2FfbWFzayA9IHJlY29yZF9tYXNrYWxsOworCWFj dC5zYV9mbGFncyA9IFNBX1JFU1RBUlQ7CisJaWYgKHNpZ2FjdGlvbiAoU0lH SU5ULCAmYWN0LCAmb2xkX2FjdCkpIHsKKwkJcGVycm9yX3dpdGhfbmFtZSAo Xygic2lnYWN0aW9uIikpOworCX0KKworCWRvIHsKKwkJLyogY2hlY2sgc3Rh dGUgKi8KKwkJaWYgKChnZGJfaXNfcmV2ZXJzZSAmJiAhcmVjb3JkX2xpc3Qt PnByZXYgJiYgc3RhdGUgPT0gMikgfHwgKCFnZGJfaXNfcmV2ZXJzZSAmJiAh cmVjb3JkX2xpc3QtPm5leHQgJiYgc3RhdGUgPT0gMSkpIHsKKwkJCWlmIChk ZWJ1Z19yZWNvcmQpIHsKKwkJCQlpZiAoc3RhdGUgPT0gMSkgeworCQkJCQlm cHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IHJ1bm5p bmcgdG8gdGhlIGVuZCBvZiByZWNvcmQgbGlzdC5cbiIpOworCQkJCX0KKwkJ CQllbHNlIGlmIChzdGF0ZSA9PSAyKSB7CisJCQkJCWZwcmludGZfdW5maWx0 ZXJlZCAoZ2RiX3N0ZGxvZywgInJlY29yZDogcnVubmluZyB0byB0aGUgYmVn aW4gb2YgcmVjb3JkIGxpc3QuXG4iKTsKKwkJCQl9CisJCQl9CisJCQlzdG9w X3Nvb24gPSBTVE9QX1FVSUVUTFk7CisJCQlicmVhazsKKwkJfQorCQlzdGF0 ZSA9IDA7CisKKwkJLyogc2V0IHJlZ2lzdGVyIGFuZCBtZW1vcnkgYWNjb3Jk aW5nIHRvIHJlY29yZF9saXN0ICovCisJCWlmIChyZWNvcmRfbGlzdC0+dHlw ZSA9PSAxKSB7CisJCQkvKiByZWcgKi8KKwkJCWdkYl9ieXRlCXJlZ1tNQVhf UkVHSVNURVJfU0laRV07CisJCQlpZiAoZGVidWdfcmVjb3JkKSB7CisJCQkJ ZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9nLCAicmVjb3JkOiByZWNv cmRfbGlzdCByZWcgbnVtID0gJWQgdG8gYXJjaCBsaXN0LlxuIiwgcmVjb3Jk X2xpc3QtPnUucmVnLm51bSk7CisJCQl9CisJCQlyZWdjYWNoZV9jb29rZWRf cmVhZCAoY3VycmVudF9yZWdjYWNoZSwgcmVjb3JkX2xpc3QtPnUucmVnLm51 bSwgcmVnKTsKKwkJCXJlZ2NhY2hlX2Nvb2tlZF93cml0ZSAoY3VycmVudF9y ZWdjYWNoZSwgcmVjb3JkX2xpc3QtPnUucmVnLm51bSwgcmVjb3JkX2xpc3Qt PnUucmVnLnZhbCk7CisJCQltZW1jcHkgKHJlY29yZF9saXN0LT51LnJlZy52 YWwsIHJlZywgTUFYX1JFR0lTVEVSX1NJWkUpOworCQl9CisJCWVsc2UgaWYg KHJlY29yZF9saXN0LT50eXBlID09IDIpIHsKKwkJCS8qIG1lbSAqLworCQkJ Z2RiX2J5dGUJbWVtW3JlY29yZF9saXN0LT51Lm1lbS5sZW5dOworCQkJaWYg KGRlYnVnX3JlY29yZCkgeworCQkJCWZwcmludGZfdW5maWx0ZXJlZCAoZ2Ri X3N0ZGxvZywgInJlY29yZDogcmVjb3JkX2xpc3QgbWVtIGFkZHIgPSAweCVz IGxlbiA9ICVkIHRvIGN1cnJlbnQuXG4iLCBwYWRkcl9ueiAocmVjb3JkX2xp c3QtPnUubWVtLmFkZHIpLCByZWNvcmRfbGlzdC0+dS5tZW0ubGVuKTsKKwkJ CX0KKwkJCWlmICh0YXJnZXRfcmVhZF9tZW1vcnkgKHJlY29yZF9saXN0LT51 Lm1lbS5hZGRyLCBtZW0sIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pKSB7CisJ CQkJZXJyb3IgKF8oInJlY29yZDogcmVhZCBtZW1vcnkgYWRkciA9IDB4JXMg bGVuID0gJWQgZXJyb3IuIiksIHBhZGRyX256IChyZWNvcmRfbGlzdC0+dS5t ZW0uYWRkciksIHJlY29yZF9saXN0LT51Lm1lbS5sZW4pOworCQkJfQorCQkJ aWYgKHRhcmdldF93cml0ZV9tZW1vcnkgKHJlY29yZF9saXN0LT51Lm1lbS5h ZGRyLCByZWNvcmRfbGlzdC0+dS5tZW0udmFsLCByZWNvcmRfbGlzdC0+dS5t ZW0ubGVuKSkgeworCQkJCWVycm9yIChfKCJyZWNvcmQ6IHdyaXRlIG1lbW9y eSBhZGRyID0gMHglcyBsZW4gPSAlZCBlcnJvci4iKSwgcGFkZHJfbnogKHJl Y29yZF9saXN0LT51Lm1lbS5hZGRyKSwgcmVjb3JkX2xpc3QtPnUubWVtLmxl bik7CisJCQl9CisJCQltZW1jcHkgKHJlY29yZF9saXN0LT51Lm1lbS52YWws IG1lbSwgcmVjb3JkX2xpc3QtPnUubWVtLmxlbik7CisJCX0KKwkJZWxzZSB7 CisJCQlpZiAoZGVidWdfcmVjb3JkKSB7CisJCQkJZnByaW50Zl91bmZpbHRl cmVkIChnZGJfc3RkbG9nLCAicmVjb3JkOiByZWNvcmRfbGlzdCBlbmQgbmVl ZF9kYXNtID0gJWQgdG8gY3VycmVudC5cbiIsIHJlY29yZF9saXN0LT51Lm5l ZWRfZGFzbSk7CisJCQl9CisKKwkJCW5lZWRfZGFzbSA9IHJlY29yZF9saXN0 LT51Lm5lZWRfZGFzbTsKKwkJCWlmICghZ2RiX2lzX3JldmVyc2UpIHsKKwkJ CQlpbnNuX2VuZCA9IDE7CisJCQl9CisJCX0KKworCQlpZiAoZ2RiX2lzX3Jl dmVyc2UpIHsKKwkJCWlmIChyZWNvcmRfbGlzdC0+cHJldikgeworCQkJCXJl Y29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPnByZXY7CisJCQkJaWYgKCFyZWNv cmRfbGlzdC0+dHlwZSkgeworCQkJCQlpbnNuX2VuZCA9IDE7CisJCQkJfQor CQkJfQorCQkJZWxzZSB7CisJCQkJc3RhdGUgPSAyOworCQkJCWluc25fZW5k ID0gMTsKKwkJCX0KKwkJfQorCQllbHNlIHsKKwkJCWlmIChyZWNvcmRfbGlz dC0+bmV4dCkgeworCQkJCXJlY29yZF9saXN0ID0gcmVjb3JkX2xpc3QtPm5l eHQ7CisJCQl9CisJCQllbHNlIHsKKwkJCQlzdGF0ZSA9IDE7CisJCQl9CisJ CX0KKworCQlpZiAoaW5zbl9lbmQpIHsKKwkJCXN0cnVjdCBicF9sb2NhdGlv bgkqYjsKKwkJCUNPUkVfQUREUgkJdG1wX3BjOworCisJCQlpZiAoZGVidWdf cmVjb3JkKSB7CisJCQkJZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LCAicmVjb3JkOiBpbnNuIGVuZCBuZWVkX2Rhc20gPSAlZCB0byBjdXJyZW50 LlxuIiwgbmVlZF9kYXNtKTsKKwkJCX0KKworCQkJaWYgKG5lZWRfZGFzbSkg eworCQkJCWdkYmFyY2hfcmVjb3JkX2Rhc20gKGN1cnJlbnRfZ2RiYXJjaCk7 CisJCQl9CisKKwkJCS8vcmVnaXN0ZXJzX2NoYW5nZWQgKCk7CisJCQl0bXBf cGMgPSByZWFkX3BjICgpOworCisJCQkvKiBlbmQgKi8KKwkJCWlmIChyZWNv cmRfd2FpdF9zdGVwKSB7CisJCQkJaWYgKGRlYnVnX3JlY29yZCkgeworCQkJ CQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IHN0 ZXAuXG4iKTsKKwkJCQl9CisJCQkJY29uID0gMDsKKwkJCX0KKworCQkJLyog Y2hlY2sgYnJlYWtwb2ludCAqLworCQkJZm9yIChiID0gYnBfbG9jYXRpb25f Y2hhaW47IGI7IGIgPSBiLT5uZXh0KSB7CisJCQkJaWYgKGItPmluc2VydGVk KSB7CisJCQkJCWlmIChiLT50YXJnZXRfaW5mby5wbGFjZWRfYWRkcmVzcyA9 PSB0bXBfcGMpIHsKKwkJCQkJCWlmIChkZWJ1Z19yZWNvcmQpIHsKKwkJCQkJ CQlmcHJpbnRmX3VuZmlsdGVyZWQgKGdkYl9zdGRsb2csICJyZWNvcmQ6IGJy ZWFrIGF0IDB4JXMuXG4iLCBwYWRkcl9ueiAodG1wX3BjKSk7CisJCQkJCQl9 CisJCQkJCQljb24gPSAwOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9 CisJCQl9CisKKwkJCWluc25fZW5kID0gMDsKKwkJfQorCX0gd2hpbGUgKGNv bik7CisKKwlpZiAoc2lnYWN0aW9uIChTSUdBTFJNLCAmb2xkX2FjdCwgTlVM TCkpIHsKKwkJcGVycm9yX3dpdGhfbmFtZSAoXygic2lnYWN0aW9uIikpOwor CX0KKworCXN0YXR1cy0+a2luZCA9IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVE OworCWlmIChyZWNvcmRfZ2V0X3NpZykgeworCQlzdGF0dXMtPnZhbHVlLnNp ZyA9IFRBUkdFVF9TSUdOQUxfSU5UOworCX0KKwllbHNlIHsKKwkJc3RhdHVz LT52YWx1ZS5zaWcgPSBUQVJHRVRfU0lHTkFMX1RSQVA7CisJfQorCisJcmV0 dXJuIChpbmZlcmlvcl9wdGlkKTsKK30KKwordm9pZAorcmVjb3JkX2Nsb3Nl ICh2b2lkKQoreworCWdkYl9pc19yZWNvcmRpbmcgPSAwOworCWdkYl9pc19y ZXZlcnNlID0gMDsKKwlyZWNvcmRfbGlzdF9yZWxlYXNlIChyZWNvcmRfbGlz dCk7CisJcmVjb3JkX2xpc3QgPSBOVUxMOworCXJlY29yZF9kZWxheV9zbG90 ID0gMDsKKwlwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3JkOiByZWNvcmQg YW5kIHJldmVyc2UgZnVuY3Rpb24gaXMgc3RvcHBlZC5cbiIpKTsKK30KKwor c3RhdGljIHZvaWQKK2NtZF9yZWNvcmQgKGNoYXIgKmFyZ3MsIGludCBmcm9t X3R0eSkKK3sKKwkvKiBjaGVjayBleGVjICovCisJaWYgKCF0YXJnZXRfaGFz X2V4ZWN1dGlvbikgeworCQllcnJvciAoXygicmVjb3JkOiB0aGUgcHJvZ3Jh bSBpcyBub3QgYmVpbmcgcnVuLiIpKTsKKwl9CisKKwlpZiAoIWdkYmFyY2hf cmVjb3JkX3AgKGN1cnJlbnRfZ2RiYXJjaCkpIHsKKwkJZXJyb3IgKF8oInJl Y29yZDogdGhlIGN1cnJlbnQgZ2RiYXJjaCBkb24ndCBzdXBwb3J0IHJlY29y ZCBmdW5jdGlvbi4iKSk7CisJfQorCisJaWYgKGdkYl9pc19yZWNvcmRpbmcp IHsKKwkJcmVjb3JkX2Nsb3NlICgpOworCX0KKwllbHNlIHsKKwkJZ2RiX2lz X3JlY29yZGluZyA9IDE7CisJCXByaW50Zl91bmZpbHRlcmVkIChfKCJyZWNv cmQ6IHJlY29yZCBhbmQgcmV2ZXJzZSBmdW5jdGlvbiBpcyBzdGFydGVkLlxu IikpOworCX0KK30KKworc3RhdGljIHZvaWQKK2NtZF9yZXZlcnNlIChjaGFy ICphcmdzLCBpbnQgZnJvbV90dHkpCit7CisJaWYgKGdkYl9pc19yZXZlcnNl KSB7CisJCWdkYl9pc19yZXZlcnNlID0gMDsKKwkJcHJpbnRmX3VuZmlsdGVy ZWQgKF8oInJlY29yZDogR0RCIGlzIHNldCB0byBub3JtYWwgZGVidWcgbW9k ZS5cbiIpKTsKKwl9CisJZWxzZSB7CisJCWlmICghcmVjb3JkX2xpc3QpIHsK KwkJCWVycm9yIChfKCJyZWNvcmQ6IHJlY29yZCBhbmQgcmV2ZXJzZSBmdW5j dGlvbiBpcyBub3Qgc3RhcnRlZC4iKSk7CisJCX0KKwkJZ2RiX2lzX3JldmVy c2UgPSAxOworCQlwcmludGZfdW5maWx0ZXJlZCAoXygicmVjb3JkOiBHREIg aXMgc2V0IHRvIHJldmVyc2UgZGVidWcgbW9kZS5cbiIpKTsKKwl9Cit9CisK K3ZvaWQKK19pbml0aWFsaXplX3JlY29yZCAodm9pZCkKK3sKKwkvKiAgaW5p dCByZWNvcmRfbWFza2FsbCAqLworCWlmIChzaWdmaWxsc2V0ICgmcmVjb3Jk X21hc2thbGwpID09IC0xKSB7CisJCXBlcnJvcl93aXRoX25hbWUgKF8oInNp Z2ZpbGxzZXQiKSk7CisJfQorCisJYWRkX3NldHNob3dfemludGVnZXJfY21k ICgicmVjb3JkIiwgY2xhc3NfbWFpbnRlbmFuY2UsICZkZWJ1Z19yZWNvcmQs IF8oIlNldCByZWNvcmQgZGVidWdnaW5nLiIpLCBfKCJTaG93IHJlY29yZCBk ZWJ1Z2dpbmcuIiksIF8oIldoZW4gbm9uLXplcm8sIHJlY29yZCBzcGVjaWZp YyBkZWJ1Z2dpbmcgaXMgZW5hYmxlZC4iKSwgTlVMTCwgc2hvd19kZWJ1Z19y ZWNvcmQsICZzZXRkZWJ1Z2xpc3QsICZzaG93ZGVidWdsaXN0KTsKKwlhZGRf Y29tICgicmVjb3JkIiwgY2xhc3Nfb2JzY3VyZSwgY21kX3JlY29yZCwgXygi U3RhcnQgb3Igc3RvcCB0aGUgcmVjb3JkIGFuZCByZXZlcnNlIGZ1bmN0aW9u LiIpKTsKKwlhZGRfY29tX2FsaWFzICgicmVjIiwgInJlY29yZCIsIGNsYXNz X29ic2N1cmUsIDEpOworCWFkZF9jb20gKCJyZXZlcnNlIiwgY2xhc3Nfb2Jz Y3VyZSwgY21kX3JldmVyc2UsIF8oIlNldCBHREIgdG8gdGhlIHJldmVyc2Ug ZGVidWcgbW9kZSBvciB0aGUgbm9ybWFsIGRlYnVnIG1vZGUuIikpOworCWFk ZF9jb21fYWxpYXMgKCJyZXYiLCAicmV2ZXJzZSIsIGNsYXNzX29ic2N1cmUs IDEpOworfQpkaWZmIC1ydU5hIC0tZXhjbHVkZT1DVlMgZ2RiLTYuNi9nZGIv cmVjb3JkLmggZ2RiLTYuNi1yZWNvcmQvZ2RiL3JlY29yZC5oCi0tLSBnZGIt Ni42L2dkYi9yZWNvcmQuaAkxOTcwLTAxLTAxIDA4OjAwOjAwLjAwMDAwMDAw MCArMDgwMAorKysgZ2RiLTYuNi1yZWNvcmQvZ2RiL3JlY29yZC5oCTIwMDct MTAtMTYgMTE6NDY6NDEuMDAwMDAwMDAwICswODAwCkBAIC0wLDAgKzEsNjUg QEAKKy8qIFJlY29yZCB2MC4xLjAgZm9yIEdEQiwgdGhlIEdOVSBkZWJ1Z2dl ci4KKyAgIFdyaXR0ZW4gYnkgVGVhd2F0ZXIgWmh1IDx0ZWF3YXRlckBnbWFp bC5jb20+CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlz aGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25n IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl IFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxh Y2UgLSBTdWl0ZSAzMzAsCisgICBCb3N0b24sIE1BIDAyMTExLTEzMDcsIFVT QS4gICovCisKKyNpZm5kZWYgX1JFQ09SRF9IXworI2RlZmluZSBfUkVDT1JE X0hfCisKK3R5cGVkZWYgc3RydWN0CXJlY29yZF9yZWdfcyB7CisJaW50CQlu dW07CisJZ2RiX2J5dGUJKnZhbDsKK30gcmVjb3JkX3JlZ190OworCit0eXBl ZGVmIHN0cnVjdAlyZWNvcmRfbWVtX3MgeworCUNPUkVfQUREUglhZGRyOwor CWludAkJbGVuOworCWdkYl9ieXRlCSp2YWw7Cit9IHJlY29yZF9tZW1fdDsK KwordHlwZWRlZiBzdHJ1Y3QJcmVjb3JkX3MgeworCXN0cnVjdAlyZWNvcmRf cwkqcHJldjsKKwlzdHJ1Y3QJcmVjb3JkX3MJKm5leHQ7CisJaW50CXR5cGU7 CS8qIDEgcmVnIDIgbWVtIDAgZW5kICovCisJdW5pb24geworCQkvKiByZWcg Ki8KKwkJcmVjb3JkX3JlZ190CXJlZzsKKwkJLyogbWVtICovCisJCXJlY29y ZF9tZW1fdAltZW07CisJCS8qIGVuZCAqLworCQlpbnQJCW5lZWRfZGFzbTsK Kwl9IHU7Cit9IHJlY29yZF90OworCitleHRlcm4gcmVjb3JkX3QJCSpyZWNv cmRfbGlzdDsKK2V4dGVybiByZWNvcmRfdAkJKnJlY29yZF9hcmNoX2xpc3Rf aGVhZDsKK2V4dGVybiByZWNvcmRfdAkJKnJlY29yZF9hcmNoX2xpc3RfdGFp bDsKK2V4dGVybiBpbnQJCXJlY29yZF9hcmNoX25lZWRfZGFzbTsKK2V4dGVy biB1bnNpZ25lZCBpbnQJZ2RiX2lzX3JlY29yZGluZzsKK2V4dGVybiBpbnQJ CWdkYl9pc19yZXZlcnNlOworZXh0ZXJuIGludAkJZGVidWdfcmVjb3JkOwor ZXh0ZXJuIGludAkJcmVjb3JkX3dhaXRfc3RlcDsKK2V4dGVybiBpbnQJCXJl Y29yZF9kZWxheV9zbG90OworCitleHRlcm4gdm9pZAkJcmVjb3JkX21lc3Nh Z2UgKHZvaWQpOworZXh0ZXJuIGludAkJcmVjb3JkX2FyY2hfbGlzdF9hZGRf cmVnIChpbnQgbnVtKTsKK2V4dGVybiBpbnQJCXJlY29yZF9hcmNoX2xpc3Rf YWRkX21lbSAoQ09SRV9BRERSIGFkZHIsIGludCBsZW4pOworZXh0ZXJuIGlu dAkJcmVjb3JkX2FyY2hfbGlzdF9hZGRfZW5kIChpbnQgbmVlZF9kYXNtKTsK K2V4dGVybiBwdGlkX3QJCXJlY29yZF93YWl0IChwdGlkX3QgcHRpZCwgc3Ry dWN0IHRhcmdldF93YWl0c3RhdHVzICogc3RhdHVzKTsKK2V4dGVybiB2b2lk CQlyZWNvcmRfY2xvc2UgKHZvaWQpOworI2VuZGlmCS8vX1JFQ09SRF9IXwpk aWZmIC1ydU5hIC0tZXhjbHVkZT1DVlMgZ2RiLTYuNi9nZGIvdGFyZ2V0LmMg Z2RiLTYuNi1yZWNvcmQvZ2RiL3RhcmdldC5jCi0tLSBnZGItNi42L2dkYi90 YXJnZXQuYwkyMDA2LTEwLTE4IDA1OjU1OjIzLjAwMDAwMDAwMCArMDgwMAor KysgZ2RiLTYuNi1yZWNvcmQvZ2RiL3RhcmdldC5jCTIwMDctMTAtMTYgMTE6 NDk6NDcuMDAwMDAwMDAwICswODAwCkBAIC00MCw2ICs0MCw5IEBACiAjaW5j bHVkZSAiZ2RiX2Fzc2VydC5oIgogI2luY2x1ZGUgImdkYmNvcmUuaCIKICNp bmNsdWRlICJleGNlcHRpb25zLmgiCisvKnRlYXdhdGVyIHJlYyBiZWdpbi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLworI2luY2x1ZGUgInJlY29yZC5oIgorLyp0ZWF3YXRl ciByZWMgZW5kLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIAogc3RhdGljIHZvaWQgdGFy Z2V0X2luZm8gKGNoYXIgKiwgaW50KTsKIApAQCAtMjAzNCw2ICsyMDM3LDEx IEBACiB2b2lkCiB0YXJnZXRfY2xvc2UgKHN0cnVjdCB0YXJnZXRfb3BzICp0 YXJnLCBpbnQgcXVpdHRpbmcpCiB7CisvKnRlYXdhdGVyIHJlYyBiZWdpbi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0qLworCWlmIChnZGJfaXNfcmVjb3JkaW5nKSB7CisJCXJl Y29yZF9jbG9zZSAoKTsKKwl9CisvKnRlYXdhdGVyIHJlYyBlbmQtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0qLwogICBpZiAodGFyZy0+dG9feGNsb3NlICE9IE5VTEwpCiAg ICAgdGFyZy0+dG9feGNsb3NlICh0YXJnLCBxdWl0dGluZyk7CiAgIGVsc2Ug aWYgKHRhcmctPnRvX2Nsb3NlICE9IE5VTEwpCg== ------=_Part_795_30041771.1192586670372--