From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 11181 invoked by alias); 29 Aug 2009 00:55:53 -0000 Received: (qmail 11159 invoked by uid 22791); 29 Aug 2009 00:55:48 -0000 X-SWARE-Spam-Status: No, hits=-0.8 required=5.0 tests=AWL,BAYES_00,J_CHICKENPOX_37,KAM_STOCKGEN,SARE_MSGID_LONG40,SPF_PASS X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.33.17) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Sat, 29 Aug 2009 00:55:38 +0000 Received: from zps36.corp.google.com (zps36.corp.google.com [172.25.146.36]) by smtp-out.google.com with ESMTP id n7T0tXoM003980 for ; Sat, 29 Aug 2009 01:55:34 +0100 Received: from gxk3 (gxk3.prod.google.com [10.202.11.3]) by zps36.corp.google.com with ESMTP id n7T0tPQb022978 for ; Fri, 28 Aug 2009 17:55:31 -0700 Received: by gxk3 with SMTP id 3so3168594gxk.14 for ; Fri, 28 Aug 2009 17:55:30 -0700 (PDT) MIME-Version: 1.0 Received: by 10.150.100.4 with SMTP id x4mr3134551ybb.120.1251507330758; Fri, 28 Aug 2009 17:55:30 -0700 (PDT) In-Reply-To: <200908262108.49085.pedro@codesourcery.com> References: <7e6c8d660907081308r13bff580rdcf4822c77df8403@mail.gmail.com> <200908251944.45977.pedro@codesourcery.com> <200908262108.49085.pedro@codesourcery.com> Date: Sat, 29 Aug 2009 05:16:00 -0000 Message-ID: Subject: Re: [RFA] Use data cache for stack accesses From: Doug Evans To: Pedro Alves Cc: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd24e40e23a8504723d41df X-System-Of-Record: true X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-08/txt/msg00529.txt.bz2 --000e0cd24e40e23a8504723d41df Content-Type: text/plain; charset=ISO-8859-1 Content-length: 4007 Here's is a revised version of the patch. Thanks for the review. Responses to comments: > Flush cache between turning stack-cache on/off. Done. > If write_memory|stack tries to write to [foo,bar), and that > operation fails for some reason somewhere between foo and bar, I > think that the cache between somewhere and bar shouldn't be > updated with the new values. Is it? The write is done first so that if it fails the cache isn't updated at all. It's problem was that if it partially succeeded, the part that succeeded didn't get updated. > dcache writes back lines in chunks. Actually, the dcache only writes to the target exactly what target_xfer_partial would do. Data point: For writes, if the line isn't already in cache, it is not brought in. > Do we still have rare border cases > where the cache line can cover more than stack memory, hence > still leading to incorrect results? Yeah, if, for example, .data abuts the stack in just the right way, it'll get cached when "set stack-cache on". Pretty rare that it would be a problem. > Cache becoming stale in non-stop mode. The cache is now flushed between commands in non-stop mode. --- 2009-08-28 Jacob Potter Doug Evans Implement TARGET_OBJECT_STACK_MEMORY. * NEWS: Add note on new "set stack-cache" option. * corefile.c (read_stack): New function. * dcache.c (dcache_struct): New member ptid. (dcache_enable_p): Mark as obsolete. (show_dcache_enabled_p): Flag option as deprecated. (dcache_invalidate): Update ptid. (dcache_invalidate_line): New function. (dcache_read_line): No longer check cacheable attribute, stack accesses get cached despite attribute. (dcache_init): Set ptid. (dcache_xfer_memory): Flush cache if from different ptid than before. Update cache after write. (dcache_update): New function. (dcache_info): Report ptid. (_initialize_dcache): Update text for `remotecache' to indicate it is obsolete. * dcache.h (dcache_update): Declare. * dwarf2loc.c (dwarf2_evaluate_loc_desc): Mark values on stack with set_value_stack. * frame-unwind.c (frame_unwind_got_memory): Ditto. * gdbcore.h (read_stack): Declare. * memattr.c (mem_enable_command): Call target_dcache_invalidate instead of dcache_invalidate. (mem_disable_command, mem_delete_command): Ditto. * target.c (stack_cache_enabled_p_1): New static global. (stack_cache_enabled_p): New static global. (set_stack_cache_enabled_p): New function. (show_stack_cache_enabled_p): New function. (target_dcache): Make static. (target_dcache_invalidate): New function. (target_load, target_resume): Call target_dcache_invalidate instead of dcache_invalidate. (memory_xfer_partial): New arg object, all callers updated. Check for existing inferior before calling dcache routines. When writing non-TARGET_OBJECT_STACK_MEMORY, notify dcache. (target_xfer_partial): Call memory_xfer_partial for TARGET_OBJECT_STACK_MEMORY. (target_read_stack): New function. (initialize_targets): Install new option `stack-cache'. * target.h: Remove #include of dcache.h. (enum target_object): New value TARGET_OBJECT_STACK_MEMORY. (target_dcache): Delete. (target_dcache_invalidate): Declare. (target_read_stack): Declare. * top.c (prepare_execute_command): New function. (execute_command): Call prepare_execute_command instead of free_all_values. * top.h (prepare_execute_command): Declare. * valops.c (get_value_at): New function. (value_at): Guts moved to get_value_at. (value_at_lazy): Similarly. (value_fetch_lazy): Call read_stack for stack values. * value.c (struct value): New member `stack'. (value_stack, set_value_stack): New functions. * value.h (value_stack, set_value_stack): Declare. * mi/mi-main.c (mi_cmd_execute): Call prepare_execute_command instead of free_all_values. * doc/gdb.texinfo (Caching Data of Remote Targets): Update text. Mark `set/show remotecache' options as obsolete. Document new `set/show stack-cache' option. Update text for `info dcache'. --000e0cd24e40e23a8504723d41df Content-Type: text/plain; charset=US-ASCII; name="gdb-090828-jdpotter-stack-cache-4.patch.txt" Content-Disposition: attachment; filename="gdb-090828-jdpotter-stack-cache-4.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fyxn2cdz0 Content-length: 41867 MjAwOS0wOC0yOCAgSmFjb2IgUG90dGVyICA8amRwb3R0ZXJAZ29vZ2xlLmNv bT4KCSAgICBEb3VnIEV2YW5zICA8ZGplQGdvb2dsZS5jb20+CgoJSW1wbGVt ZW50IFRBUkdFVF9PQkpFQ1RfU1RBQ0tfTUVNT1JZLgoJKiBORVdTOiBBZGQg bm90ZSBvbiBuZXcgInNldCBzdGFjay1jYWNoZSIgb3B0aW9uLgoJKiBjb3Jl ZmlsZS5jIChyZWFkX3N0YWNrKTogTmV3IGZ1bmN0aW9uLgoJKiBkY2FjaGUu YyAoZGNhY2hlX3N0cnVjdCk6IE5ldyBtZW1iZXIgcHRpZC4KCShkY2FjaGVf ZW5hYmxlX3ApOiBNYXJrIGFzIG9ic29sZXRlLgoJKHNob3dfZGNhY2hlX2Vu YWJsZWRfcCk6IEZsYWcgb3B0aW9uIGFzIGRlcHJlY2F0ZWQuCgkoZGNhY2hl X2ludmFsaWRhdGUpOiBVcGRhdGUgcHRpZC4KCShkY2FjaGVfaW52YWxpZGF0 ZV9saW5lKTogTmV3IGZ1bmN0aW9uLgoJKGRjYWNoZV9yZWFkX2xpbmUpOiBO byBsb25nZXIgY2hlY2sgY2FjaGVhYmxlIGF0dHJpYnV0ZSwgc3RhY2sKCWFj Y2Vzc2VzIGdldCBjYWNoZWQgZGVzcGl0ZSBhdHRyaWJ1dGUuCgkoZGNhY2hl X2luaXQpOiBTZXQgcHRpZC4KCShkY2FjaGVfeGZlcl9tZW1vcnkpOiBGbHVz aCBjYWNoZSBpZiBmcm9tIGRpZmZlcmVudCBwdGlkIHRoYW4gYmVmb3JlLgoJ VXBkYXRlIGNhY2hlIGFmdGVyIHdyaXRlLgoJKGRjYWNoZV91cGRhdGUpOiBO ZXcgZnVuY3Rpb24uCgkoZGNhY2hlX2luZm8pOiBSZXBvcnQgcHRpZC4KCShf aW5pdGlhbGl6ZV9kY2FjaGUpOiBVcGRhdGUgdGV4dCBmb3IgYHJlbW90ZWNh Y2hlJyB0byBpbmRpY2F0ZSBpdAoJaXMgb2Jzb2xldGUuCgkqIGRjYWNoZS5o IChkY2FjaGVfdXBkYXRlKTogRGVjbGFyZS4KCSogZHdhcmYybG9jLmMgKGR3 YXJmMl9ldmFsdWF0ZV9sb2NfZGVzYyk6IE1hcmsgdmFsdWVzIG9uIHN0YWNr IHdpdGgKCXNldF92YWx1ZV9zdGFjay4KCSogZnJhbWUtdW53aW5kLmMgKGZy YW1lX3Vud2luZF9nb3RfbWVtb3J5KTogRGl0dG8uCgkqIGdkYmNvcmUuaCAo cmVhZF9zdGFjayk6IERlY2xhcmUuCgkqIG1lbWF0dHIuYyAobWVtX2VuYWJs ZV9jb21tYW5kKTogQ2FsbCB0YXJnZXRfZGNhY2hlX2ludmFsaWRhdGUKCWlu c3RlYWQgb2YgZGNhY2hlX2ludmFsaWRhdGUuCgkobWVtX2Rpc2FibGVfY29t bWFuZCwgbWVtX2RlbGV0ZV9jb21tYW5kKTogRGl0dG8uCgkqIHRhcmdldC5j IChzdGFja19jYWNoZV9lbmFibGVkX3BfMSk6IE5ldyBzdGF0aWMgZ2xvYmFs LgoJKHN0YWNrX2NhY2hlX2VuYWJsZWRfcCk6IE5ldyBzdGF0aWMgZ2xvYmFs LgoJKHNldF9zdGFja19jYWNoZV9lbmFibGVkX3ApOiBOZXcgZnVuY3Rpb24u Cgkoc2hvd19zdGFja19jYWNoZV9lbmFibGVkX3ApOiBOZXcgZnVuY3Rpb24u CgkodGFyZ2V0X2RjYWNoZSk6IE1ha2Ugc3RhdGljLgoJKHRhcmdldF9kY2Fj aGVfaW52YWxpZGF0ZSk6IE5ldyBmdW5jdGlvbi4KCSh0YXJnZXRfbG9hZCwg dGFyZ2V0X3Jlc3VtZSk6IENhbGwgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRl CglpbnN0ZWFkIG9mIGRjYWNoZV9pbnZhbGlkYXRlLgoJKG1lbW9yeV94ZmVy X3BhcnRpYWwpOiBOZXcgYXJnIG9iamVjdCwgYWxsIGNhbGxlcnMgdXBkYXRl ZC4KCUNoZWNrIGZvciBleGlzdGluZyBpbmZlcmlvciBiZWZvcmUgY2FsbGlu ZyBkY2FjaGUgcm91dGluZXMuCglXaGVuIHdyaXRpbmcgbm9uLVRBUkdFVF9P QkpFQ1RfU1RBQ0tfTUVNT1JZLCBub3RpZnkgZGNhY2hlLgoJKHRhcmdldF94 ZmVyX3BhcnRpYWwpOiBDYWxsIG1lbW9yeV94ZmVyX3BhcnRpYWwgZm9yCglU QVJHRVRfT0JKRUNUX1NUQUNLX01FTU9SWS4KCSh0YXJnZXRfcmVhZF9zdGFj ayk6IE5ldyBmdW5jdGlvbi4KCShpbml0aWFsaXplX3RhcmdldHMpOiBJbnN0 YWxsIG5ldyBvcHRpb24gYHN0YWNrLWNhY2hlJy4KCSogdGFyZ2V0Lmg6IFJl bW92ZSAjaW5jbHVkZSBvZiBkY2FjaGUuaC4KCShlbnVtIHRhcmdldF9vYmpl Y3QpOiBOZXcgdmFsdWUgVEFSR0VUX09CSkVDVF9TVEFDS19NRU1PUlkuCgko dGFyZ2V0X2RjYWNoZSk6IERlbGV0ZS4KCSh0YXJnZXRfZGNhY2hlX2ludmFs aWRhdGUpOiBEZWNsYXJlLgoJKHRhcmdldF9yZWFkX3N0YWNrKTogRGVjbGFy ZS4KCSogdG9wLmMgKHByZXBhcmVfZXhlY3V0ZV9jb21tYW5kKTogTmV3IGZ1 bmN0aW9uLgoJKGV4ZWN1dGVfY29tbWFuZCk6IENhbGwgcHJlcGFyZV9leGVj dXRlX2NvbW1hbmQKCWluc3RlYWQgb2YgZnJlZV9hbGxfdmFsdWVzLgoJKiB0 b3AuaCAocHJlcGFyZV9leGVjdXRlX2NvbW1hbmQpOiBEZWNsYXJlLgoJKiB2 YWxvcHMuYyAoZ2V0X3ZhbHVlX2F0KTogTmV3IGZ1bmN0aW9uLgoJKHZhbHVl X2F0KTogR3V0cyBtb3ZlZCB0byBnZXRfdmFsdWVfYXQuCgkodmFsdWVfYXRf bGF6eSk6IFNpbWlsYXJseS4KCSh2YWx1ZV9mZXRjaF9sYXp5KTogQ2FsbCBy ZWFkX3N0YWNrIGZvciBzdGFjayB2YWx1ZXMuCgkqIHZhbHVlLmMgKHN0cnVj dCB2YWx1ZSk6IE5ldyBtZW1iZXIgYHN0YWNrJy4KCSh2YWx1ZV9zdGFjaywg c2V0X3ZhbHVlX3N0YWNrKTogTmV3IGZ1bmN0aW9ucy4KCSogdmFsdWUuaCAo dmFsdWVfc3RhY2ssIHNldF92YWx1ZV9zdGFjayk6IERlY2xhcmUuCgkqIG1p L21pLW1haW4uYyAobWlfY21kX2V4ZWN1dGUpOiBDYWxsIHByZXBhcmVfZXhl Y3V0ZV9jb21tYW5kCglpbnN0ZWFkIG9mIGZyZWVfYWxsX3ZhbHVlcy4KCgkq IGRvYy9nZGIudGV4aW5mbyAoQ2FjaGluZyBEYXRhIG9mIFJlbW90ZSBUYXJn ZXRzKTogVXBkYXRlIHRleHQuCglNYXJrIGBzZXQvc2hvdyByZW1vdGVjYWNo ZScgb3B0aW9ucyBhcyBvYnNvbGV0ZS4KCURvY3VtZW50IG5ldyBgc2V0L3No b3cgc3RhY2stY2FjaGUnIG9wdGlvbi4KCVVwZGF0ZSB0ZXh0IGZvciBgaW5m byBkY2FjaGUnLgoKSW5kZXg6IE5FV1MKPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9ORVdTLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjMyNwpkaWZmIC11IC1wIC1yMS4zMjcgTkVXUwotLS0g TkVXUwkyNyBBdWcgMjAwOSAyMTo1NjozOCAtMDAwMAkxLjMyNworKysgTkVX UwkyOSBBdWcgMjAwOSAwMDozNjoxMiAtMDAwMApAQCAtMzk0LDYgKzM5NCwx MiBAQCBzaG93IHNjaGVkdWxlLW11bHRpcGxlCiAgIEFsbG93IEdEQiB0byBy ZXN1bWUgYWxsIHRocmVhZHMgb2YgYWxsIHByb2Nlc3NlcyBvciBvbmx5IHRo cmVhZHMgb2YKICAgdGhlIGN1cnJlbnQgcHJvY2Vzcy4KIAorc2V0IHN0YWNr LWNhY2hlCitzaG93IHN0YWNrLWNhY2hlCisgIFVzZSBtb3JlIGFnZ3Jlc3Np dmUgY2FjaGluZyBmb3IgYWNjZXNzZXMgdG8gdGhlIHN0YWNrLiAgVGhpcyBp bXByb3ZlcworICBwZXJmb3JtYW5jZSBvZiByZW1vdGUgZGVidWdnaW5nIChw YXJ0aWN1bGFybHkgYmFja3RyYWNlcykgd2l0aG91dAorICBhZmZlY3Rpbmcg Y29ycmVjdG5lc3MuCisKICogUmVtb3ZlZCBjb21tYW5kcwogCiBpbmZvIGZv cmtzCkluZGV4OiBjb3JlZmlsZS5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvY29yZWZpbGUuYyx2CnJldHJp ZXZpbmcgcmV2aXNpb24gMS41NApkaWZmIC11IC1wIC1yMS41NCBjb3JlZmls ZS5jCi0tLSBjb3JlZmlsZS5jCTIgSnVsIDIwMDkgMTc6MjU6NTMgLTAwMDAJ MS41NAorKysgY29yZWZpbGUuYwkyOSBBdWcgMjAwOSAwMDozNjoxMiAtMDAw MApAQCAtMjI4LDYgKzIyOCw3IEBAIG1lbW9yeV9lcnJvciAoaW50IHN0YXR1 cywgQ09SRV9BRERSIG1lbWEKIH0KIAogLyogU2FtZSBhcyB0YXJnZXRfcmVh ZF9tZW1vcnksIGJ1dCByZXBvcnQgYW4gZXJyb3IgaWYgY2FuJ3QgcmVhZC4g ICovCisKIHZvaWQKIHJlYWRfbWVtb3J5IChDT1JFX0FERFIgbWVtYWRkciwg Z2RiX2J5dGUgKm15YWRkciwgaW50IGxlbikKIHsKQEAgLTIzNyw2ICsyMzgs MTcgQEAgcmVhZF9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0 ZQogICAgIG1lbW9yeV9lcnJvciAoc3RhdHVzLCBtZW1hZGRyKTsKIH0KIAor LyogU2FtZSBhcyB0YXJnZXRfcmVhZF9zdGFjaywgYnV0IHJlcG9ydCBhbiBl cnJvciBpZiBjYW4ndCByZWFkLiAgKi8KKwordm9pZAorcmVhZF9zdGFjayAo Q09SRV9BRERSIG1lbWFkZHIsIGdkYl9ieXRlICpteWFkZHIsIGludCBsZW4p Cit7CisgIGludCBzdGF0dXM7CisgIHN0YXR1cyA9IHRhcmdldF9yZWFkX3N0 YWNrIChtZW1hZGRyLCBteWFkZHIsIGxlbik7CisgIGlmIChzdGF0dXMgIT0g MCkKKyAgICBtZW1vcnlfZXJyb3IgKHN0YXR1cywgbWVtYWRkcik7Cit9CisK IC8qIEFyZ3VtZW50IC8gcmV0dXJuIHJlc3VsdCBzdHJ1Y3QgZm9yIHVzZSB3 aXRoCiAgICBkb19jYXB0dXJlZF9yZWFkX21lbW9yeV9pbnRlZ2VyKCkuICBN RU1BRERSIGFuZCBMRU4gYXJlIGZpbGxlZCBpbgogICAgYnkgZ2RiX3JlYWRf bWVtb3J5X2ludGVnZXIoKS4gIFJFU1VMVCBpcyB0aGUgY29udGVudHMgdGhh dCB3ZXJlCkluZGV4OiBkY2FjaGUuYwo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2RjYWNoZS5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXAgLXIxLjM1IGRjYWNoZS5j Ci0tLSBkY2FjaGUuYwkyMCBBdWcgMjAwOSAyMzozMDoxNSAtMDAwMAkxLjM1 CisrKyBkY2FjaGUuYwkyOSBBdWcgMjAwOSAwMDozNjoxMiAtMDAwMApAQCAt MjQsNiArMjQsNyBAQAogI2luY2x1ZGUgImdkYl9zdHJpbmcuaCIKICNpbmNs dWRlICJnZGJjb3JlLmgiCiAjaW5jbHVkZSAidGFyZ2V0LmgiCisjaW5jbHVk ZSAiaW5mZXJpb3IuaCIKICNpbmNsdWRlICJzcGxheS10cmVlLmgiCiAKIC8q IFRoZSBkYXRhIGNhY2hlIGNvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlc3Vs dHMgYmVjYXVzZSBpdCBkb2Vzbid0CkBAIC0xMDMsNiArMTA0LDkgQEAgc3Ry dWN0IGRjYWNoZV9zdHJ1Y3QKIAogICAvKiBUaGUgbnVtYmVyIG9mIGluLXVz ZSBsaW5lcyBpbiB0aGUgY2FjaGUuICAqLwogICBpbnQgc2l6ZTsKKworICAv KiBUaGUgcHRpZCBvZiBsYXN0IGluZmVyaW9yIHRvIHVzZSBjYWNoZSBvciBu dWxsX3B0aWQuICAqLworICBwdGlkX3QgcHRpZDsKIH07CiAKIHN0YXRpYyBz dHJ1Y3QgZGNhY2hlX2Jsb2NrICpkY2FjaGVfaGl0IChEQ0FDSEUgKmRjYWNo ZSwgQ09SRV9BRERSIGFkZHIpOwpAQCAtMTE3LDE2ICsxMjEsMTUgQEAgc3Rh dGljIHZvaWQgZGNhY2hlX2luZm8gKGNoYXIgKmV4cCwgaW50IAogCiB2b2lk IF9pbml0aWFsaXplX2RjYWNoZSAodm9pZCk7CiAKLXN0YXRpYyBpbnQgZGNh Y2hlX2VuYWJsZWRfcCA9IDA7CitzdGF0aWMgaW50IGRjYWNoZV9lbmFibGVk X3AgPSAwOyAvKiBPQlNPTEVURSAqLwogCiBzdGF0aWMgdm9pZAogc2hvd19k Y2FjaGVfZW5hYmxlZF9wIChzdHJ1Y3QgdWlfZmlsZSAqZmlsZSwgaW50IGZy b21fdHR5LAogCQkgICAgICAgc3RydWN0IGNtZF9saXN0X2VsZW1lbnQgKmMs IGNvbnN0IGNoYXIgKnZhbHVlKQogewotICBmcHJpbnRmX2ZpbHRlcmVkIChm aWxlLCBfKCJDYWNoZSB1c2UgZm9yIHJlbW90ZSB0YXJnZXRzIGlzICVzLlxu IiksIHZhbHVlKTsKKyAgZnByaW50Zl9maWx0ZXJlZCAoZmlsZSwgXygiRGVw cmVjYXRlZCByZW1vdGVjYWNoZSBmbGFnIGlzICVzLlxuIiksIHZhbHVlKTsK IH0KIAotCiBzdGF0aWMgRENBQ0hFICpsYXN0X2NhY2hlOyAvKiBVc2VkIGJ5 IGluZm8gZGNhY2hlICovCiAKIC8qIEZyZWUgYWxsIHRoZSBkYXRhIGNhY2hl IGJsb2NrcywgdGh1cyBkaXNjYXJkaW5nIGFsbCBjYWNoZWQgZGF0YS4gICov CkBAIC0xNTIsNiArMTU1LDIzIEBAIGRjYWNoZV9pbnZhbGlkYXRlIChEQ0FD SEUgKmRjYWNoZSkKICAgZGNhY2hlLT5vbGRlc3QgPSBOVUxMOwogICBkY2Fj aGUtPm5ld2VzdCA9IE5VTEw7CiAgIGRjYWNoZS0+c2l6ZSA9IDA7CisgIGRj YWNoZS0+cHRpZCA9IG51bGxfcHRpZDsKK30KKworLyogSW52YWxpZGF0ZSB0 aGUgbGluZSBhc3NvY2lhdGVkIHdpdGggQUREUi4gICovCisKK3N0YXRpYyB2 b2lkCitkY2FjaGVfaW52YWxpZGF0ZV9saW5lIChEQ0FDSEUgKmRjYWNoZSwg Q09SRV9BRERSIGFkZHIpCit7CisgIHN0cnVjdCBkY2FjaGVfYmxvY2sgKmRi ID0gZGNhY2hlX2hpdCAoZGNhY2hlLCBhZGRyKTsKKworICBpZiAoZGIpCisg ICAgeworICAgICAgc3BsYXlfdHJlZV9yZW1vdmUgKGRjYWNoZS0+dHJlZSwg KHNwbGF5X3RyZWVfa2V5KSBkYi0+YWRkcik7CisgICAgICBkYi0+bmV3ZXIg PSBkY2FjaGUtPmZyZWVsaXN0OworICAgICAgZGNhY2hlLT5mcmVlbGlzdCA9 IGRiOworICAgICAgLS1kY2FjaGUtPnNpemU7CisgICAgfQogfQogCiAvKiBJ ZiBhZGRyIGlzIHByZXNlbnQgaW4gdGhlIGRjYWNoZSwgcmV0dXJuIHRoZSBh ZGRyZXNzIG9mIHRoZSBibG9jawpAQCAtMTk4LDggKzIxOCw5IEBAIGRjYWNo ZV9yZWFkX2xpbmUgKERDQUNIRSAqZGNhY2hlLCBzdHJ1Y3QKICAgICAgIGVs c2UKIAlyZWdfbGVuID0gcmVnaW9uLT5oaSAtIG1lbWFkZHI7CiAKLSAgICAg IC8qIFNraXAgbm9uLWNhY2hlYWJsZS9ub24tcmVhZGFibGUgcmVnaW9ucy4g ICovCi0gICAgICBpZiAoIXJlZ2lvbi0+YXR0cmliLmNhY2hlIHx8IHJlZ2lv bi0+YXR0cmliLm1vZGUgPT0gTUVNX1dPKQorICAgICAgLyogU2tpcCBub24t cmVhZGFibGUgcmVnaW9ucy4gIFRoZSBjYWNoZSBhdHRyaWJ1dGUgY2FuIGJl IGlnbm9yZWQsCisgICAgICAgICBzaW5jZSB3ZSBtYXkgYmUgbG9hZGluZyB0 aGlzIGZvciBhIHN0YWNrIGFjY2Vzcy4gICovCisgICAgICBpZiAocmVnaW9u LT5hdHRyaWIubW9kZSA9PSBNRU1fV08pCiAJewogCSAgbWVtYWRkciArPSBy ZWdfbGVuOwogCSAgbXlhZGRyICArPSByZWdfbGVuOwpAQCAtMjk2LDcgKzMx Nyw3IEBAIGRjYWNoZV9wZWVrX2J5dGUgKERDQUNIRSAqZGNhY2hlLCBDT1JF X0EKICAgIGFuIGFyZWEgb2YgbWVtb3J5IHdoaWNoIHdhc24ndCBwcmVzZW50 IGluIHRoZSBjYWNoZSBkb2Vzbid0IGNhdXNlCiAgICBpdCB0byBiZSBsb2Fk ZWQgaW4uCiAKLSAgIEFsd2F5cyByZXR1cm4gMSB0byBzaW1wbGlmeSBkY2Fj aGVfeGZlcl9tZW1vcnkuICAqLworICAgQWx3YXlzIHJldHVybiAxIChtZWFu aW5nIHN1Y2Nlc3MpIHRvIHNpbXBsaWZ5IGRjYWNoZV94ZmVyX21lbW9yeS4g ICovCiAKIHN0YXRpYyBpbnQKIGRjYWNoZV9wb2tlX2J5dGUgKERDQUNIRSAq ZGNhY2hlLCBDT1JFX0FERFIgYWRkciwgZ2RiX2J5dGUgKnB0cikKQEAgLTMz OCw2ICszNTksNyBAQCBkY2FjaGVfaW5pdCAodm9pZCkKICAgZGNhY2hlLT5u ZXdlc3QgPSBOVUxMOwogICBkY2FjaGUtPmZyZWVsaXN0ID0gTlVMTDsKICAg ZGNhY2hlLT5zaXplID0gMDsKKyAgZGNhY2hlLT5wdGlkID0gbnVsbF9wdGlk OwogICBsYXN0X2NhY2hlID0gZGNhY2hlOwogCiAgIHJldHVybiBkY2FjaGU7 CkBAIC0zNjYsNyArMzg4LDcgQEAgZGNhY2hlX2ZyZWUgKERDQUNIRSAqZGNh Y2hlKQogICAgdG8gb3IgZnJvbSBkZWJ1Z2dlciBhZGRyZXNzIE1ZQUREUi4g IFdyaXRlIHRvIGluZmVyaW9yIGlmIFNIT1VMRF9XUklURSBpcwogICAgbm9u emVyby4gCiAKLSAgIFJldHVybnMgbGVuZ3RoIG9mIGRhdGEgd3JpdHRlbiBv ciByZWFkOyAwIGZvciBlcnJvci4gICovCisgICBUaGUgbWVhbmluZyBvZiB0 aGUgcmVzdWx0IGlzIHRoZSBzYW1lIGFzIGZvciB0YXJnZXRfd3JpdGUuICAq LwogCiBpbnQKIGRjYWNoZV94ZmVyX21lbW9yeSAoc3RydWN0IHRhcmdldF9v cHMgKm9wcywgRENBQ0hFICpkY2FjaGUsCkBAIC0zNzgsNiArNDAwLDE1IEBA IGRjYWNoZV94ZmVyX21lbW9yeSAoc3RydWN0IHRhcmdldF9vcHMgKm8KICAg aW50ICgqeGZ1bmMpIChEQ0FDSEUgKmRjYWNoZSwgQ09SRV9BRERSIGFkZHIs IGdkYl9ieXRlICpwdHIpOwogICB4ZnVuYyA9IHNob3VsZF93cml0ZSA/IGRj YWNoZV9wb2tlX2J5dGUgOiBkY2FjaGVfcGVla19ieXRlOwogCisgIC8qIElm IHRoaXMgaXMgYSBkaWZmZXJlbnQgaW5mZXJpb3IgZnJvbSB3aGF0IHdlJ3Zl IHJlY29yZGVkLAorICAgICBmbHVzaCB0aGUgY2FjaGUuICAqLworCisgIGlm ICghIHB0aWRfZXF1YWwgKGluZmVyaW9yX3B0aWQsIGRjYWNoZS0+cHRpZCkp CisgICAgeworICAgICAgZGNhY2hlX2ludmFsaWRhdGUgKGRjYWNoZSk7Cisg ICAgICBkY2FjaGUtPnB0aWQgPSBpbmZlcmlvcl9wdGlkOworICAgIH0KKwog ICAvKiBEbyB3cml0ZS10aHJvdWdoIGZpcnN0LCBzbyB0aGF0IGlmIGl0IGZh aWxzLCB3ZSBkb24ndCB3cml0ZSB0bwogICAgICB0aGUgY2FjaGUgYXQgYWxs LiAgKi8KIApAQCAtMzg1LDE0ICs0MTYsMjUgQEAgZGNhY2hlX3hmZXJfbWVt b3J5IChzdHJ1Y3QgdGFyZ2V0X29wcyAqbwogICAgIHsKICAgICAgIHJlcyA9 IHRhcmdldF93cml0ZSAob3BzLCBUQVJHRVRfT0JKRUNUX1JBV19NRU1PUlks CiAJCQkgIE5VTEwsIG15YWRkciwgbWVtYWRkciwgbGVuKTsKLSAgICAgIGlm IChyZXMgPCBsZW4pCi0JcmV0dXJuIDA7CisgICAgICBpZiAocmVzIDw9IDAp CisJcmV0dXJuIHJlczsKKyAgICAgIC8qIFVwZGF0ZSBMRU4gdG8gd2hhdCB3 YXMgYWN0dWFsbHkgd3JpdHRlbi4gICovCisgICAgICBsZW4gPSByZXM7CiAg ICAgfQogICAgICAgCiAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKICAg ICB7CiAgICAgICBpZiAoIXhmdW5jIChkY2FjaGUsIG1lbWFkZHIgKyBpLCBt eWFkZHIgKyBpKSkKLQlyZXR1cm4gMDsKKwl7CisJICAvKiBUaGF0IGZhaWxl ZC4gIERpc2NhcmQgaXRzIGNhY2hlIGxpbmUgc28gd2UgZG9uJ3QgaGF2ZSBh CisJICAgICBwYXJ0aWFsbHkgcmVhZCBsaW5lLiAgKi8KKwkgIGRjYWNoZV9p bnZhbGlkYXRlX2xpbmUgKGRjYWNoZSwgbWVtYWRkciArIGkpOworCSAgLyog SWYgd2UncmUgd3JpdGluZywgd2Ugc3RpbGwgd3JvdGUgTEVOIGJ5dGVzLiAg Ki8KKwkgIGlmIChzaG91bGRfd3JpdGUpCisJICAgIHJldHVybiBsZW47CisJ ICBlbHNlCisJICAgIHJldHVybiBpOworCX0KICAgICB9CiAgICAgCiAgIHJl dHVybiBsZW47CkBAIC00MDcsNiArNDQ5LDE4IEBAIGRjYWNoZV94ZmVyX21l bW9yeSAoc3RydWN0IHRhcmdldF9vcHMgKm8KICAgICJsb2dpY2FsbHkiIGNv bm5lY3RlZCBidXQgbm90IGFjdHVhbGx5IGEgc2luZ2xlIGNhbGwgdG8gb25l IG9mIHRoZQogICAgbWVtb3J5IHRyYW5zZmVyIGZ1bmN0aW9ucy4gICovCiAK Ky8qIEp1c3QgdXBkYXRlIGFueSBjYWNoZSBsaW5lcyB3aGljaCBhcmUgYWxy ZWFkeSBwcmVzZW50LiAgVGhpcyBpcyBjYWxsZWQKKyAgIGJ5IG1lbW9yeV94 ZmVyX3BhcnRpYWwgaW4gY2FzZXMgd2hlcmUgdGhlIGFjY2VzcyB3b3VsZCBv dGhlcndpc2Ugbm90IGdvCisgICB0aHJvdWdoIHRoZSBjYWNoZS4gICovCisK K3ZvaWQKK2RjYWNoZV91cGRhdGUgKERDQUNIRSAqZGNhY2hlLCBDT1JFX0FE RFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbikKK3sKKyAg aW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykKKyAgICBkY2Fj aGVfcG9rZV9ieXRlIChkY2FjaGUsIG1lbWFkZHIgKyBpLCBteWFkZHIgKyBp KTsKK30KKwogc3RhdGljIHZvaWQKIGRjYWNoZV9wcmludF9saW5lIChpbnQg aW5kZXgpCiB7CkBAIC00NzQsMTIgKzUyOCwxNSBAQCBkY2FjaGVfaW5mbyAo Y2hhciAqZXhwLCBpbnQgdHR5KQogICBwcmludGZfZmlsdGVyZWQgKF8oIkRj YWNoZSBsaW5lIHdpZHRoICVkLCBtYXhpbXVtIHNpemUgJWRcbiIpLAogCQkg ICBMSU5FX1NJWkUsIERDQUNIRV9TSVpFKTsKIAotICBpZiAoIWxhc3RfY2Fj aGUpCisgIGlmICghbGFzdF9jYWNoZSB8fCBwdGlkX2VxdWFsIChsYXN0X2Nh Y2hlLT5wdGlkLCBudWxsX3B0aWQpKQogICAgIHsKICAgICAgIHByaW50Zl9m aWx0ZXJlZCAoXygiTm8gZGF0YSBjYWNoZSBhdmFpbGFibGUuXG4iKSk7CiAg ICAgICByZXR1cm47CiAgICAgfQogCisgIHByaW50Zl9maWx0ZXJlZCAoXygi Q29udGFpbnMgZGF0YSBmb3IgJXNcbiIpLAorCQkgICB0YXJnZXRfcGlkX3Rv X3N0ciAobGFzdF9jYWNoZS0+cHRpZCkpOworCiAgIHJlZmNvdW50ID0gMDsK IAogICBuID0gc3BsYXlfdHJlZV9taW4gKGxhc3RfY2FjaGUtPnRyZWUpOwpA QCAtNTA3LDExICs1NjQsMTAgQEAgX2luaXRpYWxpemVfZGNhY2hlICh2b2lk KQogCQkJICAgJmRjYWNoZV9lbmFibGVkX3AsIF8oIlwKIFNldCBjYWNoZSB1 c2UgZm9yIHJlbW90ZSB0YXJnZXRzLiIpLCBfKCJcCiBTaG93IGNhY2hlIHVz ZSBmb3IgcmVtb3RlIHRhcmdldHMuIiksIF8oIlwKLVdoZW4gb24sIHVzZSBk YXRhIGNhY2hpbmcgZm9yIHJlbW90ZSB0YXJnZXRzLiAgRm9yIG1hbnkgcmVt b3RlIHRhcmdldHNcblwKLXRoaXMgb3B0aW9uIGNhbiBvZmZlciBiZXR0ZXIg dGhyb3VnaHB1dCBmb3IgcmVhZGluZyB0YXJnZXQgbWVtb3J5LlxuXAotVW5m b3J0dW5hdGVseSwgZ2RiIGRvZXMgbm90IGN1cnJlbnRseSBrbm93IGFueXRo aW5nIGFib3V0IHZvbGF0aWxlXG5cCi1yZWdpc3RlcnMgYW5kIHRodXMgZGF0 YSBjYWNoaW5nIHdpbGwgcHJvZHVjZSBpbmNvcnJlY3QgcmVzdWx0cyB3aXRo XG5cCi12b2xhdGlsZSByZWdpc3RlcnMgYXJlIGluIHVzZS4gIEJ5IGRlZmF1 bHQsIHRoaXMgb3B0aW9uIGlzIG9mZi4iKSwKK1RoaXMgdXNlZCB0byBlbmFi bGUgdGhlIGRhdGEgY2FjaGUgZm9yIHJlbW90ZSB0YXJnZXRzLiAgVGhlIGNh Y2hlXG5cCitmdW5jdGlvbmFsaXR5IGlzIG5vdyBjb250cm9sbGVkIGJ5IHRo ZSBtZW1vcnkgcmVnaW9uIHN5c3RlbSBhbmQgdGhlXG5cCitcInN0YWNrLWNh Y2hlXCIgZmxhZzsgXCJyZW1vdGVjYWNoZVwiIG5vdyBkb2VzIG5vdGhpbmcg YW5kXG5cCitleGlzdHMgb25seSBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25z LiIpLAogCQkJICAgTlVMTCwKIAkJCSAgIHNob3dfZGNhY2hlX2VuYWJsZWRf cCwKIAkJCSAgICZzZXRsaXN0LCAmc2hvd2xpc3QpOwpJbmRleDogZGNhY2hl LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMv c3JjL2dkYi9kY2FjaGUuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4xNQpk aWZmIC11IC1wIC1yMS4xNSBkY2FjaGUuaAotLS0gZGNhY2hlLmgJMjAgQXVn IDIwMDkgMjI6MzA6MTIgLTAwMDAJMS4xNQorKysgZGNhY2hlLmgJMjkgQXVn IDIwMDkgMDA6MzY6MTIgLTAwMDAKQEAgLTM4LDQgKzM4LDcgQEAgdm9pZCBk Y2FjaGVfZnJlZSAoRENBQ0hFICopOwogaW50IGRjYWNoZV94ZmVyX21lbW9y eSAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgRENBQ0hFICpjYWNoZSwgQ09S RV9BRERSIG1lbSwKIAkJCWdkYl9ieXRlICpteSwgaW50IGxlbiwgaW50IHNo b3VsZF93cml0ZSk7CiAKK3ZvaWQgZGNhY2hlX3VwZGF0ZSAoRENBQ0hFICpk Y2FjaGUsIENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLAor CQkgICAgaW50IGxlbik7CisKICNlbmRpZiAvKiBEQ0FDSEVfSCAqLwpJbmRl eDogZHdhcmYybG9jLmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi9kd2FyZjJsb2MuYyx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS42MwpkaWZmIC11IC1wIC1yMS42MyBkd2FyZjJsb2MuYwot LS0gZHdhcmYybG9jLmMJMTEgQXVnIDIwMDkgMjA6MzY6NDkgLTAwMDAJMS42 MworKysgZHdhcmYybG9jLmMJMjkgQXVnIDIwMDkgMDA6MzY6MTIgLTAwMDAK QEAgLTI4MCw2ICsyODAsNyBAQCBkd2FyZjJfZXZhbHVhdGVfbG9jX2Rlc2Mg KHN0cnVjdCBzeW1ib2wgCiAgICAgICByZXR2YWwgPSBhbGxvY2F0ZV92YWx1 ZSAoU1lNQk9MX1RZUEUgKHZhcikpOwogICAgICAgVkFMVUVfTFZBTCAocmV0 dmFsKSA9IGx2YWxfbWVtb3J5OwogICAgICAgc2V0X3ZhbHVlX2xhenkgKHJl dHZhbCwgMSk7CisgICAgICBzZXRfdmFsdWVfc3RhY2sgKHJldHZhbCwgMSk7 CiAgICAgICBzZXRfdmFsdWVfYWRkcmVzcyAocmV0dmFsLCBhZGRyZXNzKTsK ICAgICB9CiAKSW5kZXg6IGZyYW1lLXVud2luZC5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZnJhbWUtdW53 aW5kLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMjYKZGlmZiAtdSAtcCAt cjEuMjYgZnJhbWUtdW53aW5kLmMKLS0tIGZyYW1lLXVud2luZC5jCTIgSnVs IDIwMDkgMTc6MjU6NTMgLTAwMDAJMS4yNgorKysgZnJhbWUtdW53aW5kLmMJ MjkgQXVnIDIwMDkgMDA6MzY6MTIgLTAwMDAKQEAgLTE1Myw4ICsxNTMsMTAg QEAgc3RydWN0IHZhbHVlICoKIGZyYW1lX3Vud2luZF9nb3RfbWVtb3J5IChz dHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUsIGludCByZWdudW0sIENPUkVfQURE UiBhZGRyKQogewogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2RiYXJjaCA9IGZyYW1l X3Vud2luZF9hcmNoIChmcmFtZSk7CisgIHN0cnVjdCB2YWx1ZSAqdiA9IHZh bHVlX2F0X2xhenkgKHJlZ2lzdGVyX3R5cGUgKGdkYmFyY2gsIHJlZ251bSks IGFkZHIpOwogCi0gIHJldHVybiB2YWx1ZV9hdF9sYXp5IChyZWdpc3Rlcl90 eXBlIChnZGJhcmNoLCByZWdudW0pLCBhZGRyKTsKKyAgc2V0X3ZhbHVlX3N0 YWNrICh2LCAxKTsKKyAgcmV0dXJuIHY7CiB9CiAKIC8qIFJldHVybiBhIHZh bHVlIHdoaWNoIGluZGljYXRlcyB0aGF0IEZSQU1FJ3Mgc2F2ZWQgdmVyc2lv biBvZgpJbmRleDogZ2RiY29yZS5oCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvZ2RiY29yZS5oLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjM1CmRpZmYgLXUgLXAgLXIxLjM1IGdkYmNvcmUu aAotLS0gZ2RiY29yZS5oCTIgSnVsIDIwMDkgMTc6MjU6NTMgLTAwMDAJMS4z NQorKysgZ2RiY29yZS5oCTI5IEF1ZyAyMDA5IDAwOjM2OjEyIC0wMDAwCkBA IC00Nyw2ICs0NywxMCBAQCBleHRlcm4gdm9pZCBtZW1vcnlfZXJyb3IgKGlu dCBzdGF0dXMsIENPCiAKIGV4dGVybiB2b2lkIHJlYWRfbWVtb3J5IChDT1JF X0FERFIgbWVtYWRkciwgZ2RiX2J5dGUgKm15YWRkciwgaW50IGxlbik7CiAK Ky8qIExpa2UgdGFyZ2V0X3JlYWRfc3RhY2ssIGJ1dCByZXBvcnQgYW4gZXJy b3IgaWYgY2FuJ3QgcmVhZC4gICovCisKK2V4dGVybiB2b2lkIHJlYWRfc3Rh Y2sgKENPUkVfQUREUiBtZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLCBpbnQg bGVuKTsKKwogLyogUmVhZCBhbiBpbnRlZ2VyIGZyb20gZGVidWdnZWQgbWVt b3J5LCBnaXZlbiBhZGRyZXNzIGFuZCBudW1iZXIgb2YKICAgIGJ5dGVzLiAg Ki8KIApJbmRleDogbWVtYXR0ci5jCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvbWVtYXR0ci5jLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjM0CmRpZmYgLXUgLXAgLXIxLjM0IG1lbWF0dHIu YwotLS0gbWVtYXR0ci5jCTE3IEp1biAyMDA5IDE4OjQ0OjIzIC0wMDAwCTEu MzQKKysrIG1lbWF0dHIuYwkyOSBBdWcgMjAwOSAwMDozNjoxMiAtMDAwMApA QCAtNTcxLDcgKzU3MSw3IEBAIG1lbV9lbmFibGVfY29tbWFuZCAoY2hhciAq YXJncywgaW50IGZyb20KIAogICByZXF1aXJlX3VzZXJfcmVnaW9ucyAoZnJv bV90dHkpOwogCi0gIGRjYWNoZV9pbnZhbGlkYXRlICh0YXJnZXRfZGNhY2hl KTsKKyAgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRlICgpOwogCiAgIGlmIChw ID09IDApCiAgICAgewpAQCAtNjI1LDcgKzYyNSw3IEBAIG1lbV9kaXNhYmxl X2NvbW1hbmQgKGNoYXIgKmFyZ3MsIGludCBmcm8KIAogICByZXF1aXJlX3Vz ZXJfcmVnaW9ucyAoZnJvbV90dHkpOwogCi0gIGRjYWNoZV9pbnZhbGlkYXRl ICh0YXJnZXRfZGNhY2hlKTsKKyAgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRl ICgpOwogCiAgIGlmIChwID09IDApCiAgICAgewpAQCAtNjg2LDcgKzY4Niw3 IEBAIG1lbV9kZWxldGVfY29tbWFuZCAoY2hhciAqYXJncywgaW50IGZyb20K IAogICByZXF1aXJlX3VzZXJfcmVnaW9ucyAoZnJvbV90dHkpOwogCi0gIGRj YWNoZV9pbnZhbGlkYXRlICh0YXJnZXRfZGNhY2hlKTsKKyAgdGFyZ2V0X2Rj YWNoZV9pbnZhbGlkYXRlICgpOwogCiAgIGlmIChwID09IDApCiAgICAgewpJ bmRleDogdGFyZ2V0LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmls ZTogL2N2cy9zcmMvc3JjL2dkYi90YXJnZXQuYyx2CnJldHJpZXZpbmcgcmV2 aXNpb24gMS4yMjEKZGlmZiAtdSAtcCAtcjEuMjIxIHRhcmdldC5jCi0tLSB0 YXJnZXQuYwkyMCBBdWcgMjAwOSAyMjozMDoxMiAtMDAwMAkxLjIyMQorKysg dGFyZ2V0LmMJMjkgQXVnIDIwMDkgMDA6MzY6MTMgLTAwMDAKQEAgLTIxMCw3 ICsyMTAsNDUgQEAgc2hvd190YXJnZXRkZWJ1ZyAoc3RydWN0IHVpX2ZpbGUg KmZpbGUsIAogCiBzdGF0aWMgdm9pZCBzZXR1cF90YXJnZXRfZGVidWcgKHZv aWQpOwogCi1EQ0FDSEUgKnRhcmdldF9kY2FjaGU7CisvKiBUaGUgb3B0aW9u IHNldHMgdGhpcy4gICovCitzdGF0aWMgaW50IHN0YWNrX2NhY2hlX2VuYWJs ZWRfcF8xID0gMTsKKy8qIEFuZCBzZXRfc3RhY2tfY2FjaGVfZW5hYmxlZF9w IHVwZGF0ZXMgdGhpcy4KKyAgIFRoZSByZWFzb24gZm9yIHRoZSBzZXBhcmF0 aW9uIGlzIHNvIHRoYXQgd2UgZG9uJ3QgZmx1c2ggdGhlIGNhY2hlIGZvcgor ICAgb24tPm9uIHRyYW5zaXRpb25zLiAgKi8KK3N0YXRpYyBpbnQgc3RhY2tf Y2FjaGVfZW5hYmxlZF9wID0gMTsKKworLyogVGhpcyBpcyBjYWxsZWQgKmFm dGVyKiB0aGUgc3RhY2stY2FjaGUgaGFzIGJlZW4gc2V0LgorICAgRmx1c2gg dGhlIGNhY2hlIGZvciBvZmYtPm9uIGFuZCBvbi0+b2ZmIHRyYW5zaXRpb25z LgorICAgVGhlcmUncyBubyByZWFsIG5lZWQgdG8gZmx1c2ggdGhlIGNhY2hl IGZvciBvbi0+b2ZmIHRyYW5zaXRpb25zLAorICAgZXhjZXB0IGNsZWFubGlu ZXNzLiAgKi8KKworc3RhdGljIHZvaWQKK3NldF9zdGFja19jYWNoZV9lbmFi bGVkX3AgKGNoYXIgKmFyZ3MsIGludCBmcm9tX3R0eSwKKwkJCSAgIHN0cnVj dCBjbWRfbGlzdF9lbGVtZW50ICpjKQoreworICBpZiAoc3RhY2tfY2FjaGVf ZW5hYmxlZF9wICE9IHN0YWNrX2NhY2hlX2VuYWJsZWRfcF8xKQorICAgIHRh cmdldF9kY2FjaGVfaW52YWxpZGF0ZSAoKTsKKworICBzdGFja19jYWNoZV9l bmFibGVkX3AgPSBzdGFja19jYWNoZV9lbmFibGVkX3BfMTsKK30KKworc3Rh dGljIHZvaWQKK3Nob3dfc3RhY2tfY2FjaGVfZW5hYmxlZF9wIChzdHJ1Y3Qg dWlfZmlsZSAqZmlsZSwgaW50IGZyb21fdHR5LAorCQkJICAgIHN0cnVjdCBj bWRfbGlzdF9lbGVtZW50ICpjLCBjb25zdCBjaGFyICp2YWx1ZSkKK3sKKyAg ZnByaW50Zl9maWx0ZXJlZCAoZmlsZSwgXygiQ2FjaGUgdXNlIGZvciBzdGFj ayBhY2Nlc3NlcyBpcyAlcy5cbiIpLCB2YWx1ZSk7Cit9CisKKy8qIENhY2hl IG9mIG1lbW9yeSBvcGVyYXRpb25zLCB0byBzcGVlZCB1cCByZW1vdGUgYWNj ZXNzLiAgKi8KK3N0YXRpYyBEQ0FDSEUgKnRhcmdldF9kY2FjaGU7CisKKy8q IEludmFsaWRhdGUgdGhlIHRhcmdldCBkY2FjaGUuICAqLworCit2b2lkCit0 YXJnZXRfZGNhY2hlX2ludmFsaWRhdGUgKHZvaWQpCit7CisgIGRjYWNoZV9p bnZhbGlkYXRlICh0YXJnZXRfZGNhY2hlKTsKK30KIAogLyogVGhlIHVzZXIg anVzdCB0eXBlZCAndGFyZ2V0JyB3aXRob3V0IHRoZSBuYW1lIG9mIGEgdGFy Z2V0LiAgKi8KIApAQCAtNDEzLDcgKzQ1MSw3IEBAIHRhcmdldF9raWxsICh2 b2lkKQogdm9pZAogdGFyZ2V0X2xvYWQgKGNoYXIgKmFyZywgaW50IGZyb21f dHR5KQogewotICBkY2FjaGVfaW52YWxpZGF0ZSAodGFyZ2V0X2RjYWNoZSk7 CisgIHRhcmdldF9kY2FjaGVfaW52YWxpZGF0ZSAoKTsKICAgKCpjdXJyZW50 X3RhcmdldC50b19sb2FkKSAoYXJnLCBmcm9tX3R0eSk7CiB9CiAKQEAgLTEx NDMsMTIgKzExODEsMTQgQEAgdGFyZ2V0X3NlY3Rpb25fYnlfYWRkciAoc3Ry dWN0IHRhcmdldF9vcAogICAgdmFsdWUgYXJlIGp1c3QgYXMgZm9yIHRhcmdl dF94ZmVyX3BhcnRpYWwuICAqLwogCiBzdGF0aWMgTE9OR0VTVAotbWVtb3J5 X3hmZXJfcGFydGlhbCAoc3RydWN0IHRhcmdldF9vcHMgKm9wcywgdm9pZCAq cmVhZGJ1ZiwgY29uc3Qgdm9pZCAqd3JpdGVidWYsCi0JCSAgICAgVUxPTkdF U1QgbWVtYWRkciwgTE9OR0VTVCBsZW4pCittZW1vcnlfeGZlcl9wYXJ0aWFs IChzdHJ1Y3QgdGFyZ2V0X29wcyAqb3BzLCBlbnVtIHRhcmdldF9vYmplY3Qg b2JqZWN0LAorCQkgICAgIHZvaWQgKnJlYWRidWYsIGNvbnN0IHZvaWQgKndy aXRlYnVmLCBVTE9OR0VTVCBtZW1hZGRyLAorCQkgICAgIExPTkdFU1QgbGVu KQogewogICBMT05HRVNUIHJlczsKICAgaW50IHJlZ19sZW47CiAgIHN0cnVj dCBtZW1fcmVnaW9uICpyZWdpb247CisgIHN0cnVjdCBpbmZlcmlvciAqaW5m OwogCiAgIC8qIFplcm8gbGVuZ3RoIHJlcXVlc3RzIGFyZSBvayBhbmQgcmVx dWlyZSBubyB3b3JrLiAgKi8KICAgaWYgKGxlbiA9PSAwKQpAQCAtMTIyMyw3 ICsxMjYzLDExIEBAIG1lbW9yeV94ZmVyX3BhcnRpYWwgKHN0cnVjdCB0YXJn ZXRfb3BzICoKICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKLSAgaWYgKHJl Z2lvbi0+YXR0cmliLmNhY2hlKQorICBpbmYgPSBmaW5kX2luZmVyaW9yX3Bp ZCAocHRpZF9nZXRfcGlkIChpbmZlcmlvcl9wdGlkKSk7CisKKyAgaWYgKGlu ZiAhPSBOVUxMCisgICAgICAmJiAocmVnaW9uLT5hdHRyaWIuY2FjaGUKKwkg IHx8IChzdGFja19jYWNoZV9lbmFibGVkX3AgJiYgb2JqZWN0ID09IFRBUkdF VF9PQkpFQ1RfU1RBQ0tfTUVNT1JZKSkpCiAgICAgewogICAgICAgaWYgKHJl YWRidWYgIT0gTlVMTCkKIAlyZXMgPSBkY2FjaGVfeGZlcl9tZW1vcnkgKG9w cywgdGFyZ2V0X2RjYWNoZSwgbWVtYWRkciwgcmVhZGJ1ZiwKQEAgLTEyNDUs NiArMTI4OSwxOSBAQCBtZW1vcnlfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFy Z2V0X29wcyAqCiAJfQogICAgIH0KIAorICAvKiBNYWtlIHN1cmUgdGhlIGNh Y2hlIGdldHMgdXBkYXRlZCBubyBtYXR0ZXIgd2hhdCAtIGlmIHdlIGFyZSB3 cml0aW5nCisgICAgIHRvIHRoZSBzdGFjaywgZXZlbiBpZiB0aGlzIHdyaXRl IGlzIG5vdCB0YWdnZWQgYXMgc3VjaCwgd2Ugc3RpbGwgbmVlZAorICAgICB0 byB1cGRhdGUgdGhlIGNhY2hlLiAqLworCisgIGlmIChpbmYgIT0gTlVMTAor ICAgICAgJiYgcmVhZGJ1ZiA9PSBOVUxMCisgICAgICAmJiAhcmVnaW9uLT5h dHRyaWIuY2FjaGUKKyAgICAgICYmIHN0YWNrX2NhY2hlX2VuYWJsZWRfcAor ICAgICAgJiYgb2JqZWN0ICE9IFRBUkdFVF9PQkpFQ1RfU1RBQ0tfTUVNT1JZ KQorICAgIHsKKyAgICAgIGRjYWNoZV91cGRhdGUgKHRhcmdldF9kY2FjaGUs IG1lbWFkZHIsICh2b2lkICopIHdyaXRlYnVmLCByZWdfbGVuKTsKKyAgICB9 CisKICAgLyogSWYgbm9uZSBvZiB0aG9zZSBtZXRob2RzIGZvdW5kIHRoZSBt ZW1vcnkgd2Ugd2FudGVkLCBmYWxsIGJhY2sKICAgICAgdG8gYSB0YXJnZXQg cGFydGlhbCB0cmFuc2Zlci4gIE5vcm1hbGx5IGEgc2luZ2xlIGNhbGwgdG8K ICAgICAgdG9feGZlcl9wYXJ0aWFsIGlzIGVub3VnaDsgaWYgaXQgZG9lc24n dCByZWNvZ25pemUgYW4gb2JqZWN0CkBAIC0xMzA4LDggKzEzNjUsOSBAQCB0 YXJnZXRfeGZlcl9wYXJ0aWFsIChzdHJ1Y3QgdGFyZ2V0X29wcyAqCiAgIC8q IElmIHRoaXMgaXMgYSBtZW1vcnkgdHJhbnNmZXIsIGxldCB0aGUgbWVtb3J5 LXNwZWNpZmljIGNvZGUKICAgICAgaGF2ZSBhIGxvb2sgYXQgaXQgaW5zdGVh ZC4gIE1lbW9yeSB0cmFuc2ZlcnMgYXJlIG1vcmUKICAgICAgY29tcGxpY2F0 ZWQuICAqLwotICBpZiAob2JqZWN0ID09IFRBUkdFVF9PQkpFQ1RfTUVNT1JZ KQotICAgIHJldHZhbCA9IG1lbW9yeV94ZmVyX3BhcnRpYWwgKG9wcywgcmVh ZGJ1Ziwgd3JpdGVidWYsIG9mZnNldCwgbGVuKTsKKyAgaWYgKG9iamVjdCA9 PSBUQVJHRVRfT0JKRUNUX01FTU9SWSB8fCBvYmplY3QgPT0gVEFSR0VUX09C SkVDVF9TVEFDS19NRU1PUlkpCisgICAgcmV0dmFsID0gbWVtb3J5X3hmZXJf cGFydGlhbCAob3BzLCBvYmplY3QsIHJlYWRidWYsCisJCQkJICB3cml0ZWJ1 Ziwgb2Zmc2V0LCBsZW4pOwogICBlbHNlCiAgICAgewogICAgICAgZW51bSB0 YXJnZXRfb2JqZWN0IHJhd19vYmplY3QgPSBvYmplY3Q7CkBAIC0xMzkxLDYg KzE0NDksMjMgQEAgdGFyZ2V0X3JlYWRfbWVtb3J5IChDT1JFX0FERFIgbWVt YWRkciwgZwogICAgIHJldHVybiBFSU87CiB9CiAKKy8qIExpa2UgdGFyZ2V0 X3JlYWRfbWVtb3J5LCBidXQgc3BlY2lmeSBleHBsaWNpdGx5IHRoYXQgdGhp cyBpcyBhIHJlYWQgZnJvbQorICAgdGhlIHRhcmdldCdzIHN0YWNrLiAgVGhp cyBtYXkgdHJpZ2dlciBkaWZmZXJlbnQgY2FjaGUgYmVoYXZpb3IuICAqLwor CitpbnQKK3RhcmdldF9yZWFkX3N0YWNrIChDT1JFX0FERFIgbWVtYWRkciwg Z2RiX2J5dGUgKm15YWRkciwgaW50IGxlbikKK3sKKyAgLyogRGlzcGF0Y2gg dG8gdGhlIHRvcG1vc3QgdGFyZ2V0LCBub3QgdGhlIGZsYXR0ZW5lZCBjdXJy ZW50X3RhcmdldC4KKyAgICAgTWVtb3J5IGFjY2Vzc2VzIGNoZWNrIHRhcmdl dC0+dG9faGFzXyhhbGxfKW1lbW9yeSwgYW5kIHRoZQorICAgICBmbGF0dGVu ZWQgdGFyZ2V0IGRvZXNuJ3QgaW5oZXJpdCB0aG9zZS4gICovCisKKyAgaWYg KHRhcmdldF9yZWFkIChjdXJyZW50X3RhcmdldC5iZW5lYXRoLCBUQVJHRVRf T0JKRUNUX1NUQUNLX01FTU9SWSwgTlVMTCwKKwkJICAgbXlhZGRyLCBtZW1h ZGRyLCBsZW4pID09IGxlbikKKyAgICByZXR1cm4gMDsKKyAgZWxzZQorICAg IHJldHVybiBFSU87Cit9CisKIGludAogdGFyZ2V0X3dyaXRlX21lbW9yeSAo Q09SRV9BRERSIG1lbWFkZHIsIGNvbnN0IGdkYl9ieXRlICpteWFkZHIsIGlu dCBsZW4pCiB7CkBAIC0yMDU1LDcgKzIxMzAsNyBAQCB0YXJnZXRfcmVzdW1l IChwdGlkX3QgcHRpZCwgaW50IHN0ZXAsIGVuCiB7CiAgIHN0cnVjdCB0YXJn ZXRfb3BzICp0OwogCi0gIGRjYWNoZV9pbnZhbGlkYXRlICh0YXJnZXRfZGNh Y2hlKTsKKyAgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRlICgpOwogCiAgIGZv ciAodCA9IGN1cnJlbnRfdGFyZ2V0LmJlbmVhdGg7IHQgIT0gTlVMTDsgdCA9 IHQtPmJlbmVhdGgpCiAgICAgewpAQCAtMzQ3OSw1ICszNTU0LDE2IEBAIFRl bGxzIGdkYiB3aGV0aGVyIHRvIGNvbnRyb2wgdGhlIGluZmVyaW8KIAkJCSAg ICZzZXRsaXN0LAogCQkJICAgJnNob3dsaXN0KTsKIAorICBhZGRfc2V0c2hv d19ib29sZWFuX2NtZCAoInN0YWNrLWNhY2hlIiwgY2xhc3Nfc3VwcG9ydCwK KwkJCSAgICZzdGFja19jYWNoZV9lbmFibGVkX3AsIF8oIlwKK1NldCBjYWNo ZSB1c2UgZm9yIHN0YWNrIGFjY2Vzcy4iKSwgXygiXAorU2hvdyBjYWNoZSB1 c2UgZm9yIHN0YWNrIGFjY2Vzcy4iKSwgXygiXAorV2hlbiBvbiwgdXNlIHRo ZSBkYXRhIGNhY2hlIGZvciBhbGwgc3RhY2sgYWNjZXNzLCByZWdhcmRsZXNz IG9mIGFueVxuXAorY29uZmlndXJlZCBtZW1vcnkgcmVnaW9ucy4gIFRoaXMg aW1wcm92ZXMgcmVtb3RlIHBlcmZvcm1hbmNlIHNpZ25pZmljYW50bHkuXG5c CitCeSBkZWZhdWx0LCBjYWNoaW5nIGZvciBzdGFjayBhY2Nlc3MgaXMgb24u IiksCisJCQkgICBzZXRfc3RhY2tfY2FjaGVfZW5hYmxlZF9wLAorCQkJICAg c2hvd19zdGFja19jYWNoZV9lbmFibGVkX3AsCisJCQkgICAmc2V0bGlzdCwg JnNob3dsaXN0KTsKKwogICB0YXJnZXRfZGNhY2hlID0gZGNhY2hlX2luaXQg KCk7CiB9CkluZGV4OiB0YXJnZXQuaAo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL3RhcmdldC5oLHYKcmV0cmll dmluZyByZXZpc2lvbiAxLjE2MgpkaWZmIC11IC1wIC1yMS4xNjIgdGFyZ2V0 LmgKLS0tIHRhcmdldC5oCTMxIEp1bCAyMDA5IDE1OjI4OjI3IC0wMDAwCTEu MTYyCisrKyB0YXJnZXQuaAkyOSBBdWcgMjAwOSAwMDozNjoxMyAtMDAwMApA QCAtNTMsNyArNTMsNiBAQCBzdHJ1Y3QgdGFyZ2V0X3NlY3Rpb25fdGFibGU7 CiAKICNpbmNsdWRlICJiZmQuaCIKICNpbmNsdWRlICJzeW10YWIuaCIKLSNp bmNsdWRlICJkY2FjaGUuaCIKICNpbmNsdWRlICJtZW1hdHRyLmgiCiAjaW5j bHVkZSAidmVjLmgiCiAjaW5jbHVkZSAiZ2RiX3NpZ25hbHMuaCIKQEAgLTIw Myw2ICsyMDIsMTAgQEAgZW51bSB0YXJnZXRfb2JqZWN0CiAgICAgIFRhcmdl dCBpbXBsZW1lbnRhdGlvbnMgb2YgdG9feGZlcl9wYXJ0aWFsIG5ldmVyIG5l ZWQgdG8gaGFuZGxlCiAgICAgIHRoaXMgb2JqZWN0LCBhbmQgbW9zdCBjYWxs ZXJzIHNob3VsZCBub3QgdXNlIGl0LiAgKi8KICAgVEFSR0VUX09CSkVDVF9S QVdfTUVNT1JZLAorICAvKiBNZW1vcnkga25vd24gdG8gYmUgcGFydCBvZiB0 aGUgdGFyZ2V0J3Mgc3RhY2suICBUaGlzIGlzIGNhY2hlZCBldmVuCisgICAg IGlmIGl0IGlzIG5vdCBpbiBhIHJlZ2lvbiBtYXJrZWQgYXMgc3VjaCwgc2lu Y2UgaXQgaXMga25vd24gdG8gYmUKKyAgICAgIm5vcm1hbCIgUkFNLiAgKi8K KyAgVEFSR0VUX09CSkVDVF9TVEFDS19NRU1PUlksCiAgIC8qIEtlcm5lbCBV bndpbmQgVGFibGUuICBTZWUgImlhNjQtdGRlcC5jIi4gICovCiAgIFRBUkdF VF9PQkpFQ1RfVU5XSU5EX1RBQkxFLAogICAvKiBUcmFuc2ZlciBhdXhpbGxp YXJ5IHZlY3Rvci4gICovCkBAIC02NzEsMTIgKzY3NCwxNSBAQCBleHRlcm4g dm9pZCB0YXJnZXRfc3RvcmVfcmVnaXN0ZXJzIChzdHJ1CiAjZGVmaW5lCXRh cmdldF9zdXBwb3J0c19tdWx0aV9wcm9jZXNzKCkJXAogICAgICAoKmN1cnJl bnRfdGFyZ2V0LnRvX3N1cHBvcnRzX211bHRpX3Byb2Nlc3MpICgpCiAKLWV4 dGVybiBEQ0FDSEUgKnRhcmdldF9kY2FjaGU7CisvKiBJbnZhbGlkYXRlIGFs bCB0YXJnZXQgZGNhY2hlcy4gICovCitleHRlcm4gdm9pZCB0YXJnZXRfZGNh Y2hlX2ludmFsaWRhdGUgKHZvaWQpOwogCiBleHRlcm4gaW50IHRhcmdldF9y ZWFkX3N0cmluZyAoQ09SRV9BRERSLCBjaGFyICoqLCBpbnQsIGludCAqKTsK IAogZXh0ZXJuIGludCB0YXJnZXRfcmVhZF9tZW1vcnkgKENPUkVfQUREUiBt ZW1hZGRyLCBnZGJfYnl0ZSAqbXlhZGRyLCBpbnQgbGVuKTsKIAorZXh0ZXJu IGludCB0YXJnZXRfcmVhZF9zdGFjayAoQ09SRV9BRERSIG1lbWFkZHIsIGdk Yl9ieXRlICpteWFkZHIsIGludCBsZW4pOworCiBleHRlcm4gaW50IHRhcmdl dF93cml0ZV9tZW1vcnkgKENPUkVfQUREUiBtZW1hZGRyLCBjb25zdCBnZGJf Ynl0ZSAqbXlhZGRyLAogCQkJCWludCBsZW4pOwogCkluZGV4OiB0b3AuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL3RvcC5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2OQpkaWZmIC11 IC1wIC1yMS4xNjkgdG9wLmMKLS0tIHRvcC5jCTI4IEF1ZyAyMDA5IDIzOjI2 OjU0IC0wMDAwCTEuMTY5CisrKyB0b3AuYwkyOSBBdWcgMjAwOSAwMDozNjox MyAtMDAwMApAQCAtMzQ1LDYgKzM0NSwxOSBAQCBkb19jaGRpcl9jbGVhbnVw ICh2b2lkICpvbGRfZGlyKQogfQogI2VuZGlmCiAKK3ZvaWQKK3ByZXBhcmVf ZXhlY3V0ZV9jb21tYW5kICh2b2lkKQoreworICBmcmVlX2FsbF92YWx1ZXMg KCk7CisKKyAgLyogV2l0aCBtdWx0aXBsZSB0aHJlYWRzIHJ1bm5pbmcgd2hp bGUgdGhlIG9uZSB3ZSdyZSBleGFtaW5pbmcgaXMgc3RvcHBlZCwKKyAgICAg dGhlIGRjYWNoZSBjYW4gZ2V0IHN0YWxlIHdpdGhvdXQgdXMgYmVpbmcgYWJs ZSB0byBkZXRlY3QgaXQuCisgICAgIEZvciB0aGUgZHVyYXRpb24gb2YgdGhl IGNvbW1hbmQsIHRob3VnaCwgdXNlIHRoZSBkY2FjaGUgdG8gaGVscAorICAg ICB0aGluZ3MgbGlrZSBiYWNrdHJhY2UuICAqLworICBpZiAobm9uX3N0b3Ap CisgICAgdGFyZ2V0X2RjYWNoZV9pbnZhbGlkYXRlICgpOworfQorCiAvKiBF eGVjdXRlIHRoZSBsaW5lIFAgYXMgYSBjb21tYW5kLCBpbiB0aGUgY3VycmVu dCB1c2VyIGNvbnRleHQuCiAgICBQYXNzIEZST01fVFRZIGFzIHNlY29uZCBh cmd1bWVudCB0byB0aGUgZGVmaW5pbmcgZnVuY3Rpb24uICAqLwogCkBAIC0z NzQsOCArMzg3LDggQEAgZXhlY3V0ZV9jb21tYW5kIChjaGFyICpwLCBpbnQg ZnJvbV90dHkpCiAjZW5kaWYKIAl9CiAgICAgfQotICAKLSAgZnJlZV9hbGxf dmFsdWVzICgpOworCisgIHByZXBhcmVfZXhlY3V0ZV9jb21tYW5kICgpOwog CiAgIC8qIEZvcmNlIGNsZWFudXAgb2YgYW55IGFsbG9jYSBhcmVhcyBpZiB1 c2luZyBDIGFsbG9jYSBpbnN0ZWFkIG9mCiAgICAgIGEgYnVpbHRpbiBhbGxv Y2EuICAqLwpJbmRleDogdG9wLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi90b3AuaCx2CnJldHJpZXZpbmcg cmV2aXNpb24gMS4xOApkaWZmIC11IC1wIC1yMS4xOCB0b3AuaAotLS0gdG9w LmgJMyBKYW4gMjAwOSAwNTo1Nzo1MyAtMDAwMAkxLjE4CisrKyB0b3AuaAky OSBBdWcgMjAwOSAwMDozNjoxMyAtMDAwMApAQCAtNDksNiArNDksMTAgQEAg ZXh0ZXJuIHZvaWQgcXVpdF9jb21tYW5kIChjaGFyICosIGludCk7CiBleHRl cm4gaW50IHF1aXRfY292ZXIgKHZvaWQgKik7CiBleHRlcm4gdm9pZCBleGVj dXRlX2NvbW1hbmQgKGNoYXIgKiwgaW50KTsKIAorLyogUHJlcGFyZSBmb3Ig ZXhlY3V0aW9uIG9mIGEgY29tbWFuZC4KKyAgIENhbGwgdGhpcyBiZWZvcmUg ZXZlcnkgY29tbWFuZCwgQ0xJIG9yIE1JLiAgKi8KK2V4dGVybiB2b2lkIHBy ZXBhcmVfZXhlY3V0ZV9jb21tYW5kICh2b2lkKTsKKwogLyogVGhpcyBmdW5j dGlvbiByZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgc3RyaW5nIHRoYXQgaXMg dXNlZAogICAgYnkgZ2RiIGZvciBpdHMgY29tbWFuZCBwcm9tcHQuICovCiBl eHRlcm4gY2hhciAqZ2V0X3Byb21wdCAodm9pZCk7CkluZGV4OiB2YWxvcHMu Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9z cmMvZ2RiL3ZhbG9wcy5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjIyNApk aWZmIC11IC1wIC1yMS4yMjQgdmFsb3BzLmMKLS0tIHZhbG9wcy5jCTIxIEp1 bCAyMDA5IDE4OjE1OjMyIC0wMDAwCTEuMjI0CisrKyB2YWxvcHMuYwkyOSBB dWcgMjAwOSAwMDozNjoxMyAtMDAwMApAQCAtNTY1LDYgKzU2NSwzMiBAQCB2 YWx1ZV9vbmUgKHN0cnVjdCB0eXBlICp0eXBlLCBlbnVtIGx2YWxfCiAgIHJl dHVybiB2YWw7CiB9CiAKKy8qIEhlbHBlciBmdW5jdGlvbiBmb3IgdmFsdWVf YXQsIHZhbHVlX2F0X2xhenksIGFuZCB2YWx1ZV9hdF9sYXp5X3N0YWNrLiAg Ki8KKworc3RhdGljIHN0cnVjdCB2YWx1ZSAqCitnZXRfdmFsdWVfYXQgKHN0 cnVjdCB0eXBlICp0eXBlLCBDT1JFX0FERFIgYWRkciwgaW50IGxhenkpCit7 CisgIHN0cnVjdCB2YWx1ZSAqdmFsOworCisgIGlmIChUWVBFX0NPREUgKGNo ZWNrX3R5cGVkZWYgKHR5cGUpKSA9PSBUWVBFX0NPREVfVk9JRCkKKyAgICBl cnJvciAoXygiQXR0ZW1wdCB0byBkZXJlZmVyZW5jZSBhIGdlbmVyaWMgcG9p bnRlci4iKSk7CisKKyAgaWYgKGxhenkpCisgICAgeworICAgICAgdmFsID0g YWxsb2NhdGVfdmFsdWVfbGF6eSAodHlwZSk7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgdmFsID0gYWxsb2NhdGVfdmFsdWUgKHR5cGUpOworICAg ICAgcmVhZF9tZW1vcnkgKGFkZHIsIHZhbHVlX2NvbnRlbnRzX2FsbF9yYXcg KHZhbCksIFRZUEVfTEVOR1RIICh0eXBlKSk7CisgICAgfQorCisgIFZBTFVF X0xWQUwgKHZhbCkgPSBsdmFsX21lbW9yeTsKKyAgc2V0X3ZhbHVlX2FkZHJl c3MgKHZhbCwgYWRkcik7CisKKyAgcmV0dXJuIHZhbDsKK30KKwogLyogUmV0 dXJuIGEgdmFsdWUgd2l0aCB0eXBlIFRZUEUgbG9jYXRlZCBhdCBBRERSLgog CiAgICBDYWxsIHZhbHVlX2F0IG9ubHkgaWYgdGhlIGRhdGEgbmVlZHMgdG8g YmUgZmV0Y2hlZCBpbW1lZGlhdGVseTsKQEAgLTU4MCwxOSArNjA2LDcgQEAg dmFsdWVfb25lIChzdHJ1Y3QgdHlwZSAqdHlwZSwgZW51bSBsdmFsXwogc3Ry dWN0IHZhbHVlICoKIHZhbHVlX2F0IChzdHJ1Y3QgdHlwZSAqdHlwZSwgQ09S RV9BRERSIGFkZHIpCiB7Ci0gIHN0cnVjdCB2YWx1ZSAqdmFsOwotCi0gIGlm IChUWVBFX0NPREUgKGNoZWNrX3R5cGVkZWYgKHR5cGUpKSA9PSBUWVBFX0NP REVfVk9JRCkKLSAgICBlcnJvciAoXygiQXR0ZW1wdCB0byBkZXJlZmVyZW5j ZSBhIGdlbmVyaWMgcG9pbnRlci4iKSk7Ci0KLSAgdmFsID0gYWxsb2NhdGVf dmFsdWUgKHR5cGUpOwotCi0gIHJlYWRfbWVtb3J5IChhZGRyLCB2YWx1ZV9j b250ZW50c19hbGxfcmF3ICh2YWwpLCBUWVBFX0xFTkdUSCAodHlwZSkpOwot Ci0gIFZBTFVFX0xWQUwgKHZhbCkgPSBsdmFsX21lbW9yeTsKLSAgc2V0X3Zh bHVlX2FkZHJlc3MgKHZhbCwgYWRkcik7Ci0KLSAgcmV0dXJuIHZhbDsKKyAg cmV0dXJuIGdldF92YWx1ZV9hdCAodHlwZSwgYWRkciwgMCk7CiB9CiAKIC8q IFJldHVybiBhIGxhenkgdmFsdWUgd2l0aCB0eXBlIFRZUEUgbG9jYXRlZCBh dCBBRERSIChjZi4gdmFsdWVfYXQpLiAgKi8KQEAgLTYwMCwxNyArNjE0LDcg QEAgdmFsdWVfYXQgKHN0cnVjdCB0eXBlICp0eXBlLCBDT1JFX0FERFIgYQog c3RydWN0IHZhbHVlICoKIHZhbHVlX2F0X2xhenkgKHN0cnVjdCB0eXBlICp0 eXBlLCBDT1JFX0FERFIgYWRkcikKIHsKLSAgc3RydWN0IHZhbHVlICp2YWw7 Ci0KLSAgaWYgKFRZUEVfQ09ERSAoY2hlY2tfdHlwZWRlZiAodHlwZSkpID09 IFRZUEVfQ09ERV9WT0lEKQotICAgIGVycm9yIChfKCJBdHRlbXB0IHRvIGRl cmVmZXJlbmNlIGEgZ2VuZXJpYyBwb2ludGVyLiIpKTsKLQotICB2YWwgPSBh bGxvY2F0ZV92YWx1ZV9sYXp5ICh0eXBlKTsKLQotICBWQUxVRV9MVkFMICh2 YWwpID0gbHZhbF9tZW1vcnk7Ci0gIHNldF92YWx1ZV9hZGRyZXNzICh2YWws IGFkZHIpOwotCi0gIHJldHVybiB2YWw7CisgIHJldHVybiBnZXRfdmFsdWVf YXQgKHR5cGUsIGFkZHIsIDEpOwogfQogCiAvKiBDYWxsZWQgb25seSBmcm9t IHRoZSB2YWx1ZV9jb250ZW50cyBhbmQgdmFsdWVfY29udGVudHNfYWxsKCkK QEAgLTY1Niw3ICs2NjAsMTIgQEAgdmFsdWVfZmV0Y2hfbGF6eSAoc3RydWN0 IHZhbHVlICp2YWwpCiAgICAgICBpbnQgbGVuZ3RoID0gVFlQRV9MRU5HVEgg KGNoZWNrX3R5cGVkZWYgKHZhbHVlX2VuY2xvc2luZ190eXBlICh2YWwpKSk7 CiAKICAgICAgIGlmIChsZW5ndGgpCi0JcmVhZF9tZW1vcnkgKGFkZHIsIHZh bHVlX2NvbnRlbnRzX2FsbF9yYXcgKHZhbCksIGxlbmd0aCk7CisJeworCSAg aWYgKHZhbHVlX3N0YWNrICh2YWwpKQorCSAgICByZWFkX3N0YWNrIChhZGRy LCB2YWx1ZV9jb250ZW50c19hbGxfcmF3ICh2YWwpLCBsZW5ndGgpOworCSAg ZWxzZQorCSAgICByZWFkX21lbW9yeSAoYWRkciwgdmFsdWVfY29udGVudHNf YWxsX3JhdyAodmFsKSwgbGVuZ3RoKTsKKwl9CiAgICAgfQogICBlbHNlIGlm IChWQUxVRV9MVkFMICh2YWwpID09IGx2YWxfcmVnaXN0ZXIpCiAgICAgewpJ bmRleDogdmFsdWUuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL3ZhbHVlLmMsdgpyZXRyaWV2aW5nIHJldmlz aW9uIDEuOTUKZGlmZiAtdSAtcCAtcjEuOTUgdmFsdWUuYwotLS0gdmFsdWUu YwkyOCBBdWcgMjAwOSAxODo1MDo0OSAtMDAwMAkxLjk1CisrKyB2YWx1ZS5j CTI5IEF1ZyAyMDA5IDAwOjM2OjEzIC0wMDAwCkBAIC0xOTYsNiArMTk2LDEw IEBAIHN0cnVjdCB2YWx1ZQogICAvKiBJZiB2YWx1ZSBpcyBhIHZhcmlhYmxl LCBpcyBpdCBpbml0aWFsaXplZCBvciBub3QuICAqLwogICBpbnQgaW5pdGlh bGl6ZWQ7CiAKKyAgLyogSWYgdmFsdWUgaXMgZnJvbSB0aGUgc3RhY2suICBJ ZiB0aGlzIGlzIHNldCwgcmVhZF9zdGFjayB3aWxsIGJlCisgICAgIHVzZWQg aW5zdGVhZCBvZiByZWFkX21lbW9yeSB0byBlbmFibGUgZXh0cmEgY2FjaGlu Zy4gICovCisgIGludCBzdGFjazsKKwogICAvKiBBY3R1YWwgY29udGVudHMg b2YgdGhlIHZhbHVlLiAgVGFyZ2V0IGJ5dGUtb3JkZXIuICBOVUxMIG9yIG5v dAogICAgICB2YWxpZCBpZiBsYXp5IGlzIG5vbnplcm8uICAqLwogICBnZGJf Ynl0ZSAqY29udGVudHM7CkBAIC00MjQsNiArNDI4LDE4IEBAIHNldF92YWx1 ZV9sYXp5IChzdHJ1Y3QgdmFsdWUgKnZhbHVlLCBpbnQKICAgdmFsdWUtPmxh enkgPSB2YWw7CiB9CiAKK2ludAordmFsdWVfc3RhY2sgKHN0cnVjdCB2YWx1 ZSAqdmFsdWUpCit7CisgIHJldHVybiB2YWx1ZS0+c3RhY2s7Cit9CisKK3Zv aWQKK3NldF92YWx1ZV9zdGFjayAoc3RydWN0IHZhbHVlICp2YWx1ZSwgaW50 IHZhbCkKK3sKKyAgdmFsdWUtPnN0YWNrID0gdmFsOworfQorCiBjb25zdCBn ZGJfYnl0ZSAqCiB2YWx1ZV9jb250ZW50cyAoc3RydWN0IHZhbHVlICp2YWx1 ZSkKIHsKSW5kZXg6IHZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi92YWx1ZS5oLHYKcmV0cmlldmlu ZyByZXZpc2lvbiAxLjE0OApkaWZmIC11IC1wIC1yMS4xNDggdmFsdWUuaAot LS0gdmFsdWUuaAkxMyBBdWcgMjAwOSAxODozOToyMCAtMDAwMAkxLjE0OAor KysgdmFsdWUuaAkyOSBBdWcgMjAwOSAwMDozNjoxMyAtMDAwMApAQCAtMjE1 LDYgKzIxNSw5IEBAIGV4dGVybiB2b2lkICp2YWx1ZV9jb21wdXRlZF9jbG9z dXJlIChzdHIKIGV4dGVybiBpbnQgdmFsdWVfbGF6eSAoc3RydWN0IHZhbHVl ICopOwogZXh0ZXJuIHZvaWQgc2V0X3ZhbHVlX2xhenkgKHN0cnVjdCB2YWx1 ZSAqdmFsdWUsIGludCB2YWwpOwogCitleHRlcm4gaW50IHZhbHVlX3N0YWNr IChzdHJ1Y3QgdmFsdWUgKik7CitleHRlcm4gdm9pZCBzZXRfdmFsdWVfc3Rh Y2sgKHN0cnVjdCB2YWx1ZSAqdmFsdWUsIGludCB2YWwpOworCiAvKiB2YWx1 ZV9jb250ZW50cygpIGFuZCB2YWx1ZV9jb250ZW50c19yYXcoKSBib3RoIHJl dHVybiB0aGUgYWRkcmVzcwogICAgb2YgdGhlIGdkYiBidWZmZXIgdXNlZCB0 byBob2xkIGEgY29weSBvZiB0aGUgY29udGVudHMgb2YgdGhlIGx2YWwuCiAg ICB2YWx1ZV9jb250ZW50cygpIGlzIHVzZWQgd2hlbiB0aGUgY29udGVudHMg b2YgdGhlIGJ1ZmZlciBhcmUgbmVlZGVkCkluZGV4OiBkb2MvZ2RiLnRleGlu Zm8KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMv c3JjL2dkYi9kb2MvZ2RiLnRleGluZm8sdgpyZXRyaWV2aW5nIHJldmlzaW9u IDEuNjE4CmRpZmYgLXUgLXAgLXIxLjYxOCBnZGIudGV4aW5mbwotLS0gZG9j L2dkYi50ZXhpbmZvCTI3IEF1ZyAyMDA5IDIxOjU2OjM4IC0wMDAwCTEuNjE4 CisrKyBkb2MvZ2RiLnRleGluZm8JMjkgQXVnIDIwMDkgMDA6MzY6MTMgLTAw MDAKQEAgLTg0MjEsMzIgKzg0MjEsNDcgQEAgY2hhcmFjdGVyLgogQHNlY3Rp b24gQ2FjaGluZyBEYXRhIG9mIFJlbW90ZSBUYXJnZXRzCiBAY2luZGV4IGNh Y2hpbmcgZGF0YSBvZiByZW1vdGUgdGFyZ2V0cwogCi1AdmFsdWV7R0RCTn0g Y2FuIGNhY2hlIGRhdGEgZXhjaGFuZ2VkIGJldHdlZW4gdGhlIGRlYnVnZ2Vy IGFuZCBhCitAdmFsdWV7R0RCTn0gY2FjaGVzIGRhdGEgZXhjaGFuZ2VkIGJl dHdlZW4gdGhlIGRlYnVnZ2VyIGFuZCBhCiByZW1vdGUgdGFyZ2V0IChAcHhy ZWZ7UmVtb3RlIERlYnVnZ2luZ30pLiAgU3VjaCBjYWNoaW5nIGdlbmVyYWxs eSBpbXByb3ZlcwogcGVyZm9ybWFuY2UsIGJlY2F1c2UgaXQgcmVkdWNlcyB0 aGUgb3ZlcmhlYWQgb2YgdGhlIHJlbW90ZSBwcm90b2NvbCBieQotYnVuZGxp bmcgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMgaW50byBsYXJnZSBjaHVua3Mu ICBVbmZvcnR1bmF0ZWx5LAotQHZhbHVle0dEQk59IGRvZXMgbm90IGN1cnJl bnRseSBrbm93IGFueXRoaW5nIGFib3V0IHZvbGF0aWxlCi1yZWdpc3RlcnMs IGFuZCB0aHVzIGRhdGEgY2FjaGluZyB3aWxsIHByb2R1Y2UgaW5jb3JyZWN0 IHJlc3VsdHMgd2hlbgotdm9sYXRpbGUgcmVnaXN0ZXJzIGFyZSBpbiB1c2Uu CitidW5kbGluZyBtZW1vcnkgcmVhZHMgYW5kIHdyaXRlcyBpbnRvIGxhcmdl IGNodW5rcy4gIFVuZm9ydHVuYXRlbHksIHNpbXBseQorY2FjaGluZyBldmVy eXRoaW5nIHdvdWxkIGxlYWQgdG8gaW5jb3JyZWN0IHJlc3VsdHMsIHNpbmNl IEB2YWx1ZXtHREJOfSAKK2RvZXMgbm90IG5lY2Vzc2FyaWx5IGtub3cgYW55 dGhpbmcgYWJvdXQgdm9sYXRpbGUgdmFsdWVzLCBtZW1vcnktbWFwcGVkIEkv TworYWRkcmVzc2VzLCBldGMuICBUaGVyZWZvcmUsIGJ5IGRlZmF1bHQsIEB2 YWx1ZXtHREJOfSBvbmx5IGNhY2hlcyBkYXRhCitrbm93biB0byBiZSBvbiB0 aGUgc3RhY2suICBPdGhlciByZWdpb25zIG9mIG1lbW9yeSBjYW4gYmUgZXhw bGljaXRseSBtYXJrZWQKK2NhY2hlYWJsZTsgc2VlIEBweHJlZntNZW1vcnkg UmVnaW9uIEF0dHJpYnV0ZXN9LgogCiBAdGFibGUgQGNvZGUKIEBraW5kZXgg c2V0IHJlbW90ZWNhY2hlCiBAaXRlbSBzZXQgcmVtb3RlY2FjaGUgb24KIEBp dGVteCBzZXQgcmVtb3RlY2FjaGUgb2ZmCi1TZXQgY2FjaGluZyBzdGF0ZSBm b3IgcmVtb3RlIHRhcmdldHMuICBXaGVuIEBjb2Rle09OfSwgdXNlIGRhdGEK LWNhY2hpbmcuICBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBAY29kZXtP RkZ9LgorVGhpcyBvcHRpb24gbm8gbG9uZ2VyIGRvZXMgYW55dGhpbmc7IGl0 IGV4aXN0cyBmb3IgY29tcGF0aWJpbGl0eQord2l0aCBvbGQgc2NyaXB0cy4K IAogQGtpbmRleCBzaG93IHJlbW90ZWNhY2hlCiBAaXRlbSBzaG93IHJlbW90 ZWNhY2hlCi1TaG93IHRoZSBjdXJyZW50IHN0YXRlIG9mIGRhdGEgY2FjaGlu ZyBmb3IgcmVtb3RlIHRhcmdldHMuCitTaG93IHRoZSBjdXJyZW50IHN0YXRl IG9mIHRoZSBvYnNvbGV0ZSByZW1vdGVjYWNoZSBmbGFnLgorCitAa2luZGV4 IHNldCBzdGFjay1jYWNoZQorQGl0ZW0gc2V0IHN0YWNrLWNhY2hlIG9uCitA aXRlbXggc2V0IHN0YWNrLWNhY2hlIG9mZgorRW5hYmxlIG9yIGRpc2FibGUg Y2FjaGluZyBvZiBzdGFjayBhY2Nlc3Nlcy4gIFdoZW4gQGNvZGV7T059LCB1 c2UKK2NhY2hpbmcuICBCeSBkZWZhdWx0LCB0aGlzIG9wdGlvbiBpcyBAY29k ZXtPTn0uCisKK0BraW5kZXggc2hvdyBzdGFjay1jYWNoZQorQGl0ZW0gc2hv dyBzdGFjay1jYWNoZQorU2hvdyB0aGUgY3VycmVudCBzdGF0ZSBvZiBkYXRh IGNhY2hpbmcgZm9yIG1lbW9yeSBhY2Nlc3Nlcy4KIAogQGtpbmRleCBpbmZv IGRjYWNoZQotQGl0ZW0gaW5mbyBkY2FjaGUKK0BpdGVtIGluZm8gZGNhY2hl IEBye1t9bGluZUBye119CiBQcmludCB0aGUgaW5mb3JtYXRpb24gYWJvdXQg dGhlIGRhdGEgY2FjaGUgcGVyZm9ybWFuY2UuICBUaGUKLWluZm9ybWF0aW9u IGRpc3BsYXllZCBpbmNsdWRlczogdGhlIGRjYWNoZSB3aWR0aCBhbmQgZGVw dGg7IGFuZCBmb3IKLWVhY2ggY2FjaGUgbGluZSwgaG93IG1hbnkgdGltZXMg aXQgd2FzIHJlZmVyZW5jZWQsIGFuZCBpdHMgZGF0YSBhbmQKLXN0YXRlIChp bnZhbGlkLCBkaXJ0eSwgdmFsaWQpLiAgVGhpcyBjb21tYW5kIGlzIHVzZWZ1 bCBmb3IgZGVidWdnaW5nCi10aGUgZGF0YSBjYWNoZSBvcGVyYXRpb24uCitp bmZvcm1hdGlvbiBkaXNwbGF5ZWQgaW5jbHVkZXMgdGhlIGRjYWNoZSB3aWR0 aCBhbmQgZGVwdGgsIGFuZCBmb3IKK2VhY2ggY2FjaGUgbGluZSwgaXRzIG51 bWJlciwgYWRkcmVzcywgYW5kIGhvdyBtYW55IHRpbWVzIGl0IHdhcworcmVm ZXJlbmNlZC4gIFRoaXMgY29tbWFuZCBpcyB1c2VmdWwgZm9yIGRlYnVnZ2lu ZyB0aGUgZGF0YSBjYWNoZQorb3BlcmF0aW9uLgorCitJZiBhIGxpbmUgbnVt YmVyIGlzIHNwZWNpZmllZCwgdGhlIGNvbnRlbnRzIG9mIHRoYXQgbGluZSB3 aWxsIGJlCitwcmludGVkIGluIGhleC4KIEBlbmQgdGFibGUKIAogQG5vZGUg U2VhcmNoaW5nIE1lbW9yeQpJbmRleDogbWkvbWktbWFpbi5jCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvbWkv bWktbWFpbi5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE1NgpkaWZmIC11 IC1wIC1yMS4xNTYgbWktbWFpbi5jCi0tLSBtaS9taS1tYWluLmMJMiBKdWwg MjAwOSAxNzoyNTo1OSAtMDAwMAkxLjE1NgorKysgbWkvbWktbWFpbi5jCTI5 IEF1ZyAyMDA5IDAwOjM2OjEzIC0wMDAwCkBAIC0xMzUzLDcgKzEzNTMsOCBA QCBtaV9jbWRfZXhlY3V0ZSAoc3RydWN0IG1pX3BhcnNlICpwYXJzZSkKICAg c3RydWN0IGNsZWFudXAgKmNsZWFudXA7CiAgIGludCBpOwogCi0gIGZyZWVf YWxsX3ZhbHVlcyAoKTsKKyAgcHJlcGFyZV9leGVjdXRlX2NvbW1hbmQgKCk7 CisKICAgY2xlYW51cCA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCBO VUxMKTsKIAogICBpZiAocGFyc2UtPmZyYW1lICE9IC0xICYmIHBhcnNlLT50 aHJlYWQgPT0gLTEpCg== --000e0cd24e40e23a8504723d41df--