From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 14318 invoked by alias); 28 May 2009 20:10:11 -0000 Received: (qmail 14226 invoked by uid 22791); 28 May 2009 20:09:59 -0000 X-SWARE-Spam-Status: No, hits=2.0 required=5.0 tests=AWL,BAYES_40,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS,TVD_STOCK1 X-Spam-Check-By: sourceware.org Received: from mail-ew0-f163.google.com (HELO mail-ew0-f163.google.com) (209.85.219.163) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Thu, 28 May 2009 20:09:52 +0000 Received: by ewy7 with SMTP id 7so5777655ewy.24 for ; Thu, 28 May 2009 13:09:47 -0700 (PDT) MIME-Version: 1.0 Received: by 10.216.18.84 with SMTP id k62mr644825wek.126.1243541387317; Thu, 28 May 2009 13:09:47 -0700 (PDT) Date: Thu, 28 May 2009 20:10:00 -0000 Message-ID: <6dc9ffc80905281309x7273b892k6ba84e2d03efca4a@mail.gmail.com> Subject: PATCH: Rewrite STT_GNU_IFUNC with R_*_IRELATIVE From: "H.J. Lu" To: Ulrich Drepper , GNU C Library , Binutils , Nick Clifton Content-Type: multipart/mixed; boundary=0016364d1dc5a79494046afe8a77 X-IsSubscribed: yes Mailing-List: contact binutils-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: binutils-owner@sourceware.org X-SW-Source: 2009-05/txt/msg00531.txt.bz2 --0016364d1dc5a79494046afe8a77 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 4392 Hi, Here is the total rewrite of STT_GNU_IFUNC support with R_*_IRELATIVE for i386 and x86-64 on shared library and static/dynamic executables together with a modified glibc. OK for trunk? Thanks. -- H.J. bfd/ 2009-05-28 H.J. Lu * elf-bfd.h (struct bfd_elf_section_data): Remove indirect_relocs. (_bfd_elf_make_ifunc_reloc_section): Removed. (_bfd_elf_is_ifunc_symbol): Likewise. (_bfd_elf_create_static_ifunc_sections): New. (WILL_CALL_FINISH_DYNAMIC_SYMBOL): Return TRUE for STT_GNU_IFUNC symbol. * elf32-i386.c (elf_howto_table): Add R_386_IRELATIVE. (elf_i386_reloc_type_lookup): Likewise. (R_386_tls): Removed. (R_386_irelative): New. (R_386_vt_offset): Updated. (elf_i386_rtype_to_howto): Likewise. (elf_i386_link_hash_table): Add igotplt, iplt and irelplt. (elf_i386_link_hash_table_create): Initialize igotplt, iplt and irelplt. (elf_i386_check_relocs): Call _bfd_elf_create_static_ifunc_sections instead of _bfd_elf_make_ifunc_reloc_section. Set up igotplt, iplt and irelplt. (allocate_dynrelocs): Use .iplt, .igot.plt and .rel.iplt sections for STT_GNU_IFUNC symbols in static executable. Discard space for relocations against forced local STT_GNU_IFUNC symbols for not building shared library. Don't use indirect_relocs. (elf_i386_size_dynamic_sections): Set up .iplt and .igot.plt sections. (elf_i386_relocate_section): If an STT_GNU_IFUNC symbol is defined in executable, resolve it to its PLT entry. Remove check for STT_GNU_IFUNC symbols. (elf_i386_finish_dynamic_symbol): When building a static executable, use .iplt, .igot.plt and .rel.iplt sections for STT_GNU_IFUNC symbols. Generate R_386_IRELATIVE relocation for locally defined STT_GNU_IFUNC symbol. * elf64-x86-64.c (x86_64_elf_howto): Add R_X86_64_IRELATIVE. (x86_64_reloc_map): Likewise. (R_X86_64_standard): Updated. (elf64_x86_64_link_hash_table): Add igotplt, iplt and irelplt. (elf64_x86_64_link_hash_table_create): Initialize igotplt, iplt and irelplt. (elf64_x86_64_check_relocs): Call _bfd_elf_create_ifunc_sections instead of _bfd_elf_make_ifunc_reloc_section. Set up igotplt, iplt and irelplt. (allocate_dynrelocs): Use .iplt, .igot.plt and .rela.iplt sections for STT_GNU_IFUNC symbols in static executable. Discard space for relocations against forced local STT_GNU_IFUNC symbols for not building shared library. Don't use indirect_relocs. (elf64_x86_64_size_dynamic_sections): Set up .iplt and .igot.plt sections. (elf64_x86_64_relocate_section): If an STT_GNU_IFUNC symbol is defined in executable, resolve it to its PLT entry and make sure it is reachable. Remove check for STT_GNU_IFUNC symbols. (elf64_x86_64_finish_dynamic_symbol): When building a static executable, use .iplt, .igot.plt and .rela.iplt sections for STT_GNU_IFUNC symbols. Generate R_X86_64_IRELATIVE relocation for locally defined STT_GNU_IFUNC symbol. * elflink.c (_bfd_elf_adjust_dynamic_symbol): Move STT_GNU_IFUNC symbol check to ... (elf_link_add_object_symbols): Here. (_bfd_elf_symbol_refs_local_p): Return FALSE on STT_GNU_IFUNC symbol. (_bfd_elf_link_hash_hide_symbol): Don't clean plt on STT_GNU_IFUNC symbol. (elf_link_output_extsym): Always call elf_backend_finish_dynamic_symbol for STT_GNU_IFUNC symbol. (IFUNC_INFIX): Removed. (get_ifunc_reloc_section_name): Likewise. (_bfd_elf_make_ifunc_reloc_section): Likewise. (_bfd_elf_is_ifunc_symbol): Likewise. (_bfd_elf_create_static_ifunc_sections): New. * reloc.c (BFD_RELOC_386_IRELATIVE): New. (BFD_RELOC_X86_64_IRELATIVE): Likewise. * bfd-in2.h: Regenerated. * libbfd.h: Likewise. include/elf/ 2009-05-28 H.J. Lu * i386.h (R_386_IRELATIVE): New. * x86-64.h (R_X86_64_IRELATIVE): Likewise. ld/ 2009-05-28 H.J. Lu * scripttempl/elf.sc (PLT): Add "*(.iplt)". (GOT): Add "*(.igot.plt)a" and "*(.igot)". (GOTPLT): Add "*(.igot)". (__rel_iplt_start): New. (__rel_iplt_end): Likewise. (__rela_iplt_start): Likewise. (__rela_iplt_end): Likewise. ld/testsuite/ 2009-05-28 H.J. Lu * ld-ifunc/ifunc.exp (contains_irelative_reloc): New. Use it on executable and shared library. Run *.d. * ld-ifunc/lib.c: Add a hidden alias, __GI_library_func2, for library_func2. (library_func): New. * ld-ifunc/ifunc-1-x86.d: New. * ld-ifunc/ifunc-1-x86.s: Likewise. --0016364d1dc5a79494046afe8a77 Content-Type: text/plain; charset=US-ASCII; name="binutils-ifunc-3.patch" Content-Disposition: attachment; filename="binutils-ifunc-3.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fv9w8ihe0 Content-length: 70374 YmZkLwoKMjAwOS0wNS0yOCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwu Y29tPgoKCSogZWxmLWJmZC5oIChzdHJ1Y3QgYmZkX2VsZl9zZWN0aW9uX2Rh dGEpOiBSZW1vdmUgaW5kaXJlY3RfcmVsb2NzLgoJKiBlbGYtYmZkLmggKF9i ZmRfZWxmX21ha2VfaWZ1bmNfcmVsb2Nfc2VjdGlvbik6IFJlbW92ZWQuCgko X2JmZF9lbGZfaXNfaWZ1bmNfc3ltYm9sKTogTGlrZXdpc2UuCgkoX2JmZF9l bGZfY3JlYXRlX3N0YXRpY19pZnVuY19zZWN0aW9ucyk6IE5ldy4KCShXSUxM X0NBTExfRklOSVNIX0RZTkFNSUNfU1lNQk9MKTogUmV0dXJuIFRSVUUgZm9y CglTVFRfR05VX0lGVU5DIHN5bWJvbC4KCgkqIGVsZjMyLWkzODYuYyAoZWxm X2hvd3RvX3RhYmxlKTogQWRkIFJfMzg2X0lSRUxBVElWRS4KCShlbGZfaTM4 Nl9yZWxvY190eXBlX2xvb2t1cCk6IExpa2V3aXNlLgoJKFJfMzg2X3Rscyk6 IFJlbW92ZWQuCgkoUl8zODZfaXJlbGF0aXZlKTogTmV3LgoJKFJfMzg2X3Z0 X29mZnNldCk6IFVwZGF0ZWQuCgkoZWxmX2kzODZfcnR5cGVfdG9faG93dG8p OiBMaWtld2lzZS4KCShlbGZfaTM4Nl9saW5rX2hhc2hfdGFibGUpOiBBZGQg aWdvdHBsdCwgaXBsdCBhbmQgaXJlbHBsdC4KCShlbGZfaTM4Nl9saW5rX2hh c2hfdGFibGVfY3JlYXRlKTogSW5pdGlhbGl6ZSBpZ290cGx0LAoJaXBsdCBh bmQgaXJlbHBsdC4KCShlbGZfaTM4Nl9jaGVja19yZWxvY3MpOiBDYWxsIF9i ZmRfZWxmX2NyZWF0ZV9zdGF0aWNfaWZ1bmNfc2VjdGlvbnMKCWluc3RlYWQg b2YgX2JmZF9lbGZfbWFrZV9pZnVuY19yZWxvY19zZWN0aW9uLiAgU2V0IHVw IGlnb3RwbHQsCglpcGx0IGFuZCBpcmVscGx0LgoJKGFsbG9jYXRlX2R5bnJl bG9jcyk6IFVzZSAuaXBsdCwgLmlnb3QucGx0IGFuZCAucmVsLmlwbHQKCXNl Y3Rpb25zIGZvciBTVFRfR05VX0lGVU5DIHN5bWJvbHMgaW4gc3RhdGljIGV4 ZWN1dGFibGUuICBEaXNjYXJkCglzcGFjZSBmb3IgcmVsb2NhdGlvbnMgYWdh aW5zdCBmb3JjZWQgbG9jYWwgU1RUX0dOVV9JRlVOQyBzeW1ib2xzCglmb3Ig bm90IGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5LiAgRG9uJ3QgdXNlIGluZGly ZWN0X3JlbG9jcy4KCShlbGZfaTM4Nl9zaXplX2R5bmFtaWNfc2VjdGlvbnMp OiBTZXQgdXAgLmlwbHQgYW5kIC5pZ290LnBsdAoJc2VjdGlvbnMuCgkoZWxm X2kzODZfcmVsb2NhdGVfc2VjdGlvbik6IElmIGFuIFNUVF9HTlVfSUZVTkMg c3ltYm9sIGlzCglkZWZpbmVkIGluIGV4ZWN1dGFibGUsIHJlc29sdmUgaXQg dG8gaXRzIFBMVCBlbnRyeS4gIFJlbW92ZQoJY2hlY2sgZm9yIFNUVF9HTlVf SUZVTkMgc3ltYm9scy4KCShlbGZfaTM4Nl9maW5pc2hfZHluYW1pY19zeW1i b2wpOiBXaGVuIGJ1aWxkaW5nIGEgc3RhdGljCglleGVjdXRhYmxlLCB1c2Ug LmlwbHQsIC5pZ290LnBsdCBhbmQgLnJlbC5pcGx0IHNlY3Rpb25zIGZvcgoJ U1RUX0dOVV9JRlVOQyBzeW1ib2xzLiAgR2VuZXJhdGUgUl8zODZfSVJFTEFU SVZFIHJlbG9jYXRpb24gZm9yCglsb2NhbGx5IGRlZmluZWQgU1RUX0dOVV9J RlVOQyBzeW1ib2wuCgoJKiBlbGY2NC14ODYtNjQuYyAoeDg2XzY0X2VsZl9o b3d0byk6IEFkZCBSX1g4Nl82NF9JUkVMQVRJVkUuCgkoeDg2XzY0X3JlbG9j X21hcCk6IExpa2V3aXNlLgoJKFJfWDg2XzY0X3N0YW5kYXJkKTogVXBkYXRl ZC4KCShlbGY2NF94ODZfNjRfbGlua19oYXNoX3RhYmxlKTogQWRkIGlnb3Rw bHQsIGlwbHQgYW5kIGlyZWxwbHQuCgkoZWxmNjRfeDg2XzY0X2xpbmtfaGFz aF90YWJsZV9jcmVhdGUpOiBJbml0aWFsaXplIGlnb3RwbHQsCglpcGx0IGFu ZCBpcmVscGx0LgoJKGVsZjY0X3g4Nl82NF9jaGVja19yZWxvY3MpOiBDYWxs IF9iZmRfZWxmX2NyZWF0ZV9pZnVuY19zZWN0aW9ucwoJaW5zdGVhZCBvZiBf YmZkX2VsZl9tYWtlX2lmdW5jX3JlbG9jX3NlY3Rpb24uICBTZXQgdXAgaWdv dHBsdCwKCWlwbHQgYW5kIGlyZWxwbHQuCgkoYWxsb2NhdGVfZHlucmVsb2Nz KTogVXNlIC5pcGx0LCAuaWdvdC5wbHQgYW5kIC5yZWxhLmlwbHQKCXNlY3Rp b25zIGZvciBTVFRfR05VX0lGVU5DIHN5bWJvbHMgaW4gc3RhdGljIGV4ZWN1 dGFibGUuICBEaXNjYXJkCglzcGFjZSBmb3IgcmVsb2NhdGlvbnMgYWdhaW5z dCBmb3JjZWQgbG9jYWwgU1RUX0dOVV9JRlVOQyBzeW1ib2xzCglmb3Igbm90 IGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJ5LiAgRG9uJ3QgdXNlIGluZGlyZWN0 X3JlbG9jcy4KCShlbGY2NF94ODZfNjRfc2l6ZV9keW5hbWljX3NlY3Rpb25z KTogU2V0IHVwIC5pcGx0IGFuZCAuaWdvdC5wbHQKCXNlY3Rpb25zLgoJKGVs ZjY0X3g4Nl82NF9yZWxvY2F0ZV9zZWN0aW9uKTogSWYgYW4gU1RUX0dOVV9J RlVOQyBzeW1ib2wgaXMKCWRlZmluZWQgaW4gZXhlY3V0YWJsZSwgcmVzb2x2 ZSBpdCB0byBpdHMgUExUIGVudHJ5IGFuZCBtYWtlIHN1cmUKCWl0IGlzIHJl YWNoYWJsZS4gIFJlbW92ZSBjaGVjayBmb3IgU1RUX0dOVV9JRlVOQyBzeW1i b2xzLgoJKGVsZjY0X3g4Nl82NF9maW5pc2hfZHluYW1pY19zeW1ib2wpOiBX aGVuIGJ1aWxkaW5nIGEgc3RhdGljCglleGVjdXRhYmxlLCB1c2UgLmlwbHQs IC5pZ290LnBsdCBhbmQgLnJlbGEuaXBsdCBzZWN0aW9ucyBmb3IKCVNUVF9H TlVfSUZVTkMgc3ltYm9scy4gIEdlbmVyYXRlIFJfWDg2XzY0X0lSRUxBVElW RSByZWxvY2F0aW9uCglmb3IgbG9jYWxseSBkZWZpbmVkIFNUVF9HTlVfSUZV TkMgc3ltYm9sLgoKCSogZWxmbGluay5jIChfYmZkX2VsZl9hZGp1c3RfZHlu YW1pY19zeW1ib2wpOiBNb3ZlIFNUVF9HTlVfSUZVTkMKCXN5bWJvbCBjaGVj ayB0byAuLi4KCShlbGZfbGlua19hZGRfb2JqZWN0X3N5bWJvbHMpOiBIZXJl LgoJKF9iZmRfZWxmX3N5bWJvbF9yZWZzX2xvY2FsX3ApOiBSZXR1cm4gRkFM U0Ugb24gU1RUX0dOVV9JRlVOQwoJc3ltYm9sLgoJKF9iZmRfZWxmX2xpbmtf aGFzaF9oaWRlX3N5bWJvbCk6IERvbid0IGNsZWFuIHBsdCBvbgoJU1RUX0dO VV9JRlVOQyBzeW1ib2wuCgkoZWxmX2xpbmtfb3V0cHV0X2V4dHN5bSk6IEFs d2F5cyBjYWxsCgllbGZfYmFja2VuZF9maW5pc2hfZHluYW1pY19zeW1ib2wg Zm9yIFNUVF9HTlVfSUZVTkMgc3ltYm9sLgoJKElGVU5DX0lORklYKTogUmVt b3ZlZC4KCShnZXRfaWZ1bmNfcmVsb2Nfc2VjdGlvbl9uYW1lKTogTGlrZXdp c2UuCgkoX2JmZF9lbGZfbWFrZV9pZnVuY19yZWxvY19zZWN0aW9uKTogTGlr ZXdpc2UuCgkoX2JmZF9lbGZfaXNfaWZ1bmNfc3ltYm9sKTogTGlrZXdpc2Uu CgkoX2JmZF9lbGZfY3JlYXRlX3N0YXRpY19pZnVuY19zZWN0aW9ucyk6IE5l dy4KCgkqIHJlbG9jLmMgKEJGRF9SRUxPQ18zODZfSVJFTEFUSVZFKTogTmV3 LgoJKEJGRF9SRUxPQ19YODZfNjRfSVJFTEFUSVZFKTogTGlrZXdpc2UuCgkq IGJmZC1pbjIuaDogUmVnZW5lcmF0ZWQuCgkqIGxpYmJmZC5oOiBMaWtld2lz ZS4KCmluY2x1ZGUvZWxmLwoKMjAwOS0wNS0yOCAgSC5KLiBMdSAgPGhvbmdq aXUubHVAaW50ZWwuY29tPgoKCSogaTM4Ni5oIChSXzM4Nl9JUkVMQVRJVkUp OiBOZXcuCgkqIHg4Ni02NC5oIChSX1g4Nl82NF9JUkVMQVRJVkUpOiBMaWtl d2lzZS4KCmxkLwoKMjAwOS0wNS0yOCAgSC5KLiBMdSAgPGhvbmdqaXUubHVA aW50ZWwuY29tPgoKCSogc2NyaXB0dGVtcGwvZWxmLnNjIChQTFQpOiBBZGQg IiooLmlwbHQpIi4KCShHT1QpOiBBZGQgIiooLmlnb3QucGx0KWEiIGFuZCAi KiguaWdvdCkiLgoJKEdPVFBMVCk6IEFkZCAiKiguaWdvdCkiLgoJKF9fcmVs X2lwbHRfc3RhcnQpOiBOZXcuCgkoX19yZWxfaXBsdF9lbmQpOiBMaWtld2lz ZS4KCShfX3JlbGFfaXBsdF9zdGFydCk6IExpa2V3aXNlLgoJKF9fcmVsYV9p cGx0X2VuZCk6IExpa2V3aXNlLgoKbGQvdGVzdHN1aXRlLwoKMjAwOS0wNS0y OCAgSC5KLiBMdSAgPGhvbmdqaXUubHVAaW50ZWwuY29tPgoKCSogbGQtaWZ1 bmMvaWZ1bmMuZXhwIChjb250YWluc19pcmVsYXRpdmVfcmVsb2MpOiBOZXcu CglVc2UgaXQgb24gZXhlY3V0YWJsZSBhbmQgc2hhcmVkIGxpYnJhcnkuCglS dW4gKi5kLgoKCSogbGQtaWZ1bmMvbGliLmM6IEFkZCBhIGhpZGRlbiBhbGlh cywgX19HSV9saWJyYXJ5X2Z1bmMyLCBmb3IKCWxpYnJhcnlfZnVuYzIuCgko bGlicmFyeV9mdW5jKTogTmV3LgoKCSogbGQtaWZ1bmMvaWZ1bmMtMS14ODYu ZDogTmV3LgoJKiBsZC1pZnVuYy9pZnVuYy0xLXg4Ni5zOiBMaWtld2lzZS4K CmRpZmYgLXggUkVWSVNJT04gLXggLnN2biAteCBDVlMgLXVwck4gLXggQ2hh bmdlTG9nLmlmdW5jIFwKCQkuLi9iaW51dGlscy9zcmMgYmludXRpbHMKZGlm ZiAteCBSRVZJU0lPTiAteCAuc3ZuIC14IENWUyAtdXByTiAteCBDaGFuZ2VM b2cuaWZ1bmMgLi4vYmludXRpbHMvc3JjL2JmZC9iZmQtaW4yLmggYmludXRp bHMvYmZkL2JmZC1pbjIuaAotLS0gLi4vYmludXRpbHMvc3JjL2JmZC9iZmQt aW4yLmgJMjAwOS0wNS0yNiAxNToxOTowMC4wMDAwMDAwMDAgLTA3MDAKKysr IGJpbnV0aWxzL2JmZC9iZmQtaW4yLmgJMjAwOS0wNS0yNyAxMjo1NTowNy4w MDAwMDAwMDAgLTA3MDAKQEAgLTI4NDAsNiArMjg0MCw3IEBAIHJlbGF4YXRp b24uICAqLwogICBCRkRfUkVMT0NfMzg2X1RMU19HT1RERVNDLAogICBCRkRf UkVMT0NfMzg2X1RMU19ERVNDX0NBTEwsCiAgIEJGRF9SRUxPQ18zODZfVExT X0RFU0MsCisgIEJGRF9SRUxPQ18zODZfSVJFTEFUSVZFLAogCiAvKiB4ODYt NjQvZWxmIHJlbG9jYXRpb25zICAqLwogICBCRkRfUkVMT0NfWDg2XzY0X0dP VDMyLApAQCAtMjg2OCw2ICsyODY5LDcgQEAgcmVsYXhhdGlvbi4gICovCiAg IEJGRF9SRUxPQ19YODZfNjRfR09UUEMzMl9UTFNERVNDLAogICBCRkRfUkVM T0NfWDg2XzY0X1RMU0RFU0NfQ0FMTCwKICAgQkZEX1JFTE9DX1g4Nl82NF9U TFNERVNDLAorICBCRkRfUkVMT0NfWDg2XzY0X0lSRUxBVElWRSwKIAogLyog bnMzMmsgcmVsb2NhdGlvbnMgICovCiAgIEJGRF9SRUxPQ19OUzMyS19JTU1f OCwKZGlmZiAteCBSRVZJU0lPTiAteCAuc3ZuIC14IENWUyAtdXByTiAteCBD aGFuZ2VMb2cuaWZ1bmMgLi4vYmludXRpbHMvc3JjL2JmZC9lbGYzMi1pMzg2 LmMgYmludXRpbHMvYmZkL2VsZjMyLWkzODYuYwotLS0gLi4vYmludXRpbHMv c3JjL2JmZC9lbGYzMi1pMzg2LmMJMjAwOS0wNS0yNiAxNToxOTowMC4wMDAw MDAwMDAgLTA3MDAKKysrIGJpbnV0aWxzL2JmZC9lbGYzMi1pMzg2LmMJMjAw OS0wNS0yOCAxMjoyNDozOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTEzOCwxMCAr MTM4LDEzIEBAIHN0YXRpYyByZWxvY19ob3d0b190eXBlIGVsZl9ob3d0b190 YWJsZVsKICAgSE9XVE8oUl8zODZfVExTX0RFU0MsIDAsIDIsIDMyLCBGQUxT RSwgMCwgY29tcGxhaW5fb3ZlcmZsb3dfYml0ZmllbGQsCiAJYmZkX2VsZl9n ZW5lcmljX3JlbG9jLCAiUl8zODZfVExTX0RFU0MiLAogCVRSVUUsIDB4ZmZm ZmZmZmYsIDB4ZmZmZmZmZmYsIEZBTFNFKSwKKyAgSE9XVE8oUl8zODZfSVJF TEFUSVZFLCAwLCAyLCAzMiwgRkFMU0UsIDAsIGNvbXBsYWluX292ZXJmbG93 X2JpdGZpZWxkLAorCWJmZF9lbGZfZ2VuZXJpY19yZWxvYywgIlJfMzg2X0lS RUxBVElWRSIsCisJVFJVRSwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZiwgRkFM U0UpLAogCiAgIC8qIEFub3RoZXIgZ2FwLiAgKi8KLSNkZWZpbmUgUl8zODZf dGxzIChSXzM4Nl9UTFNfREVTQyArIDEgLSBSXzM4Nl90bHNfb2Zmc2V0KQot I2RlZmluZSBSXzM4Nl92dF9vZmZzZXQgKFJfMzg2X0dOVV9WVElOSEVSSVQg LSBSXzM4Nl90bHMpCisjZGVmaW5lIFJfMzg2X2lyZWxhdGl2ZSAoUl8zODZf SVJFTEFUSVZFICsgMSAtIFJfMzg2X3Rsc19vZmZzZXQpCisjZGVmaW5lIFJf Mzg2X3Z0X29mZnNldCAoUl8zODZfR05VX1ZUSU5IRVJJVCAtIFJfMzg2X2ly ZWxhdGl2ZSkKIAogLyogR05VIGV4dGVuc2lvbiB0byByZWNvcmQgQysrIHZ0 YWJsZSBoaWVyYXJjaHkuICAqLwogICBIT1dUTyAoUl8zODZfR05VX1ZUSU5I RVJJVCwJLyogdHlwZSAqLwpAQCAtMzE2LDYgKzMxOSwxMCBAQCBlbGZfaTM4 Nl9yZWxvY190eXBlX2xvb2t1cCAoYmZkICphYmZkIEFUCiAgICAgICBUUkFD RSAoIkJGRF9SRUxPQ18zODZfVExTX0RFU0MiKTsKICAgICAgIHJldHVybiAm ZWxmX2hvd3RvX3RhYmxlW1JfMzg2X1RMU19ERVNDIC0gUl8zODZfdGxzX29m ZnNldF07CiAKKyAgICBjYXNlIEJGRF9SRUxPQ18zODZfSVJFTEFUSVZFOgor ICAgICAgVFJBQ0UgKCJCRkRfUkVMT0NfMzg2X0lSRUxBVElWRSIpOworICAg ICAgcmV0dXJuICZlbGZfaG93dG9fdGFibGVbUl8zODZfSVJFTEFUSVZFXTsK KwogICAgIGNhc2UgQkZEX1JFTE9DX1ZUQUJMRV9JTkhFUklUOgogICAgICAg VFJBQ0UgKCJCRkRfUkVMT0NfVlRBQkxFX0lOSEVSSVQiKTsKICAgICAgIHJl dHVybiAmZWxmX2hvd3RvX3RhYmxlW1JfMzg2X0dOVV9WVElOSEVSSVQgLSBS XzM4Nl92dF9vZmZzZXRdOwpAQCAtMzU1LDkgKzM2Miw5IEBAIGVsZl9pMzg2 X3J0eXBlX3RvX2hvd3RvIChiZmQgKmFiZmQsIHVuc2kKICAgICAgICYmICgo aW5keCA9IHJfdHlwZSAtIFJfMzg2X2V4dF9vZmZzZXQpIC0gUl8zODZfc3Rh bmRhcmQKIAkgID49IFJfMzg2X2V4dCAtIFJfMzg2X3N0YW5kYXJkKQogICAg ICAgJiYgKChpbmR4ID0gcl90eXBlIC0gUl8zODZfdGxzX29mZnNldCkgLSBS XzM4Nl9leHQKLQkgID49IFJfMzg2X3RscyAtIFJfMzg2X2V4dCkKLSAgICAg ICYmICgoaW5keCA9IHJfdHlwZSAtIFJfMzg2X3Z0X29mZnNldCkgLSBSXzM4 Nl90bHMKLQkgID49IFJfMzg2X3Z0IC0gUl8zODZfdGxzKSkKKwkgID49IFJf Mzg2X2lyZWxhdGl2ZSAtIFJfMzg2X2V4dCkKKyAgICAgICYmICgoaW5keCA9 IHJfdHlwZSAtIFJfMzg2X3Z0X29mZnNldCkgLSBSXzM4Nl9pcmVsYXRpdmUK KwkgID49IFJfMzg2X3Z0IC0gUl8zODZfaXJlbGF0aXZlKSkKICAgICB7CiAg ICAgICAoKl9iZmRfZXJyb3JfaGFuZGxlcikgKF8oIiVCOiBpbnZhbGlkIHJl bG9jYXRpb24gdHlwZSAlZCIpLAogCQkJICAgICBhYmZkLCAoaW50KSByX3R5 cGUpOwpAQCAtNjY4LDYgKzY3NSw5IEBAIHN0cnVjdCBlbGZfaTM4Nl9saW5r X2hhc2hfdGFibGUKICAgYXNlY3Rpb24gKnNyZWxwbHQ7CiAgIGFzZWN0aW9u ICpzZHluYnNzOwogICBhc2VjdGlvbiAqc3JlbGJzczsKKyAgYXNlY3Rpb24g Kmlnb3RwbHQ7CisgIGFzZWN0aW9uICppcGx0OworICBhc2VjdGlvbiAqaXJl bHBsdDsKIAogICAvKiBUaGUgKHVubG9hZGVkIGJ1dCBpbXBvcnRhbnQpIC5y ZWwucGx0LnVubG9hZGVkIHNlY3Rpb24gb24gVnhXb3Jrcy4gICovCiAgIGFz ZWN0aW9uICpzcmVscGx0MjsKQEAgLTc2Myw2ICs3NzMsOSBAQCBlbGZfaTM4 Nl9saW5rX2hhc2hfdGFibGVfY3JlYXRlIChiZmQgKmFiCiAgIHJldC0+c3Jl bHBsdCA9IE5VTEw7CiAgIHJldC0+c2R5bmJzcyA9IE5VTEw7CiAgIHJldC0+ c3JlbGJzcyA9IE5VTEw7CisgIHJldC0+aWdvdHBsdD0gTlVMTDsKKyAgcmV0 LT5pcGx0ID0gTlVMTDsKKyAgcmV0LT5pcmVscGx0PSBOVUxMOwogICByZXQt PnRsc19sZG1fZ290LnJlZmNvdW50ID0gMDsKICAgcmV0LT5uZXh0X3Rsc19k ZXNjX2luZGV4ID0gMDsKICAgcmV0LT5zZ290cGx0X2p1bXBfdGFibGVfc2l6 ZSA9IDA7CkBAIC0xNDc0LDExICsxNDg3LDMwIEBAIGVsZl9pMzg2X2NoZWNr X3JlbG9jcyAoYmZkICphYmZkLAogCQkgIGlmIChzcmVsb2MgPT0gTlVMTCkK IAkJICAgIHJldHVybiBGQUxTRTsKIAotCQkgIC8qIENyZWF0ZSB0aGUgaWZ1 bmMgc2VjdGlvbiBhcyB3ZWxsLCBldmVuIGlmIHdlIGhhdmUgbm90IGVuY291 bnRlcmVkIGEKLQkJICAgICBpbmRpcmVjdCBmdW5jdGlvbiBzeW1ib2wgeWV0 LiAgV2UgbWF5IG5vdCBldmVuIHNlZSBvbmUgaW4gdGhlIGlucHV0Ci0JCSAg ICAgb2JqZWN0IGZpbGUsIGJ1dCB3ZSBjYW4gc3RpbGwgZW5jb3VudGVyIHRo ZW0gaW4gbGlicmFyaWVzLiAgKi8KLQkJICAodm9pZCkgX2JmZF9lbGZfbWFr ZV9pZnVuY19yZWxvY19zZWN0aW9uCi0JCSAgICAoYWJmZCwgc2VjLCBodGFi LT5lbGYuZHlub2JqLCAyKTsKKwkJICAvKiBDcmVhdGUgdGhlIGlmdW5jIHNl Y3Rpb24gZm9yIHN0YXRpYyBleGVjdXRhYmxlcy4KKwkJICAgICBJZiB3ZSBu ZXZlciBzZWUgYW4gaW5kaXJlY3QgZnVuY3Rpb24gc3ltYm9sIG5vcgorCQkg ICAgIHdlIGFyZSBidWlsZGluZyBhIHN0YXRpYyBleGVjdXRhYmxlLCB0aG9z ZSBzZWN0aW9ucworCQkgICAgIHdpbGwgYmUgZW1wdHkgYW5kIHdvbid0IGFw cGVhciBpbiBvdXRwdXQuICAqLworCQkgIGlmICghaW5mby0+c2hhcmVkKQor CQkgICAgeworCQkgICAgICBpZiAoIV9iZmRfZWxmX2NyZWF0ZV9zdGF0aWNf aWZ1bmNfc2VjdGlvbnMgKGFiZmQsCisJCQkJCQkJCSAgaW5mbykpCisJCQly ZXR1cm4gRkFMU0U7CisKKwkJICAgICAgaWYgKGh0YWItPmlwbHQgPT0gTlVM TCkKKwkJCXsKKwkJCSAgaHRhYi0+aXBsdCA9IGJmZF9nZXRfc2VjdGlvbl9i eV9uYW1lIChhYmZkLAorCQkJCQkJCQkiLmlwbHQiKTsKKwkJCSAgaHRhYi0+ aXJlbHBsdCA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChhYmZkLAorCQkJ CQkJCQkgICAiLnJlbC5pcGx0Iik7CisJCQkgIGh0YWItPmlnb3RwbHQgPSBi ZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYWJmZCwKKwkJCQkJCQkJICAgIi5p Z290LnBsdCIpOworCQkJICBpZiAoIWh0YWItPmlwbHQKKwkJCSAgICAgIHx8 ICFodGFiLT5pcmVscGx0CisJCQkgICAgICB8fCAhaHRhYi0+aWdvdHBsdCkK KwkJCSAgICBhYm9ydCAoKTsKKwkJCX0KKwkJICAgIH0KIAkJfQogCiAJICAg ICAgLyogSWYgdGhpcyBpcyBhIGdsb2JhbCBzeW1ib2wsIHdlIGNvdW50IHRo ZSBudW1iZXIgb2YKQEAgLTE4MjEsNyArMTg1Myw2IEBAIGFsbG9jYXRlX2R5 bnJlbG9jcyAoc3RydWN0IGVsZl9saW5rX2hhc2gKICAgc3RydWN0IGVsZl9p Mzg2X2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKICAgc3RydWN0IGVsZl9pMzg2 X2xpbmtfaGFzaF9lbnRyeSAqZWg7CiAgIHN0cnVjdCBlbGZfaTM4Nl9keW5f cmVsb2NzICpwOwotICBiZmRfYm9vbGVhbiB1c2VfaW5kaXJlY3Rfc2VjdGlv biA9IEZBTFNFOwogCiAgIGlmIChoLT5yb290LnR5cGUgPT0gYmZkX2xpbmtf aGFzaF9pbmRpcmVjdCkKICAgICByZXR1cm4gVFJVRTsKQEAgLTE5MDgsNiAr MTkzOSwyNSBAQCBhbGxvY2F0ZV9keW5yZWxvY3MgKHN0cnVjdCBlbGZfbGlu a19oYXNoCiAJICBoLT5uZWVkc19wbHQgPSAwOwogCX0KICAgICB9CisgIGVs c2UgaWYgKGgtPnR5cGUgPT0gU1RUX0dOVV9JRlVOQworCSAgICYmICFodGFi LT5lbGYuZHluYW1pY19zZWN0aW9uc19jcmVhdGVkKQorICAgIHsKKyAgICAg IC8qIFdoZW4gYnVpbGRpbmcgYSBzdGF0aWMgZXhlY3V0YWJsZSwgdXNlIC5p cGx0LCAuaWdvdC5wbHQgYW5kCisJIC5yZWwuaXBsdCBzZWN0aW9ucyBmb3Ig U1RUX0dOVV9JRlVOQyBzeW1ib2xzLiAgKi8KKyAgICAgIEJGRF9BU1NFUlQg KGluZm8tPmV4ZWN1dGFibGUgJiYgIWluZm8tPnNoYXJlZCk7CisKKyAgICAg IGgtPnBsdC5vZmZzZXQgPSBodGFiLT5pcGx0LT5zaXplOworCisgICAgICAv KiBNYWtlIHJvb20gZm9yIHRoaXMgZW50cnkgaW4gdGhlIC5pcGx0IHNlY3Rp b24uICAqLworICAgICAgaHRhYi0+aXBsdC0+c2l6ZSArPSBQTFRfRU5UUllf U0laRTsKKworICAgICAgLyogV2UgYWxzbyBuZWVkIHRvIG1ha2UgYW4gZW50 cnkgaW4gdGhlIC5nb3QuaXBsdCBzZWN0aW9uLCB3aGljaAorCSB3aWxsIGJl IHBsYWNlZCBpbiB0aGUgLmlnb3Qgc2VjdGlvbiBieSB0aGUgbGlua2VyIHNj cmlwdC4gICovCisgICAgICBodGFiLT5pZ290cGx0LT5zaXplICs9IDQ7CisK KyAgICAgIC8qIFdlIGFsc28gbmVlZCB0byBtYWtlIGFuIGVudHJ5IGluIHRo ZSAucmVsLmlwbHQgc2VjdGlvbi4gICovCisgICAgICBodGFiLT5pcmVscGx0 LT5zaXplICs9IHNpemVvZiAoRWxmMzJfRXh0ZXJuYWxfUmVsKTsKKyAgICB9 CiAgIGVsc2UKICAgICB7CiAgICAgICBoLT5wbHQub2Zmc2V0ID0gKGJmZF92 bWEpIC0xOwpAQCAtMjA0MywxNSArMjA5MywxNiBAQCBhbGxvY2F0ZV9keW5y ZWxvY3MgKHN0cnVjdCBlbGZfbGlua19oYXNoCiAJICAgIH0KIAl9CiAgICAg fQotICBlbHNlIGlmIChfYmZkX2VsZl9pc19pZnVuY19zeW1ib2wgKGluZm8t Pm91dHB1dF9iZmQsIGgpCi0JICAgJiYgaC0+ZHluaW5keCA9PSAtMQotCSAg ICYmICEgaC0+Zm9yY2VkX2xvY2FsKQotICAgIHsKLSAgICAgIGlmIChiZmRf ZWxmX2xpbmtfcmVjb3JkX2R5bmFtaWNfc3ltYm9sIChpbmZvLCBoKQotCSAg JiYgaC0+ZHluaW5keCAhPSAtMSkKLQl1c2VfaW5kaXJlY3Rfc2VjdGlvbiA9 IFRSVUU7Ci0gICAgICBlbHNlCi0JcmV0dXJuIEZBTFNFOworICBlbHNlIGlm IChoLT50eXBlID09IFNUVF9HTlVfSUZVTkMgJiYgaC0+ZHluaW5keCA9PSAt MSkKKyAgICB7CisgICAgICAvKiBGb3IgdGhlIG5vbi1zaGFyZWQgY2FzZSwg ZGlzY2FyZCBzcGFjZSBmb3IgcmVsb2NzIGFnYWluc3QKKwkgZm9yY2VkIGxv Y2FsIFNUVF9HTlVfSUZVTkMgc3ltYm9scy4gICovCisKKyAgICAgIEJGRF9B U1NFUlQgKGluZm8tPmV4ZWN1dGFibGUgJiYgIWluZm8tPnNoYXJlZCk7CisK KyAgICAgIGlmIChoLT5mb3JjZWRfbG9jYWwpCisJZWgtPmR5bl9yZWxvY3Mg PSBOVUxMOworICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogICBlbHNlIGlm IChFTElNSU5BVEVfQ09QWV9SRUxPQ1MpCiAgICAgewpAQCAtMjA5MSwxMCAr MjE0Miw3IEBAIGFsbG9jYXRlX2R5bnJlbG9jcyAoc3RydWN0IGVsZl9saW5r X2hhc2gKICAgICB7CiAgICAgICBhc2VjdGlvbiAqc3JlbG9jOwogCi0gICAg ICBpZiAodXNlX2luZGlyZWN0X3NlY3Rpb24pCi0Jc3JlbG9jID0gZWxmX3Nl Y3Rpb25fZGF0YSAocC0+c2VjKS0+aW5kaXJlY3RfcmVsb2NzOwotICAgICAg ZWxzZQotIAlzcmVsb2MgPSBlbGZfc2VjdGlvbl9kYXRhIChwLT5zZWMpLT5z cmVsb2M7CisgICAgICBzcmVsb2MgPSBlbGZfc2VjdGlvbl9kYXRhIChwLT5z ZWMpLT5zcmVsb2M7CiAKICAgICAgIEJGRF9BU1NFUlQgKHNyZWxvYyAhPSBO VUxMKTsKICAgICAgIHNyZWxvYy0+c2l6ZSArPSBwLT5jb3VudCAqIHNpemVv ZiAoRWxmMzJfRXh0ZXJuYWxfUmVsKTsKQEAgLTIyOTgsNiArMjM0Niw4IEBA IGVsZl9pMzg2X3NpemVfZHluYW1pY19zZWN0aW9ucyAoYmZkICpvdXQKICAg ICAgIGlmIChzID09IGh0YWItPnNwbHQKIAkgIHx8IHMgPT0gaHRhYi0+c2dv dAogCSAgfHwgcyA9PSBodGFiLT5zZ290cGx0CisJICB8fCBzID09IGh0YWIt PmlwbHQKKwkgIHx8IHMgPT0gaHRhYi0+aWdvdHBsdAogCSAgfHwgcyA9PSBo dGFiLT5zZHluYnNzKQogCXsKIAkgIC8qIFN0cmlwIHRoaXMgc2VjdGlvbiBp ZiB3ZSBkb24ndCBuZWVkIGl0OyBzZWUgdGhlCkBAIC0yNTg3LDcgKzI2Mzcs NyBAQCBlbGZfaTM4Nl9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91dHB1dF9i CiAJICAmJiAoKGluZHggPSByX3R5cGUgLSBSXzM4Nl9leHRfb2Zmc2V0KSAt IFJfMzg2X3N0YW5kYXJkCiAJICAgICAgPj0gUl8zODZfZXh0IC0gUl8zODZf c3RhbmRhcmQpCiAJICAmJiAoKGluZHggPSByX3R5cGUgLSBSXzM4Nl90bHNf b2Zmc2V0KSAtIFJfMzg2X2V4dAotCSAgICAgID49IFJfMzg2X3RscyAtIFJf Mzg2X2V4dCkpCisJICAgICAgPj0gUl8zODZfaXJlbGF0aXZlIC0gUl8zODZf ZXh0KSkKIAl7CiAJICAoKl9iZmRfZXJyb3JfaGFuZGxlcikKIAkgICAgKF8o IiVCOiB1bnJlY29nbml6ZWQgcmVsb2NhdGlvbiAoMHgleCkgaW4gc2VjdGlv biBgJUEnIiksCkBAIC0yODkxLDE4ICsyOTQxLDI3IEBAIGVsZl9pMzg2X3Jl bG9jYXRlX3NlY3Rpb24gKGJmZCAqb3V0cHV0X2IKIAkgICAgICB8fCBpc192 eHdvcmtzX3RscykKIAkgICAgYnJlYWs7CiAKKwkgIGlmIChpbmZvLT5leGVj dXRhYmxlCisJICAgICAgJiYgaCAhPSBOVUxMCisJICAgICAgJiYgaC0+ZGVm X3JlZ3VsYXIKKwkgICAgICAmJiBoLT50eXBlID09IFNUVF9HTlVfSUZVTkMp CisJICAgIHsKKwkgICAgICBhc2VjdGlvbiAqcGx0ID0gaHRhYi0+c3BsdCA/ IGh0YWItPnNwbHQgOiBodGFiLT5pcGx0OworCisJICAgICAgLyogSWYgYW4g U1RUX0dOVV9JRlVOQyBzeW1ib2wgaXMgZGVmaW5lZCBpbiBleGVjdXRhYmxl LAorCQkgcmVzb2x2ZSBpdCB0byBpdHMgUExUIGVudHJ5LiAgKi8KKwkgICAg ICByZWxvY2F0aW9uID0gKHBsdC0+b3V0cHV0X3NlY3Rpb24tPnZtYQorCQkJ ICAgICsgcGx0LT5vdXRwdXRfb2Zmc2V0CisJCQkgICAgKyBoLT5wbHQub2Zm c2V0KTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCiAJICBpZiAoKGluZm8t PnNoYXJlZAogCSAgICAgICAmJiAoaCA9PSBOVUxMCiAJCSAgIHx8IEVMRl9T VF9WSVNJQklMSVRZIChoLT5vdGhlcikgPT0gU1RWX0RFRkFVTFQKIAkJICAg fHwgaC0+cm9vdC50eXBlICE9IGJmZF9saW5rX2hhc2hfdW5kZWZ3ZWFrKQog CSAgICAgICAmJiAocl90eXBlICE9IFJfMzg2X1BDMzIKIAkJICAgfHwgIVNZ TUJPTF9DQUxMU19MT0NBTCAoaW5mbywgaCkpKQotCSAgICAgIHx8ICghIGlu Zm8tPnNoYXJlZAotCQkgICYmIGggIT0gTlVMTAotCQkgICYmIGgtPmR5bmlu ZHggIT0gLTEKLQkJICAmJiAhIGgtPmZvcmNlZF9sb2NhbAotCQkgICYmICgo c3RydWN0IGVsZl9pMzg2X2xpbmtfaGFzaF9lbnRyeSAqKSBoKS0+ZHluX3Jl bG9jcyAhPSBOVUxMCi0JCSAgJiYgX2JmZF9lbGZfaXNfaWZ1bmNfc3ltYm9s IChvdXRwdXRfYmZkLCBoKSkKIAkgICAgICB8fCAoRUxJTUlOQVRFX0NPUFlf UkVMT0NTCiAJCSAgJiYgIWluZm8tPnNoYXJlZAogCQkgICYmIGggIT0gTlVM TApAQCAtMjk1MSwxNiArMzAxMCw3IEBAIGVsZl9pMzg2X3JlbG9jYXRlX3Nl Y3Rpb24gKGJmZCAqb3V0cHV0X2IKIAkJICBvdXRyZWwucl9pbmZvID0gRUxG MzJfUl9JTkZPICgwLCBSXzM4Nl9SRUxBVElWRSk7CiAJCX0KIAotCSAgICAg IGlmICghIGluZm8tPnNoYXJlZAotCQkgICYmIGggIT0gTlVMTAotCQkgICYm IGgtPmR5bmluZHggIT0gLTEKLQkJICAmJiAhIGgtPmZvcmNlZF9sb2NhbAot CQkgICYmIF9iZmRfZWxmX2lzX2lmdW5jX3N5bWJvbCAob3V0cHV0X2JmZCwg aCkKLQkJICAmJiBlbGZfc2VjdGlvbl9kYXRhIChpbnB1dF9zZWN0aW9uKS0+ aW5kaXJlY3RfcmVsb2NzICE9IE5VTEwKLQkJICAmJiBlbGZfc2VjdGlvbl9k YXRhIChpbnB1dF9zZWN0aW9uKS0+aW5kaXJlY3RfcmVsb2NzLT5jb250ZW50 cyAhPSBOVUxMKQotCQlzcmVsb2MgPSBlbGZfc2VjdGlvbl9kYXRhIChpbnB1 dF9zZWN0aW9uKS0+aW5kaXJlY3RfcmVsb2NzOwotCSAgICAgIGVsc2UKLSAJ CXNyZWxvYyA9IGVsZl9zZWN0aW9uX2RhdGEgKGlucHV0X3NlY3Rpb24pLT5z cmVsb2M7CisJICAgICAgc3JlbG9jID0gZWxmX3NlY3Rpb25fZGF0YSAoaW5w dXRfc2VjdGlvbiktPnNyZWxvYzsKIAogCSAgICAgIEJGRF9BU1NFUlQgKHNy ZWxvYyAhPSBOVUxMICYmIHNyZWxvYy0+Y29udGVudHMgIT0gTlVMTCk7CiAK QEAgLTM2NjEsMzcgKzM3MTEsNjcgQEAgZWxmX2kzODZfZmluaXNoX2R5bmFt aWNfc3ltYm9sIChiZmQgKm91dAogICAgICAgYmZkX3ZtYSBnb3Rfb2Zmc2V0 OwogICAgICAgRWxmX0ludGVybmFsX1JlbGEgcmVsOwogICAgICAgYmZkX2J5 dGUgKmxvYzsKKyAgICAgIGFzZWN0aW9uICpwbHQsICpnb3RwbHQsICpyZWxw bHQ7CisKKyAgICAgIC8qIFdoZW4gYnVpbGRpbmcgYSBzdGF0aWMgZXhlY3V0 YWJsZSwgdXNlIC5pcGx0LCAuaWdvdC5wbHQgYW5kCisJIC5yZWwuaXBsdCBz ZWN0aW9ucyBmb3IgU1RUX0dOVV9JRlVOQyBzeW1ib2xzLiAgKi8KKyAgICAg IGlmIChodGFiLT5zcGx0ICE9IDApCisJeworCSAgcGx0ID0gaHRhYi0+c3Bs dDsKKwkgIGdvdHBsdCA9IGh0YWItPnNnb3RwbHQ7CisJICByZWxwbHQgPSBo dGFiLT5zcmVscGx0OworCX0KKyAgICAgIGVsc2UKKwl7CisJICBwbHQgPSBo dGFiLT5pcGx0OworCSAgZ290cGx0ID0gaHRhYi0+aWdvdHBsdDsKKwkgIHJl bHBsdCA9IGh0YWItPmlyZWxwbHQ7CisJfQogCiAgICAgICAvKiBUaGlzIHN5 bWJvbCBoYXMgYW4gZW50cnkgaW4gdGhlIHByb2NlZHVyZSBsaW5rYWdlIHRh YmxlLiAgU2V0CiAJIGl0IHVwLiAgKi8KIAotICAgICAgaWYgKGgtPmR5bmlu ZHggPT0gLTEKLQkgIHx8IGh0YWItPnNwbHQgPT0gTlVMTAotCSAgfHwgaHRh Yi0+c2dvdHBsdCA9PSBOVUxMCi0JICB8fCBodGFiLT5zcmVscGx0ID09IE5V TEwpCisgICAgICBpZiAoKGgtPmR5bmluZHggPT0gLTEKKwkgICAmJiAhKCho LT5mb3JjZWRfbG9jYWwgfHwgaW5mby0+ZXhlY3V0YWJsZSkKKwkJJiYgaC0+ ZGVmX3JlZ3VsYXIKKwkJJiYgaC0+dHlwZSA9PSBTVFRfR05VX0lGVU5DKSkK KwkgIHx8IHBsdCA9PSBOVUxMCisJICB8fCBnb3RwbHQgPT0gTlVMTAorCSAg fHwgcmVscGx0ID09IE5VTEwpCiAJYWJvcnQgKCk7CiAKICAgICAgIC8qIEdl dCB0aGUgaW5kZXggaW4gdGhlIHByb2NlZHVyZSBsaW5rYWdlIHRhYmxlIHdo aWNoCiAJIGNvcnJlc3BvbmRzIHRvIHRoaXMgc3ltYm9sLiAgVGhpcyBpcyB0 aGUgaW5kZXggb2YgdGhpcyBzeW1ib2wKIAkgaW4gYWxsIHRoZSBzeW1ib2xz IGZvciB3aGljaCB3ZSBhcmUgbWFraW5nIHBsdCBlbnRyaWVzLiAgVGhlCi0J IGZpcnN0IGVudHJ5IGluIHRoZSBwcm9jZWR1cmUgbGlua2FnZSB0YWJsZSBp cyByZXNlcnZlZC4gICovCi0gICAgICBwbHRfaW5kZXggPSBoLT5wbHQub2Zm c2V0IC8gUExUX0VOVFJZX1NJWkUgLSAxOworCSBmaXJzdCBlbnRyeSBpbiB0 aGUgcHJvY2VkdXJlIGxpbmthZ2UgdGFibGUgaXMgcmVzZXJ2ZWQuCiAKLSAg ICAgIC8qIEdldCB0aGUgb2Zmc2V0IGludG8gdGhlIC5nb3QgdGFibGUgb2Yg dGhlIGVudHJ5IHRoYXQKKwkgR2V0IHRoZSBvZmZzZXQgaW50byB0aGUgLmdv dCB0YWJsZSBvZiB0aGUgZW50cnkgdGhhdAogCSBjb3JyZXNwb25kcyB0byB0 aGlzIGZ1bmN0aW9uLiAgRWFjaCAuZ290IGVudHJ5IGlzIDQgYnl0ZXMuCi0J IFRoZSBmaXJzdCB0aHJlZSBhcmUgcmVzZXJ2ZWQuICAqLwotICAgICAgZ290 X29mZnNldCA9IChwbHRfaW5kZXggKyAzKSAqIDQ7CisJIFRoZSBmaXJzdCB0 aHJlZSBhcmUgcmVzZXJ2ZWQuCisJIAorCSBGb3Igc3RhdGljIGV4ZWN1dGFi bGVzLCB3ZSBkb24ndCByZXNlcnZlIGFueXRoaW5nLiAgKi8KKworICAgICAg aWYgKHBsdCA9PSBodGFiLT5zcGx0KQorCXsKKwkgIHBsdF9pbmRleCA9IGgt PnBsdC5vZmZzZXQgLyBQTFRfRU5UUllfU0laRSAtIDE7CisJICBnb3Rfb2Zm c2V0ID0gKHBsdF9pbmRleCArIDMpICogNDsKKwl9CisgICAgICBlbHNlCisJ eworCSAgcGx0X2luZGV4ID0gaC0+cGx0Lm9mZnNldCAvIFBMVF9FTlRSWV9T SVpFOworCSAgZ290X29mZnNldCA9IHBsdF9pbmRleCAqIDQ7CisJfQogCiAg ICAgICAvKiBGaWxsIGluIHRoZSBlbnRyeSBpbiB0aGUgcHJvY2VkdXJlIGxp bmthZ2UgdGFibGUuICAqLwogICAgICAgaWYgKCEgaW5mby0+c2hhcmVkKQog CXsKLQkgIG1lbWNweSAoaHRhYi0+c3BsdC0+Y29udGVudHMgKyBoLT5wbHQu b2Zmc2V0LCBlbGZfaTM4Nl9wbHRfZW50cnksCisJICBtZW1jcHkgKHBsdC0+ Y29udGVudHMgKyBoLT5wbHQub2Zmc2V0LCBlbGZfaTM4Nl9wbHRfZW50cnks CiAJCSAgUExUX0VOVFJZX1NJWkUpOwogCSAgYmZkX3B1dF8zMiAob3V0cHV0 X2JmZCwKLQkJICAgICAgKGh0YWItPnNnb3RwbHQtPm91dHB1dF9zZWN0aW9u LT52bWEKLQkJICAgICAgICsgaHRhYi0+c2dvdHBsdC0+b3V0cHV0X29mZnNl dAorCQkgICAgICAoZ290cGx0LT5vdXRwdXRfc2VjdGlvbi0+dm1hCisJCSAg ICAgICArIGdvdHBsdC0+b3V0cHV0X29mZnNldAogCQkgICAgICAgKyBnb3Rf b2Zmc2V0KSwKLQkJICAgICAgaHRhYi0+c3BsdC0+Y29udGVudHMgKyBoLT5w bHQub2Zmc2V0ICsgMik7CisJCSAgICAgIHBsdC0+Y29udGVudHMgKyBoLT5w bHQub2Zmc2V0ICsgMik7CiAKIAkgIGlmIChodGFiLT5pc192eHdvcmtzKQog CSAgICB7CkBAIC0zNzMxLDMxICszODExLDQ3IEBAIGVsZl9pMzg2X2Zpbmlz aF9keW5hbWljX3N5bWJvbCAoYmZkICpvdXQKIAl9CiAgICAgICBlbHNlCiAJ ewotCSAgbWVtY3B5IChodGFiLT5zcGx0LT5jb250ZW50cyArIGgtPnBsdC5v ZmZzZXQsIGVsZl9pMzg2X3BpY19wbHRfZW50cnksCisJICBtZW1jcHkgKHBs dC0+Y29udGVudHMgKyBoLT5wbHQub2Zmc2V0LCBlbGZfaTM4Nl9waWNfcGx0 X2VudHJ5LAogCQkgIFBMVF9FTlRSWV9TSVpFKTsKIAkgIGJmZF9wdXRfMzIg KG91dHB1dF9iZmQsIGdvdF9vZmZzZXQsCi0JCSAgICAgIGh0YWItPnNwbHQt PmNvbnRlbnRzICsgaC0+cGx0Lm9mZnNldCArIDIpOworCQkgICAgICBwbHQt PmNvbnRlbnRzICsgaC0+cGx0Lm9mZnNldCArIDIpOwogCX0KIAogICAgICAg YmZkX3B1dF8zMiAob3V0cHV0X2JmZCwgcGx0X2luZGV4ICogc2l6ZW9mIChF bGYzMl9FeHRlcm5hbF9SZWwpLAotCQkgIGh0YWItPnNwbHQtPmNvbnRlbnRz ICsgaC0+cGx0Lm9mZnNldCArIDcpOworCQkgIHBsdC0+Y29udGVudHMgKyBo LT5wbHQub2Zmc2V0ICsgNyk7CiAgICAgICBiZmRfcHV0XzMyIChvdXRwdXRf YmZkLCAtIChoLT5wbHQub2Zmc2V0ICsgUExUX0VOVFJZX1NJWkUpLAotCQkg IGh0YWItPnNwbHQtPmNvbnRlbnRzICsgaC0+cGx0Lm9mZnNldCArIDEyKTsK KwkJICBwbHQtPmNvbnRlbnRzICsgaC0+cGx0Lm9mZnNldCArIDEyKTsKIAog ICAgICAgLyogRmlsbCBpbiB0aGUgZW50cnkgaW4gdGhlIGdsb2JhbCBvZmZz ZXQgdGFibGUuICAqLwogICAgICAgYmZkX3B1dF8zMiAob3V0cHV0X2JmZCwK LQkJICAoaHRhYi0+c3BsdC0+b3V0cHV0X3NlY3Rpb24tPnZtYQotCQkgICAr IGh0YWItPnNwbHQtPm91dHB1dF9vZmZzZXQKKwkJICAocGx0LT5vdXRwdXRf c2VjdGlvbi0+dm1hCisJCSAgICsgcGx0LT5vdXRwdXRfb2Zmc2V0CiAJCSAg ICsgaC0+cGx0Lm9mZnNldAogCQkgICArIDYpLAotCQkgIGh0YWItPnNnb3Rw bHQtPmNvbnRlbnRzICsgZ290X29mZnNldCk7CisJCSAgZ290cGx0LT5jb250 ZW50cyArIGdvdF9vZmZzZXQpOwogCiAgICAgICAvKiBGaWxsIGluIHRoZSBl bnRyeSBpbiB0aGUgLnJlbC5wbHQgc2VjdGlvbi4gICovCi0gICAgICByZWwu cl9vZmZzZXQgPSAoaHRhYi0+c2dvdHBsdC0+b3V0cHV0X3NlY3Rpb24tPnZt YQotCQkgICAgICArIGh0YWItPnNnb3RwbHQtPm91dHB1dF9vZmZzZXQKKyAg ICAgIHJlbC5yX29mZnNldCA9IChnb3RwbHQtPm91dHB1dF9zZWN0aW9uLT52 bWEKKwkJICAgICAgKyBnb3RwbHQtPm91dHB1dF9vZmZzZXQKIAkJICAgICAg KyBnb3Rfb2Zmc2V0KTsKLSAgICAgIHJlbC5yX2luZm8gPSBFTEYzMl9SX0lO Rk8gKGgtPmR5bmluZHgsIFJfMzg2X0pVTVBfU0xPVCk7Ci0gICAgICBsb2Mg PSBodGFiLT5zcmVscGx0LT5jb250ZW50cyArIHBsdF9pbmRleCAqIHNpemVv ZiAoRWxmMzJfRXh0ZXJuYWxfUmVsKTsKKyAgICAgIGlmIChoLT5keW5pbmR4 ID09IC0xCisJICB8fCAoaW5mby0+ZXhlY3V0YWJsZQorCSAgICAgICYmIGgt PmRlZl9yZWd1bGFyCisJICAgICAgICYmIGgtPnR5cGUgPT0gU1RUX0dOVV9J RlVOQykpCisJeworCSAgLyogSWYgYW4gU1RUX0dOVV9JRlVOQyBzeW1ib2wg aXMgbG9jYWxseSBkZWZpbmVkLCBnZW5lcmF0ZQorCSAgICAgUl8zODZfSVJF TEFUSVZFIGluc3RlYWQgb2YgUl8zODZfSlVNUF9TTE9ULiAgU3RvcmUgYWRk ZW5kCisJICAgICBpbiB0aGUgLmdvdC5wbHQgc2VjdGlvbi4gICovCisJICBi ZmRfcHV0XzMyIChvdXRwdXRfYmZkLAorCQkgICAgICAoaC0+cm9vdC51LmRl Zi52YWx1ZSAKKwkJICAgICAgICsgaC0+cm9vdC51LmRlZi5zZWN0aW9uLT5v dXRwdXRfc2VjdGlvbi0+dm1hCisJCSAgICAgICArIGgtPnJvb3QudS5kZWYu c2VjdGlvbi0+b3V0cHV0X29mZnNldCksCisJCSAgICAgIGdvdHBsdC0+Y29u dGVudHMgKyBnb3Rfb2Zmc2V0KTsKKwkgIHJlbC5yX2luZm8gPSBFTEYzMl9S X0lORk8gKDAsIFJfMzg2X0lSRUxBVElWRSk7CisJfQorICAgICAgZWxzZQor CXJlbC5yX2luZm8gPSBFTEYzMl9SX0lORk8gKGgtPmR5bmluZHgsIFJfMzg2 X0pVTVBfU0xPVCk7CisgICAgICBsb2MgPSByZWxwbHQtPmNvbnRlbnRzICsg cGx0X2luZGV4ICogc2l6ZW9mIChFbGYzMl9FeHRlcm5hbF9SZWwpOwogICAg ICAgYmZkX2VsZjMyX3N3YXBfcmVsb2Nfb3V0IChvdXRwdXRfYmZkLCAmcmVs LCBsb2MpOwogCiAgICAgICBpZiAoIWgtPmRlZl9yZWd1bGFyKQpkaWZmIC14 IFJFVklTSU9OIC14IC5zdm4gLXggQ1ZTIC11cHJOIC14IENoYW5nZUxvZy5p ZnVuYyAuLi9iaW51dGlscy9zcmMvYmZkL2VsZjY0LXg4Ni02NC5jIGJpbnV0 aWxzL2JmZC9lbGY2NC14ODYtNjQuYwotLS0gLi4vYmludXRpbHMvc3JjL2Jm ZC9lbGY2NC14ODYtNjQuYwkyMDA5LTA1LTI2IDE1OjE5OjAwLjAwMDAwMDAw MCAtMDcwMAorKysgYmludXRpbHMvYmZkL2VsZjY0LXg4Ni02NC5jCTIwMDkt MDUtMjggMTI6NTE6MzEuMDAwMDAwMDAwIC0wNzAwCkBAIC0xNDMsMTIgKzE0 MywxNSBAQCBzdGF0aWMgcmVsb2NfaG93dG9fdHlwZSB4ODZfNjRfZWxmX2hv d3RvCiAJY29tcGxhaW5fb3ZlcmZsb3dfYml0ZmllbGQsIGJmZF9lbGZfZ2Vu ZXJpY19yZWxvYywKIAkiUl9YODZfNjRfVExTREVTQyIsCiAJRkFMU0UsIE1J TlVTX09ORSwgTUlOVVNfT05FLCBGQUxTRSksCisgIEhPV1RPKFJfWDg2XzY0 X0lSRUxBVElWRSwgMCwgNCwgNjQsIEZBTFNFLCAwLCBjb21wbGFpbl9vdmVy Zmxvd19iaXRmaWVsZCwKKwliZmRfZWxmX2dlbmVyaWNfcmVsb2MsICJSX1g4 Nl82NF9JUkVMQVRJVkUiLCBGQUxTRSwgTUlOVVNfT05FLAorCU1JTlVTX09O RSwgRkFMU0UpLAogCiAgIC8qIFdlIGhhdmUgYSBnYXAgaW4gdGhlIHJlbG9j IG51bWJlcnMgaGVyZS4KICAgICAgUl9YODZfNjRfc3RhbmRhcmQgY291bnRz IHRoZSBudW1iZXIgdXAgdG8gdGhpcyBwb2ludCwgYW5kCiAgICAgIFJfWDg2 XzY0X3Z0X29mZnNldCBpcyB0aGUgdmFsdWUgdG8gc3VidHJhY3QgZnJvbSBh IHJlbG9jIHR5cGUgb2YKICAgICAgUl9YODZfNjRfR05VX1ZUKiB0byBmb3Jt IGFuIGluZGV4IGludG8gdGhpcyB0YWJsZS4gICovCi0jZGVmaW5lIFJfWDg2 XzY0X3N0YW5kYXJkIChSX1g4Nl82NF9UTFNERVNDICsgMSkKKyNkZWZpbmUg Ul9YODZfNjRfc3RhbmRhcmQgKFJfWDg2XzY0X0lSRUxBVElWRSArIDEpCiAj ZGVmaW5lIFJfWDg2XzY0X3Z0X29mZnNldCAoUl9YODZfNjRfR05VX1ZUSU5I RVJJVCAtIFJfWDg2XzY0X3N0YW5kYXJkKQogCiAvKiBHTlUgZXh0ZW5zaW9u IHRvIHJlY29yZCBDKysgdnRhYmxlIGhpZXJhcmNoeS4gICovCkBAIC0yMTEs NiArMjE0LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBlbGZfcmVsb2NfbWFw IHg4Nl82NAogICB7IEJGRF9SRUxPQ19YODZfNjRfR09UUEMzMl9UTFNERVND LCBSX1g4Nl82NF9HT1RQQzMyX1RMU0RFU0MsIH0sCiAgIHsgQkZEX1JFTE9D X1g4Nl82NF9UTFNERVNDX0NBTEwsIFJfWDg2XzY0X1RMU0RFU0NfQ0FMTCwg fSwKICAgeyBCRkRfUkVMT0NfWDg2XzY0X1RMU0RFU0MsCVJfWDg2XzY0X1RM U0RFU0MsIH0sCisgIHsgQkZEX1JFTE9DX1g4Nl82NF9JUkVMQVRJVkUsCVJf WDg2XzY0X0lSRUxBVElWRSwgfSwKICAgeyBCRkRfUkVMT0NfVlRBQkxFX0lO SEVSSVQsCVJfWDg2XzY0X0dOVV9WVElOSEVSSVQsIH0sCiAgIHsgQkZEX1JF TE9DX1ZUQUJMRV9FTlRSWSwJUl9YODZfNjRfR05VX1ZURU5UUlksIH0sCiB9 OwpAQCAtNDg5LDYgKzQ5Myw5IEBAIHN0cnVjdCBlbGY2NF94ODZfNjRfbGlu a19oYXNoX3RhYmxlCiAgIGFzZWN0aW9uICpzcmVscGx0OwogICBhc2VjdGlv biAqc2R5bmJzczsKICAgYXNlY3Rpb24gKnNyZWxic3M7CisgIGFzZWN0aW9u ICppZ290cGx0OworICBhc2VjdGlvbiAqaXBsdDsKKyAgYXNlY3Rpb24gKmly ZWxwbHQ7CiAKICAgLyogVGhlIG9mZnNldCBpbnRvIHNwbHQgb2YgdGhlIFBM VCBlbnRyeSBmb3IgdGhlIFRMUyBkZXNjcmlwdG9yCiAgICAgIHJlc29sdmVy LiAgU3BlY2lhbCB2YWx1ZXMgYXJlIDAsIGlmIG5vdCBuZWNlc3NhcnkgKG9y IG5vdCBmb3VuZApAQCAtNTc5LDYgKzU4Niw5IEBAIGVsZjY0X3g4Nl82NF9s aW5rX2hhc2hfdGFibGVfY3JlYXRlIChiZmQKICAgcmV0LT5zcmVscGx0ID0g TlVMTDsKICAgcmV0LT5zZHluYnNzID0gTlVMTDsKICAgcmV0LT5zcmVsYnNz ID0gTlVMTDsKKyAgcmV0LT5pZ290cGx0PSBOVUxMOworICByZXQtPmlwbHQg PSBOVUxMOworICByZXQtPmlyZWxwbHQ9IE5VTEw7CiAgIHJldC0+c3ltX3Nl Yy5hYmZkID0gTlVMTDsKICAgcmV0LT50bHNkZXNjX3BsdCA9IDA7CiAgIHJl dC0+dGxzZGVzY19nb3QgPSAwOwpAQCAtMTI5NiwxMSArMTMwNiwzMCBAQCBl bGY2NF94ODZfNjRfY2hlY2tfcmVsb2NzIChiZmQgKmFiZmQsIHN0CiAJCSAg aWYgKHNyZWxvYyA9PSBOVUxMKQogCQkgICAgcmV0dXJuIEZBTFNFOwogCi0J CSAgLyogQ3JlYXRlIHRoZSBpZnVuYyBzZWN0aW9uLCBldmVuIGlmIHdlIHdp bGwgbm90IGVuY291bnRlciBhbgotCQkgICAgIGluZGlyZWN0IGZ1bmN0aW9u IHN5bWJvbC4gIFdlIG1heSBub3QgZXZlbiBzZWUgb25lIGluIHRoZSBpbnB1 dAotCQkgICAgIG9iamVjdCBmaWxlLCBidXQgd2UgY2FuIHN0aWxsIGVuY291 bnRlciB0aGVtIGluIGxpYnJhcmllcy4gICovCi0JCSAgKHZvaWQpIF9iZmRf ZWxmX21ha2VfaWZ1bmNfcmVsb2Nfc2VjdGlvbgotCQkgICAgKGFiZmQsIHNl YywgaHRhYi0+ZWxmLmR5bm9iaiwgMik7CisJCSAgLyogQ3JlYXRlIHRoZSBp ZnVuYyBzZWN0aW9uIGZvciBzdGF0aWMgZXhlY3V0YWJsZXMuCisJCSAgICAg SWYgd2UgbmV2ZXIgc2VlIGFuIGluZGlyZWN0IGZ1bmN0aW9uIHN5bWJvbCBu b3IKKwkJICAgICB3ZSBhcmUgYnVpbGRpbmcgYSBzdGF0aWMgZXhlY3V0YWJs ZSwgdGhvc2Ugc2VjdGlvbnMKKwkJICAgICB3aWxsIGJlIGVtcHR5IGFuZCB3 b24ndCBhcHBlYXIgaW4gb3V0cHV0LiAgKi8KKwkJICBpZiAoIWluZm8tPnNo YXJlZCkKKwkJICAgIHsKKwkJICAgICAgaWYgKCFfYmZkX2VsZl9jcmVhdGVf c3RhdGljX2lmdW5jX3NlY3Rpb25zIChhYmZkLAorCQkJCQkJCQkgIGluZm8p KQorCQkJcmV0dXJuIEZBTFNFOworCisJCSAgICAgIGlmIChodGFiLT5pcGx0 ID09IE5VTEwpCisJCQl7CisJCQkgIGh0YWItPmlwbHQgPSBiZmRfZ2V0X3Nl Y3Rpb25fYnlfbmFtZSAoYWJmZCwKKwkJCQkJCQkJIi5pcGx0Iik7CisJCQkg IGh0YWItPmlyZWxwbHQgPSBiZmRfZ2V0X3NlY3Rpb25fYnlfbmFtZSAoYWJm ZCwKKwkJCQkJCQkJICAgIi5yZWxhLmlwbHQiKTsKKwkJCSAgaHRhYi0+aWdv dHBsdCA9IGJmZF9nZXRfc2VjdGlvbl9ieV9uYW1lIChhYmZkLAorCQkJCQkJ CQkgICAiLmlnb3QucGx0Iik7CisJCQkgIGlmICghaHRhYi0+aXBsdAorCQkJ ICAgICAgfHwgIWh0YWItPmlyZWxwbHQKKwkJCSAgICAgIHx8ICFodGFiLT5p Z290cGx0KQorCQkJICAgIGFib3J0ICgpOworCQkJfQorCQkgICAgfQogCQl9 CiAKIAkgICAgICAvKiBJZiB0aGlzIGlzIGEgZ2xvYmFsIHN5bWJvbCwgd2Ug Y291bnQgdGhlIG51bWJlciBvZgpAQCAtMTY1Niw3ICsxNjg1LDYgQEAgYWxs b2NhdGVfZHlucmVsb2NzIChzdHJ1Y3QgZWxmX2xpbmtfaGFzaAogICBzdHJ1 Y3QgZWxmNjRfeDg2XzY0X2xpbmtfaGFzaF90YWJsZSAqaHRhYjsKICAgc3Ry dWN0IGVsZjY0X3g4Nl82NF9saW5rX2hhc2hfZW50cnkgKmVoOwogICBzdHJ1 Y3QgZWxmNjRfeDg2XzY0X2R5bl9yZWxvY3MgKnA7Ci0gIGJmZF9ib29sZWFu IHVzZV9pbmRpcmVjdF9zZWN0aW9uID0gRkFMU0U7CiAKICAgaWYgKGgtPnJv b3QudHlwZSA9PSBiZmRfbGlua19oYXNoX2luZGlyZWN0KQogICAgIHJldHVy biBUUlVFOwpAQCAtMTcyMCw2ICsxNzQ4LDI1IEBAIGFsbG9jYXRlX2R5bnJl bG9jcyAoc3RydWN0IGVsZl9saW5rX2hhc2gKIAkgIGgtPm5lZWRzX3BsdCA9 IDA7CiAJfQogICAgIH0KKyAgZWxzZSBpZiAoaC0+dHlwZSA9PSBTVFRfR05V X0lGVU5DCisJICAgJiYgIWh0YWItPmVsZi5keW5hbWljX3NlY3Rpb25zX2Ny ZWF0ZWQpCisgICAgeworICAgICAgLyogV2hlbiBidWlsZGluZyBhIHN0YXRp YyBleGVjdXRhYmxlLCB1c2UgLmlwbHQsIC5pZ290LnBsdCBhbmQKKwkgLnJl bGEuaXBsdCBzZWN0aW9ucyBmb3IgU1RUX0dOVV9JRlVOQyBzeW1ib2xzLiAg Ki8KKyAgICAgIEJGRF9BU1NFUlQgKGluZm8tPmV4ZWN1dGFibGUgJiYgIWlu Zm8tPnNoYXJlZCk7CisKKyAgICAgIGgtPnBsdC5vZmZzZXQgPSBodGFiLT5p cGx0LT5zaXplOworCisgICAgICAvKiBNYWtlIHJvb20gZm9yIHRoaXMgZW50 cnkgaW4gdGhlIC5pcGx0IHNlY3Rpb24uICAqLworICAgICAgaHRhYi0+aXBs dC0+c2l6ZSArPSBQTFRfRU5UUllfU0laRTsKKworICAgICAgLyogV2UgYWxz byBuZWVkIHRvIG1ha2UgYW4gZW50cnkgaW4gdGhlIC5nb3QuaXBsdCBzZWN0 aW9uLCB3aGljaAorCSB3aWxsIGJlIHBsYWNlZCBpbiB0aGUgLmlnb3Qgc2Vj dGlvbiBieSB0aGUgbGlua2VyIHNjcmlwdC4gICovCisgICAgICBodGFiLT5p Z290cGx0LT5zaXplICs9IEdPVF9FTlRSWV9TSVpFOworCisgICAgICAvKiBX ZSBhbHNvIG5lZWQgdG8gbWFrZSBhbiBlbnRyeSBpbiB0aGUgLnJlbGEuaXBs dCBzZWN0aW9uLiAgKi8KKyAgICAgIGh0YWItPmlyZWxwbHQtPnNpemUgKz0g c2l6ZW9mIChFbGY2NF9FeHRlcm5hbF9SZWxhKTsKKyAgICB9CiAgIGVsc2UK ICAgICB7CiAgICAgICBoLT5wbHQub2Zmc2V0ID0gKGJmZF92bWEpIC0xOwpA QCAtMTg0MSwxNSArMTg4OCwxNiBAQCBhbGxvY2F0ZV9keW5yZWxvY3MgKHN0 cnVjdCBlbGZfbGlua19oYXNoCiAJICAgIHJldHVybiBGQUxTRTsKIAl9CiAg ICAgfQotICBlbHNlIGlmIChfYmZkX2VsZl9pc19pZnVuY19zeW1ib2wgKGlu Zm8tPm91dHB1dF9iZmQsIGgpCi0JICAgJiYgaC0+ZHluaW5keCA9PSAtMQot CSAgICYmICEgaC0+Zm9yY2VkX2xvY2FsKQotICAgIHsKLSAgICAgIGlmIChi ZmRfZWxmX2xpbmtfcmVjb3JkX2R5bmFtaWNfc3ltYm9sIChpbmZvLCBoKQot CSAgJiYgaC0+ZHluaW5keCAhPSAtMSkKLQl1c2VfaW5kaXJlY3Rfc2VjdGlv biA9IFRSVUU7Ci0gICAgICBlbHNlCi0JcmV0dXJuIEZBTFNFOworICBlbHNl IGlmIChoLT50eXBlID09IFNUVF9HTlVfSUZVTkMgJiYgaC0+ZHluaW5keCA9 PSAtMSkKKyAgICB7CisgICAgICAvKiBGb3IgdGhlIG5vbi1zaGFyZWQgY2Fz ZSwgZGlzY2FyZCBzcGFjZSBmb3IgcmVsb2NzIGFnYWluc3QKKwkgZm9yY2Vk IGxvY2FsIFNUVF9HTlVfSUZVTkMgc3ltYm9scy4gICovCisKKyAgICAgIEJG RF9BU1NFUlQgKGluZm8tPmV4ZWN1dGFibGUgJiYgIWluZm8tPnNoYXJlZCk7 CisKKyAgICAgIGlmIChoLT5mb3JjZWRfbG9jYWwpCisJZWgtPmR5bl9yZWxv Y3MgPSBOVUxMOworICAgICAgcmV0dXJuIFRSVUU7CiAgICAgfQogICBlbHNl IGlmIChFTElNSU5BVEVfQ09QWV9SRUxPQ1MpCiAgICAgewpAQCAtMTg4Niwx MSArMTkzNCw4IEBAIGFsbG9jYXRlX2R5bnJlbG9jcyAoc3RydWN0IGVsZl9s aW5rX2hhc2gKICAgZm9yIChwID0gZWgtPmR5bl9yZWxvY3M7IHAgIT0gTlVM TDsgcCA9IHAtPm5leHQpCiAgICAgewogICAgICAgYXNlY3Rpb24gKiBzcmVs b2M7Ci0KLSAgICAgIGlmICh1c2VfaW5kaXJlY3Rfc2VjdGlvbikKLQlzcmVs b2MgPSBlbGZfc2VjdGlvbl9kYXRhIChwLT5zZWMpLT5pbmRpcmVjdF9yZWxv Y3M7Ci0gICAgICBlbHNlCi0Jc3JlbG9jID0gZWxmX3NlY3Rpb25fZGF0YSAo cC0+c2VjKS0+c3JlbG9jOworICAgICAgCisgICAgICBzcmVsb2MgPSBlbGZf c2VjdGlvbl9kYXRhIChwLT5zZWMpLT5zcmVsb2M7CiAKICAgICAgIEJGRF9B U1NFUlQgKHNyZWxvYyAhPSBOVUxMKTsKIApAQCAtMjEwNiw2ICsyMTUxLDgg QEAgZWxmNjRfeDg2XzY0X3NpemVfZHluYW1pY19zZWN0aW9ucyAoYmZkIAog ICAgICAgaWYgKHMgPT0gaHRhYi0+c3BsdAogCSAgfHwgcyA9PSBodGFiLT5z Z290CiAJICB8fCBzID09IGh0YWItPnNnb3RwbHQKKwkgIHx8IHMgPT0gaHRh Yi0+aXBsdAorCSAgfHwgcyA9PSBodGFiLT5pZ290cGx0CiAJICB8fCBzID09 IGh0YWItPnNkeW5ic3MpCiAJewogCSAgLyogU3RyaXAgdGhpcyBzZWN0aW9u IGlmIHdlIGRvbid0IG5lZWQgaXQ7IHNlZSB0aGUKQEAgLTI2ODgsMTggKzI3 MzUsMzQgQEAgZWxmNjRfeDg2XzY0X3JlbG9jYXRlX3NlY3Rpb24gKGJmZCAq b3V0cAogCSAgaWYgKChpbnB1dF9zZWN0aW9uLT5mbGFncyAmIFNFQ19BTExP QykgPT0gMCkKIAkgICAgYnJlYWs7CiAKKwkgIGlmIChpbmZvLT5leGVjdXRh YmxlCisJICAgICAgJiYgaCAhPSBOVUxMCisJICAgICAgJiYgaC0+ZGVmX3Jl Z3VsYXIKKwkgICAgICAmJiBoLT50eXBlID09IFNUVF9HTlVfSUZVTkMpCisJ ICAgIHsKKwkgICAgICBhc2VjdGlvbiAqcGx0ID0gaHRhYi0+c3BsdCA/IGh0 YWItPnNwbHQgOiBodGFiLT5pcGx0OworCisJICAgICAgLyogSWYgYW4gU1RU X0dOVV9JRlVOQyBzeW1ib2wgaXMgZGVmaW5lZCBpbiBleGVjdXRhYmxlLAor CQkgcmVzb2x2ZSBpdCB0byBpdHMgUExUIGVudHJ5IGFuZCBtYWtlIHN1cmUg aXQgaXMKKwkJIHJlYWNoYWJsZS4gICovCisJICAgICAgQkZEX0FTU0VSVCAo aC0+cGx0Lm9mZnNldCAhPSAoYmZkX3ZtYSkgLTEKKwkJCSAgJiYgKHJfdHlw ZSA9PSBSX1g4Nl82NF9QQzMyCisJCQkgICAgICB8fCByX3R5cGUgPT0gUl9Y ODZfNjRfUEM2NAorCQkJICAgICAgfHwgcl90eXBlID09IFJfWDg2XzY0XzMy CisJCQkgICAgICB8fCByX3R5cGUgPT0gUl9YODZfNjRfNjQpKTsKKworCSAg ICAgIHJlbG9jYXRpb24gPSAocGx0LT5vdXRwdXRfc2VjdGlvbi0+dm1hCisJ CQkgICAgKyBwbHQtPm91dHB1dF9vZmZzZXQKKwkJCSAgICArIGgtPnBsdC5v ZmZzZXQpOworCSAgICAgIGJyZWFrOworCSAgICB9CisKIAkgIGlmICgoaW5m by0+c2hhcmVkCiAJICAgICAgICYmIChoID09IE5VTEwKIAkJICAgfHwgRUxG X1NUX1ZJU0lCSUxJVFkgKGgtPm90aGVyKSA9PSBTVFZfREVGQVVMVAogCQkg ICB8fCBoLT5yb290LnR5cGUgIT0gYmZkX2xpbmtfaGFzaF91bmRlZndlYWsp CiAJICAgICAgICYmICghIElTX1g4Nl82NF9QQ1JFTF9UWVBFIChyX3R5cGUp CiAJCSAgIHx8ICEgU1lNQk9MX0NBTExTX0xPQ0FMIChpbmZvLCBoKSkpCi0J ICAgICAgfHwgKCEgaW5mby0+c2hhcmVkCi0JCSAgJiYgaCAhPSBOVUxMCi0J CSAgJiYgaC0+ZHluaW5keCAhPSAtMQotCQkgICYmICEgaC0+Zm9yY2VkX2xv Y2FsCi0JCSAgJiYgKChzdHJ1Y3QgZWxmNjRfeDg2XzY0X2xpbmtfaGFzaF9l bnRyeSAqKSBoKS0+ZHluX3JlbG9jcyAhPSBOVUxMCi0JCSAgJiYgX2JmZF9l bGZfaXNfaWZ1bmNfc3ltYm9sIChvdXRwdXRfYmZkLCBoKSkKIAkgICAgICB8 fCAoRUxJTUlOQVRFX0NPUFlfUkVMT0NTCiAJCSAgJiYgIWluZm8tPnNoYXJl ZAogCQkgICYmIGggIT0gTlVMTApAQCAtMjc5MSwxNiArMjg1NCw3IEBAIGVs ZjY0X3g4Nl82NF9yZWxvY2F0ZV9zZWN0aW9uIChiZmQgKm91dHAKIAkJICAg IH0KIAkJfQogCi0JICAgICAgaWYgKCEgaW5mby0+c2hhcmVkCi0JCSAgJiYg aCAhPSBOVUxMCi0JCSAgJiYgaC0+ZHluaW5keCAhPSAtMQotCQkgICYmICEg aC0+Zm9yY2VkX2xvY2FsCi0JCSAgJiYgX2JmZF9lbGZfaXNfaWZ1bmNfc3lt Ym9sIChvdXRwdXRfYmZkLCBoKQotCQkgICYmIGVsZl9zZWN0aW9uX2RhdGEg KGlucHV0X3NlY3Rpb24pLT5pbmRpcmVjdF9yZWxvY3MgIT0gTlVMTAotCQkg ICYmIGVsZl9zZWN0aW9uX2RhdGEgKGlucHV0X3NlY3Rpb24pLT5pbmRpcmVj dF9yZWxvY3MtPmNvbnRlbnRzICE9IE5VTEwpCi0JCXNyZWxvYyA9IGVsZl9z ZWN0aW9uX2RhdGEgKGlucHV0X3NlY3Rpb24pLT5pbmRpcmVjdF9yZWxvY3M7 Ci0JICAgICAgZWxzZQotCQlzcmVsb2MgPSBlbGZfc2VjdGlvbl9kYXRhIChp bnB1dF9zZWN0aW9uKS0+c3JlbG9jOworCSAgICAgIHNyZWxvYyA9IGVsZl9z ZWN0aW9uX2RhdGEgKGlucHV0X3NlY3Rpb24pLT5zcmVsb2M7CiAKIAkgICAg ICBCRkRfQVNTRVJUIChzcmVsb2MgIT0gTlVMTCAmJiBzcmVsb2MtPmNvbnRl bnRzICE9IE5VTEwpOwogCkBAIC0zMzA2LDI4ICszMzYwLDU4IEBAIGVsZjY0 X3g4Nl82NF9maW5pc2hfZHluYW1pY19zeW1ib2wgKGJmZCAKICAgICAgIGJm ZF92bWEgZ290X29mZnNldDsKICAgICAgIEVsZl9JbnRlcm5hbF9SZWxhIHJl bGE7CiAgICAgICBiZmRfYnl0ZSAqbG9jOworICAgICAgYXNlY3Rpb24gKnBs dCwgKmdvdHBsdCwgKnJlbHBsdDsKKworICAgICAgLyogV2hlbiBidWlsZGlu ZyBhIHN0YXRpYyBleGVjdXRhYmxlLCB1c2UgLmlwbHQsIC5pZ290LnBsdCBh bmQKKwkgLnJlbC5pcGx0IHNlY3Rpb25zIGZvciBTVFRfR05VX0lGVU5DIHN5 bWJvbHMuICAqLworICAgICAgaWYgKGh0YWItPnNwbHQgIT0gMCkKKwl7CisJ ICBwbHQgPSBodGFiLT5zcGx0OworCSAgZ290cGx0ID0gaHRhYi0+c2dvdHBs dDsKKwkgIHJlbHBsdCA9IGh0YWItPnNyZWxwbHQ7CisJfQorICAgICAgZWxz ZQorCXsKKwkgIHBsdCA9IGh0YWItPmlwbHQ7CisJICBnb3RwbHQgPSBodGFi LT5pZ290cGx0OworCSAgcmVscGx0ID0gaHRhYi0+aXJlbHBsdDsKKwl9CiAK ICAgICAgIC8qIFRoaXMgc3ltYm9sIGhhcyBhbiBlbnRyeSBpbiB0aGUgcHJv Y2VkdXJlIGxpbmthZ2UgdGFibGUuICBTZXQKIAkgaXQgdXAuCSAqLwotICAg ICAgaWYgKGgtPmR5bmluZHggPT0gLTEKLQkgIHx8IGh0YWItPnNwbHQgPT0g TlVMTAotCSAgfHwgaHRhYi0+c2dvdHBsdCA9PSBOVUxMCi0JICB8fCBodGFi LT5zcmVscGx0ID09IE5VTEwpCisgICAgICBpZiAoKGgtPmR5bmluZHggPT0g LTEKKwkgICAmJiAhKChoLT5mb3JjZWRfbG9jYWwgfHwgaW5mby0+ZXhlY3V0 YWJsZSkKKwkJJiYgaC0+ZGVmX3JlZ3VsYXIKKwkJJiYgaC0+dHlwZSA9PSBT VFRfR05VX0lGVU5DKSkKKwkgIHx8IHBsdCA9PSBOVUxMCisJICB8fCBnb3Rw bHQgPT0gTlVMTAorCSAgfHwgcmVscGx0ID09IE5VTEwpCiAJYWJvcnQgKCk7 CiAKICAgICAgIC8qIEdldCB0aGUgaW5kZXggaW4gdGhlIHByb2NlZHVyZSBs aW5rYWdlIHRhYmxlIHdoaWNoCiAJIGNvcnJlc3BvbmRzIHRvIHRoaXMgc3lt Ym9sLiAgVGhpcyBpcyB0aGUgaW5kZXggb2YgdGhpcyBzeW1ib2wKIAkgaW4g YWxsIHRoZSBzeW1ib2xzIGZvciB3aGljaCB3ZSBhcmUgbWFraW5nIHBsdCBl bnRyaWVzLiAgVGhlCi0JIGZpcnN0IGVudHJ5IGluIHRoZSBwcm9jZWR1cmUg bGlua2FnZSB0YWJsZSBpcyByZXNlcnZlZC4gICovCi0gICAgICBwbHRfaW5k ZXggPSBoLT5wbHQub2Zmc2V0IC8gUExUX0VOVFJZX1NJWkUgLSAxOwotCi0g ICAgICAvKiBHZXQgdGhlIG9mZnNldCBpbnRvIHRoZSAuZ290IHRhYmxlIG9m IHRoZSBlbnRyeSB0aGF0CisJIGZpcnN0IGVudHJ5IGluIHRoZSBwcm9jZWR1 cmUgbGlua2FnZSB0YWJsZSBpcyByZXNlcnZlZC4KKwkgCisJIEdldCB0aGUg b2Zmc2V0IGludG8gdGhlIC5nb3QgdGFibGUgb2YgdGhlIGVudHJ5IHRoYXQK IAkgY29ycmVzcG9uZHMgdG8gdGhpcyBmdW5jdGlvbi4JRWFjaCAuZ290IGVu dHJ5IGlzIEdPVF9FTlRSWV9TSVpFCi0JIGJ5dGVzLiBUaGUgZmlyc3QgdGhy ZWUgYXJlIHJlc2VydmVkIGZvciB0aGUgZHluYW1pYyBsaW5rZXIuICAqLwot ICAgICAgZ290X29mZnNldCA9IChwbHRfaW5kZXggKyAzKSAqIEdPVF9FTlRS WV9TSVpFOworCSBieXRlcy4gVGhlIGZpcnN0IHRocmVlIGFyZSByZXNlcnZl ZCBmb3IgdGhlIGR5bmFtaWMgbGlua2VyLgorCisJIEZvciBzdGF0aWMgZXhl Y3V0YWJsZXMsIHdlIGRvbid0IHJlc2VydmUgYW55dGhpbmcuICAqLworCisg ICAgICBpZiAocGx0ID09IGh0YWItPnNwbHQpCisJeworCSAgcGx0X2luZGV4 ID0gaC0+cGx0Lm9mZnNldCAvIFBMVF9FTlRSWV9TSVpFIC0gMTsKKwkgIGdv dF9vZmZzZXQgPSAocGx0X2luZGV4ICsgMykgKiBHT1RfRU5UUllfU0laRTsK Kwl9CisgICAgICBlbHNlCisJeworCSAgcGx0X2luZGV4ID0gaC0+cGx0Lm9m ZnNldCAvIFBMVF9FTlRSWV9TSVpFOworCSAgZ290X29mZnNldCA9IHBsdF9p bmRleCAqIEdPVF9FTlRSWV9TSVpFOworCX0KIAogICAgICAgLyogRmlsbCBp biB0aGUgZW50cnkgaW4gdGhlIHByb2NlZHVyZSBsaW5rYWdlIHRhYmxlLiAg Ki8KLSAgICAgIG1lbWNweSAoaHRhYi0+c3BsdC0+Y29udGVudHMgKyBoLT5w bHQub2Zmc2V0LCBlbGY2NF94ODZfNjRfcGx0X2VudHJ5LAorICAgICAgbWVt Y3B5IChwbHQtPmNvbnRlbnRzICsgaC0+cGx0Lm9mZnNldCwgZWxmNjRfeDg2 XzY0X3BsdF9lbnRyeSwKIAkgICAgICBQTFRfRU5UUllfU0laRSk7CiAKICAg ICAgIC8qIEluc2VydCB0aGUgcmVsb2NhdGlvbiBwb3NpdGlvbnMgb2YgdGhl IHBsdCBzZWN0aW9uLiAgVGhlIG1hZ2ljCkBAIC0zMzM2LDM1ICszNDIwLDUw IEBAIGVsZjY0X3g4Nl82NF9maW5pc2hfZHluYW1pY19zeW1ib2wgKGJmZCAK ICAgICAgIC8qIFB1dCBvZmZzZXQgZm9yIGptcCAqbmFtZUBHT1RQQ1JFTCgl cmlwKSwgc2luY2UgdGhlCiAJIGluc3RydWN0aW9uIHVzZXMgNiBieXRlcywg c3VidHJhY3QgdGhpcyB2YWx1ZS4gICovCiAgICAgICBiZmRfcHV0XzMyIChv dXRwdXRfYmZkLAotCQkgICAgICAoaHRhYi0+c2dvdHBsdC0+b3V0cHV0X3Nl Y3Rpb24tPnZtYQotCQkgICAgICAgKyBodGFiLT5zZ290cGx0LT5vdXRwdXRf b2Zmc2V0CisJCSAgICAgIChnb3RwbHQtPm91dHB1dF9zZWN0aW9uLT52bWEK KwkJICAgICAgICsgZ290cGx0LT5vdXRwdXRfb2Zmc2V0CiAJCSAgICAgICAr IGdvdF9vZmZzZXQKLQkJICAgICAgIC0gaHRhYi0+c3BsdC0+b3V0cHV0X3Nl Y3Rpb24tPnZtYQotCQkgICAgICAgLSBodGFiLT5zcGx0LT5vdXRwdXRfb2Zm c2V0CisJCSAgICAgICAtIHBsdC0+b3V0cHV0X3NlY3Rpb24tPnZtYQorCQkg ICAgICAgLSBwbHQtPm91dHB1dF9vZmZzZXQKIAkJICAgICAgIC0gaC0+cGx0 Lm9mZnNldAogCQkgICAgICAgLSA2KSwKLQkJICBodGFiLT5zcGx0LT5jb250 ZW50cyArIGgtPnBsdC5vZmZzZXQgKyAyKTsKKwkJICBwbHQtPmNvbnRlbnRz ICsgaC0+cGx0Lm9mZnNldCArIDIpOwogICAgICAgLyogUHV0IHJlbG9jYXRp b24gaW5kZXguICAqLwogICAgICAgYmZkX3B1dF8zMiAob3V0cHV0X2JmZCwg cGx0X2luZGV4LAotCQkgIGh0YWItPnNwbHQtPmNvbnRlbnRzICsgaC0+cGx0 Lm9mZnNldCArIDcpOworCQkgIHBsdC0+Y29udGVudHMgKyBoLT5wbHQub2Zm c2V0ICsgNyk7CiAgICAgICAvKiBQdXQgb2Zmc2V0IGZvciBqbXAgLlBMVDAu ICAqLwogICAgICAgYmZkX3B1dF8zMiAob3V0cHV0X2JmZCwgLSAoaC0+cGx0 Lm9mZnNldCArIFBMVF9FTlRSWV9TSVpFKSwKLQkJICBodGFiLT5zcGx0LT5j b250ZW50cyArIGgtPnBsdC5vZmZzZXQgKyAxMik7CisJCSAgcGx0LT5jb250 ZW50cyArIGgtPnBsdC5vZmZzZXQgKyAxMik7CiAKICAgICAgIC8qIEZpbGwg aW4gdGhlIGVudHJ5IGluIHRoZSBnbG9iYWwgb2Zmc2V0IHRhYmxlLCBpbml0 aWFsbHkgdGhpcwogCSBwb2ludHMgdG8gdGhlIHB1c2hxIGluc3RydWN0aW9u IGluIHRoZSBQTFQgd2hpY2ggaXMgYXQgb2Zmc2V0IDYuICAqLwotICAgICAg YmZkX3B1dF82NCAob3V0cHV0X2JmZCwgKGh0YWItPnNwbHQtPm91dHB1dF9z ZWN0aW9uLT52bWEKLQkJCSAgICAgICArIGh0YWItPnNwbHQtPm91dHB1dF9v ZmZzZXQKKyAgICAgIGJmZF9wdXRfNjQgKG91dHB1dF9iZmQsIChwbHQtPm91 dHB1dF9zZWN0aW9uLT52bWEKKwkJCSAgICAgICArIHBsdC0+b3V0cHV0X29m ZnNldAogCQkJICAgICAgICsgaC0+cGx0Lm9mZnNldCArIDYpLAotCQkgIGh0 YWItPnNnb3RwbHQtPmNvbnRlbnRzICsgZ290X29mZnNldCk7CisJCSAgZ290 cGx0LT5jb250ZW50cyArIGdvdF9vZmZzZXQpOwogCiAgICAgICAvKiBGaWxs IGluIHRoZSBlbnRyeSBpbiB0aGUgLnJlbGEucGx0IHNlY3Rpb24uICAqLwot ICAgICAgcmVsYS5yX29mZnNldCA9IChodGFiLT5zZ290cGx0LT5vdXRwdXRf c2VjdGlvbi0+dm1hCi0JCSAgICAgICArIGh0YWItPnNnb3RwbHQtPm91dHB1 dF9vZmZzZXQKKyAgICAgIHJlbGEucl9vZmZzZXQgPSAoZ290cGx0LT5vdXRw dXRfc2VjdGlvbi0+dm1hCisJCSAgICAgICArIGdvdHBsdC0+b3V0cHV0X29m ZnNldAogCQkgICAgICAgKyBnb3Rfb2Zmc2V0KTsKLSAgICAgIHJlbGEucl9p bmZvID0gRUxGNjRfUl9JTkZPIChoLT5keW5pbmR4LCBSX1g4Nl82NF9KVU1Q X1NMT1QpOwotICAgICAgcmVsYS5yX2FkZGVuZCA9IDA7Ci0gICAgICBsb2Mg PSBodGFiLT5zcmVscGx0LT5jb250ZW50cyArIHBsdF9pbmRleCAqIHNpemVv ZiAoRWxmNjRfRXh0ZXJuYWxfUmVsYSk7CisgICAgICBpZiAoaC0+ZHluaW5k eCA9PSAtMQorCSAgfHwgKGluZm8tPmV4ZWN1dGFibGUKKwkgICAgICAmJiBo LT5kZWZfcmVndWxhcgorCSAgICAgICYmIGgtPnR5cGUgPT0gU1RUX0dOVV9J RlVOQykpCisJeworCSAgLyogSWYgYW4gU1RUX0dOVV9JRlVOQyBzeW1ib2wg aXMgbG9jYWxseSBkZWZpbmVkLCBnZW5lcmF0ZQorCSAgICAgUl9YODZfNjRf SVJFTEFUSVZFIGluc3RlYWQgb2YgUl9YODZfNjRfSlVNUF9TTE9ULiAgKi8K KwkgIHJlbGEucl9pbmZvID0gRUxGNjRfUl9JTkZPICgwLCBSX1g4Nl82NF9J UkVMQVRJVkUpOworCSAgcmVsYS5yX2FkZGVuZCA9IChoLT5yb290LnUuZGVm LnZhbHVlCisJCQkgICArIGgtPnJvb3QudS5kZWYuc2VjdGlvbi0+b3V0cHV0 X3NlY3Rpb24tPnZtYQorCQkJICAgKyBoLT5yb290LnUuZGVmLnNlY3Rpb24t Pm91dHB1dF9vZmZzZXQpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICByZWxh LnJfaW5mbyA9IEVMRjY0X1JfSU5GTyAoaC0+ZHluaW5keCwgUl9YODZfNjRf SlVNUF9TTE9UKTsKKwkgIHJlbGEucl9hZGRlbmQgPSAwOworCX0KKyAgICAg IGxvYyA9IHJlbHBsdC0+Y29udGVudHMgKyBwbHRfaW5kZXggKiBzaXplb2Yg KEVsZjY0X0V4dGVybmFsX1JlbGEpOwogICAgICAgYmZkX2VsZjY0X3N3YXBf cmVsb2NhX291dCAob3V0cHV0X2JmZCwgJnJlbGEsIGxvYyk7CiAKICAgICAg IGlmICghaC0+ZGVmX3JlZ3VsYXIpCmRpZmYgLXggUkVWSVNJT04gLXggLnN2 biAteCBDVlMgLXVwck4gLXggQ2hhbmdlTG9nLmlmdW5jIC4uL2JpbnV0aWxz L3NyYy9iZmQvZWxmLWJmZC5oIGJpbnV0aWxzL2JmZC9lbGYtYmZkLmgKLS0t IC4uL2JpbnV0aWxzL3NyYy9iZmQvZWxmLWJmZC5oCTIwMDktMDUtMjYgMTU6 MTk6MDAuMDAwMDAwMDAwIC0wNzAwCisrKyBiaW51dGlscy9iZmQvZWxmLWJm ZC5oCTIwMDktMDUtMjggMTI6Mzc6MjIuMDAwMDAwMDAwIC0wNzAwCkBAIC0x Mjk5LDkgKzEyOTksNiBAQCBzdHJ1Y3QgYmZkX2VsZl9zZWN0aW9uX2RhdGEK ICAgLyogQSBwb2ludGVyIHRvIHRoZSBiZmQgc2VjdGlvbiB1c2VkIGZvciBk eW5hbWljIHJlbG9jcy4gICovCiAgIGFzZWN0aW9uICpzcmVsb2M7CiAKLSAg LyogQSBwb2ludGVyIHRvIHRoZSBiZmQgc2VjdGlvbiB1c2VkIGZvciBkeW5h bWljIHJlbG9jcyBhZ2FpbnN0IGlmdW5jIHN5bWJvbHMuICAqLwotICBhc2Vj dGlvbiAqaW5kaXJlY3RfcmVsb2NzOwotCiAgIHVuaW9uIHsKICAgICAvKiBH cm91cCBuYW1lLCBpZiB0aGlzIHNlY3Rpb24gaXMgYSBtZW1iZXIgb2YgYSBn cm91cC4gICovCiAgICAgY29uc3QgY2hhciAqbmFtZTsKQEAgLTIxNDksMjIg KzIxNDYsMjEgQEAgZXh0ZXJuIGludCBfYmZkX2VsZl9vYmpfYXR0cnNfYXJn X3R5cGUgKAogZXh0ZXJuIHZvaWQgX2JmZF9lbGZfcGFyc2VfYXR0cmlidXRl cyAoYmZkICosIEVsZl9JbnRlcm5hbF9TaGRyICopOwogZXh0ZXJuIGJmZF9i b29sZWFuIF9iZmRfZWxmX21lcmdlX29iamVjdF9hdHRyaWJ1dGVzIChiZmQg KiwgYmZkICopOwogCi1leHRlcm4gYXNlY3Rpb24gKiBfYmZkX2VsZl9tYWtl X2lmdW5jX3JlbG9jX3NlY3Rpb24KLSAgKGJmZCAqLCBhc2VjdGlvbiAqLCBi ZmQgKiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBiZmRfYm9vbGVhbiBfYmZk X2VsZl9jcmVhdGVfc3RhdGljX2lmdW5jX3NlY3Rpb25zCisgIChiZmQgKiwg c3RydWN0IGJmZF9saW5rX2luZm8gKik7CiAKIC8qIExhcmdlIGNvbW1vbiBz ZWN0aW9uLiAgKi8KIGV4dGVybiBhc2VjdGlvbiBfYmZkX2VsZl9sYXJnZV9j b21fc2VjdGlvbjsKIAotZXh0ZXJuIGJmZF9ib29sZWFuIF9iZmRfZWxmX2lz X2lmdW5jX3N5bWJvbAotICAoYmZkICosIHN0cnVjdCBlbGZfbGlua19oYXNo X2VudHJ5ICopOwotCiAvKiBUaGlzIGlzIHRoZSBjb25kaXRpb24gdW5kZXIg d2hpY2ggZmluaXNoX2R5bmFtaWNfc3ltYm9sIHdpbGwgYmUgY2FsbGVkLgog ICAgSWYgb3VyIGZpbmlzaF9keW5hbWljX3N5bWJvbCBpc24ndCBjYWxsZWQs IHdlJ2xsIG5lZWQgdG8gZG8gc29tZXRoaW5nCi0gICBhYm91dCBpbml0aWFs aXppbmcgYW55IC5wbHQgYW5kIC5nb3QgZW50cmllcyBpbiByZWxvY2F0ZV9z ZWN0aW9uLiAgKi8KKyAgIGFib3V0IGluaXRpYWxpemluZyBhbnkgLnBsdCBh bmQgLmdvdCBlbnRyaWVzIGluIHJlbG9jYXRlX3NlY3Rpb24uIAorICAgU1RU X0dOVV9JRlVOQyBzeW1ib2wgbXVzdCBnbyB0aHJvdWdoIFBMVC4gICovCiAj ZGVmaW5lIFdJTExfQ0FMTF9GSU5JU0hfRFlOQU1JQ19TWU1CT0woRFlOLCBT SEFSRUQsIEgpIFwKLSAgKChEWU4pCQkJCQkJCQlcCi0gICAmJiAoKFNIQVJF RCkgfHwgIShIKS0+Zm9yY2VkX2xvY2FsKQkJCQkJXAotICAgJiYgKChIKS0+ ZHluaW5keCAhPSAtMSB8fCAoSCktPmZvcmNlZF9sb2NhbCkpCisgICgoSCkt PnR5cGUgPT0gU1RUX0dOVV9JRlVOQwkJCQkJCVwKKyAgIHx8ICgoRFlOKQkJ CQkJCQkJXAorICAgICAgICYmICgoU0hBUkVEKSB8fCAhKEgpLT5mb3JjZWRf bG9jYWwpCQkJCVwKKyAgICAgICAmJiAoKEgpLT5keW5pbmR4ICE9IC0xIHx8 IChIKS0+Zm9yY2VkX2xvY2FsKSkpCiAKIC8qIFRoaXMgbWFjcm8gaXMgdG8g YXZvaWQgbG90cyBvZiBkdXBsaWNhdGVkIGNvZGUgaW4gdGhlIGJvZHkKICAg IG9mIHh4eF9yZWxvY2F0ZV9zZWN0aW9uKCkgaW4gdGhlIHZhcmlvdXMgZWxm eHgteHh4eC5jIGZpbGVzLiAgKi8KZGlmZiAteCBSRVZJU0lPTiAteCAuc3Zu IC14IENWUyAtdXByTiAteCBDaGFuZ2VMb2cuaWZ1bmMgLi4vYmludXRpbHMv c3JjL2JmZC9lbGZsaW5rLmMgYmludXRpbHMvYmZkL2VsZmxpbmsuYwotLS0g Li4vYmludXRpbHMvc3JjL2JmZC9lbGZsaW5rLmMJMjAwOS0wNS0yNiAxNTox OTowMC4wMDAwMDAwMDAgLTA3MDAKKysrIGJpbnV0aWxzL2JmZC9lbGZsaW5r LmMJMjAwOS0wNS0yOCAxMjo1NDo0NS4wMDAwMDAwMDAgLTA3MDAKQEAgLTI2 NzUsMTMgKzI2NzUsNiBAQCBfYmZkX2VsZl9hZGp1c3RfZHluYW1pY19zeW1i b2wgKHN0cnVjdCBlCiAgIGR5bm9iaiA9IGVsZl9oYXNoX3RhYmxlIChlaWYt PmluZm8pLT5keW5vYmo7CiAgIGJlZCA9IGdldF9lbGZfYmFja2VuZF9kYXRh IChkeW5vYmopOwogCi0KLSAgaWYgKGgtPnR5cGUgPT0gU1RUX0dOVV9JRlVO QwotICAgICAgJiYgKGJlZC0+ZWxmX29zYWJpID09IEVMRk9TQUJJX0xJTlVY Ci0JICAvKiBHTlUvTGludXggaXMgc3RpbGwgdXNpbmcgdGhlIGRlZmF1bHQg dmFsdWUgMC4gICovCi0JICB8fCBiZWQtPmVsZl9vc2FiaSA9PSBFTEZPU0FC SV9OT05FKSkKLSAgICBoLT5uZWVkc19wbHQgPSAxOwotCiAgIGlmICghICgq YmVkLT5lbGZfYmFja2VuZF9hZGp1c3RfZHluYW1pY19zeW1ib2wpIChlaWYt PmluZm8sIGgpKQogICAgIHsKICAgICAgIGVpZi0+ZmFpbGVkID0gVFJVRTsK QEAgLTI4NDUsNiArMjgzOCwxMCBAQCBfYmZkX2VsZl9zeW1ib2xfcmVmc19s b2NhbF9wIChzdHJ1Y3QgZWxmCiAgIGlmIChoID09IE5VTEwpCiAgICAgcmV0 dXJuIFRSVUU7CiAKKyAgLyogU1RUX0dOVV9JRlVOQyBzeW1ib2wgbXVzdCBn byB0aHJvdWdoIFBMVC4gICovCisgIGlmIChoLT50eXBlID09IFNUVF9HTlVf SUZVTkMpCisgICAgcmV0dXJuIEZBTFNFOworCiAgIC8qIFNUVl9ISURERU4g b3IgU1RWX0lOVEVSTkFMIG9uZXMgbXVzdCBiZSBsb2NhbC4gICovCiAgIGlm IChFTEZfU1RfVklTSUJJTElUWSAoaC0+b3RoZXIpID09IFNUVl9ISURERU4K ICAgICAgIHx8IEVMRl9TVF9WSVNJQklMSVRZIChoLT5vdGhlcikgPT0gU1RW X0lOVEVSTkFMKQpAQCAtNDI5NCw2ICs0MjkxLDEwIEBAIGVsZl9saW5rX2Fk ZF9vYmplY3Rfc3ltYm9scyAoYmZkICphYmZkLCAKIAogCSAgICAgIGgtPnR5 cGUgPSBFTEZfU1RfVFlQRSAoaXN5bS0+c3RfaW5mbyk7CiAJICAgIH0KKyAg ICAgIAorCSAgLyogU1RUX0dOVV9JRlVOQyBzeW1ib2wgbXVzdCBnbyB0aHJv dWdoIFBMVC4gICovCisJICBpZiAoaC0+dHlwZSA9PSBTVFRfR05VX0lGVU5D KQorCSAgICBoLT5uZWVkc19wbHQgPSAxOwogCiAJICAvKiBNZXJnZSBzdF9v dGhlciBmaWVsZC4gICovCiAJICBlbGZfbWVyZ2Vfc3Rfb3RoZXIgKGFiZmQs IGgsIGlzeW0sIGRlZmluaXRpb24sIGR5bmFtaWMpOwpAQCAtNjY2OSw4ICs2 NjcwLDEyIEBAIF9iZmRfZWxmX2xpbmtfaGFzaF9oaWRlX3N5bWJvbCAoc3Ry dWN0IGIKIAkJCQlzdHJ1Y3QgZWxmX2xpbmtfaGFzaF9lbnRyeSAqaCwKIAkJ CQliZmRfYm9vbGVhbiBmb3JjZV9sb2NhbCkKIHsKLSAgaC0+cGx0ID0gZWxm X2hhc2hfdGFibGUgKGluZm8pLT5pbml0X3BsdF9vZmZzZXQ7Ci0gIGgtPm5l ZWRzX3BsdCA9IDA7CisgIC8qIFNUVF9HTlVfSUZVTkMgc3ltYm9sIG11c3Qg Z28gdGhyb3VnaCBQTFQuICAqLworICBpZiAoaC0+dHlwZSAhPSBTVFRfR05V X0lGVU5DKQorICAgIHsKKyAgICAgIGgtPnBsdCA9IGVsZl9oYXNoX3RhYmxl IChpbmZvKS0+aW5pdF9wbHRfb2Zmc2V0OworICAgICAgaC0+bmVlZHNfcGx0 ID0gMDsKKyAgICB9CiAgIGlmIChmb3JjZV9sb2NhbCkKICAgICB7CiAgICAg ICBoLT5mb3JjZWRfbG9jYWwgPSAxOwpAQCAtODY0OSwxNCArODY1NCwxOCBA QCBlbGZfbGlua19vdXRwdXRfZXh0c3ltIChzdHJ1Y3QgZWxmX2xpbmtfCiAg IC8qIEdpdmUgdGhlIHByb2Nlc3NvciBiYWNrZW5kIGEgY2hhbmNlIHRvIHR3 ZWFrIHRoZSBzeW1ib2wgdmFsdWUsCiAgICAgIGFuZCBhbHNvIHRvIGZpbmlz aCB1cCBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgZm9yIHRoaXMK ICAgICAgc3ltYm9sLiAgRklYTUU6IE5vdCBjYWxsaW5nIGVsZl9iYWNrZW5k X2ZpbmlzaF9keW5hbWljX3N5bWJvbCBmb3IKLSAgICAgZm9yY2VkIGxvY2Fs IHN5bXMgd2hlbiBub24tc2hhcmVkIGlzIGR1ZSB0byBhIGhpc3RvcmljYWwg cXVpcmsuICAqLwotICBpZiAoKGgtPmR5bmluZHggIT0gLTEKLSAgICAgICB8 fCBoLT5mb3JjZWRfbG9jYWwpCi0gICAgICAmJiAoKGZpbmZvLT5pbmZvLT5z aGFyZWQKLQkgICAmJiAoRUxGX1NUX1ZJU0lCSUxJVFkgKGgtPm90aGVyKSA9 PSBTVFZfREVGQVVMVAotCSAgICAgICB8fCBoLT5yb290LnR5cGUgIT0gYmZk X2xpbmtfaGFzaF91bmRlZndlYWspKQotCSAgfHwgIWgtPmZvcmNlZF9sb2Nh bCkKLSAgICAgICYmIGVsZl9oYXNoX3RhYmxlIChmaW5mby0+aW5mbyktPmR5 bmFtaWNfc2VjdGlvbnNfY3JlYXRlZCkKKyAgICAgZm9yY2VkIGxvY2FsIHN5 bXMgd2hlbiBub24tc2hhcmVkIGlzIGR1ZSB0byBhIGhpc3RvcmljYWwgcXVp cmsuCisgICAgIFNUVF9HTlVfSUZVTkMgc3ltYm9sIG11c3QgZ28gdGhyb3Vn aCBQTFQuICAqLworICBpZiAoKGgtPnR5cGUgPT0gU1RUX0dOVV9JRlVOQwor ICAgICAgICYmIGgtPnJlZl9yZWd1bGFyCisgICAgICAgJiYgIWZpbmZvLT5p bmZvLT5yZWxvY2F0YWJsZSkKKyAgICAgIHx8ICgoaC0+ZHluaW5keCAhPSAt MQorCSAgIHx8IGgtPmZvcmNlZF9sb2NhbCkKKwkgICYmICgoZmluZm8tPmlu Zm8tPnNoYXJlZAorCSAgICAgICAmJiAoRUxGX1NUX1ZJU0lCSUxJVFkgKGgt Pm90aGVyKSA9PSBTVFZfREVGQVVMVAorCQkgICB8fCBoLT5yb290LnR5cGUg IT0gYmZkX2xpbmtfaGFzaF91bmRlZndlYWspKQorCSAgICAgIHx8ICFoLT5m b3JjZWRfbG9jYWwpCisJICAmJiBlbGZfaGFzaF90YWJsZSAoZmluZm8tPmlu Zm8pLT5keW5hbWljX3NlY3Rpb25zX2NyZWF0ZWQpKQogICAgIHsKICAgICAg IGlmICghICgoKmJlZC0+ZWxmX2JhY2tlbmRfZmluaXNoX2R5bmFtaWNfc3lt Ym9sKQogCSAgICAgKGZpbmZvLT5vdXRwdXRfYmZkLCBmaW5mby0+aW5mbywg aCwgJnN5bSkpKQpAQCAtMTI0ODcsODggKzEyNDk2LDg3IEBAIF9iZmRfZWxm X21ha2VfZHluYW1pY19yZWxvY19zZWN0aW9uIChhc2UKICAgcmV0dXJuIHJl bG9jX3NlYzsKIH0KIAotLyogUmV0dXJucyB0aGUgbmFtZSBvZiB0aGUgaWZ1 bmMgdXNpbmcgZHluYW1pYyByZWxvYyBzZWN0aW9uIGFzc29jaWF0ZWQgd2l0 aCBTRUMuICAqLwotI2RlZmluZSBJRlVOQ19JTkZJWCAiLmlmdW5jIgorLyog Q3JlYXRlIHNlY3Rpb25zIG5lZWRlZCBieSBTVFRfR05VX0lGVU5DIHN5bWJv bCBmb3Igc3RhdGljCisgICBleGVjdXRhYmxlcy4gICovCiAKLXN0YXRpYyBj b25zdCBjaGFyICoKLWdldF9pZnVuY19yZWxvY19zZWN0aW9uX25hbWUgKGJm ZCAqICAgICAgIGFiZmQsCi0JCQkgICAgICBhc2VjdGlvbiAqICBzZWMpCiti ZmRfYm9vbGVhbgorX2JmZF9lbGZfY3JlYXRlX3N0YXRpY19pZnVuY19zZWN0 aW9ucyAoYmZkICphYmZkLAorCQkJCSAgICAgICBzdHJ1Y3QgYmZkX2xpbmtf aW5mbyAqaW5mbykKIHsKLSAgY29uc3QgY2hhciAqICBkb3Q7Ci0gIGNoYXIg KiAgbmFtZTsKLSAgY29uc3QgY2hhciAqICBiYXNlX25hbWU7Ci0gIHVuc2ln bmVkIGludCAgc3RybmR4ID0gZWxmX2VsZmhlYWRlciAoYWJmZCktPmVfc2hz dHJuZHg7Ci0gIHVuc2lnbmVkIGludCAgc2huYW0gPSBlbGZfc2VjdGlvbl9k YXRhIChzZWMpLT5yZWxfaGRyLnNoX25hbWU7Ci0KLSAgYmFzZV9uYW1lID0g YmZkX2VsZl9zdHJpbmdfZnJvbV9lbGZfc2VjdGlvbiAoYWJmZCwgc3RybmR4 LCBzaG5hbSk7Ci0gIGlmIChiYXNlX25hbWUgPT0gTlVMTCkKLSAgICByZXR1 cm4gTlVMTDsKLQotICBkb3QgPSBzdHJjaHIgKGJhc2VfbmFtZSArIDEsICcu Jyk7Ci0gIG5hbWUgPSBiZmRfYWxsb2MgKGFiZmQsIHN0cmxlbiAoYmFzZV9u YW1lKSArIHN0cmxlbiAoSUZVTkNfSU5GSVgpICsgMSk7Ci0gIHNwcmludGYg KG5hbWUsICIlLipzJXMlcyIsIChpbnQpKGRvdCAtIGJhc2VfbmFtZSksIGJh c2VfbmFtZSwgSUZVTkNfSU5GSVgsIGRvdCk7CisgIGZsYWd3b3JkIGZsYWdz LCBwbHRmbGFnczsKKyAgaW50IHB0cmFsaWduOworICBhc2VjdGlvbiAqczsK KyAgY29uc3Qgc3RydWN0IGVsZl9iYWNrZW5kX2RhdGEgKmJlZDsKIAotICBy ZXR1cm4gbmFtZTsKLX0KKyAgLyogU2hvdWxkIG5ldmVyIGJlIGNhbGxlZCBm b3Igc2hhcmVkIGxpYnJhcnkuICAqLworICBCRkRfQVNTRVJUICghaW5mby0+ c2hhcmVkKTsKIAotLyogTGlrZSBfYmZkX2VsZl9tYWtlX2R5bmFtaWNfcmVs b2Nfc2VjdGlvbiBidXQgaXQgY3JlYXRlcyBhCi0gICBzZWN0aW9uIGZvciBo b2xkaW5nIHJlbG9jcyBhZ2FpbnN0IHN5bWJvbHMgd2l0aCB0aGUgU1RUX0dO VV9JRlVOQwotICAgdHlwZS4gIFRoZSBzZWN0aW9uIGlzIGF0dGFjaGVkIHRv IHRoZSBPV05FUiBiZmQgYnV0IGl0IGlzIGNyZWF0ZWQKLSAgIHdpdGggYSBu YW1lIGJhc2VkIG9uIFNFQyBmcm9tIEFCRkQuICAqLworICAvKiBUaGlzIGZ1 bmN0aW9uIG1heSBiZSBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuICAqLworICBz ID0gYmZkX2dldF9zZWN0aW9uX2J5X25hbWUgKGFiZmQsICIuaXBsdCIpOwor ICBpZiAocyAhPSBOVUxMKQorICAgIHJldHVybiBUUlVFOwogCi1hc2VjdGlv biAqCi1fYmZkX2VsZl9tYWtlX2lmdW5jX3JlbG9jX3NlY3Rpb24gKGJmZCAq ICAgICAgICAgYWJmZCwKLQkJCQkgICBhc2VjdGlvbiAqICAgIHNlYywKLQkJ CQkgICBiZmQgKiAgICAgICAgIG93bmVyLAotCQkJCSAgIHVuc2lnbmVkIGlu dCAgYWxpZ24pCi17Ci0gIGFzZWN0aW9uICogcmVsb2Nfc2VjID0gZWxmX3Nl Y3Rpb25fZGF0YSAoc2VjKS0+aW5kaXJlY3RfcmVsb2NzOworICBiZWQgPSBn ZXRfZWxmX2JhY2tlbmRfZGF0YSAoYWJmZCk7CiAKLSAgaWYgKHJlbG9jX3Nl YyA9PSBOVUxMKQotICAgIHsKLSAgICAgIGNvbnN0IGNoYXIgKiBuYW1lID0g Z2V0X2lmdW5jX3JlbG9jX3NlY3Rpb25fbmFtZSAoYWJmZCwgc2VjKTsKKyAg LyogV2UgbmVlZCB0byBjcmVhdGUgLmlwbHQsIC5yZWxbYV0uaXBsdCwgLmln b3QsIC5pZ290LnBsdCwgICovCisgIGZsYWdzID0gYmVkLT5keW5hbWljX3Nl Y19mbGFnczsKIAotICAgICAgaWYgKG5hbWUgPT0gTlVMTCkKLQlyZXR1cm4g TlVMTDsKKyAgcGx0ZmxhZ3MgPSBmbGFnczsKKyAgaWYgKGJlZC0+cGx0X25v dF9sb2FkZWQpCisgICAgLyogV2UgZG8gbm90IGNsZWFyIFNFQ19BTExPQyBo ZXJlIGJlY2F1c2Ugd2Ugc3RpbGwgd2FudCB0aGUgT1MgdG8KKyAgICAgICBh bGxvY2F0ZSBzcGFjZSBmb3IgdGhlIHNlY3Rpb247IGl0J3MganVzdCB0aGF0 IHRoZXJlJ3Mgbm90aGluZworICAgICAgIHRvIHJlYWQgaW4gZnJvbSB0aGUg b2JqZWN0IGZpbGUuICAqLworICAgIHBsdGZsYWdzICY9IH4gKFNFQ19DT0RF IHwgU0VDX0xPQUQgfCBTRUNfSEFTX0NPTlRFTlRTKTsKKyAgZWxzZQorICAg IHBsdGZsYWdzIHw9IFNFQ19BTExPQyB8IFNFQ19DT0RFIHwgU0VDX0xPQUQ7 CisgIGlmIChiZWQtPnBsdF9yZWFkb25seSkKKyAgICBwbHRmbGFncyB8PSBT RUNfUkVBRE9OTFk7CiAKLSAgICAgIHJlbG9jX3NlYyA9IGJmZF9nZXRfc2Vj dGlvbl9ieV9uYW1lIChvd25lciwgbmFtZSk7CisgIHMgPSBiZmRfbWFrZV9z ZWN0aW9uX3dpdGhfZmxhZ3MgKGFiZmQsICIuaXBsdCIsIHBsdGZsYWdzKTsK KyAgaWYgKHMgPT0gTlVMTAorICAgICAgfHwgISBiZmRfc2V0X3NlY3Rpb25f YWxpZ25tZW50IChhYmZkLCBzLCBiZWQtPnBsdF9hbGlnbm1lbnQpKQorICAg IHJldHVybiBGQUxTRTsKIAotICAgICAgaWYgKHJlbG9jX3NlYyA9PSBOVUxM KQotCXsKLQkgIGZsYWd3b3JkIGZsYWdzOworICBzID0gYmZkX21ha2Vfc2Vj dGlvbl93aXRoX2ZsYWdzIChhYmZkLAorCQkJCSAgIChiZWQtPnJlbGFfcGx0 c19hbmRfY29waWVzX3AKKwkJCQkgICAgPyAiLnJlbGEuaXBsdCIgOiAiLnJl bC5pcGx0IiksCisJCQkJICAgZmxhZ3MgfCBTRUNfUkVBRE9OTFkpOworICBp ZiAocyA9PSBOVUxMCisgICAgICB8fCAhIGJmZF9zZXRfc2VjdGlvbl9hbGln bm1lbnQgKGFiZmQsIHMsIGJlZC0+cy0+bG9nX2ZpbGVfYWxpZ24pKQorICAg IHJldHVybiBGQUxTRTsKIAotCSAgZmxhZ3MgPSAoU0VDX0hBU19DT05URU5U UyB8IFNFQ19SRUFET05MWSB8IFNFQ19JTl9NRU1PUlkgfCBTRUNfTElOS0VS X0NSRUFURUQpOwotCSAgaWYgKChzZWMtPmZsYWdzICYgU0VDX0FMTE9DKSAh PSAwKQotCSAgICBmbGFncyB8PSBTRUNfQUxMT0MgfCBTRUNfTE9BRDsKKyAg c3dpdGNoIChiZWQtPnMtPmFyY2hfc2l6ZSkKKyAgICB7CisgICAgY2FzZSAz MjoKKyAgICAgIHB0cmFsaWduID0gMjsKKyAgICAgIGJyZWFrOwogCi0JICBy ZWxvY19zZWMgPSBiZmRfbWFrZV9zZWN0aW9uX3dpdGhfZmxhZ3MgKG93bmVy LCBuYW1lLCBmbGFncyk7Ci0JICAKLQkgIGlmIChyZWxvY19zZWMgIT0gTlVM TAotCSAgICAgICYmICEgYmZkX3NldF9zZWN0aW9uX2FsaWdubWVudCAob3du ZXIsIHJlbG9jX3NlYywgYWxpZ24pKQotCSAgICByZWxvY19zZWMgPSBOVUxM OwotCX0KKyAgICBjYXNlIDY0OgorICAgICAgcHRyYWxpZ24gPSAzOworICAg ICAgYnJlYWs7CiAKLSAgICAgIGVsZl9zZWN0aW9uX2RhdGEgKHNlYyktPmlu ZGlyZWN0X3JlbG9jcyA9IHJlbG9jX3NlYzsKKyAgICBkZWZhdWx0OgorICAg ICAgYmZkX3NldF9lcnJvciAoYmZkX2Vycm9yX2JhZF92YWx1ZSk7CisgICAg ICByZXR1cm4gRkFMU0U7CiAgICAgfQogCi0gIHJldHVybiByZWxvY19zZWM7 Ci19Ci0KLS8qIFJldHVybnMgdHJ1ZSBpZiB0aGUgaGFzaCBlbnRyeSByZWZl cnMgdG8gYSBzeW1ib2wgbWFya2VkIGZvcgotICAgaW5kaXJlY3QgaGFuZGxp bmcgZHVyaW5nIHJlbG9jIHByb2Nlc3NpbmcuICAqLwotCi1iZmRfYm9vbGVh bgotX2JmZF9lbGZfaXNfaWZ1bmNfc3ltYm9sIChiZmQgKmFiZmQsIHN0cnVj dCBlbGZfbGlua19oYXNoX2VudHJ5ICpoKQotewotICBjb25zdCBzdHJ1Y3Qg ZWxmX2JhY2tlbmRfZGF0YSAqIGJlZDsKLQotICBpZiAoYWJmZCA9PSBOVUxM IHx8IGggPT0gTlVMTCkKLSAgICByZXR1cm4gRkFMU0U7CisgIC8qIFdlIGRv bid0IG5lZWQgdGhlIC5pZ290IHNlY3Rpb24gaWYgd2UgaGF2ZSB0aGUgLmln b3QucGx0CisgICAgIHNlY3Rpb24uICAqLwogCi0gIGJlZCA9IGdldF9lbGZf YmFja2VuZF9kYXRhIChhYmZkKTsKKyAgaWYgKGJlZC0+d2FudF9nb3RfcGx0 KQorICAgIHsKKyAgICAgIHMgPSBiZmRfbWFrZV9zZWN0aW9uX3dpdGhfZmxh Z3MgKGFiZmQsICIuaWdvdC5wbHQiLCBmbGFncyk7CisgICAgICBpZiAocyA9 PSBOVUxMCisJICB8fCAhYmZkX3NldF9zZWN0aW9uX2FsaWdubWVudCAoYWJm ZCwgcywgcHRyYWxpZ24pKQorCXJldHVybiBGQUxTRTsKKyAgICB9CisgIGVs c2UKKyAgICB7CisgICAgICBzID0gYmZkX21ha2Vfc2VjdGlvbl93aXRoX2Zs YWdzIChhYmZkLCAiLmlnb3QiLCBmbGFncyk7CisgICAgICBpZiAocyA9PSBO VUxMCisJICB8fCAhYmZkX3NldF9zZWN0aW9uX2FsaWdubWVudCAoYWJmZCwg cywgcHRyYWxpZ24pKQorCXJldHVybiBGQUxTRTsKKyAgICB9CiAKLSAgLyog R05VL0xpbnV4IGlzIHN0aWxsIHVzaW5nIHRoZSBkZWZhdWx0IHZhbHVlIEVM Rk9TQUJJX05PTkUuICAqLwotICByZXR1cm4gKGgtPnR5cGUgPT0gU1RUX0dO VV9JRlVOQwotCSAgJiYgKGJlZC0+ZWxmX29zYWJpID09IEVMRk9TQUJJX0xJ TlVYCi0JICAgICAgfHwgYmVkLT5lbGZfb3NhYmkgPT0gRUxGT1NBQklfTk9O RSkpOworICByZXR1cm4gVFJVRTsKIH0KZGlmZiAteCBSRVZJU0lPTiAteCAu c3ZuIC14IENWUyAtdXByTiAteCBDaGFuZ2VMb2cuaWZ1bmMgLi4vYmludXRp bHMvc3JjL2JmZC9saWJiZmQuaCBiaW51dGlscy9iZmQvbGliYmZkLmgKLS0t IC4uL2JpbnV0aWxzL3NyYy9iZmQvbGliYmZkLmgJMjAwOS0wNS0wNSAxMDo1 NjoyNC4wMDAwMDAwMDAgLTA3MDAKKysrIGJpbnV0aWxzL2JmZC9saWJiZmQu aAkyMDA5LTA1LTI2IDIyOjAxOjM5LjAwMDAwMDAwMCAtMDcwMApAQCAtMTEw NCw2ICsxMTA0LDcgQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGJmZF9y ZWxvY19jb2RlXwogICAiQkZEX1JFTE9DXzM4Nl9UTFNfR09UREVTQyIsCiAg ICJCRkRfUkVMT0NfMzg2X1RMU19ERVNDX0NBTEwiLAogICAiQkZEX1JFTE9D XzM4Nl9UTFNfREVTQyIsCisgICJCRkRfUkVMT0NfMzg2X0lSRUxBVElWRSIs CiAgICJCRkRfUkVMT0NfWDg2XzY0X0dPVDMyIiwKICAgIkJGRF9SRUxPQ19Y ODZfNjRfUExUMzIiLAogICAiQkZEX1JFTE9DX1g4Nl82NF9DT1BZIiwKQEAg LTExMzAsNiArMTEzMSw3IEBAIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBi ZmRfcmVsb2NfY29kZV8KICAgIkJGRF9SRUxPQ19YODZfNjRfR09UUEMzMl9U TFNERVNDIiwKICAgIkJGRF9SRUxPQ19YODZfNjRfVExTREVTQ19DQUxMIiwK ICAgIkJGRF9SRUxPQ19YODZfNjRfVExTREVTQyIsCisgICJCRkRfUkVMT0Nf WDg2XzY0X0lSRUxBVElWRSIsCiAgICJCRkRfUkVMT0NfTlMzMktfSU1NXzgi LAogICAiQkZEX1JFTE9DX05TMzJLX0lNTV8xNiIsCiAgICJCRkRfUkVMT0Nf TlMzMktfSU1NXzMyIiwKZGlmZiAteCBSRVZJU0lPTiAteCAuc3ZuIC14IENW UyAtdXByTiAteCBDaGFuZ2VMb2cuaWZ1bmMgLi4vYmludXRpbHMvc3JjL2Jm ZC9yZWxvYy5jIGJpbnV0aWxzL2JmZC9yZWxvYy5jCi0tLSAuLi9iaW51dGls cy9zcmMvYmZkL3JlbG9jLmMJMjAwOS0wNS0wNSAxMDo1NjoyNC4wMDAwMDAw MDAgLTA3MDAKKysrIGJpbnV0aWxzL2JmZC9yZWxvYy5jCTIwMDktMDUtMjYg MjI6MDE6MzguMDAwMDAwMDAwIC0wNzAwCkBAIC0yNDkyLDYgKzI0OTIsOCBA QCBFTlVNWAogICBCRkRfUkVMT0NfMzg2X1RMU19ERVNDX0NBTEwKIEVOVU1Y CiAgIEJGRF9SRUxPQ18zODZfVExTX0RFU0MKK0VOVU1YCisgIEJGRF9SRUxP Q18zODZfSVJFTEFUSVZFCiBFTlVNRE9DCiAgIGkzODYvZWxmIHJlbG9jYXRp b25zCiAKQEAgLTI1NDcsNiArMjU0OSw4IEBAIEVOVU1YCiAgIEJGRF9SRUxP Q19YODZfNjRfVExTREVTQ19DQUxMCiBFTlVNWAogICBCRkRfUkVMT0NfWDg2 XzY0X1RMU0RFU0MKK0VOVU1YCisgIEJGRF9SRUxPQ19YODZfNjRfSVJFTEFU SVZFCiBFTlVNRE9DCiAgIHg4Ni02NC9lbGYgcmVsb2NhdGlvbnMKIApkaWZm IC14IFJFVklTSU9OIC14IC5zdm4gLXggQ1ZTIC11cHJOIC14IENoYW5nZUxv Zy5pZnVuYyAuLi9iaW51dGlscy9zcmMvaW5jbHVkZS9lbGYvaTM4Ni5oIGJp bnV0aWxzL2luY2x1ZGUvZWxmL2kzODYuaAotLS0gLi4vYmludXRpbHMvc3Jj L2luY2x1ZGUvZWxmL2kzODYuaAkyMDA5LTA1LTA1IDEwOjU2OjE2LjAwMDAw MDAwMCAtMDcwMAorKysgYmludXRpbHMvaW5jbHVkZS9lbGYvaTM4Ni5oCTIw MDktMDUtMjMgMTg6MDY6MDMuMDAwMDAwMDAwIC0wNzAwCkBAIC02Niw2ICs2 Niw3IEBAIFNUQVJUX1JFTE9DX05VTUJFUlMgKGVsZl9pMzg2X3JlbG9jX3R5 cGUKICAgICAgUkVMT0NfTlVNQkVSIChSXzM4Nl9UTFNfR09UREVTQywgIDM5 KQogICAgICBSRUxPQ19OVU1CRVIgKFJfMzg2X1RMU19ERVNDX0NBTEwsNDAp CiAgICAgIFJFTE9DX05VTUJFUiAoUl8zODZfVExTX0RFU0MsICAgICA0MSkK KyAgICAgUkVMT0NfTlVNQkVSIChSXzM4Nl9JUkVMQVRJVkUsICAgIDQyKSAv KiBBZGp1c3QgaW5kaXJlY3RseSBieSBwcm9ncmFtIGJhc2UgKi8KIAogICAg ICAvKiBVc2VkIGJ5IEludGVsLiAgKi8KICAgICAgUkVMT0NfTlVNQkVSIChS XzM4Nl9VU0VEX0JZX0lOVEVMXzIwMCwgMjAwKQpkaWZmIC14IFJFVklTSU9O IC14IC5zdm4gLXggQ1ZTIC11cHJOIC14IENoYW5nZUxvZy5pZnVuYyAuLi9i aW51dGlscy9zcmMvaW5jbHVkZS9lbGYveDg2LTY0LmggYmludXRpbHMvaW5j bHVkZS9lbGYveDg2LTY0LmgKLS0tIC4uL2JpbnV0aWxzL3NyYy9pbmNsdWRl L2VsZi94ODYtNjQuaAkyMDA5LTA1LTA1IDEwOjU2OjE2LjAwMDAwMDAwMCAt MDcwMAorKysgYmludXRpbHMvaW5jbHVkZS9lbGYveDg2LTY0LmgJMjAwOS0w NS0yNiAyMjowMTozOC4wMDAwMDAwMDAgLTA3MDAKQEAgLTcxLDYgKzcxLDcg QEAgU1RBUlRfUkVMT0NfTlVNQkVSUyAoZWxmX3g4Nl82NF9yZWxvY190eQog ICAgICBSRUxPQ19OVU1CRVIgKFJfWDg2XzY0X1RMU0RFU0NfQ0FMTCwgMzUp IC8qIFJlbGF4YWJsZSBjYWxsIHRocm91Z2ggVExTCiAJCQkJCQkgZGVzY3Jp cHRvci4gICovCiAgICAgIFJFTE9DX05VTUJFUiAoUl9YODZfNjRfVExTREVT QywgMzYpICAgICAgLyogMng2NC1iaXQgVExTIGRlc2NyaXB0b3IuICAqLwor ICAgICBSRUxPQ19OVU1CRVIgKFJfWDg2XzY0X0lSRUxBVElWRSwgMzcpICAg IC8qIEFkanVzdCBpbmRpcmVjdGx5IGJ5IHByb2dyYW0gYmFzZSAqLwogICAg ICBSRUxPQ19OVU1CRVIgKFJfWDg2XzY0X0dOVV9WVElOSEVSSVQsIDI1MCkg ICAgICAgLyogR05VIEMrKyBoYWNrICAqLwogICAgICBSRUxPQ19OVU1CRVIg KFJfWDg2XzY0X0dOVV9WVEVOVFJZLCAyNTEpICAgICAgICAgLyogR05VIEMr KyBoYWNrICAqLwogRU5EX1JFTE9DX05VTUJFUlMgKFJfWDg2XzY0X21heCkK ZGlmZiAteCBSRVZJU0lPTiAteCAuc3ZuIC14IENWUyAtdXByTiAteCBDaGFu Z2VMb2cuaWZ1bmMgLi4vYmludXRpbHMvc3JjL2xkL3NjcmlwdHRlbXBsL2Vs Zi5zYyBiaW51dGlscy9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MKLS0tIC4uL2Jp bnV0aWxzL3NyYy9sZC9zY3JpcHR0ZW1wbC9lbGYuc2MJMjAwOS0wNS0wNSAx MDo1NTo1OC4wMDAwMDAwMDAgLTA3MDAKKysrIGJpbnV0aWxzL2xkL3Njcmlw dHRlbXBsL2VsZi5zYwkyMDA5LTA1LTI3IDIyOjQwOjExLjAwMDAwMDAwMCAt MDcwMApAQCAtMTEzLDE1ICsxMTMsMTUgQEAgaWYgdGVzdCAteiAiJHtJTklU SUFMX1JFQURPTkxZX1NFQ1RJT05TfQogICBJTklUSUFMX1JFQURPTkxZX1NF Q1RJT05TPSIuaW50ZXJwICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKigu aW50ZXJwKSB9IgogZmkKIGlmIHRlc3QgLXogIiRQTFQiOyB0aGVuCi0gIFBM VD0iLnBsdCAgICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLnBsdCkg fSIKKyAgUExUPSIucGx0ICAgICAgICAgICR7UkVMT0NBVElORy0wfSA6IHsg KigucGx0KSAqKC5pcGx0KX0iCiBmaQogdGVzdCAtbiAiJHtEQVRBX1BMVC0k e0JTU19QTFQtdGV4dH19IiAmJiBURVhUX1BMVD15ZXMKIGlmIHRlc3QgLXog IiRHT1QiOyB0aGVuCiAgIGlmIHRlc3QgLXogIiRTRVBBUkFURV9HT1RQTFQi OyB0aGVuCi0gICAgR09UPSIuZ290ICAgICAgICAgICR7UkVMT0NBVElORy0w fSA6IHsgKiguZ290LnBsdCkgKiguZ290KSB9IgorICAgIEdPVD0iLmdvdCAg ICAgICAgICAke1JFTE9DQVRJTkctMH0gOiB7ICooLmdvdC5wbHQpICooLmln b3QucGx0KSAqKC5nb3QpICooLmlnb3QpIH0iCiAgIGVsc2UKLSAgICBHT1Q9 Ii5nb3QgICAgICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5nb3QpIH0i Ci0gICAgR09UUExUPSIuZ290LnBsdCAgICAgICR7UkVMT0NBVElORy0wfSA6 IHsgKiguZ290LnBsdCkgfSIKKyAgICBHT1Q9Ii5nb3QgICAgICAgICAgJHtS RUxPQ0FUSU5HLTB9IDogeyAqKC5nb3QpICooLmlnb3QpIH0iCisgICAgR09U UExUPSIuZ290LnBsdCAgICAgICR7UkVMT0NBVElORy0wfSA6IHsgKiguZ290 LnBsdCkgICooLmlnb3QucGx0KSB9IgogICBmaQogZmkKIERZTkFNSUM9Ii5k eW5hbWljICAgICAgJHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5keW5hbWljKSB9 IgpAQCAtMzU0LDggKzM1NCwyMCBAQCBFT0YKIGZpCiAKIGNhdCA+PiBsZHNj cmlwdHMvZHludG1wLiQkIDw8RU9GCi0gIC5yZWwucGx0ICAgICAgJHtSRUxP Q0FUSU5HLTB9IDogeyAqKC5yZWwucGx0KSB9Ci0gIC5yZWxhLnBsdCAgICAg JHtSRUxPQ0FUSU5HLTB9IDogeyAqKC5yZWxhLnBsdCkgfQorICAucmVsLnBs dCAgICAgICR7UkVMT0NBVElORy0wfSA6CisgICAgeworICAgICAgKigucmVs LnBsdCkKKyAgICAgICR7UkVMT0NBVElORyske0NSRUFURV9TSExJQi1QUk9W SURFX0hJRERFTiAoJHtVU0VSX0xBQkVMX1BSRUZJWH1fX3JlbF9pcGx0X3N0 YXJ0ID0gLik7fX0KKyAgICAgICooLnJlbC5pcGx0KQorICAgICAgJHtSRUxP Q0FUSU5HKyR7Q1JFQVRFX1NITElCLVBST1ZJREVfSElEREVOICgke1VTRVJf TEFCRUxfUFJFRklYfV9fcmVsX2lwbHRfZW5kID0gLik7fX0KKyAgICB9Cisg IC5yZWxhLnBsdCAgICAgJHtSRUxPQ0FUSU5HLTB9IDoKKyAgICB7CisgICAg ICAqKC5yZWxhLnBsdCkKKyAgICAgICR7UkVMT0NBVElORyske0NSRUFURV9T SExJQi1QUk9WSURFX0hJRERFTiAoJHtVU0VSX0xBQkVMX1BSRUZJWH1fX3Jl bGFfaXBsdF9zdGFydCA9IC4pO319CisgICAgICAqKC5yZWxhLmlwbHQpCisg ICAgICAke1JFTE9DQVRJTkcrJHtDUkVBVEVfU0hMSUItUFJPVklERV9ISURE RU4gKCR7VVNFUl9MQUJFTF9QUkVGSVh9X19yZWxhX2lwbHRfZW5kID0gLik7 fX0KKyAgICB9CiAgICR7T1RIRVJfUExUX1JFTE9DX1NFQ1RJT05TfQogRU9G CiAKZGlmZiAteCBSRVZJU0lPTiAteCAuc3ZuIC14IENWUyAtdXByTiAteCBD aGFuZ2VMb2cuaWZ1bmMgLi4vYmludXRpbHMvc3JjL2xkL3Rlc3RzdWl0ZS9s ZC1pZnVuYy9pZnVuYy0xLXg4Ni5kIGJpbnV0aWxzL2xkL3Rlc3RzdWl0ZS9s ZC1pZnVuYy9pZnVuYy0xLXg4Ni5kCi0tLSAuLi9iaW51dGlscy9zcmMvbGQv dGVzdHN1aXRlL2xkLWlmdW5jL2lmdW5jLTEteDg2LmQJMTk2OS0xMi0zMSAx NjowMDowMC4wMDAwMDAwMDAgLTA4MDAKKysrIGJpbnV0aWxzL2xkL3Rlc3Rz dWl0ZS9sZC1pZnVuYy9pZnVuYy0xLXg4Ni5kCTIwMDktMDUtMjQgMTk6MTI6 MjguMDAwMDAwMDAwIC0wNzAwCkBAIC0wLDAgKzEsNyBAQAorI2xkOiAtc2hh cmVkCisjb2JqZHVtcDogLWR3CisjdGFyZ2V0OiB4ODZfNjQtKi0qIGk/ODYt Ki0qCisKKyMuLi4KK1sgXHQwLTlhLWZdKzpbIFx0MC05YS1mXStjYWxsWyBc dDAtOWEtZnFdKzxcKkFCU1wqQHBsdD4KKyNwYXNzCmRpZmYgLXggUkVWSVNJ T04gLXggLnN2biAteCBDVlMgLXVwck4gLXggQ2hhbmdlTG9nLmlmdW5jIC4u L2JpbnV0aWxzL3NyYy9sZC90ZXN0c3VpdGUvbGQtaWZ1bmMvaWZ1bmMtMS14 ODYucyBiaW51dGlscy9sZC90ZXN0c3VpdGUvbGQtaWZ1bmMvaWZ1bmMtMS14 ODYucwotLS0gLi4vYmludXRpbHMvc3JjL2xkL3Rlc3RzdWl0ZS9sZC1pZnVu Yy9pZnVuYy0xLXg4Ni5zCTE5NjktMTItMzEgMTY6MDA6MDAuMDAwMDAwMDAw IC0wODAwCisrKyBiaW51dGlscy9sZC90ZXN0c3VpdGUvbGQtaWZ1bmMvaWZ1 bmMtMS14ODYucwkyMDA5LTA1LTI0IDE5OjExOjI5LjAwMDAwMDAwMCAtMDcw MApAQCAtMCwwICsxLDE2IEBACisJLnR5cGUgZm9vLCAlZ251X2luZGlyZWN0 X2Z1bmN0aW9uCisJLmdsb2JhbCBfX0dJX2ZvbworCS5oaWRkZW4gX19HSV9m b28KKwkuc2V0IF9fR0lfZm9vLCBmb28KKwkudGV4dAorLmdsb2JsIGZvbwor CS50eXBlCWZvbywgQGZ1bmN0aW9uCitmb286CisJcmV0CisJLnNpemUJZm9v LCAuLWZvbworLmdsb2JsIGJhcgorCS50eXBlCWJhciwgQGZ1bmN0aW9uCiti YXI6CisJY2FsbAlfX0dJX2Zvb0BQTFQKKwlyZXQKKwkuc2l6ZQliYXIsIC4t YmFyCmRpZmYgLXggUkVWSVNJT04gLXggLnN2biAteCBDVlMgLXVwck4gLXgg Q2hhbmdlTG9nLmlmdW5jIC4uL2JpbnV0aWxzL3NyYy9sZC90ZXN0c3VpdGUv bGQtaWZ1bmMvaWZ1bmMuZXhwIGJpbnV0aWxzL2xkL3Rlc3RzdWl0ZS9sZC1p ZnVuYy9pZnVuYy5leHAKLS0tIC4uL2JpbnV0aWxzL3NyYy9sZC90ZXN0c3Vp dGUvbGQtaWZ1bmMvaWZ1bmMuZXhwCTIwMDktMDUtMjMgMTQ6Mzk6MjkuMDAw MDAwMDAwIC0wNzAwCisrKyBiaW51dGlscy9sZC90ZXN0c3VpdGUvbGQtaWZ1 bmMvaWZ1bmMuZXhwCTIwMDktMDUtMjcgMTU6MjU6NDUuMDAwMDAwMDAwIC0w NzAwCkBAIC05OCw2ICs5OCwzMyBAQCBwcm9jIGNvbnRhaW5zX2lmdW5jX3N5 bWJvbCB7IGJpbmFyeV9maWxlCiAgICAgcmV0dXJuIDEKIH0KIAorIyBBIHBy b2NlZHVyZSB0byBjb25maXJtIHRoYXQgYSBmaWxlIGNvbnRhaW5zIHRoZSBS XypfSVJFTEFUSVZFCisjIHJlbG9jYXRpb24uCisjIFJldHVybnMgLTEgdXBv biBlcnJvciwgMCBpZiB0aGUgcmVsb2NhdGlvbiB3YXMgbm90IGZvdW5kIGFu ZCAxIGlmCisjIGl0IHdhcyBmb3VuZC4KK3Byb2MgY29udGFpbnNfaXJlbGF0 aXZlX3JlbG9jIHsgYmluYXJ5X2ZpbGUgfSB7CisgICAgZ2xvYmFsIFJFQURF TEYKKyAgICBnbG9iYWwgUkVBREVMRkZMQUdTCisKKyAgICBjYXRjaCAiZXhl YyAkUkVBREVMRiAkUkVBREVMRkZMQUdTIC0tcmVsb2NzIC0td2lkZSAkYmlu YXJ5X2ZpbGUgPiByZWFkZWxmLm91dCIgZ290CisKKyAgICBpZiAhW3N0cmlu ZyBtYXRjaCAiIiAkZ290XSB0aGVuIHsKKwl2ZXJib3NlICJwcm9jIGNvbnRh aW5zX2lyZWxhdGl2ZV9yZWxvYzogUmVhZGVsZiBwcm9kdWNlZCB1bmV4cGVj dGVkIG91dCBwcm9jZXNzaW5nICRiaW5hcnlfZmlsZTogJGdvdCIKKwlyZXR1 cm4gLTEKKyAgICB9CisKKyAgICAjIExvb2sgZm9yIGEgbGluZSBsaWtlIHRo aXM6CisgICAgIyAgICAwMDAwMDAwMDAwNjAwYWIwICAwMDAwMDAwMDAwMDAw MDI1IFJfWDg2XzY0X0lSRUxBVElWRSAgICAgIDAwMDAwMDAwMDA0MDA2MWMK KyAgICAjICAgIDA4MDQ5NmY0ICAwMDAwMDAyYSBSXzM4Nl9JUkVMQVRJVkUK KworCisgICAgaWYgeyAhW3JlZ2V4cCAiXFswLTlhLWZcXStcWyBcXStcWzAt OWEtZlxdK1xbIFxdK1JfXFtfMC05QS1aXF0rX0lSRUxBVElWRVxbIFxdKlxb MC05YS1mXF0qXG4iIFtmaWxlX2NvbnRlbnRzIHJlYWRlbGYub3V0XV0gfSB7 CisJcmV0dXJuIDAKKyAgICB9CisKKyAgICByZXR1cm4gMQorfQorCiAjIEEg cHJvY2VkdXJlIHRvIGNvbmZpcm0gdGhhdCBhIGZpbGUgY29udGFpbnMgYSBy ZWxvY2F0aW9uIHRoYXQgcmVmZXJlbmNlcyBhbiBJRlVOQyBzeW1ib2wuCiAj IFJldHVybnMgLTEgdXBvbiBlcnJvciwgMCBpZiB0aGUgcmVsb2Mgd2FzIG5v dCBmb3VuZCBhbmQgMSBpZiBpdCB3YXMgZm91bmQuCiBwcm9jIGNvbnRhaW5z X2lmdW5jX3JlbG9jIHsgYmluYXJ5X2ZpbGUgfSB7CkBAIC0xODQsMTEgKzIx MSwxNiBAQCBpZiB7ICRmYWlscyA9PSAwIH0gewogICAgIHJldHVybgogfQog Ci0jIENoZWNrIHRoZSBleGVjdXRhYmxlcy4KKyMgQ2hlY2sgdGhlIGV4ZWN1 dGFibGVzIGFuZCBzaGFyZWQgbGlicmFyaWVzCiAjCi0jIFRoZSBsaW5rZWQg aWZ1bmMgdXNpbmcgZXhlY3V0YWJsZXMgc2hvdWxkIGhhdmUgYW4gT1NBQkkg ZmllbGQgb2YgTElOVVgKLSMgVGhlIGxpbmtlZCBub24taWZ1bmMgdXNpbmcg ZXhlY3V0YWJsZSBzaG91bGQgaGF2ZSBhbiBPU0FCSSBmaWVsZCBvZiBOT05F IChha2EgU3lzdGVtIFYpLgorIyBUaGUgbGlua2VkIGlmdW5jIHVzaW5nIGV4 ZWN1dGFibGVzIGFuZCB0aGUgc2hhcmVkIGxpYnJhcnkgY29udGFpbmluZwor IyBpZnVuYyBzaG91bGQgaGF2ZSBhbiBPU0FCSSBmaWVsZCBvZiBMSU5VWC4g IFRoZSBsaW5rZWQgbm9uLWlmdW5jIHVzaW5nCisjIGV4ZWN1dGFibGUgc2hv dWxkIGhhdmUgYW4gT1NBQkkgZmllbGQgb2YgTk9ORSAoYWthIFN5c3RlbSBW KS4KIAoraWYgeyEgW2NoZWNrX29zYWJpIHRtcGRpci9saWJzaGFyZWRfaWZ1 bmMuc28ge1VOSVggLSBMaW51eH1dfSB7CisgICAgZmFpbCAiU2hhcmVkIGxp YnJhcmllcyBjb250YWluaW5nIGlmdW5jIGRvZXMgbm90IGhhdmUgYW4gT1Mv QUJJIGZpZWxkIG9mIExJTlVYIgorICAgIHNldCBmYWlscyBbZXhwciAkZmFp bHMgKyAxXQorfQogaWYgeyEgW2NoZWNrX29zYWJpIHRtcGRpci9zdGF0aWNf cHJvZyB7VU5JWCAtIExpbnV4fV19IHsKICAgICBmYWlsICJTdGF0aWMgaWZ1 bmMtdXNpbmcgZXhlY3V0YWJsZSBkb2VzIG5vdCBoYXZlIGFuIE9TL0FCSSBm aWVsZCBvZiBMSU5VWCIKICAgICBzZXQgZmFpbHMgW2V4cHIgJGZhaWxzICsg MV0KQEAgLTIwMiw5ICsyMzQsMTQgQEAgaWYgeyEgW2NoZWNrX29zYWJpIHRt cGRpci9zdGF0aWNfbm9uaWZ1bgogICAgIHNldCBmYWlscyBbZXhwciAkZmFp bHMgKyAxXQogfQogCi0jIFRoZSBsaW5rZWQgaWZ1bmMgdXNpbmcgZXhlY3V0 YWJsZXMgc2hvdWxkIGNvbnRhaW4gYW4gSUZVTkMgc3ltYm9sLAotIyBUaGUg bm9uLWlmdW5jIHVzaW5nIGV4ZWN1dGFibGUgc2hvdWxkIG5vdC4KKyMgVGhl IGxpbmtlZCBpZnVuYyB1c2luZyBleGVjdXRhYmxlcyBhbmQgdGhlIHNoYXJl ZCBsaWJyYXJ5IGNvbnRhaW5pbmcKKyMgaWZ1bmMgc2hvdWxkIGNvbnRhaW4g YW4gSUZVTkMgc3ltYm9sLiAgVGhlIG5vbi1pZnVuYyB1c2luZyBleGVjdXRh YmxlCisjIHNob3VsZCBub3QuCiAKK2lmIHtbY29udGFpbnNfaWZ1bmNfc3lt Ym9sIHRtcGRpci9saWJzaGFyZWRfaWZ1bmMuc29dICE9IDF9IHsKKyAgICBm YWlsICJTaGFyZWQgbGlicmFyaWVzIGNvbnRhaW5pbmcgaWZ1bmMgZG9lcyBu b3QgY29udGFpbiBhbiBJRlVOQyBzeW1ib2wiCisgICAgc2V0IGZhaWxzIFtl eHByICRmYWlscyArIDFdCit9CiBpZiB7W2NvbnRhaW5zX2lmdW5jX3N5bWJv bCB0bXBkaXIvc3RhdGljX3Byb2ddICE9IDF9IHsKICAgICBmYWlsICJTdGF0 aWMgaWZ1bmMtdXNpbmcgZXhlY3V0YWJsZSBkb2VzIG5vdCBjb250YWluIGFu IElGVU5DIHN5bWJvbCIKICAgICBzZXQgZmFpbHMgW2V4cHIgJGZhaWxzICsg MV0KQEAgLTIxOCwxMiArMjU1LDE3IEBAIGlmIHtbY29udGFpbnNfaWZ1bmNf c3ltYm9sIHRtcGRpci9zdGF0aWMKICAgICBzZXQgZmFpbHMgW2V4cHIgJGZh aWxzICsgMV0KIH0KIAotIyBUaGUgbGlua2VkIGlmdW5jIHVzaW5nIGV4ZWN1 dGFibGVhIHNob3VsZCBjb250YWluIGEgZHluYW1pYyByZWxvYyByZWZlcmVu Y2luZyB0aGUgSUZVTkMgc3ltYm9sLgotIyAoRXZlbiB0aGUgc3RhdGljIGV4 ZWN1dGFibGUgd2hpY2ggc2hvdWxkIGhhdmUgYSBkeW5hbWljIHNlY3Rpb24g Y3JlYXRlZCBmb3IgaXQpLgotIyBUaGUgbm9uLWlmdW5jIHVzaW5nIGV4ZWN1 dGFibGUgc2hvdWxkIG5vdC4KKyMgVGhlIGxpbmtlZCBpZnVuYyB1c2luZyBl eGVjdXRhYmxlcyBhbmQgc2hhcmVkIGxpYnJhcmllcyBzaG91bGQgY29udGFp bgorIyBhIGR5bmFtaWMgcmVsb2MgcmVmZXJlbmNpbmcgdGhlIElGVU5DIHN5 bWJvbC4gIChFdmVuIHRoZSBzdGF0aWMKKyMgZXhlY3V0YWJsZSB3aGljaCBz aG91bGQgaGF2ZSBhIGR5bmFtaWMgc2VjdGlvbiBjcmVhdGVkIGZvciBpdCku ICBUaGUKKyMgbm9uLWlmdW5jIHVzaW5nIGV4ZWN1dGFibGUgc2hvdWxkIG5v dC4KIAotaWYge1tjb250YWluc19pZnVuY19yZWxvYyB0bXBkaXIvc3RhdGlj X3Byb2ddICE9IDF9IHsKLSAgICBmYWlsICJTdGF0aWMgaWZ1bmMtdXNpbmcg ZXhlY3V0YWJsZSBkb2VzIG5vdCBjb250YWluIGEgcmVsb2MgYWdhaW5zdCBh biBJRlVOQyBzeW1ib2wiCitpZiB7W2NvbnRhaW5zX2lyZWxhdGl2ZV9yZWxv YyB0bXBkaXIvbGlic2hhcmVkX2lmdW5jLnNvXSAhPSAxfSB7CisgICAgZmFp bCAiaWZ1bmMtdXNpbmcgc2hhcmVkIGxpYnJhcnkgZG9lcyBub3QgY29udGFp biBSXypfSVJFTEFUSVZFIHJlbG9jYXRpb24iCisgICAgc2V0IGZhaWxzIFtl eHByICRmYWlscyArIDFdCit9CitpZiB7W2NvbnRhaW5zX2lyZWxhdGl2ZV9y ZWxvYyB0bXBkaXIvc3RhdGljX3Byb2ddICE9IDF9IHsKKyAgICBmYWlsICJT dGF0aWMgaWZ1bmMtdXNpbmcgZXhlY3V0YWJsZSBkb2VzIG5vdCBjb250YWlu IFJfKl9JUkVMQVRJVkUgcmVsb2NhdGlvbiIKICAgICBzZXQgZmFpbHMgW2V4 cHIgJGZhaWxzICsgMV0KIH0KIGlmIHtbY29udGFpbnNfaWZ1bmNfcmVsb2Mg dG1wZGlyL2R5bmFtaWNfcHJvZ10gIT0gMX0gewpAQCAtMjUyLDMgKzI5NCwx MCBAQCBpZiB7ICR2ZXJib3NlIDwgMSB9IHsKICAgICByZW1vdGVfZmlsZSBo b3N0IGRlbGV0ZSAidG1wZGlyL3N0YXRpY19wcm9nIgogICAgIHJlbW90ZV9m aWxlIGhvc3QgZGVsZXRlICJ0bXBkaXIvc3RhdGljX25vbmlmdW5jX3Byb2ci CiB9CisKK3NldCB0ZXN0X2xpc3QgW2xzb3J0IFtnbG9iIC1ub2NvbXBsYWlu ICRzcmNkaXIvJHN1YmRpci8qLmRdXQorZm9yZWFjaCB0ICR0ZXN0X2xpc3Qg eworICAgICMgV2UgbmVlZCB0byBzdHJpcCB0aGUgIi5kIiwgYnV0IGNhbiBs ZWF2ZSB0aGUgZGlybmFtZS4KKyAgICB2ZXJib3NlIFtmaWxlIHJvb3RuYW1l ICR0XQorICAgIHJ1bl9kdW1wX3Rlc3QgW2ZpbGUgcm9vdG5hbWUgJHRdCit9 CmRpZmYgLXggUkVWSVNJT04gLXggLnN2biAteCBDVlMgLXVwck4gLXggQ2hh bmdlTG9nLmlmdW5jIC4uL2JpbnV0aWxzL3NyYy9sZC90ZXN0c3VpdGUvbGQt aWZ1bmMvbGliLmMgYmludXRpbHMvbGQvdGVzdHN1aXRlL2xkLWlmdW5jL2xp Yi5jCi0tLSAuLi9iaW51dGlscy9zcmMvbGQvdGVzdHN1aXRlL2xkLWlmdW5j L2xpYi5jCTIwMDktMDQtMzAgMDg6NDc6MTIuMDAwMDAwMDAwIC0wNzAwCisr KyBiaW51dGlscy9sZC90ZXN0c3VpdGUvbGQtaWZ1bmMvbGliLmMJMjAwOS0w NS0yNyAxNTowNjo1Ny4wMDAwMDAwMDAgLTA3MDAKQEAgLTE1LDYgKzE1LDE5 IEBAIHZvaWQgKiBsaWJyYXJ5X2Z1bmMyX2lmdW5jICh2b2lkKSBfX2FzbV8K IHZvaWQgKiBsaWJyYXJ5X2Z1bmMyX2lmdW5jICh2b2lkKSB7IHJldHVybiBn bG9iYWwgPyBtaW51c19vbmUgOiB6ZXJvIDsgfQogX19hc21fXygiLnR5cGUg bGlicmFyeV9mdW5jMiwgJWdudV9pbmRpcmVjdF9mdW5jdGlvbiIpOwogCitl eHRlcm4gaW50IGxpYnJhcnlfZnVuYzIgKGludCk7CitleHRlcm4gX190eXBl b2YgKGxpYnJhcnlfZnVuYzIpIGxpYnJhcnlfZnVuYzIgX19hc21fXyAoIl9f R0lfbGlicmFyeV9mdW5jMiIpOworCitfX2FzbV9fKCIuZ2xvYmFsIF9fR0lf bGlicmFyeV9mdW5jMiIpOworX19hc21fXygiLmhpZGRlbiBfX0dJX2xpYnJh cnlfZnVuYzIiKTsKK19fYXNtX18oIi5zZXQgX19HSV9saWJyYXJ5X2Z1bmMy LCBsaWJyYXJ5X2Z1bmMyIik7CisKK2ludAorbGlicmFyeV9mdW5jIChpbnQg eCkKK3sKKyAgcmV0dXJuIGxpYnJhcnlfZnVuYzIgKHgpOworfQorCiAjZWxz ZSAvKiBXSVRIT1VUX0lGVU5DICovCiAKIGludAo= --0016364d1dc5a79494046afe8a77--