From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 18375 invoked by alias); 3 Dec 2008 06:04:34 -0000 Received: (qmail 18348 invoked by uid 22791); 3 Dec 2008 06:04:25 -0000 X-Spam-Check-By: sourceware.org Received: from smtp-out.google.com (HELO smtp-out.google.com) (216.239.45.13) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Wed, 03 Dec 2008 06:03:18 +0000 Received: from spaceape14.eur.corp.google.com (spaceape14.eur.corp.google.com [172.28.16.148]) by smtp-out.google.com with ESMTP id mB363EE3002077 for ; Tue, 2 Dec 2008 22:03:15 -0800 Received: from rv-out-0506.google.com (rvbf9.prod.google.com [10.140.82.9]) by spaceape14.eur.corp.google.com with ESMTP id mB363BMx003308 for ; Tue, 2 Dec 2008 22:03:12 -0800 Received: by rv-out-0506.google.com with SMTP id f9so3544737rvb.4 for ; Tue, 02 Dec 2008 22:03:11 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.177.15 with SMTP id z15mr6148020rve.114.1228284190963; Tue, 02 Dec 2008 22:03:10 -0800 (PST) In-Reply-To: References: <20081118125838.0613C412301@localhost> <200812012121.59580.pedro@codesourcery.com> Date: Wed, 03 Dec 2008 06:04:00 -0000 Message-ID: Subject: Re: [RFA] dummy frame handling cleanup, plus inferior fun call signal handling improvement From: Doug Evans To: Pedro Alves , gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd21182e2b807045d1e32df 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: 2008-12/txt/msg00046.txt.bz2 --000e0cd21182e2b807045d1e32df Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 5281 On Mon, Dec 1, 2008 at 5:20 PM, Doug Evans wrote: > On Mon, Dec 1, 2008 at 1:21 PM, Pedro Alves wrote: >> Hi Doug, >> >> I'd like to bring a current GDB deficiency to your attention, in >> case it affects anything related to this patch. >> >> If GDB stops due to a signal instead of hitting the dummy frame >> breakpoint, and you have set GDB to restore the state >> automatically with "set unwindonsignal on", and the thread >> that reported the signal (say a SIGSEGV) was *not* the same that was >> doing the infcall, GDB will currently restore the old context to the >> wrong thread (seen by inspection, having really tried it). >> >> Not having studied the patch yet, I'm just wondering if your changes >> would make it easier or harder to fix this, or if you could be >> extending the problem by possibly restoring things in the wrong >> thread as well. > > Heh. My patch serendipitously has the following to catch another case > I was seeing where the current thread unexpectedly changed. > > if (! ptid_equal (this_thread->ptid, inferior_thread ()->ptid)) > { > /* We've switched threads. Perhaps this shouldn't happen, but we > protect ourselves anyway. > There's no point in restoring the inferior status, > we're in a different thread. */ > discard_cleanups (inf_status_cleanup); > discard_inferior_status (inf_status); > dummy_frame_discard (dummy_frame); > error (_("\ > The current thread has switched while making a function call from GDB.\n\ > The state of the function call has been lost.\n\ > It may be recoverable by changing back to the original thread\n\ > and examining the state.")); > } > > I need fix my patch to save the calling thread's ptid > (this_thread->ptid) before resuming execution in case the thread dies. > I think I shouldn't call dummy_frame_discard here too. > And I also need to change the comment to document why the current > thread can switch, because it _can_ happen. :-) > I'll prepare a new version of my patch, and include a testcase to > handle the situation you mention. Thanks! Here's an updated version of my patch. It includes a testcase for the current thread changing in the middle of a hand-called function. Ok to check in? 2008-12-02 Doug Evans * dummy-frame.c (dummy_frame): Replace regcache member with caller_state. (dummy_frame_push): Replace caller_regcache arg with caller_state. Return pointer to created dummy frame. All callers updated. (remove_dummy_frame,do_dummy_frame_cleanup,pop_dummy_frame_from_ptr, lookup_dummy,lookup_dummy_id, pop_dummy_frame,dummy_frame_discard, do_pop_dummy_frame_cleanup,make_cleanup_pop_dummy_frame): New functions. (dummy_frame_pop): Rewrite. Verify requested frame is in the dummy frame stack. Restore program state. (cleanup_dummy_frames): Rewrite. (dummy_frame_sniffer): Update. * dummy-frame.h (regcache): Delete forward decl. (inferior_program_state,dummy_frame,cleanup): Add forward decls. (dummy_frame_push): Update prototype. (dummy_frame_discard,make_cleanup_pop_dummy_frame): Declare. * frame.c (frame_pop): dummy_frame_pop now does all the work for DUMMY_FRAMEs. * infcall.c (call_function_by_hand): Replace caller_regcache, caller_regcache_cleanup with caller_state, caller_state_cleanup. New locals dummy_frame, dummy_frame_cleanup, this_thread_ptid. Detect program stopping in a different thread. * inferior.h (inferior_program_state): Declare (opaque type). (save_inferior_program_state,restore_inferior_program_state, make_cleanup_restore_inferior_program_state, discard_inferior_program_state, get_inferior_program_state_regcache): Declare. (save_inferior_status): Update prototype. * infrun.c: #include "dummy-frame.h" (normal_stop): When stopped for the completion of an inferior function call, verify the expected stack frame kind and use dummy_frame_pop. (inferior_program_state): New struct. (save_inferior_program_state,restore_inferior_program_state, do_restore_inferior_program_state_cleanup, make_cleanup_restore_inferior_program_state, discard_inferior_program_state, get_inferior_program_state_regcache): New functions. (inferior_status): Remove members stop_signal, stop_pc, registers, restore_stack_info. (save_inferior_status): Remove arg restore_stack_info. All callers updated. Remove saving of state now saved by save_inferior_program_state. (restore_inferior_status): Remove restoration of state now done by restore_inferior_program_state. (discard_inferior_status): Remove freeing of registers, now done by discard_inferior_program_state. * gdb.base/call-signal-resume.exp: New file. * gdb.base/call-signals.c: New file. * gdb.base/unwindonsignal.exp: New file. * gdb.base/unwindonsignal.c: New file. * gdb.threads/interrupted-hand-call.exp: New file. * gdb.threads/interrupted-hand-call.cv: New file. --000e0cd21182e2b807045d1e32df Content-Type: text/plain; charset=US-ASCII; name="gdb-081202-infcall-3.patch.txt" Content-Disposition: attachment; filename="gdb-081202-infcall-3.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fo9kgg7y0 Content-length: 69793 MjAwOC0xMS0xOCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog ZHVtbXktZnJhbWUuYyAoZHVtbXlfZnJhbWUpOiBSZXBsYWNlIHJlZ2NhY2hl IG1lbWJlciB3aXRoCgljYWxsZXJfc3RhdGUuCgkoZHVtbXlfZnJhbWVfcHVz aCk6IFJlcGxhY2UgY2FsbGVyX3JlZ2NhY2hlIGFyZyB3aXRoIGNhbGxlcl9z dGF0ZS4KCVJldHVybiBwb2ludGVyIHRvIGNyZWF0ZWQgZHVtbXkgZnJhbWUu ICBBbGwgY2FsbGVycyB1cGRhdGVkLgoJKHJlbW92ZV9kdW1teV9mcmFtZSxk b19kdW1teV9mcmFtZV9jbGVhbnVwLHBvcF9kdW1teV9mcmFtZV9mcm9tX3B0 ciwKCWxvb2t1cF9kdW1teSxsb29rdXBfZHVtbXlfaWQsIHBvcF9kdW1teV9m cmFtZSxkdW1teV9mcmFtZV9kaXNjYXJkLAoJZG9fcG9wX2R1bW15X2ZyYW1l X2NsZWFudXAsbWFrZV9jbGVhbnVwX3BvcF9kdW1teV9mcmFtZSk6IE5ldwoJ ZnVuY3Rpb25zLgoJKGR1bW15X2ZyYW1lX3BvcCk6IFJld3JpdGUuICBWZXJp ZnkgcmVxdWVzdGVkIGZyYW1lIGlzIGluIHRoZQoJZHVtbXkgZnJhbWUgc3Rh Y2suICBSZXN0b3JlIHByb2dyYW0gc3RhdGUuCgkoY2xlYW51cF9kdW1teV9m cmFtZXMpOiBSZXdyaXRlLgoJKGR1bW15X2ZyYW1lX3NuaWZmZXIpOiBVcGRh dGUuCgkqIGR1bW15LWZyYW1lLmggKHJlZ2NhY2hlKTogRGVsZXRlIGZvcndh cmQgZGVjbC4KCShpbmZlcmlvcl9wcm9ncmFtX3N0YXRlLGR1bW15X2ZyYW1l LGNsZWFudXApOiBBZGQgZm9yd2FyZCBkZWNscy4KCShkdW1teV9mcmFtZV9w dXNoKTogVXBkYXRlIHByb3RvdHlwZS4KCShkdW1teV9mcmFtZV9kaXNjYXJk LG1ha2VfY2xlYW51cF9wb3BfZHVtbXlfZnJhbWUpOiBEZWNsYXJlLgoJKiBm cmFtZS5jIChmcmFtZV9wb3ApOiBkdW1teV9mcmFtZV9wb3Agbm93IGRvZXMg YWxsIHRoZSB3b3JrIGZvcgoJRFVNTVlfRlJBTUVzLgoJKiBpbmZjYWxsLmMg KGNhbGxfZnVuY3Rpb25fYnlfaGFuZCk6IFJlcGxhY2UgY2FsbGVyX3JlZ2Nh Y2hlLAoJY2FsbGVyX3JlZ2NhY2hlX2NsZWFudXAgd2l0aCBjYWxsZXJfc3Rh dGUsIGNhbGxlcl9zdGF0ZV9jbGVhbnVwLgoJTmV3IGxvY2FscyBkdW1teV9m cmFtZSwgZHVtbXlfZnJhbWVfY2xlYW51cCwgdGhpc190aHJlYWRfcHRpZC4K CURldGVjdCBwcm9ncmFtIHN0b3BwaW5nIGluIGEgZGlmZmVyZW50IHRocmVh ZC4KCSogaW5mZXJpb3IuaCAoaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSk6IERl Y2xhcmUgKG9wYXF1ZSB0eXBlKS4KCShzYXZlX2luZmVyaW9yX3Byb2dyYW1f c3RhdGUscmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlLAoJbWFrZV9j bGVhbnVwX3Jlc3RvcmVfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSwKCWRpc2Nh cmRfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSwKCWdldF9pbmZlcmlvcl9wcm9n cmFtX3N0YXRlX3JlZ2NhY2hlKTogRGVjbGFyZS4KCShzYXZlX2luZmVyaW9y X3N0YXR1cyk6IFVwZGF0ZSBwcm90b3R5cGUuCgkqIGluZnJ1bi5jOiAjaW5j bHVkZSAiZHVtbXktZnJhbWUuaCIKCShub3JtYWxfc3RvcCk6IFdoZW4gc3Rv cHBlZCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYW4gaW5mZXJpb3IgZnVuY3Rp b24KCWNhbGwsIHZlcmlmeSB0aGUgZXhwZWN0ZWQgc3RhY2sgZnJhbWUga2lu ZCBhbmQgdXNlIGR1bW15X2ZyYW1lX3BvcC4KCShpbmZlcmlvcl9wcm9ncmFt X3N0YXRlKTogTmV3IHN0cnVjdC4KCShzYXZlX2luZmVyaW9yX3Byb2dyYW1f c3RhdGUscmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlLAoJZG9fcmVz dG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlX2NsZWFudXAsCgltYWtlX2Ns ZWFudXBfcmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlLAoJZGlzY2Fy ZF9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlLAoJZ2V0X2luZmVyaW9yX3Byb2dy YW1fc3RhdGVfcmVnY2FjaGUpOiBOZXcgZnVuY3Rpb25zLgoJKGluZmVyaW9y X3N0YXR1cyk6IFJlbW92ZSBtZW1iZXJzIHN0b3Bfc2lnbmFsLCBzdG9wX3Bj LCByZWdpc3RlcnMsCglyZXN0b3JlX3N0YWNrX2luZm8uCgkoc2F2ZV9pbmZl cmlvcl9zdGF0dXMpOiBSZW1vdmUgYXJnIHJlc3RvcmVfc3RhY2tfaW5mby4K CUFsbCBjYWxsZXJzIHVwZGF0ZWQuICBSZW1vdmUgc2F2aW5nIG9mIHN0YXRl IG5vdyBzYXZlZCBieQoJc2F2ZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlLgoJ KHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzKTogUmVtb3ZlIHJlc3RvcmF0aW9u IG9mIHN0YXRlIG5vdyBkb25lIGJ5CglyZXN0b3JlX2luZmVyaW9yX3Byb2dy YW1fc3RhdGUuCgkoZGlzY2FyZF9pbmZlcmlvcl9zdGF0dXMpOiBSZW1vdmUg ZnJlZWluZyBvZiByZWdpc3RlcnMsIG5vdyBkb25lIGJ5CglkaXNjYXJkX2lu ZmVyaW9yX3Byb2dyYW1fc3RhdGUuCgoJKiBnZGIuYmFzZS9jYWxsLXNpZ25h bC1yZXN1bWUuZXhwOiBOZXcgZmlsZS4KCSogZ2RiLmJhc2UvY2FsbC1zaWdu YWxzLmM6IE5ldyBmaWxlLgoJKiBnZGIuYmFzZS91bndpbmRvbnNpZ25hbC5l eHA6IE5ldyBmaWxlLgoJKiBnZGIuYmFzZS91bndpbmRvbnNpZ25hbC5jOiBO ZXcgZmlsZS4KCSogZ2RiLnRocmVhZHMvaW50ZXJydXB0ZWQtaGFuZC1jYWxs LmV4cDogTmV3IGZpbGUuCgkqIGdkYi50aHJlYWRzL2ludGVycnVwdGVkLWhh bmQtY2FsbC5jdjogTmV3IGZpbGUuCgpJbmRleDogZHVtbXktZnJhbWUuYwo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMv Z2RiL2R1bW15LWZyYW1lLmMsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuNTMK ZGlmZiAtdSAtcCAtcjEuNTMgZHVtbXktZnJhbWUuYwotLS0gZHVtbXktZnJh bWUuYwkzMCBPY3QgMjAwOCAyMDozNTozMCAtMDAwMAkxLjUzCisrKyBkdW1t eS1mcmFtZS5jCTMgRGVjIDIwMDggMDU6MDA6NDIgLTAwMDAKQEAgLTQyLDgg KzQyLDggQEAgc3RydWN0IGR1bW15X2ZyYW1lCiAgIC8qIFRoaXMgZnJhbWUn cyBJRC4gIE11c3QgbWF0Y2ggdGhlIHZhbHVlIHJldHVybmVkIGJ5CiAgICAg IGdkYmFyY2hfZHVtbXlfaWQuICAqLwogICBzdHJ1Y3QgZnJhbWVfaWQgaWQ7 Ci0gIC8qIFRoZSBjYWxsZXIncyByZWdjYWNoZS4gICovCi0gIHN0cnVjdCBy ZWdjYWNoZSAqcmVnY2FjaGU7CisgIC8qIFRoZSBjYWxsZXIncyBzdGF0ZSBw cmlvciB0byB0aGUgY2FsbC4gICovCisgIHN0cnVjdCBpbmZlcmlvcl9wcm9n cmFtX3N0YXRlICpjYWxsZXJfc3RhdGU7CiB9OwogCiBzdGF0aWMgc3RydWN0 IGR1bW15X2ZyYW1lICpkdW1teV9mcmFtZV9zdGFjayA9IE5VTEw7CkBAIC04 MSw2MSArODEsMTgxIEBAIGRlcHJlY2F0ZWRfcGNfaW5fY2FsbF9kdW1teSAo Q09SRV9BRERSIHAKICAgcmV0dXJuIDA7CiB9CiAKLS8qIFB1c2ggdGhlIGNh bGxlcidzIHN0YXRlLCBhbG9uZyB3aXRoIHRoZSBkdW1teSBmcmFtZSBpbmZv LCBvbnRvIGEKKy8qIFB1c2ggdGhlIGNhbGxlcidzIHN0YXRlLCBhbG9uZyB3 aXRoIHRoZSBkdW1teSBmcmFtZSBpbmZvLCBvbnRvIHRoZQogICAgZHVtbXkt ZnJhbWUgc3RhY2suICAqLwogCi12b2lkCi1kdW1teV9mcmFtZV9wdXNoIChz dHJ1Y3QgcmVnY2FjaGUgKmNhbGxlcl9yZWdjYWNoZSwKK3N0cnVjdCBkdW1t eV9mcmFtZSAqCitkdW1teV9mcmFtZV9wdXNoIChzdHJ1Y3QgaW5mZXJpb3Jf cHJvZ3JhbV9zdGF0ZSAqY2FsbGVyX3N0YXRlLAogCQkgIGNvbnN0IHN0cnVj dCBmcmFtZV9pZCAqZHVtbXlfaWQpCiB7CiAgIHN0cnVjdCBkdW1teV9mcmFt ZSAqZHVtbXlfZnJhbWU7CiAKICAgZHVtbXlfZnJhbWUgPSBYWkFMTE9DIChz dHJ1Y3QgZHVtbXlfZnJhbWUpOwotICBkdW1teV9mcmFtZS0+cmVnY2FjaGUg PSBjYWxsZXJfcmVnY2FjaGU7CisgIGR1bW15X2ZyYW1lLT5jYWxsZXJfc3Rh dGUgPSBjYWxsZXJfc3RhdGU7CiAgIGR1bW15X2ZyYW1lLT5pZCA9ICgqZHVt bXlfaWQpOwogICBkdW1teV9mcmFtZS0+bmV4dCA9IGR1bW15X2ZyYW1lX3N0 YWNrOwogICBkdW1teV9mcmFtZV9zdGFjayA9IGR1bW15X2ZyYW1lOworCisg IHJldHVybiBkdW1teV9mcmFtZTsKIH0KIAotLyogUG9wIHRoZSBkdW1teSBm cmFtZSB3aXRoIElEIGR1bW15X2lkIGZyb20gdGhlIGR1bW15LWZyYW1lIHN0 YWNrLiAgKi8KKy8qIFJlbW92ZSAqRFVNTVlfUFRSIGZyb20gdGhlIGR1bW15 IGZyYW1lIHN0YWNrLiAgKi8KIAotdm9pZAotZHVtbXlfZnJhbWVfcG9wIChz dHJ1Y3QgZnJhbWVfaWQgZHVtbXlfaWQpCitzdGF0aWMgdm9pZAorcmVtb3Zl X2R1bW15X2ZyYW1lIChzdHJ1Y3QgZHVtbXlfZnJhbWUgKipkdW1teV9wdHIp Cit7CisgIHN0cnVjdCBkdW1teV9mcmFtZSAqZHVtbXkgPSAqZHVtbXlfcHRy OworCisgICpkdW1teV9wdHIgPSBkdW1teS0+bmV4dDsKKyAgZGlzY2FyZF9p bmZlcmlvcl9wcm9ncmFtX3N0YXRlIChkdW1teS0+Y2FsbGVyX3N0YXRlKTsK KyAgeGZyZWUgKGR1bW15KTsKK30KKworLyogQ2xlYW51cCBoYW5kbGVyIGZv ciBkdW1teV9mcmFtZV9wb3AuICAqLworCitzdGF0aWMgdm9pZAorZG9fZHVt bXlfZnJhbWVfY2xlYW51cCAodm9pZCAqYXJnKQogewotICBzdHJ1Y3QgZHVt bXlfZnJhbWUgKipkdW1teV9wdHI7CisgIHN0cnVjdCBkdW1teV9mcmFtZSAq KmR1bW15X3B0ciA9IGFyZzsKKworICByZW1vdmVfZHVtbXlfZnJhbWUgKGR1 bW15X3B0cik7Cit9CisKKy8qIFBvcCAqRFVNTVlfUFRSLCByZXN0b3Jpbmcg cHJvZ3JhbSBzdGF0ZSB0byB0aGF0IGJlZm9yZSB0aGUKKyAgIGZyYW1lIHdh cyBjcmVhdGVkLiAgKi8KKworc3RhdGljIHZvaWQKK3BvcF9kdW1teV9mcmFt ZV9mcm9tX3B0ciAoc3RydWN0IGR1bW15X2ZyYW1lICoqZHVtbXlfcHRyKQor eworICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CisgIHN0cnVjdCBkdW1t eV9mcmFtZSAqZHVtbXk7CisKKyAgY2xlYW51cHMgPSBtYWtlX2NsZWFudXAg KGRvX2R1bW15X2ZyYW1lX2NsZWFudXAsIGR1bW15X3B0cik7CiAKLSAgZm9y IChkdW1teV9wdHIgPSAmZHVtbXlfZnJhbWVfc3RhY2s7Ci0gICAgICAgKCpk dW1teV9wdHIpICE9IE5VTEw7Ci0gICAgICAgZHVtbXlfcHRyID0gJigqZHVt bXlfcHRyKS0+bmV4dCkKKyAgcmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0 YXRlICgoKmR1bW15X3B0ciktPmNhbGxlcl9zdGF0ZSk7CisKKyAgLyogcmVz dG9yZV9pbmZlcmlvcl9zdGF0dXMgZnJlZXMgaW5mX3N0YXR1cywKKyAgICAg YWxsIHRoYXQgcmVtYWlucyBpcyB0byBwb3AgKmR1bW15X3B0ciAqLworICBk aXNjYXJkX2NsZWFudXBzIChjbGVhbnVwcyk7CisgIGR1bW15ID0gKmR1bW15 X3B0cjsKKyAgKmR1bW15X3B0ciA9IGR1bW15LT5uZXh0OworICB4ZnJlZSAo ZHVtbXkpOworCisgIC8qIFdlJ3ZlIG1hZGUgcmlnaHQgbWVzcyBvZiBHREIn cyBsb2NhbCBzdGF0ZSwganVzdCBkaXNjYXJkCisgICAgIGV2ZXJ5dGhpbmcu ICAqLworICByZWluaXRfZnJhbWVfY2FjaGUgKCk7Cit9CisKKy8qIFJldHVy biBhIHBvaW50ZXIgdG8gRFVNTVkncyBlbnRyeSBpbiB0aGUgZHVtbXkgZnJh bWUgc3RhY2suCisgICBSZXR1cm5zIE5VTEwgaWYgRFVNTVkgaXMgbm90IHBy ZXNlbnQuICAqLworCitzdGF0aWMgc3RydWN0IGR1bW15X2ZyYW1lICoqCits b29rdXBfZHVtbXkgKHN0cnVjdCBkdW1teV9mcmFtZSAqZHVtbXkpCit7Cisg IHN0cnVjdCBkdW1teV9mcmFtZSAqKmRwOworCisgIGZvciAoZHAgPSAmZHVt bXlfZnJhbWVfc3RhY2s7ICpkcCAhPSBOVUxMOyBkcCA9ICYoKmRwKS0+bmV4 dCkKICAgICB7Ci0gICAgICBzdHJ1Y3QgZHVtbXlfZnJhbWUgKmR1bW15ID0g KmR1bW15X3B0cjsKLSAgICAgIGlmIChmcmFtZV9pZF9lcSAoZHVtbXktPmlk LCBkdW1teV9pZCkpCi0JewotCSAgKmR1bW15X3B0ciA9IGR1bW15LT5uZXh0 OwotCSAgcmVnY2FjaGVfeGZyZWUgKGR1bW15LT5yZWdjYWNoZSk7Ci0JICB4 ZnJlZSAoZHVtbXkpOwotCSAgYnJlYWs7Ci0JfQorICAgICAgaWYgKCpkcCA9 PSBkdW1teSkKKwlyZXR1cm4gZHA7CiAgICAgfQorCisgIHJldHVybiBOVUxM OwogfQogCi0vKiBUaGVyZSBtYXkgYmUgc3RhbGUgZHVtbXkgZnJhbWVzLCBw ZXJoYXBzIGxlZnQgb3ZlciBmcm9tIHdoZW4gYSBsb25nanVtcCB0b29rIHVz Ci0gICBvdXQgb2YgYSBmdW5jdGlvbiB0aGF0IHdhcyBjYWxsZWQgYnkgdGhl IGRlYnVnZ2VyLiAgQ2xlYW4gdGhlbSB1cCBhdCBsZWFzdCBvbmNlCi0gICB3 aGVuZXZlciB3ZSBzdGFydCBhIG5ldyBpbmZlcmlvci4gICovCisvKiBMb29r IHVwIERVTU1ZX0lELgorICAgUmV0dXJuIE5VTEwgaWYgbm90IGZvdW5kLiAg Ki8KIAotc3RhdGljIHZvaWQKLWNsZWFudXBfZHVtbXlfZnJhbWVzIChzdHJ1 Y3QgdGFyZ2V0X29wcyAqdGFyZ2V0LCBpbnQgZnJvbV90dHkpCitzdGF0aWMg c3RydWN0IGR1bW15X2ZyYW1lICoqCitsb29rdXBfZHVtbXlfaWQgKHN0cnVj dCBmcmFtZV9pZCBkdW1teV9pZCkKIHsKLSAgc3RydWN0IGR1bW15X2ZyYW1l ICpkdW1teSwgKm5leHQ7CisgIHN0cnVjdCBkdW1teV9mcmFtZSAqKmRwOwog Ci0gIGZvciAoZHVtbXkgPSBkdW1teV9mcmFtZV9zdGFjazsgZHVtbXk7IGR1 bW15ID0gbmV4dCkKKyAgZm9yIChkcCA9ICZkdW1teV9mcmFtZV9zdGFjazsg KmRwICE9IE5VTEw7IGRwID0gJigqZHApLT5uZXh0KQogICAgIHsKLSAgICAg IG5leHQgPSBkdW1teS0+bmV4dDsKLSAgICAgIHJlZ2NhY2hlX3hmcmVlIChk dW1teS0+cmVnY2FjaGUpOwotICAgICAgeGZyZWUgKGR1bW15KTsKKyAgICAg IGlmIChmcmFtZV9pZF9lcSAoKCpkcCktPmlkLCBkdW1teV9pZCkpCisJcmV0 dXJuIGRwOwogICAgIH0KIAotICBkdW1teV9mcmFtZV9zdGFjayA9IE5VTEw7 CisgIHJldHVybiBOVUxMOworfQorCisvKiBQb3AgRFVNTVksIHJlc3RvcmUg aW5mZXJpb3Igc3RhdGUuCisgICBPbiByZXR1cm4gcmVpbml0X2ZyYW1lX2Nh Y2hlIGhhcyBiZWVuIGNhbGxlZC4KKyAgIElmIHRoZSBmcmFtZSBpc24ndCBm b3VuZCwgZmxhZyBhbiBpbnRlcm5hbCBlcnJvci4gICovCisKK3N0YXRpYyB2 b2lkCitwb3BfZHVtbXlfZnJhbWUgKHN0cnVjdCBkdW1teV9mcmFtZSAqZHVt bXkpCit7CisgIHN0cnVjdCBkdW1teV9mcmFtZSAqKmRwOworCisgIGRwID0g bG9va3VwX2R1bW15IChkdW1teSk7CisgIGdkYl9hc3NlcnQgKGRwICE9IE5V TEwpOworCisgIHBvcF9kdW1teV9mcmFtZV9mcm9tX3B0ciAoZHApOworfQor CisvKiBQb3AgdGhlIGR1bW15IGZyYW1lIERVTU1ZX0lELCByZXN0b3Jpbmcg cHJvZ3JhbSBzdGF0ZSB0byB0aGF0IGJlZm9yZSB0aGUKKyAgIGZyYW1lIHdh cyBjcmVhdGVkLgorICAgT24gcmV0dXJuIHJlaW5pdF9mcmFtZV9jYWNoZSBo YXMgYmVlbiBjYWxsZWQuCisgICBJZiB0aGUgZnJhbWUgaXNuJ3QgZm91bmQs IGZsYWcgYW4gaW50ZXJuYWwgZXJyb3IuCisKKyAgIE5PVEU6IFRoaXMgY2Fu IG9ubHkgcG9wIHRoZSBvbmUgZnJhbWUsIGV2ZW4gaWYgaXQgaXMgaW4gdGhl IG1pZGRsZSBvZiB0aGUKKyAgIHN0YWNrLCBiZWNhdXNlIHRoZSBvdGhlciBm cmFtZXMgbWF5IGJlIGZvciBkaWZmZXJlbnQgdGhyZWFkcywgYW5kIHRoZXJl J3MKKyAgIGN1cnJlbnRseSBubyB3YXkgdG8gdGVsbCB3aGljaCBzdGFjayBm cmFtZSBpcyBmb3Igd2hpY2ggdGhyZWFkLiAgKi8KKwordm9pZAorZHVtbXlf ZnJhbWVfcG9wIChzdHJ1Y3QgZnJhbWVfaWQgZHVtbXlfaWQpCit7CisgIHN0 cnVjdCBkdW1teV9mcmFtZSAqKmRwOworCisgIGRwID0gbG9va3VwX2R1bW15 X2lkIChkdW1teV9pZCk7CisgIGdkYl9hc3NlcnQgKGRwICE9IE5VTEwpOwor CisgIHBvcF9kdW1teV9mcmFtZV9mcm9tX3B0ciAoZHApOworfQorCisvKiBE aXNjYXJkIERVTU1ZIGFuZCByZW1vdmUgaXQgZnJvbSB0aGUgZHVtbXkgZnJh bWUgc3RhY2suCisgICBJZiB0aGUgZnJhbWUgaXNuJ3QgZm91bmQsIGZsYWcg YW4gaW50ZXJuYWwgZXJyb3IuICAqLworCit2b2lkCitkdW1teV9mcmFtZV9k aXNjYXJkIChzdHJ1Y3QgZHVtbXlfZnJhbWUgKmR1bW15KQoreworICBzdHJ1 Y3QgZHVtbXlfZnJhbWUgKipkcDsKKworICBkcCA9IGxvb2t1cF9kdW1teSAo ZHVtbXkpOworICBnZGJfYXNzZXJ0IChkcCAhPSBOVUxMKTsKKworICByZW1v dmVfZHVtbXlfZnJhbWUgKGRwKTsKK30KKworLyogVXRpbGl0eSBmb3IgbWFr ZV9jbGVhbnVwX3BvcF9kdW1teV9mcmFtZS4gICovCisKK3N0YXRpYyB2b2lk Citkb19wb3BfZHVtbXlfZnJhbWVfY2xlYW51cCAodm9pZCAqZHVtbXkpCit7 CisgIHBvcF9kdW1teV9mcmFtZSAoZHVtbXkpOworfQorCisvKiBTY2hlZHVs ZSBhIGNsZWFudXAgdG8gcG9wIERVTU1ZX0ZSQU1FIGFuZCByZXN0b3JlIGlu ZmVyaW9yIHN0YXRlLiAgKi8KKworc3RydWN0IGNsZWFudXAgKgorbWFrZV9j bGVhbnVwX3BvcF9kdW1teV9mcmFtZSAoc3RydWN0IGR1bW15X2ZyYW1lICpk dW1teSkKK3sKKyAgcmV0dXJuIG1ha2VfY2xlYW51cCAoZG9fcG9wX2R1bW15 X2ZyYW1lX2NsZWFudXAsIGR1bW15KTsKK30KKworLyogVGhlcmUgbWF5IGJl IHN0YWxlIGR1bW15IGZyYW1lcywgcGVyaGFwcyBsZWZ0IG92ZXIgZnJvbSB3 aGVuIGEgbG9uZ2p1bXAgdG9vaworICAgdXMgb3V0IG9mIGEgZnVuY3Rpb24g dGhhdCB3YXMgY2FsbGVkIGJ5IHRoZSBkZWJ1Z2dlci4gIENsZWFuIHRoZW0g dXAgYXQKKyAgIGxlYXN0IG9uY2Ugd2hlbmV2ZXIgd2Ugc3RhcnQgYSBuZXcg aW5mZXJpb3IuICAqLworCitzdGF0aWMgdm9pZAorY2xlYW51cF9kdW1teV9m cmFtZXMgKHN0cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQsIGludCBmcm9tX3R0 eSkKK3sKKyAgd2hpbGUgKGR1bW15X2ZyYW1lX3N0YWNrICE9IE5VTEwpCisg ICAgeworICAgICAgcmVtb3ZlX2R1bW15X2ZyYW1lICgmZHVtbXlfZnJhbWVf c3RhY2spOworICAgIH0KIH0KIAogLyogUmV0dXJuIHRoZSBkdW1teSBmcmFt ZSBjYWNoZSwgaXQgY29udGFpbnMgYm90aCB0aGUgSUQsIGFuZCBhCkBAIC0x NzgsNyArMjk4LDcgQEAgZHVtbXlfZnJhbWVfc25pZmZlciAoY29uc3Qgc3Ry dWN0IGZyYW1lXwogCSAgICB7CiAJICAgICAgc3RydWN0IGR1bW15X2ZyYW1l X2NhY2hlICpjYWNoZTsKIAkgICAgICBjYWNoZSA9IEZSQU1FX09CU1RBQ0tf WkFMTE9DIChzdHJ1Y3QgZHVtbXlfZnJhbWVfY2FjaGUpOwotCSAgICAgIGNh Y2hlLT5wcmV2X3JlZ2NhY2hlID0gZHVtbXlmcmFtZS0+cmVnY2FjaGU7CisJ ICAgICAgY2FjaGUtPnByZXZfcmVnY2FjaGUgPSBnZXRfaW5mZXJpb3JfcHJv Z3JhbV9zdGF0ZV9yZWdjYWNoZSAoZHVtbXlmcmFtZS0+Y2FsbGVyX3N0YXRl KTsKIAkgICAgICBjYWNoZS0+dGhpc19pZCA9IHRoaXNfaWQ7CiAJICAgICAg KCp0aGlzX3Byb2xvZ3VlX2NhY2hlKSA9IGNhY2hlOwogCSAgICAgIHJldHVy biAxOwpAQCAtMjE1LDcgKzMzNSw3IEBAIGR1bW15X2ZyYW1lX3ByZXZfcmVn aXN0ZXIgKHN0cnVjdCBmcmFtZV8KICAgcmV0dXJuIHJlZ192YWw7CiB9CiAK LS8qIEFzc3VtaW5nIHRoYXQgVEhJUyBmcmFtZSBpcyBhIGR1bW15LCByZXR1 cm4gdGhlIElEIG9mIFRISVMgZnJhbWUuICBUaGF0IElEIGlzCisvKiBBc3N1 bWluZyB0aGF0IFRISVNfRlJBTUUgaXMgYSBkdW1teSwgcmV0dXJuIGl0cyBJ RC4gIFRoYXQgSUQgaXMKICAgIGRldGVybWluZWQgYnkgZXhhbWluaW5nIHRo ZSBORVhUIGZyYW1lJ3MgdW53b3VuZCByZWdpc3RlcnMgdXNpbmcKICAgIHRo ZSBtZXRob2QgZHVtbXlfaWQoKS4gIEFzIGEgc2lkZSBlZmZlY3QsIFRISVMg ZHVtbXkgZnJhbWUncwogICAgZHVtbXkgY2FjaGUgaXMgbG9jYXRlZCBhbmQg YW5kIHNhdmVkIGluIFRISVNfUFJPTE9HVUVfQ0FDSEUuICAqLwpJbmRleDog ZHVtbXktZnJhbWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxl OiAvY3ZzL3NyYy9zcmMvZ2RiL2R1bW15LWZyYW1lLmgsdgpyZXRyaWV2aW5n IHJldmlzaW9uIDEuMjMKZGlmZiAtdSAtcCAtcjEuMjMgZHVtbXktZnJhbWUu aAotLS0gZHVtbXktZnJhbWUuaAk4IFNlcCAyMDA4IDE1OjIzOjEyIC0wMDAw CTEuMjMKKysrIGR1bW15LWZyYW1lLmgJMyBEZWMgMjAwOCAwNTowMDo0MiAt MDAwMApAQCAtMjMsOCArMjMsMTAgQEAKICNpbmNsdWRlICJmcmFtZS5oIgog CiBzdHJ1Y3QgZnJhbWVfaW5mbzsKLXN0cnVjdCByZWdjYWNoZTsKK3N0cnVj dCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlOwogc3RydWN0IGZyYW1lX3Vud2lu ZDsKK3N0cnVjdCBkdW1teV9mcmFtZTsKK3N0cnVjdCBjbGVhbnVwOwogCiAv KiBQdXNoIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaWRlbnRpZnksIGFu ZCB1bndpbmQgZnJvbSwgYSBkdW1teQogICAgZnJhbWUgb250byB0aGUgZHVt bXkgZnJhbWUgc3RhY2suICAqLwpAQCAtMzksMTEgKzQxLDI5IEBAIHN0cnVj dCBmcmFtZV91bndpbmQ7CiAgICBiZSBleHBhbmRlZCBzbyB0aGF0IGl0IGtu b3ducyB0aGUgbG93ZXIvdXBwZXIgZXh0ZW50IG9mIHRoZSBkdW1teQogICAg ZnJhbWUncyBjb2RlLiAgKi8KIAotZXh0ZXJuIHZvaWQgZHVtbXlfZnJhbWVf cHVzaCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLQkJCSAgICAgIGNv bnN0IHN0cnVjdCBmcmFtZV9pZCAqZHVtbXlfaWQpOworZXh0ZXJuIHN0cnVj dCBkdW1teV9mcmFtZSAqZHVtbXlfZnJhbWVfcHVzaCAoc3RydWN0IGluZmVy aW9yX3Byb2dyYW1fc3RhdGUgKmNhbGxlcl9zdGF0ZSwKKwkJCQkJICAgICBj b25zdCBzdHJ1Y3QgZnJhbWVfaWQgKmR1bW15X2lkKTsKKworLyogUG9wIHRo ZSBkdW1teSBmcmFtZSBEVU1NWV9JRCwgcmVzdG9yaW5nIHByb2dyYW0gc3Rh dGUgdG8gdGhhdCBiZWZvcmUgdGhlCisgICBmcmFtZSB3YXMgY3JlYXRlZC4K KyAgIE9uIHJldHVybiByZWluaXRfZnJhbWVfY2FjaGUgaGFzIGJlZW4gY2Fs bGVkLgorICAgSWYgdGhlIGZyYW1lIGlzbid0IGZvdW5kLCBmbGFnIGFuIGlu dGVybmFsIGVycm9yLgorCisgICBOT1RFOiBUaGlzIGNhbiBvbmx5IHBvcCB0 aGUgb25lIGZyYW1lLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUgb2Yg dGhlCisgICBzdGFjaywgYmVjYXVzZSB0aGUgb3RoZXIgZnJhbWVzIG1heSBi ZSBmb3IgZGlmZmVyZW50IHRocmVhZHMsIGFuZCB0aGVyZSdzCisgICBjdXJy ZW50bHkgbm8gd2F5IHRvIHRlbGwgd2hpY2ggc3RhY2sgZnJhbWUgaXMgZm9y IHdoaWNoIHRocmVhZC4gICovCiAKIGV4dGVybiB2b2lkIGR1bW15X2ZyYW1l X3BvcCAoc3RydWN0IGZyYW1lX2lkIGR1bW15X2lkKTsKIAorLyogRGlzY2Fy ZCBEVU1NWSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGR1bW15IGZyYW1lIHN0 YWNrLgorICAgSWYgdGhlIGZyYW1lIGlzbid0IGZvdW5kLCBmbGFnIGFuIGlu dGVybmFsIGVycm9yLiAgKi8KKworZXh0ZXJuIHZvaWQgZHVtbXlfZnJhbWVf ZGlzY2FyZCAoc3RydWN0IGR1bW15X2ZyYW1lICpkdW1teSk7CisKKy8qIFNj aGVkdWxlIGEgY2xlYW51cCB0byBwb3AgRFVNTVlfRlJBTUUuICAqLworCitl eHRlcm4gc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9wb3BfZHVtbXlf ZnJhbWUgKHN0cnVjdCBkdW1teV9mcmFtZSAqKTsKKwogLyogSWYgdGhlIFBD IGZhbGxzIGluIGEgZHVtbXkgZnJhbWUsIHJldHVybiBhIGR1bW15IGZyYW1l CiAgICB1bndpbmRlci4gICovCiAKSW5kZXg6IGZyYW1lLmMKPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9mcmFt ZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1NgpkaWZmIC11IC1wIC1y MS4yNTYgZnJhbWUuYwotLS0gZnJhbWUuYwkyMCBOb3YgMjAwOCAyMjoxNjox NiAtMDAwMAkxLjI1NgorKysgZnJhbWUuYwkzIERlYyAyMDA4IDA1OjAwOjQz IC0wMDAwCkBAIC01MzYsNiArNTM2LDE0IEBAIGZyYW1lX3BvcCAoc3RydWN0 IGZyYW1lX2luZm8gKnRoaXNfZnJhbWUKICAgc3RydWN0IHJlZ2NhY2hlICpz Y3JhdGNoOwogICBzdHJ1Y3QgY2xlYW51cCAqY2xlYW51cHM7CiAKKyAgaWYg KGdldF9mcmFtZV90eXBlICh0aGlzX2ZyYW1lKSA9PSBEVU1NWV9GUkFNRSkK KyAgICB7CisgICAgICAvKiBQb3BwaW5nIGEgZHVtbXkgZnJhbWUgaW52b2x2 ZXMgcmVzdG9yaW5nIG1vcmUgdGhhbiBqdXN0IHJlZ2lzdGVycy4KKwkgZHVt bXlfZnJhbWVfcG9wIGRvZXMgYWxsIHRoZSB3b3JrLiAgKi8KKyAgICAgIGR1 bW15X2ZyYW1lX3BvcCAoZ2V0X2ZyYW1lX2lkICh0aGlzX2ZyYW1lKSk7Cisg ICAgICByZXR1cm47CisgICAgfQorCiAgIC8qIEVuc3VyZSB0aGF0IHdlIGhh dmUgYSBmcmFtZSB0byBwb3AgdG8uICAqLwogICBwcmV2X2ZyYW1lID0gZ2V0 X3ByZXZfZnJhbWVfMSAodGhpc19mcmFtZSk7CiAKQEAgLTU0OSwxMSArNTU3 LDYgQEAgZnJhbWVfcG9wIChzdHJ1Y3QgZnJhbWVfaW5mbyAqdGhpc19mcmFt ZQogICBzY3JhdGNoID0gZnJhbWVfc2F2ZV9hc19yZWdjYWNoZSAocHJldl9m cmFtZSk7CiAgIGNsZWFudXBzID0gbWFrZV9jbGVhbnVwX3JlZ2NhY2hlX3hm cmVlIChzY3JhdGNoKTsKIAotICAvKiBJZiB3ZSBhcmUgcG9wcGluZyBhIGR1 bW15IGZyYW1lLCBjbGVhbiB1cCB0aGUgYXNzb2NpYXRlZAotICAgICBkYXRh IGFzIHdlbGwuICAqLwotICBpZiAoZ2V0X2ZyYW1lX3R5cGUgKHRoaXNfZnJh bWUpID09IERVTU1ZX0ZSQU1FKQotICAgIGR1bW15X2ZyYW1lX3BvcCAoZ2V0 X2ZyYW1lX2lkICh0aGlzX2ZyYW1lKSk7Ci0KICAgLyogRklYTUU6IGNhZ25l eS8yMDAzLTAzLTE2OiBJdCBzaG91bGQgYmUgcG9zc2libGUgdG8gdGVsbCB0 aGUKICAgICAgdGFyZ2V0J3MgcmVnaXN0ZXIgY2FjaGUgdGhhdCBpdCBpcyBh Ym91dCB0byBiZSBoaXQgd2l0aCBhIGJ1cnN0CiAgICAgIHJlZ2lzdGVyIHRy YW5zZmVyIGFuZCB0aGF0IHRoZSBzZXF1ZW5jZSBvZiByZWdpc3RlciB3cml0 ZXMgc2hvdWxkCkluZGV4OiBpbmZjYWxsLmMKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9pbmZjYWxsLmMsdgpy ZXRyaWV2aW5nIHJldmlzaW9uIDEuMTA2CmRpZmYgLXUgLXAgLXIxLjEwNiBp bmZjYWxsLmMKLS0tIGluZmNhbGwuYwkxOCBOb3YgMjAwOCAwMDoxMzowMiAt MDAwMAkxLjEwNgorKysgaW5mY2FsbC5jCTMgRGVjIDIwMDggMDU6MDA6NDMg LTAwMDAKQEAgLTMxOCwxNiArMzE4LDE5IEBAIGNhbGxfZnVuY3Rpb25fYnlf aGFuZCAoc3RydWN0IHZhbHVlICpmdW4KICAgc3RydWN0IGNsZWFudXAgKnJl dGJ1Zl9jbGVhbnVwOwogICBzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzICppbmZf c3RhdHVzOwogICBzdHJ1Y3QgY2xlYW51cCAqaW5mX3N0YXR1c19jbGVhbnVw OworICBzdHJ1Y3QgaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSAqY2FsbGVyX3N0 YXRlOworICBzdHJ1Y3QgY2xlYW51cCAqY2FsbGVyX3N0YXRlX2NsZWFudXA7 CisgIHN0cnVjdCBkdW1teV9mcmFtZSAqZHVtbXlfZnJhbWU7CisgIHN0cnVj dCBjbGVhbnVwICpkdW1teV9mcmFtZV9jbGVhbnVwOwogICBDT1JFX0FERFIg ZnVuYWRkcjsKICAgQ09SRV9BRERSIHJlYWxfcGM7CiAgIHN0cnVjdCB0eXBl ICpmdHlwZSA9IGNoZWNrX3R5cGVkZWYgKHZhbHVlX3R5cGUgKGZ1bmN0aW9u KSk7CiAgIENPUkVfQUREUiBicF9hZGRyOwotICBzdHJ1Y3QgcmVnY2FjaGUg KmNhbGxlcl9yZWdjYWNoZTsKLSAgc3RydWN0IGNsZWFudXAgKmNhbGxlcl9y ZWdjYWNoZV9jbGVhbnVwOwogICBzdHJ1Y3QgZnJhbWVfaWQgZHVtbXlfaWQ7 CiAgIHN0cnVjdCBjbGVhbnVwICphcmdzX2NsZWFudXA7CiAgIHN0cnVjdCBm cmFtZV9pbmZvICpmcmFtZTsKICAgc3RydWN0IGdkYmFyY2ggKmdkYmFyY2g7 CisgIHB0aWRfdCB0aGlzX3RocmVhZF9wdGlkOwogCiAgIGlmIChUWVBFX0NP REUgKGZ0eXBlKSA9PSBUWVBFX0NPREVfUFRSKQogICAgIGZ0eXBlID0gY2hl Y2tfdHlwZWRlZiAoVFlQRV9UQVJHRVRfVFlQRSAoZnR5cGUpKTsKQEAgLTM1 MSwxNSArMzU0LDE2IEBAIGNhbGxfZnVuY3Rpb25fYnlfaGFuZCAoc3RydWN0 IHZhbHVlICpmdW4KICAgLyogQSBjbGVhbnVwIGZvciB0aGUgaW5mZXJpb3Ig c3RhdHVzLiAgQ3JlYXRlIHRoaXMgQUZURVIgdGhlIHJldGJ1ZgogICAgICBz byB0aGF0IHRoaXMgY2FuIGJlIGRpc2NhcmRlZCBvciBhcHBsaWVkIHdpdGhv dXQgaW50ZXJmZXJpbmcgd2l0aAogICAgICB0aGUgcmVnYnVmLiAgKi8KLSAg aW5mX3N0YXR1cyA9IHNhdmVfaW5mZXJpb3Jfc3RhdHVzICgxKTsKKyAgaW5m X3N0YXR1cyA9IHNhdmVfaW5mZXJpb3Jfc3RhdHVzICgpOwogICBpbmZfc3Rh dHVzX2NsZWFudXAgPSBtYWtlX2NsZWFudXBfcmVzdG9yZV9pbmZlcmlvcl9z dGF0dXMgKGluZl9zdGF0dXMpOwogCi0gIC8qIFNhdmUgdGhlIGNhbGxlcidz IHJlZ2lzdGVycyBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlc3RvcmVkIG9uY2Ug dGhlCisgIC8qIFNhdmUgdGhlIGNhbGxlcidzIHJlZ2lzdGVycyBhbmQgb3Ro ZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICBpbmZlcmlvciBp dHNlbGYgc28gdGhhdCB0aGV5IGNhbiBiZSByZXN0b3JlZCBvbmNlIHRoZQog ICAgICBjYWxsZWUgcmV0dXJucy4gIFRvIGFsbG93IG5lc3RlZCBjYWxscyB0 aGUgcmVnaXN0ZXJzIGFyZSAoZnVydGhlcgogICAgICBkb3duKSBwdXNoZWQg b250byBhIGR1bW15IGZyYW1lIHN0YWNrLiAgSW5jbHVkZSBhIGNsZWFudXAg KHdoaWNoCiAgICAgIGlzIHRvc3NlZCBvbmNlIHRoZSByZWdjYWNoZSBoYXMg YmVlbiBwdXNoZWQpLiAgKi8KLSAgY2FsbGVyX3JlZ2NhY2hlID0gZnJhbWVf c2F2ZV9hc19yZWdjYWNoZSAoZnJhbWUpOwotICBjYWxsZXJfcmVnY2FjaGVf Y2xlYW51cCA9IG1ha2VfY2xlYW51cF9yZWdjYWNoZV94ZnJlZSAoY2FsbGVy X3JlZ2NhY2hlKTsKKyAgY2FsbGVyX3N0YXRlID0gc2F2ZV9pbmZlcmlvcl9w cm9ncmFtX3N0YXRlICgpOworICBjYWxsZXJfc3RhdGVfY2xlYW51cCA9IG1h a2VfY2xlYW51cF9yZXN0b3JlX2luZmVyaW9yX3Byb2dyYW1fc3RhdGUgKGNh bGxlcl9zdGF0ZSk7CiAKICAgLyogRW5zdXJlIHRoYXQgdGhlIGluaXRpYWwg U1AgaXMgY29ycmVjdGx5IGFsaWduZWQuICAqLwogICB7CkBAIC02NDIsOCAr NjQ2LDEwIEBAIGNhbGxfZnVuY3Rpb25fYnlfaGFuZCAoc3RydWN0IHZhbHVl ICpmdW4KICAgLyogRXZlcnl0aGluZydzIHJlYWR5LCBwdXNoIGFsbCB0aGUg aW5mbyBuZWVkZWQgdG8gcmVzdG9yZSB0aGUKICAgICAgY2FsbGVyIChhbmQg aWRlbnRpZnkgdGhlIGR1bW15LWZyYW1lKSBvbnRvIHRoZSBkdW1teS1mcmFt ZQogICAgICBzdGFjay4gICovCi0gIGR1bW15X2ZyYW1lX3B1c2ggKGNhbGxl cl9yZWdjYWNoZSwgJmR1bW15X2lkKTsKLSAgZGlzY2FyZF9jbGVhbnVwcyAo Y2FsbGVyX3JlZ2NhY2hlX2NsZWFudXApOworICBkdW1teV9mcmFtZSA9IGR1 bW15X2ZyYW1lX3B1c2ggKGNhbGxlcl9zdGF0ZSwgJmR1bW15X2lkKTsKKyAg LyogRG8gdGhpcyBiZWZvcmUgY2FsbGluZyBtYWtlX2NsZWFudXBfcG9wX2R1 bW15X2ZyYW1lLiAgKi8KKyAgZGlzY2FyZF9jbGVhbnVwcyAoY2FsbGVyX3N0 YXRlX2NsZWFudXApOworICBkdW1teV9mcmFtZV9jbGVhbnVwID0gbWFrZV9j bGVhbnVwX3BvcF9kdW1teV9mcmFtZSAoZHVtbXlfZnJhbWUpOwogCiAgIC8q IC0gU05JUCAtIFNOSVAgLSBTTklQIC0gU05JUCAtIFNOSVAgLSBTTklQIC0g U05JUCAtIFNOSVAgLSBTTklQIC0KICAgICAgSWYgeW91J3JlIGxvb2tpbmcg dG8gaW1wbGVtZW50IGFzeW5jaHJvbm91cyBkdW1teS1mcmFtZXMsIHRoZW4K QEAgLTY3MSw3ICs2NzcsMTIgQEAgY2FsbF9mdW5jdGlvbl9ieV9oYW5kIChz dHJ1Y3QgdmFsdWUgKmZ1bgogICAgIHN0cnVjdCBjbGVhbnVwICpvbGRfY2xl YW51cHMgPSBtYWtlX2NsZWFudXAgKG51bGxfY2xlYW51cCwgMCk7CiAgICAg c3RydWN0IGNsZWFudXAgKm9sZF9jbGVhbnVwczI7CiAgICAgaW50IHNhdmVk X2FzeW5jID0gMDsKLSAgICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwID0gaW5m ZXJpb3JfdGhyZWFkICgpOworICAgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdGhp c190aHJlYWQ7CisKKyAgICB0aGlzX3RocmVhZCA9IGluZmVyaW9yX3RocmVh ZCAoKTsKKyAgICAvKiBTYXZlIHRoaXMgdGhyZWFkJ3MgcHRpZCwgd2UgbmVl ZCBpdCBsYXRlciBidXQgdGhlIHRocmVhZAorICAgICAgIG1heSBoYXZlIGV4 aXRlZC4gICovCisgICAgdGhpc190aHJlYWRfcHRpZCA9IHRoaXNfdGhyZWFk LT5wdGlkOwogCiAgICAgLyogSWYgYWxsIGVycm9yKClzIG91dCBvZiBwcm9j ZWVkIGVuZGVkIHVwIGNhbGxpbmcgbm9ybWFsX3N0b3AKICAgICAgICAoYW5k IHBlcmhhcHMgdGhleSBzaG91bGQ7IGl0IGFscmVhZHkgZG9lcyBpbiB0aGUg c3BlY2lhbCBjYXNlCkBAIC02NzksNyArNjkwLDcgQEAgY2FsbF9mdW5jdGlv bl9ieV9oYW5kIChzdHJ1Y3QgdmFsdWUgKmZ1bgogICAgIG1ha2VfY2xlYW51 cCAoYnJlYWtwb2ludF9hdXRvX2RlbGV0ZV9jb250ZW50cywgTlVMTCk7CiAK ICAgICBkaXNhYmxlX3dhdGNocG9pbnRzX2JlZm9yZV9pbnRlcmFjdGl2ZV9j YWxsX3N0YXJ0ICgpOwotICAgIHRwLT5wcm9jZWVkX3RvX2ZpbmlzaCA9IDE7 CS8qIFdlIHdhbnQgc3RvcF9yZWdpc3RlcnMsIHBsZWFzZS4uLiAqLworICAg IHRoaXNfdGhyZWFkLT5wcm9jZWVkX3RvX2ZpbmlzaCA9IDE7IC8qIFdlIHdh bnQgc3RvcF9yZWdpc3RlcnMsIHBsZWFzZS4uLiAqLwogCiAgICAgaWYgKHRh cmdldF9jYW5fYXN5bmNfcCAoKSkKICAgICAgIHNhdmVkX2FzeW5jID0gdGFy Z2V0X2FzeW5jX21hc2sgKDApOwpAQCAtNjkwLDEyICs3MDEsMTIgQEAgY2Fs bF9mdW5jdGlvbl9ieV9oYW5kIChzdHJ1Y3QgdmFsdWUgKmZ1bgogICAgIHN1 cHByZXNzX3N0b3Bfb2JzZXJ2ZXIgPSAxOwogICAgIHByb2NlZWQgKHJlYWxf cGMsIFRBUkdFVF9TSUdOQUxfMCwgMCk7CiAgICAgZG9fY2xlYW51cHMgKG9s ZF9jbGVhbnVwczIpOwotICAgIAorCiAgICAgaWYgKHNhdmVkX2FzeW5jKQog ICAgICAgdGFyZ2V0X2FzeW5jX21hc2sgKHNhdmVkX2FzeW5jKTsKLSAgICAK KwogICAgIGVuYWJsZV93YXRjaHBvaW50c19hZnRlcl9pbnRlcmFjdGl2ZV9j YWxsX3N0b3AgKCk7Ci0gICAgICAKKwogICAgIGRpc2NhcmRfY2xlYW51cHMg KG9sZF9jbGVhbnVwcyk7CiAgIH0KIApAQCAtNzA1LDEwICs3MTYsMjggQEAg Y2FsbF9mdW5jdGlvbl9ieV9oYW5kIChzdHJ1Y3QgdmFsdWUgKmZ1bgogCSB3 ZSdsbCBjcmFzaCBhcyB0aGUgaW5mZXJpb3IgaXMgbm8gbG9uZ2VyIHJ1bm5p bmcuICAqLwogICAgICAgZGlzY2FyZF9jbGVhbnVwcyAoaW5mX3N0YXR1c19j bGVhbnVwKTsKICAgICAgIGRpc2NhcmRfaW5mZXJpb3Jfc3RhdHVzIChpbmZf c3RhdHVzKTsKKyAgICAgIGR1bW15X2ZyYW1lX2Rpc2NhcmQgKGR1bW15X2Zy YW1lKTsKICAgICAgIGVycm9yIChfKCJcCiBUaGUgcHJvZ3JhbSBiZWluZyBk ZWJ1Z2dlZCBleGl0ZWQgd2hpbGUgaW4gYSBmdW5jdGlvbiBjYWxsZWQgZnJv bSBHREIuIikpOwogICAgIH0KIAorICBpZiAoISBwdGlkX2VxdWFsICh0aGlz X3RocmVhZF9wdGlkLCBpbmZlcmlvcl90aHJlYWQgKCktPnB0aWQpKQorICAg IHsKKyAgICAgIC8qIFdlJ3ZlIHN3aXRjaGVkIHRocmVhZHMuICBUaGlzIGNh biBoYXBwZW4gaWYgYW5vdGhlciB0aHJlYWQgZ2V0cyBhCisJIHNpZ25hbCBv ciBicmVha3BvaW50IHdoaWxlIG91ciB0aHJlYWQgd2FzIHJ1bm5pbmcuCisJ IFRoZXJlJ3Mgbm8gcG9pbnQgaW4gcmVzdG9yaW5nIHRoZSBpbmZlcmlvciBz dGF0dXMsCisJIHdlJ3JlIGluIGEgZGlmZmVyZW50IHRocmVhZC4gICovCisg ICAgICBkaXNjYXJkX2NsZWFudXBzIChpbmZfc3RhdHVzX2NsZWFudXApOwor ICAgICAgZGlzY2FyZF9pbmZlcmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOwor ICAgICAgLyogS2VlcCB0aGUgZHVtbXkgZnJhbWUgcmVjb3JkLCBpZiB0aGUg dXNlciBzd2l0Y2hlcyBiYWNrIHRvIHRoZQorCSB0aHJlYWQgd2l0aCB0aGUg aGFuZC1jYWxsLCB3ZSdsbCBuZWVkIGl0LiAgKi8KKyAgICAgIGVycm9yIChf KCJcCitUaGUgY3VycmVudCB0aHJlYWQgaGFzIGNoYW5nZWQgd2hpbGUgbWFr aW5nIGEgZnVuY3Rpb24gY2FsbCBmcm9tIEdEQi5cblwKK1RoZSBzdGF0ZSBv ZiB0aGUgZnVuY3Rpb24gY2FsbCBoYXMgYmVlbiBsb3N0LlxuXAorSXQgbWF5 IGJlIHJlY292ZXJhYmxlIGJ5IGNoYW5naW5nIGJhY2sgdG8gdGhlIG9yaWdp bmFsIHRocmVhZFxuXAorYW5kIGV4YW1pbmluZyB0aGUgc3RhdGUuIikpOwor ICAgIH0KKwogICBpZiAoc3RvcHBlZF9ieV9yYW5kb21fc2lnbmFsIHx8ICFz dG9wX3N0YWNrX2R1bW15KQogICAgIHsKICAgICAgIC8qIEZpbmQgdGhlIG5h bWUgb2YgdGhlIGZ1bmN0aW9uIHdlJ3JlIGFib3V0IHRvIGNvbXBsYWluIGFi b3V0LiAgKi8KQEAgLTc0NSw5ICs3NzQsMTAgQEAgVGhlIHByb2dyYW0gYmVp bmcgZGVidWdnZWQgZXhpdGVkIHdoaWxlIAogCSAgICB7CiAJICAgICAgLyog VGhlIHVzZXIgd2FudHMgdGhlIGNvbnRleHQgcmVzdG9yZWQuICovCiAKLQkg ICAgICAvKiBXZSBtdXN0IGdldCBiYWNrIHRvIHRoZSBmcmFtZSB3ZSB3ZXJl IGJlZm9yZSB0aGUKLQkJIGR1bW15IGNhbGwuICovCi0JICAgICAgZnJhbWVf cG9wIChnZXRfY3VycmVudF9mcmFtZSAoKSk7CisJICAgICAgLyogV2UgbXVz dCBnZXQgYmFjayB0byB0aGUgZnJhbWUgd2Ugd2VyZSBiZWZvcmUgdGhlIGR1 bW15IGNhbGwuCisJCSBQbHVzIHdlIG5lZWQgdG8gcmVzdG9yZSBpbmZlcmlv ciBzdGF0dXMgdG8gdGhhdCBiZWZvcmUgdGhlCisJCSBkdW1teSBjYWxsLiAg VGhpcyBpcyBhbGwgaGFuZGxlZCBieSBjbGVhbnVwcworCQkgZHVtbXlfZnJh bWVfY2xlYW51cCBhbmQgaW5mX3N0YXR1c19jbGVhbnVwLiAgKi8KIAogCSAg ICAgIC8qIEZJWE1FOiBJbnNlcnQgYSBidW5jaCBvZiB3cmFwX2hlcmU7IG5h bWUgY2FuIGJlIHZlcnkKIAkJIGxvbmcgaWYgaXQncyBhIEMrKyBuYW1lIHdp dGggYXJndW1lbnRzIGFuZCBzdHVmZi4gICovCkBAIC03NjEsMTQgKzc5MSwx NiBAQCBFdmFsdWF0aW9uIG9mIHRoZSBleHByZXNzaW9uIGNvbnRhaW5pbmcg CiAJICBlbHNlCiAJICAgIHsKIAkgICAgICAvKiBUaGUgdXNlciB3YW50cyB0 byBzdGF5IGluIHRoZSBmcmFtZSB3aGVyZSB3ZSBzdG9wcGVkCi0gICAgICAg ICAgICAgICAgIChkZWZhdWx0KS4qLwotCSAgICAgIC8qIElmIHdlIHJlc3Rv cmVkIHRoZSBpbmZlcmlvciBzdGF0dXMgKHZpYSB0aGUgY2xlYW51cCksCisJ CSAoZGVmYXVsdCkuCisJCSBJZiB3ZSByZXN0b3JlZCB0aGUgaW5mZXJpb3Ig c3RhdHVzICh2aWEgdGhlIGNsZWFudXApLAogCQkgd2Ugd291bGQgcHJpbnQg YSBzcHVyaW91cyBlcnJvciBtZXNzYWdlIChVbmFibGUgdG8KLQkJIHJlc3Rv cmUgcHJldmlvdXNseSBzZWxlY3RlZCBmcmFtZSksIHdvdWxkIHdyaXRlIHRo ZQotCQkgcmVnaXN0ZXJzIGZyb20gdGhlIGluZl9zdGF0dXMgKHdoaWNoIGlz IHdyb25nKSwgYW5kCi0JCSB3b3VsZCBkbyBvdGhlciB3cm9uZyB0aGluZ3Mu ICAqLworCQkgcmVzdG9yZSBwcmV2aW91c2x5IHNlbGVjdGVkIGZyYW1lKSwg YW5kCisJCSB3b3VsZCBkbyBvdGhlciB3cm9uZyB0aGluZ3MuCisJCSBEaXNj YXJkaW5nIGluZl9zdGF0dXNfY2xlYW51cCBhbHNvIGRpc2NhcmRzCisJCSBk dW1teV9mcmFtZV9jbGVhbnVwLiAgKi8KIAkgICAgICBkaXNjYXJkX2NsZWFu dXBzIChpbmZfc3RhdHVzX2NsZWFudXApOwogCSAgICAgIGRpc2NhcmRfaW5m ZXJpb3Jfc3RhdHVzIChpbmZfc3RhdHVzKTsKKwogCSAgICAgIC8qIEZJWE1F OiBJbnNlcnQgYSBidW5jaCBvZiB3cmFwX2hlcmU7IG5hbWUgY2FuIGJlIHZl cnkKIAkJIGxvbmcgaWYgaXQncyBhIEMrKyBuYW1lIHdpdGggYXJndW1lbnRz IGFuZCBzdHVmZi4gICovCiAJICAgICAgZXJyb3IgKF8oIlwKQEAgLTc4Miwx NCArODE0LDE3IEBAIEV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29u dGFpbmluZyAKIAogICAgICAgaWYgKCFzdG9wX3N0YWNrX2R1bW15KQogCXsK LQkgIC8qIFdlIGhpdCBhIGJyZWFrcG9pbnQgaW5zaWRlIHRoZSBGVU5DVElP Ti4gKi8KLQkgIC8qIElmIHdlIHJlc3RvcmVkIHRoZSBpbmZlcmlvciBzdGF0 dXMgKHZpYSB0aGUgY2xlYW51cCksIHdlCisJICAvKiBXZSBoaXQgYSBicmVh a3BvaW50IGluc2lkZSB0aGUgRlVOQ1RJT04uCisJICAgICBJZiB3ZSByZXN0 b3JlZCB0aGUgaW5mZXJpb3Igc3RhdHVzICh2aWEgdGhlIGNsZWFudXApLCB3 ZQogCSAgICAgd291bGQgcHJpbnQgYSBzcHVyaW91cyBlcnJvciBtZXNzYWdl IChVbmFibGUgdG8gcmVzdG9yZQogCSAgICAgcHJldmlvdXNseSBzZWxlY3Rl ZCBmcmFtZSksIHdvdWxkIHdyaXRlIHRoZSByZWdpc3RlcnMKIAkgICAgIGZy b20gdGhlIGluZl9zdGF0dXMgKHdoaWNoIGlzIHdyb25nKSwgYW5kIHdvdWxk IGRvIG90aGVyCi0JICAgICB3cm9uZyB0aGluZ3MuICAqLworCSAgICAgd3Jv bmcgdGhpbmdzLgorCSAgICAgRGlzY2FyZGluZyBpbmZfc3RhdHVzX2NsZWFu dXAgYWxzbyBkaXNjYXJkcworCSAgICAgZHVtbXlfZnJhbWVfY2xlYW51cC4g ICovCiAJICBkaXNjYXJkX2NsZWFudXBzIChpbmZfc3RhdHVzX2NsZWFudXAp OwogCSAgZGlzY2FyZF9pbmZlcmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOwor CiAJICAvKiBUaGUgZm9sbG93aW5nIGVycm9yIG1lc3NhZ2UgdXNlZCB0byBz YXkgIlRoZSBleHByZXNzaW9uCiAJICAgICB3aGljaCBjb250YWluZWQgdGhl IGZ1bmN0aW9uIGNhbGwgaGFzIGJlZW4gZGlzY2FyZGVkLiIKIAkgICAgIEl0 IGlzIGEgaGFyZCBjb25jZXB0IHRvIGV4cGxhaW4gaW4gYSBmZXcgd29yZHMu ICBJZGVhbGx5LApAQCAtODExLDYgKzg0Niw5IEBAIHRoZSBmdW5jdGlvbiBj YWxsKS4iKSwgbmFtZSk7CiAKICAgLyogSWYgd2UgZ2V0IGhlcmUgdGhlIGNh bGxlZCBGVU5DVElPTiBydW4gdG8gY29tcGxldGlvbi4gKi8KIAorICAvKiBU aGUgZHVtbXkgZnJhbWUgaGFzIGJlZW4gcG9wcGVkIHNvIGRpc2NhcmQgaXRz IGNsZWFudXAuICAqLworICBkaXNjYXJkX2NsZWFudXBzIChkdW1teV9mcmFt ZV9jbGVhbnVwKTsKKwogICAvKiBPbiBub3JtYWwgcmV0dXJuLCB0aGUgc3Rh Y2sgZHVtbXkgaGFzIGJlZW4gcG9wcGVkIGFscmVhZHkuICAqLwogICByZWdj YWNoZV9jcHlfbm9fcGFzc3Rocm91Z2ggKHJldGJ1Ziwgc3RvcF9yZWdpc3Rl cnMpOwogCkluZGV4OiBpbmZlcmlvci5oCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvaW5mZXJpb3IuaCx2CnJl dHJpZXZpbmcgcmV2aXNpb24gMS4xMTYKZGlmZiAtdSAtcCAtcjEuMTE2IGlu ZmVyaW9yLmgKLS0tIGluZmVyaW9yLmgJMjAgTm92IDIwMDggMDA6MzU6MjMg LTAwMDAJMS4xMTYKKysrIGluZmVyaW9yLmgJMyBEZWMgMjAwOCAwNTowMDo0 MyAtMDAwMApAQCAtNDAsMjQgKzQwLDQwIEBAIHN0cnVjdCB1aV9vdXQ7CiAv KiBGb3Igc3RydWN0IGZyYW1lX2lkLiAgKi8KICNpbmNsdWRlICJmcmFtZS5o IgogCi0vKiBTdHJ1Y3R1cmUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgc3RhdHVz IG9mIHRoZSBpbmZlcmlvci4gIENyZWF0ZS9TYXZlCi0gICB0aHJvdWdoICJz YXZlX2luZmVyaW9yX3N0YXR1cyIsIHJlc3RvcmUgdGhyb3VnaAotICAgInJl c3RvcmVfaW5mZXJpb3Jfc3RhdHVzIi4KLQotICAgVGhpcyBwYWlyIG9mIHJv dXRpbmVzIHNob3VsZCBiZSBjYWxsZWQgYXJvdW5kIGFueSB0cmFuc2ZlciBv ZgotICAgY29udHJvbCB0byB0aGUgaW5mZXJpb3Igd2hpY2ggeW91IGRvbid0 IHdhbnQgc2hvd2luZyB1cCBpbiB5b3VyCi0gICBjb250cm9sIHZhcmlhYmxl cy4gICovCisvKiBUd28gc3RydWN0dXJlcyBhcmUgdXNlZCB0byByZWNvcmQg aW5mZXJpb3Igc3RhdGUuCiAKKyAgIGluZmVyaW9yX3Byb2dyYW1fc3RhdGUg Y29udGFpbnMgc3RhdGUgYWJvdXQgdGhlIHByb2dyYW0gaXRzZWxmIGxpa2Ug aXRzCisgICByZWdpc3RlcnMgYW5kIGFueSBzaWduYWwgaXQgcmVjZWl2ZWQg d2hlbiBpdCBsYXN0IHN0b3BwZWQuCisgICBUaGlzIHN0YXRlIG11c3QgYmUg cmVzdG9yZWQgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGluZmVyaW9yIGZ1bmN0 aW9uIGNhbGwKKyAgIGVuZHMgKGVpdGhlciBzdWNjZXNzZnVsbHksIG9yIGFm dGVyIGl0IGhpdHMgYSBicmVha3BvaW50IG9yIHNpZ25hbCkKKyAgIGlmIHRo ZSBwcm9ncmFtIGlzIHRvIHByb3Blcmx5IGNvbnRpbnVlIHdoZXJlIGl0IGxl ZnQgb2ZmLgorCisgICBpbmZlcmlvcl9zdGF0dXMgY29udGFpbnMgc3RhdGUg cmVnYXJkaW5nIGdkYidzIGNvbnRyb2wgb2YgdGhlIGluZmVyaW9yCisgICBp dHNlbGYgbGlrZSBzdGVwcGluZyBjb250cm9sLiAgSXQgYWxzbyBjb250YWlu cyBzZXNzaW9uIHN0YXRlIGxpa2UgdGhlCisgICB1c2VyJ3MgY3VycmVudGx5 IHNlbGVjdGVkIGZyYW1lLgorICAgVGhpcyBzdGF0ZSBpcyBvbmx5IHJlc3Rv cmVkIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZQorICAgaW5m ZXJpb3IgZnVuY3Rpb24gY2FsbC4KKworICAgQ2FsbCB0aGVzZSByb3V0aW5l cyBhcm91bmQgaGFuZCBjYWxsZWQgZnVuY3Rpb25zLCBpbmNsdWRpbmcgZnVu Y3Rpb24gY2FsbHMKKyAgIGluIGNvbmRpdGlvbmFsIGJyZWFrcG9pbnRzIGZv ciBleGFtcGxlLiAgKi8KKworc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3Rh dGU7CiBzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzOwogCi1leHRlcm4gc3RydWN0 IGluZmVyaW9yX3N0YXR1cyAqc2F2ZV9pbmZlcmlvcl9zdGF0dXMgKGludCk7 CitleHRlcm4gc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKnNhdmVf aW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSAodm9pZCk7CitleHRlcm4gc3RydWN0 IGluZmVyaW9yX3N0YXR1cyAqc2F2ZV9pbmZlcmlvcl9zdGF0dXMgKHZvaWQp OwogCitleHRlcm4gdm9pZCByZXN0b3JlX2luZmVyaW9yX3Byb2dyYW1fc3Rh dGUgKHN0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlICopOwogZXh0ZXJu IHZvaWQgcmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZlcmlv cl9zdGF0dXMgKik7CiAKK2V4dGVybiBzdHJ1Y3QgY2xlYW51cCAqbWFrZV9j bGVhbnVwX3Jlc3RvcmVfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSAoc3RydWN0 IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKik7CiBleHRlcm4gc3RydWN0IGNs ZWFudXAgKm1ha2VfY2xlYW51cF9yZXN0b3JlX2luZmVyaW9yX3N0YXR1cyAo c3RydWN0IGluZmVyaW9yX3N0YXR1cyAqKTsKIAorZXh0ZXJuIHZvaWQgZGlz Y2FyZF9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlIChzdHJ1Y3QgaW5mZXJpb3Jf cHJvZ3JhbV9zdGF0ZSAqKTsKIGV4dGVybiB2b2lkIGRpc2NhcmRfaW5mZXJp b3Jfc3RhdHVzIChzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzICopOwogCitleHRl cm4gc3RydWN0IHJlZ2NhY2hlICpnZXRfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0 ZV9yZWdjYWNoZSAoc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKik7 CisKIC8qIFRoZSAtMSBwdGlkLCBvZnRlbiB1c2VkIHRvIGluZGljYXRlIGVp dGhlciBhbiBlcnJvciBjb25kaXRpb24KICAgIG9yIGEgImRvbid0IGNhcmUi IGNvbmRpdGlvbiwgaS5lLCAicnVuIGFsbCB0aHJlYWRzLiIgICovCiBleHRl cm4gcHRpZF90IG1pbnVzX29uZV9wdGlkOwpJbmRleDogaW5mcnVuLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dk Yi9pbmZydW4uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zNDUKZGlmZiAt dSAtcCAtcjEuMzQ1IGluZnJ1bi5jCi0tLSBpbmZydW4uYwkyIERlYyAyMDA4 IDE5OjIwOjIzIC0wMDAwCTEuMzQ1CisrKyBpbmZydW4uYwkzIERlYyAyMDA4 IDA1OjAwOjQzIC0wMDAwCkBAIC00NSw3ICs0NSw3IEBACiAjaW5jbHVkZSAi bGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJzb2xpYi5oIgogI2luY2x1ZGUgIm1h aW4uaCIKLQorI2luY2x1ZGUgImR1bW15LWZyYW1lLmgiCiAjaW5jbHVkZSAi Z2RiX2Fzc2VydC5oIgogI2luY2x1ZGUgIm1pL21pLWNvbW1vbi5oIgogI2lu Y2x1ZGUgImV2ZW50LXRvcC5oIgpAQCAtNDM0NiwxNSArNDM0NiwyMyBAQCBG dXJ0aGVyIGV4ZWN1dGlvbiBpcyBwcm9iYWJseSBpbXBvc3NpYmxlCiAKICAg aWYgKHN0b3Bfc3RhY2tfZHVtbXkpCiAgICAgewotICAgICAgLyogUG9wIHRo ZSBlbXB0eSBmcmFtZSB0aGF0IGNvbnRhaW5zIHRoZSBzdGFjayBkdW1teS4g IFBPUF9GUkFNRQotICAgICAgICAgZW5kcyB3aXRoIGEgc2V0dGluZyBvZiB0 aGUgY3VycmVudCBmcmFtZSwgc28gd2UgY2FuIHVzZSB0aGF0Ci0gICAgICAg ICBuZXh0LiAqLwotICAgICAgZnJhbWVfcG9wIChnZXRfY3VycmVudF9mcmFt ZSAoKSk7Ci0gICAgICAvKiBTZXQgc3RvcF9wYyB0byB3aGF0IGl0IHdhcyBi ZWZvcmUgd2UgY2FsbGVkIHRoZSBmdW5jdGlvbi4KLSAgICAgICAgIENhbid0 IHJlbHkgb24gcmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgYmVjYXVzZSB0aGF0 IG9ubHkgZ2V0cwotICAgICAgICAgY2FsbGVkIGlmIHdlIGRvbid0IHN0b3Ag aW4gdGhlIGNhbGxlZCBmdW5jdGlvbi4gICovCi0gICAgICBzdG9wX3BjID0g cmVhZF9wYyAoKTsKLSAgICAgIHNlbGVjdF9mcmFtZSAoZ2V0X2N1cnJlbnRf ZnJhbWUgKCkpOworICAgICAgLyogUG9wIHRoZSBlbXB0eSBmcmFtZSB0aGF0 IGNvbnRhaW5zIHRoZSBzdGFjayBkdW1teS4KKwkgVGhpcyBhbHNvIHJlc3Rv cmVzIGFsbCBpbmZlcmlvciBzdGF0ZSBwcmlvciB0byB0aGUgY2FsbC4KKwkg SWYgdGhlIGN1cnJlbnQgZnJhbWUgaXMgbm90IGEgc3RhY2sgZHVtbXksIGRv IG5vdGhpbmcgYW5kIHdhcm4KKwkgdGhlIHVzZXIuICAqLworICAgICAgc3Ry dWN0IGZyYW1lX2luZm8gKmZyYW1lID0gZ2V0X2N1cnJlbnRfZnJhbWUgKCk7 CisgICAgICBpZiAoZ2V0X2ZyYW1lX3R5cGUgKGZyYW1lKSA9PSBEVU1NWV9G UkFNRSkKKwl7CisJICBkdW1teV9mcmFtZV9wb3AgKGdldF9mcmFtZV9pZCAo ZnJhbWUpKTsKKwl9CisgICAgICBlbHNlCisJeworCSAgLyogV2UgYXZvaWQg Y2FsbGluZyB0aGUgZnJhbWUgYSBkdW1teSBmcmFtZSBhcyBpdCBoYXMgbGl0 dGxlCisJICAgICBtZWFuaW5nIHRvIHRoZSB1c2VyLiAgKi8KKwkgIHByaW50 Zl9maWx0ZXJlZCAoXygiXAorU3RvcHBlZCBhZnRlciBhbiBpbmZlcmlvciBm dW5jdGlvbiBjYWxsLCBidXQgbm90IGluIHRoZSBleHBlY3RlZCBzdGFjayBm cmFtZS5cblwKK1Byb2NlZWQgd2l0aCBjYXV0aW9uLlxuIikpOworCX0KICAg ICB9CiAKIGRvbmU6CkBAIC00NzUwLDEwICs0NzU4LDg2IEBAIHNpZ25hbHNf aW5mbyAoY2hhciAqc2lnbnVtX2V4cCwgaW50IGZyb20KICAgcHJpbnRmX2Zp bHRlcmVkIChfKCJcblVzZSB0aGUgXCJoYW5kbGVcIiBjb21tYW5kIHRvIGNo YW5nZSB0aGVzZSB0YWJsZXMuXG4iKSk7CiB9CiAMCi1zdHJ1Y3QgaW5mZXJp b3Jfc3RhdHVzCisvKiBJbmZlcmlvciBwcm9ncmFtIHN0YXRlLgorICAgVGhl c2UgYXJlIGRldGFpbHMgcmVsYXRlZCB0byB0aGUgaW5mZXJpb3IgaXRzZWxm LCBhbmQgZG9uJ3QgaW5jbHVkZQorICAgdGhpbmdzIGxpa2Ugd2hhdCBmcmFt ZSB0aGUgdXNlciBoYWQgc2VsZWN0ZWQgb3Igd2hhdCBnZGIgd2FzIGRvaW5n CisgICB3aXRoIHRoZSB0YXJnZXQgYXQgdGhlIHRpbWUuCisgICBGb3IgaW5m ZXJpb3IgZnVuY3Rpb24gY2FsbHMgdGhlc2UgYXJlIHRoaW5ncyB3ZSB3YW50 IHRvIHJlc3RvcmUKKyAgIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgZnVu Y3Rpb24gY2FsbCBzdWNjZXNzZnVsbHkgY29tcGxldGVzCisgICBvciB0aGUg ZHVtbXkgZnJhbWUgaGFzIHRvIGJlIG1hbnVhbGx5IHBvcHBlZC4gICovCisK K3N0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlCiB7CiAgIGVudW0gdGFy Z2V0X3NpZ25hbCBzdG9wX3NpZ25hbDsKICAgQ09SRV9BRERSIHN0b3BfcGM7 CisgIHN0cnVjdCByZWdjYWNoZSAqcmVnaXN0ZXJzOworfTsKKworc3RydWN0 IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKgorc2F2ZV9pbmZlcmlvcl9wcm9n cmFtX3N0YXRlICgpCit7CisgIHN0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0 YXRlICppbmZfc3RhdGUgPSBYTUFMTE9DIChzdHJ1Y3QgaW5mZXJpb3JfcHJv Z3JhbV9zdGF0ZSk7CisgIHN0cnVjdCB0aHJlYWRfaW5mbyAqdHAgPSBpbmZl cmlvcl90aHJlYWQgKCk7CisgIHN0cnVjdCBpbmZlcmlvciAqaW5mID0gY3Vy cmVudF9pbmZlcmlvciAoKTsKKworICBpbmZfc3RhdGUtPnN0b3Bfc2lnbmFs ID0gdHAtPnN0b3Bfc2lnbmFsOworICBpbmZfc3RhdGUtPnN0b3BfcGMgPSBz dG9wX3BjOworCisgIGluZl9zdGF0ZS0+cmVnaXN0ZXJzID0gcmVnY2FjaGVf ZHVwIChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7CisKKyAgcmV0dXJuIGlu Zl9zdGF0ZTsKK30KKworLyogUmVzdG9yZSBpbmZlcmlvciBzZXNzaW9uIHN0 YXRlIHRvIElORl9TVEFURS4gICovCisKK3ZvaWQKK3Jlc3RvcmVfaW5mZXJp b3JfcHJvZ3JhbV9zdGF0ZSAoc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3Rh dGUgKmluZl9zdGF0ZSkKK3sKKyAgc3RydWN0IHRocmVhZF9pbmZvICp0cCA9 IGluZmVyaW9yX3RocmVhZCAoKTsKKyAgc3RydWN0IGluZmVyaW9yICppbmYg PSBjdXJyZW50X2luZmVyaW9yICgpOworCisgIHRwLT5zdG9wX3NpZ25hbCA9 IGluZl9zdGF0ZS0+c3RvcF9zaWduYWw7CisgIHN0b3BfcGMgPSBpbmZfc3Rh dGUtPnN0b3BfcGM7CisKKyAgLyogVGhlIGluZmVyaW9yIGNhbiBiZSBnb25l IGlmIHRoZSB1c2VyIHR5cGVzICJwcmludCBleGl0KDApIgorICAgICAoYW5k IHBlcmhhcHMgb3RoZXIgdGltZXMpLiAgKi8KKyAgaWYgKHRhcmdldF9oYXNf ZXhlY3V0aW9uKQorICAgIC8qIE5COiBUaGUgcmVnaXN0ZXIgd3JpdGUgZ29l cyB0aHJvdWdoIHRvIHRoZSB0YXJnZXQuICAqLworICAgIHJlZ2NhY2hlX2Nw eSAoZ2V0X2N1cnJlbnRfcmVnY2FjaGUgKCksIGluZl9zdGF0ZS0+cmVnaXN0 ZXJzKTsKKyAgcmVnY2FjaGVfeGZyZWUgKGluZl9zdGF0ZS0+cmVnaXN0ZXJz KTsKK30KKworc3RhdGljIHZvaWQKK2RvX3Jlc3RvcmVfaW5mZXJpb3JfcHJv Z3JhbV9zdGF0ZV9jbGVhbnVwICh2b2lkICpzdGF0ZSkKK3sKKyAgcmVzdG9y ZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlIChzdGF0ZSk7Cit9CisKK3N0cnVj dCBjbGVhbnVwICoKK21ha2VfY2xlYW51cF9yZXN0b3JlX2luZmVyaW9yX3By b2dyYW1fc3RhdGUgKHN0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlICpp bmZfc3RhdGUpCit7CisgIHJldHVybiBtYWtlX2NsZWFudXAgKGRvX3Jlc3Rv cmVfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZV9jbGVhbnVwLCBpbmZfc3RhdGUp OworfQorCit2b2lkCitkaXNjYXJkX2luZmVyaW9yX3Byb2dyYW1fc3RhdGUg KHN0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlICppbmZfc3RhdGUpCit7 CisgIHJlZ2NhY2hlX3hmcmVlIChpbmZfc3RhdGUtPnJlZ2lzdGVycyk7Cisg IHhmcmVlIChpbmZfc3RhdGUpOworfQorCitzdHJ1Y3QgcmVnY2FjaGUgKgor Z2V0X2luZmVyaW9yX3Byb2dyYW1fc3RhdGVfcmVnY2FjaGUgKHN0cnVjdCBp bmZlcmlvcl9wcm9ncmFtX3N0YXRlICppbmZfc3RhdGUpCit7CisgIHJldHVy biBpbmZfc3RhdGUtPnJlZ2lzdGVyczsKK30KKworLyogU2Vzc2lvbiByZWxh dGVkIHN0YXRlIGZvciBpbmZlcmlvciBmdW5jdGlvbiBjYWxscy4KKyAgIFRo ZXNlIGFyZSB0aGUgYWRkaXRpb25hbCBiaXRzIG9mIHN0YXRlIHRoYXQgbmVl ZCB0byBiZSByZXN0b3JlZAorICAgd2hlbiBhbiBpbmZlcmlvciBmdW5jdGlv biBjYWxsIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMuICAqLworCitzdHJ1Y3Qg aW5mZXJpb3Jfc3RhdHVzCit7CiAgIGJwc3RhdCBzdG9wX2Jwc3RhdDsKICAg aW50IHN0b3Bfc3RlcDsKICAgaW50IHN0b3Bfc3RhY2tfZHVtbXk7CkBAIC00 NzY3LDMyICs0ODUxLDIzIEBAIHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMKICAg aW50IHN0b3BfYWZ0ZXJfdHJhcDsKICAgaW50IHN0b3Bfc29vbjsKIAotICAv KiBUaGVzZSBhcmUgaGVyZSBiZWNhdXNlIGlmIGNhbGxfZnVuY3Rpb25fYnlf aGFuZCBoYXMgd3JpdHRlbiBzb21lCi0gICAgIHJlZ2lzdGVycyBhbmQgdGhl biBkZWNpZGVzIHRvIGNhbGwgZXJyb3IoKSwgd2UgYmV0dGVyIG5vdCBoYXZl IGNoYW5nZWQKLSAgICAgYW55IHJlZ2lzdGVycy4gICovCi0gIHN0cnVjdCBy ZWdjYWNoZSAqcmVnaXN0ZXJzOwotCi0gIC8qIEEgZnJhbWUgdW5pcXVlIGlk ZW50aWZpZXIuICAqLworICAvKiBJRCBpZiB0aGUgc2VsZWN0ZWQgZnJhbWUg d2hlbiB0aGUgaW5mZXJpb3IgZnVuY3Rpb24gY2FsbCB3YXMgbWFkZS4gICov CiAgIHN0cnVjdCBmcmFtZV9pZCBzZWxlY3RlZF9mcmFtZV9pZDsKIAogICBp bnQgYnJlYWtwb2ludF9wcm9jZWVkZWQ7Ci0gIGludCByZXN0b3JlX3N0YWNr X2luZm87CiAgIGludCBwcm9jZWVkX3RvX2ZpbmlzaDsKIH07CiAKIC8qIFNh dmUgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhl IGluZmVyaW9yPD09PmdkYgotICAgY29ubmVjdGlvbi4gIElORl9TVEFUVVMg aXMgYSBwb2ludGVyIHRvIGEgInN0cnVjdCBpbmZlcmlvcl9zdGF0dXMiCi0g ICAoZGVmaW5lZCBpbiBpbmZlcmlvci5oKS4gICovCisgICBjb25uZWN0aW9u LiAgKi8KIAogc3RydWN0IGluZmVyaW9yX3N0YXR1cyAqCi1zYXZlX2luZmVy aW9yX3N0YXR1cyAoaW50IHJlc3RvcmVfc3RhY2tfaW5mbykKK3NhdmVfaW5m ZXJpb3Jfc3RhdHVzICgpCiB7CiAgIHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMg KmluZl9zdGF0dXMgPSBYTUFMTE9DIChzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVz KTsKICAgc3RydWN0IHRocmVhZF9pbmZvICp0cCA9IGluZmVyaW9yX3RocmVh ZCAoKTsKICAgc3RydWN0IGluZmVyaW9yICppbmYgPSBjdXJyZW50X2luZmVy aW9yICgpOwogCi0gIGluZl9zdGF0dXMtPnN0b3Bfc2lnbmFsID0gdHAtPnN0 b3Bfc2lnbmFsOwotICBpbmZfc3RhdHVzLT5zdG9wX3BjID0gc3RvcF9wYzsK ICAgaW5mX3N0YXR1cy0+c3RvcF9zdGVwID0gdHAtPnN0b3Bfc3RlcDsKICAg aW5mX3N0YXR1cy0+c3RvcF9zdGFja19kdW1teSA9IHN0b3Bfc3RhY2tfZHVt bXk7CiAgIGluZl9zdGF0dXMtPnN0b3BwZWRfYnlfcmFuZG9tX3NpZ25hbCA9 IHN0b3BwZWRfYnlfcmFuZG9tX3NpZ25hbDsKQEAgLTQ4MTAsMTIgKzQ4ODUs MTAgQEAgc2F2ZV9pbmZlcmlvcl9zdGF0dXMgKGludCByZXN0b3JlX3N0YWNr XwogICBpbmZfc3RhdHVzLT5zdG9wX2Jwc3RhdCA9IHRwLT5zdG9wX2Jwc3Rh dDsKICAgdHAtPnN0b3BfYnBzdGF0ID0gYnBzdGF0X2NvcHkgKHRwLT5zdG9w X2Jwc3RhdCk7CiAgIGluZl9zdGF0dXMtPmJyZWFrcG9pbnRfcHJvY2VlZGVk ID0gYnJlYWtwb2ludF9wcm9jZWVkZWQ7Ci0gIGluZl9zdGF0dXMtPnJlc3Rv cmVfc3RhY2tfaW5mbyA9IHJlc3RvcmVfc3RhY2tfaW5mbzsKICAgaW5mX3N0 YXR1cy0+cHJvY2VlZF90b19maW5pc2ggPSB0cC0+cHJvY2VlZF90b19maW5p c2g7CiAKLSAgaW5mX3N0YXR1cy0+cmVnaXN0ZXJzID0gcmVnY2FjaGVfZHVw IChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSk7Ci0KICAgaW5mX3N0YXR1cy0+ c2VsZWN0ZWRfZnJhbWVfaWQgPSBnZXRfZnJhbWVfaWQgKGdldF9zZWxlY3Rl ZF9mcmFtZSAoTlVMTCkpOworCiAgIHJldHVybiBpbmZfc3RhdHVzOwogfQog CkBAIC00ODQwLDE0ICs0OTEzLDE0IEBAIHJlc3RvcmVfc2VsZWN0ZWRfZnJh bWUgKHZvaWQgKmFyZ3MpCiAgIHJldHVybiAoMSk7CiB9CiAKKy8qIFJlc3Rv cmUgaW5mZXJpb3Igc2Vzc2lvbiBzdGF0ZSB0byBJTkZfU1RBVFVTLiAgKi8K Kwogdm9pZAogcmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZl cmlvcl9zdGF0dXMgKmluZl9zdGF0dXMpCiB7CiAgIHN0cnVjdCB0aHJlYWRf aW5mbyAqdHAgPSBpbmZlcmlvcl90aHJlYWQgKCk7CiAgIHN0cnVjdCBpbmZl cmlvciAqaW5mID0gY3VycmVudF9pbmZlcmlvciAoKTsKIAotICB0cC0+c3Rv cF9zaWduYWwgPSBpbmZfc3RhdHVzLT5zdG9wX3NpZ25hbDsKLSAgc3RvcF9w YyA9IGluZl9zdGF0dXMtPnN0b3BfcGM7CiAgIHRwLT5zdG9wX3N0ZXAgPSBp bmZfc3RhdHVzLT5zdG9wX3N0ZXA7CiAgIHN0b3Bfc3RhY2tfZHVtbXkgPSBp bmZfc3RhdHVzLT5zdG9wX3N0YWNrX2R1bW15OwogICBzdG9wcGVkX2J5X3Jh bmRvbV9zaWduYWwgPSBpbmZfc3RhdHVzLT5zdG9wcGVkX2J5X3JhbmRvbV9z aWduYWw7CkBAIC00ODYwLDI0ICs0OTMzLDExIEBAIHJlc3RvcmVfaW5mZXJp b3Jfc3RhdHVzIChzdHJ1Y3QgaW5mZXJpb3IKICAgaW5mLT5zdG9wX3Nvb24g PSBpbmZfc3RhdHVzLT5zdG9wX3Nvb247CiAgIGJwc3RhdF9jbGVhciAoJnRw LT5zdG9wX2Jwc3RhdCk7CiAgIHRwLT5zdG9wX2Jwc3RhdCA9IGluZl9zdGF0 dXMtPnN0b3BfYnBzdGF0OworICBpbmZfc3RhdHVzLT5zdG9wX2Jwc3RhdCA9 IE5VTEw7CiAgIGJyZWFrcG9pbnRfcHJvY2VlZGVkID0gaW5mX3N0YXR1cy0+ YnJlYWtwb2ludF9wcm9jZWVkZWQ7CiAgIHRwLT5wcm9jZWVkX3RvX2Zpbmlz aCA9IGluZl9zdGF0dXMtPnByb2NlZWRfdG9fZmluaXNoOwogCi0gIC8qIFRo ZSBpbmZlcmlvciBjYW4gYmUgZ29uZSBpZiB0aGUgdXNlciB0eXBlcyAicHJp bnQgZXhpdCgwKSIKLSAgICAgKGFuZCBwZXJoYXBzIG90aGVyIHRpbWVzKS4g ICovCi0gIGlmICh0YXJnZXRfaGFzX2V4ZWN1dGlvbikKLSAgICAvKiBOQjog VGhlIHJlZ2lzdGVyIHdyaXRlIGdvZXMgdGhyb3VnaCB0byB0aGUgdGFyZ2V0 LiAgKi8KLSAgICByZWdjYWNoZV9jcHkgKGdldF9jdXJyZW50X3JlZ2NhY2hl ICgpLCBpbmZfc3RhdHVzLT5yZWdpc3RlcnMpOwotICByZWdjYWNoZV94ZnJl ZSAoaW5mX3N0YXR1cy0+cmVnaXN0ZXJzKTsKLQotICAvKiBGSVhNRTogSWYg d2UgYXJlIGJlaW5nIGNhbGxlZCBhZnRlciBzdG9wcGluZyBpbiBhIGZ1bmN0 aW9uIHdoaWNoCi0gICAgIGlzIGNhbGxlZCBmcm9tIGdkYiwgd2Ugc2hvdWxk IG5vdCBiZSB0cnlpbmcgdG8gcmVzdG9yZSB0aGUKLSAgICAgc2VsZWN0ZWQg ZnJhbWU7IGl0IGp1c3QgcHJpbnRzIGEgc3B1cmlvdXMgZXJyb3IgbWVzc2Fn ZSAoVGhlCi0gICAgIG1lc3NhZ2UgaXMgdXNlZnVsLCBob3dldmVyLCBpbiBk ZXRlY3RpbmcgYnVncyBpbiBnZGIgKGxpa2UgaWYgZ2RiCi0gICAgIGNsb2Ji ZXJzIHRoZSBzdGFjaykpLiAgSW4gZmFjdCwgc2hvdWxkIHdlIGJlIHJlc3Rv cmluZyB0aGUKLSAgICAgaW5mZXJpb3Igc3RhdHVzIGF0IGFsbCBpbiB0aGF0 IGNhc2U/ICAuICAqLwotCi0gIGlmICh0YXJnZXRfaGFzX3N0YWNrICYmIGlu Zl9zdGF0dXMtPnJlc3RvcmVfc3RhY2tfaW5mbykKKyAgaWYgKHRhcmdldF9o YXNfc3RhY2spCiAgICAgewogICAgICAgLyogVGhlIHBvaW50IG9mIGNhdGNo X2Vycm9ycyBpcyB0aGF0IGlmIHRoZSBzdGFjayBpcyBjbG9iYmVyZWQsCiAg ICAgICAgICB3YWxraW5nIHRoZSBzdGFjayBtaWdodCBlbmNvdW50ZXIgYSBn YXJiYWdlIHBvaW50ZXIgYW5kCkBAIC00ODg5LDcgKzQ5NDksNiBAQCByZXN0 b3JlX2luZmVyaW9yX3N0YXR1cyAoc3RydWN0IGluZmVyaW9yCiAJLyogRXJy b3IgaW4gcmVzdG9yaW5nIHRoZSBzZWxlY3RlZCBmcmFtZS4gIFNlbGVjdCB0 aGUgaW5uZXJtb3N0CiAJICAgZnJhbWUuICAqLwogCXNlbGVjdF9mcmFtZSAo Z2V0X2N1cnJlbnRfZnJhbWUgKCkpOwotCiAgICAgfQogCiAgIHhmcmVlIChp bmZfc3RhdHVzKTsKQEAgLTQ5MTIsMTAgKzQ5NzEsOSBAQCBkaXNjYXJkX2lu ZmVyaW9yX3N0YXR1cyAoc3RydWN0IGluZmVyaW9yCiB7CiAgIC8qIFNlZSBz YXZlX2luZmVyaW9yX3N0YXR1cyBmb3IgaW5mbyBvbiBzdG9wX2Jwc3RhdC4g Ki8KICAgYnBzdGF0X2NsZWFyICgmaW5mX3N0YXR1cy0+c3RvcF9icHN0YXQp OwotICByZWdjYWNoZV94ZnJlZSAoaW5mX3N0YXR1cy0+cmVnaXN0ZXJzKTsK ICAgeGZyZWUgKGluZl9zdGF0dXMpOwogfQotCisMCiBpbnQKIGluZmVyaW9y X2hhc19mb3JrZWQgKHB0aWRfdCBwaWQsIHB0aWRfdCAqY2hpbGRfcGlkKQog ewpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFsLXJlc3Vt ZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1 aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFsLXJlc3VtZS5leHAKZGlmZiAtTiB0 ZXN0c3VpdGUvZ2RiLmJhc2UvY2FsbC1zaWduYWwtcmVzdW1lLmV4cAotLS0g L2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3Rz dWl0ZS9nZGIuYmFzZS9jYWxsLXNpZ25hbC1yZXN1bWUuZXhwCTMgRGVjIDIw MDggMDU6MDA6NDMgLTAwMDAKQEAgLTAsMCArMSwxNTkgQEAKKyMgQ29weXJp Z2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMg VGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0 cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlz IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0 aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0 aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3Jn L2xpY2Vuc2VzLz4uCisKKyMgVGVzdCBpbmZlcmlvciByZXN1bXB0aW9uIGFm dGVyIGRpc2NhcmRpbmcgYSBoYW5kLWNhbGxlZCBmdW5jdGlvbi4KKyMgVGhl cmUgYXJlIHR3byB0aGluZ3MgdG8gdGVzdC4KKyMgMSkgSW5mZXJpb3Igc3Rv cHMgbm9ybWFsbHkuICBVcG9uIHJlc3VtcHRpb24gaXQgc2hvdWxkIGNvbnRp bnVlIG5vcm1hbGx5LAorIyAgICByZWdhcmRsZXNzIG9mIHdoYXRldmVyIHNp Z25hbCB0aGUgaGFuZC1jYWxsZWQgZnVuY3Rpb24gZ290LgorIyAyKSBJbmZl cmlvciBpcyBzdG9wcGVkIGF0IGEgc2lnbmFsLiAgVXBvbiByZXN1bXB0aW9u IGl0IHNob3VsZCBjb250aW51ZQorIyAgICB3aXRoIHRoYXQgc2lnbmFsLCBy ZWdhcmRsZXNzIG9mIHdoYXRldmVyIHRoZSBoYW5kLWNhbGxlZCBmdW5jdGlv biBkaWQuCisKK2lmICR0cmFjZWxldmVsIHRoZW4geworCXN0cmFjZSAkdHJh Y2VsZXZlbAorfQorCitpZiBbdGFyZ2V0X2luZm8gZXhpc3RzIGdkYixub2lu ZmVyaW9yaW9dIHsKKyAgICB2ZXJib3NlICJTa2lwcGluZyBjYWxsLXNpZ25h bC1yZXN1bWUuZXhwIGJlY2F1c2Ugb2Ygbm8gZmlsZWlvIGNhcGFiaWxpdGll cy4iCisgICAgY29udGludWUKK30KKworc2V0IHBybXNfaWQgMAorc2V0IGJ1 Z19pZCAwCisKK3NldCB0ZXN0ZmlsZSAiY2FsbC1zaWduYWxzIgorc2V0IHNy Y2ZpbGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7 c3ViZGlyfS8ke3Rlc3RmaWxlfQorCitpZiAgeyBbZ2RiX2NvbXBpbGUgIiR7 c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4 ZWN1dGFibGUge2RlYnVnfV0gIT0gIiIgfSB7CisgICAgIHVudGVzdGVkIGNh bGwtc2lnbmFsLXJlc3VtZS5leHAKKyAgICAgcmV0dXJuIC0xCit9CisKKyMg U29tZSB0YXJnZXRzIGNhbid0IGRvIGZ1bmN0aW9uIGNhbGxzLCBzbyBkb24n dCBldmVuIGJvdGhlciB3aXRoIHRoaXMKKyMgdGVzdC4KK2lmIFt0YXJnZXRf aW5mbyBleGlzdHMgZ2RiLGNhbm5vdF9jYWxsX2Z1bmN0aW9uc10geworICAg IHNldHVwX3hmYWlsICIqLSotKiIgMjQxNgorICAgIGZhaWwgIlRoaXMgdGFy Z2V0IGNhbiBub3QgY2FsbCBmdW5jdGlvbnMiCisgICAgY29udGludWUKK30K KworcHJvYyBnZXRfZHVtbXlfZnJhbWVfbnVtYmVyIHsgfSB7CisgIGdsb2Jh bCBnZGJfcHJvbXB0CisKKyAgc2VuZF9nZGIgImJ0XG4iCisgIGdkYl9leHBl Y3QgeworICAgIC1yZSAiIyhcWzAtOVxdKikgKjxmdW5jdGlvbiBjYWxsZWQg ZnJvbSBnZGI+LiokZ2RiX3Byb21wdCAkIgorICAgICAgeworCXJldHVybiAk ZXhwZWN0X291dCgxLHN0cmluZykKKyAgICAgIH0KKyAgICAtcmUgIiRnZGJf cHJvbXB0ICQiCisgICAgICB7CisJcmV0dXJuICIiCisgICAgICB9CisgICAg dGltZW91dAorICAgICAgeworCXJldHVybiAiIgorICAgICAgfQorICB9Cisg IHJldHVybiAiIgorfQorCisjIFN0YXJ0IHdpdGggYSBmcmVzaCBnZGIuCisK K2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGlyICRz cmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxlfQorCitpZiB7ICFb cnVudG9fbWFpbl0gfSB7CisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1haW4i CisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgImJyZWFrIHN0b3Bfb25l IiAiQnJlYWtwb2ludCBcWzAtOVxdKiBhdCAuKiIKK2dkYl90ZXN0ICJjb250 aW51ZSIgIkNvbnRpbnVpbmcuKkJyZWFrcG9pbnQgXFswLTlcXSosIHN0b3Bf b25lLioiIFwKKyAgICAiY29udGludWUgdG8gYnJlYWtwb2ludCBhdCBzdG9w X29uZSIKKworIyBDYWxsIGZ1bmN0aW9uIChjYXVzaW5nIHRoZSBwcm9ncmFt IHRvIGdldCBhIHNpZ25hbCksIGFuZCBzZWUgaWYgZ2RiIGhhbmRsZXMKKyMg aXQgcHJvcGVybHkuCitnZGJfdGVzdF9tdWx0aXBsZSAiY2FsbCBnZW5fc2ln bmFsICgpIiBcCisJImluZmVyaW9yIGZ1bmN0aW9uIGNhbGwgc2lnbmFsZWQi IHsKKyAgICAtcmUgIlxbXHJcblxdKm5vIHNpZ25hbFxbXHJcblxdKyRnZGJf cHJvbXB0ICQiIHsKKwl1bnN1cHBvcnRlZCAiaW5mZXJpb3IgZnVuY3Rpb24g Y2FsbCBzaWduYWxlZCIKKwlyZXR1cm4gMAorICAgIH0KKyAgICAtcmUgIlxb XHJcblxdKlRoZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIHdhcyBzaWduYWxl ZC4qXFtcclxuXF0rJGdkYl9wcm9tcHQgJCIgeworCXBhc3MgImluZmVyaW9y IGZ1bmN0aW9uIGNhbGwgc2lnbmFsZWQiCisgICAgfQorfQorCitzZXQgZnJh bWVfbnVtYmVyIFtnZXRfZHVtbXlfZnJhbWVfbnVtYmVyXQoraWYgeyAiJGZy YW1lX251bWJlciIgPT0gIiIgfSB7CisgICAgZmFpbCAiZHVtbXkgc3RhY2sg ZnJhbWUgbnVtYmVyIgorICAgIHNldHVwX3hmYWlsICIqLSotKiIKK30gZWxz ZSB7CisgICAgcGFzcyAiZHVtbXkgc3RhY2sgZnJhbWUgbnVtYmVyIgorfQor CisjIFBvcCB0aGUgZHVtbXkgZnJhbWUuCitnZGJfdGVzdCAiZnJhbWUgJGZy YW1lX251bWJlciIgIiIKK2dkYl90ZXN0ICJzZXQgY29uZmlybSBvZmYiICIi CitnZGJfdGVzdCAicmV0dXJuIiAiIgorCisjIFJlc3VtZSBleGVjdXRpb24s IHRoZSBwcm9ncmFtIHNob3VsZCBjb250aW51ZSB3aXRob3V0IGFueSBzaWdu YWwuCisKK2dkYl90ZXN0ICJicmVhayBzdG9wX3R3byIgIkJyZWFrcG9pbnQg XFswLTlcXSogYXQgLioiCitnZGJfdGVzdCAiY29udGludWUiICJCcmVha3Bv aW50IFxbMC05XF0qLCBzdG9wX3R3by4qIiBcCisgICAgImNvbnRpbnVlIHRv IGJyZWFrcG9pbnQgYXQgc3RvcF90d28iCisKKyMgQ29udGludWUgYWdhaW4s IHdlIHNob3VsZCBnZXQgYSBzaWduYWwuCisKK2dkYl90ZXN0ICJjb250aW51 ZSIgIlByb2dyYW0gcmVjZWl2ZWQgc2lnbmFsIC4qIiBcCisgICAgImNvbnRp bnVlIHRvIHJlY2VpcHQgb2Ygc2lnbmFsIgorCisjIEhhbmQgY2FsbCBhbm90 aGVyIGZ1bmN0aW9uIHRoYXQgcHJlbWF0dXJlbHkgc3RvcHMsCisjIHRoZW4g bWFudWFsbHkgcG9wIHRoZSBkdW1teSBzdGFjayBmcmFtZS4KKworZ2RiX3Rl c3QgImJyZWFrIG51bGxfaGFuZF9jYWxsIiAiQnJlYWtwb2ludCBcWzAtOVxd KiBhdCAuKiIKK2dkYl90ZXN0ICJjYWxsIG51bGxfaGFuZF9jYWxsICgpIiAi QnJlYWtwb2ludCBcWzAtOVxdKiwgbnVsbF9oYW5kX2NhbGwuKiIgXAorICAg ICJudWxsX2hhbmRfY2FsbCIKKworc2V0IGZyYW1lX251bWJlciBbZ2V0X2R1 bW15X2ZyYW1lX251bWJlcl0KK2lmIHsgIiRmcmFtZV9udW1iZXIiID09ICIi IH0geworICAgIGZhaWwgImR1bW15IHN0YWNrIGZyYW1lIG51bWJlciIKKyAg ICBzZXR1cF94ZmFpbCAiKi0qLSoiCisgICAgIyBOZWVkIHNvbWV0aGluZy4K KyAgICBzZXQgZnJhbWVfbnVtYmVyIDAKK30gZWxzZSB7CisgICAgcGFzcyAi ZHVtbXkgc3RhY2sgZnJhbWUgbnVtYmVyIgorfQorCisjIFBvcCB0aGUgZHVt bXkgZnJhbWUuCitnZGJfdGVzdCAiZnJhbWUgJGZyYW1lX251bWJlciIgIiIK K2dkYl90ZXN0ICJzZXQgY29uZmlybSBvZmYiICIiCitnZGJfdGVzdCAicmV0 dXJuIiAiIgorCisjIENvbnRpbnVlIGFnYWluLCB0aGlzIHRpbWUgd2Ugc2hv dWxkIGdldCB0byB0aGUgc2lnbmFsIGhhbmRsZXIuCisKK2dkYl90ZXN0ICJi cmVhayBoYW5kbGVfc2lnbmFsIiAiQnJlYWtwb2ludCBcWzAtOVxdKiBhdCAu KiIKK2dkYl90ZXN0ICJjb250aW51ZSIgIkJyZWFrcG9pbnQgXFswLTlcXSos IGhhbmRsZV9zaWduYWwuKiIgXAorICAgICJjb250aW51ZSB0byBicmVha3Bv aW50IGF0IGhhbmRsZV9zaWduYWwiCisKKyMgQ29udGludWUgb25lIGxhc3Qg dGltZSwgdGhlIHByb2dyYW0gc2hvdWxkIGV4aXQgbm9ybWFsbHkuCisKK2dk Yl90ZXN0ICJjb250aW51ZSIgIlByb2dyYW0gZXhpdGVkIG5vcm1hbGx5LiIg XAorICAgICJjb250aW51ZSB0byBwcm9ncmFtIGV4aXQiCisKK3JldHVybiAw CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmJhc2UvY2FsbC1zaWduYWxzLmMKPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dkYi5i YXNlL2NhbGwtc2lnbmFscy5jCmRpZmYgLU4gdGVzdHN1aXRlL2dkYi5iYXNl L2NhbGwtc2lnbmFscy5jCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDow MDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFs cy5jCTMgRGVjIDIwMDggMDU6MDA6NDMgLTAwMDAKQEAgLTAsMCArMSw4OSBA QAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdEQiwgdGhlIEdOVSBk ZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBG b3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5 CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29m dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGlj ZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu dHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICov CisKKy8qIFN1cHBvcnQgcHJvZ3JhbSBmb3IgdGVzdGluZyBoYW5kbGluZyBv ZiBpbmZlcmlvciBmdW5jdGlvbiBjYWxscworICAgaW4gdGhlIHByZXNlbmNl IG9mIHNpZ25hbHMuICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNs dWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwordm9pZAor aGFuZGxlX3NpZ25hbCAoaW50IHNpZykKK3sKK30KKwordm9pZAorZ2VuX3Np Z25hbCAoKQoreworICAvKiBBY2NvcmRpbmcgdG8gc2lnYWxsLmV4cCwgU0lH QUJSVCBpcyBhbHdheXMgc3VwcG9ydGVkLiAgKi8KKyNpZmRlZiBTSUdBQlJU CisgIGtpbGwgKGdldHBpZCAoKSwgU0lHQUJSVCk7CisjZW5kaWYKKyAgLyog SWYgd2UgZ2V0IGhlcmUgd2UgY291bGRuJ3QgZ2VuZXJhdGUgYSBzaWduYWws IHRlbGwgZGVqYWdudS4gICovCisgIHByaW50ZiAoIm5vIHNpZ25hbFxuIik7 Cit9CisKKy8qIEVhc3kgcGxhY2UgdG8gc2V0IGEgYnJlYWtwb2ludC4gICov CisKK3ZvaWQKK3N0b3Bfb25lICgpCit7Cit9CisKK3ZvaWQKK3N0b3BfdHdv ICgpCit7Cit9CisKK3ZvaWQKK251bGxfaGFuZF9jYWxsICgpCit7Cit9CisK K2ludAorbWFpbiAoKQoreworI2lmZGVmIHVzZXN0dWJzCisgIHNldF9kZWJ1 Z190cmFwcyAoKTsKKyAgYnJlYWtwb2ludCAoKTsKKyNlbmRpZgorCisjaWZk ZWYgU0lHX1NFVE1BU0sKKyAgLyogRW5zdXJlIGFsbCB0aGUgc2lnbmFscyBh cmVuJ3QgYmxvY2tlZC4KKyAgICAgVGhlIGVudmlyb25tZW50IGluIHdoaWNo IHRoZSB0ZXN0c3VpdGUgaXMgcnVuIG1heSBoYXZlIGJsb2NrZWQgc29tZQor ICAgICBmb3Igd2hhdGV2ZXIgcmVhc29uLiAgKi8KKyAgeworICAgIHNpZ3Nl dF90IG5ld3NldDsKKyAgICBzaWdlbXB0eXNldCAoJm5ld3NldCk7CisgICAg c2lncHJvY21hc2sgKFNJR19TRVRNQVNLLCAmbmV3c2V0LCBOVUxMKTsKKyAg fQorI2VuZGlmCisKKyAgc2lnbmFsIChTSUdBQlJULCBoYW5kbGVfc2lnbmFs KTsKKworICAvKiBTdG9wIGhlcmUgc28gd2UgY2FuIGhhbmQtY2FsbCBnZW5f c2lnbmFsLiAgKi8KKyAgc3RvcF9vbmUgKCk7CisKKyAgLyogV2hlbiB3ZSdy ZSByZXN1bWVkIHN0b3AgaGVyZS4gICovCisgIHN0b3BfdHdvICgpOworCisg IC8qIFdoZW4gd2UncmUgcmVzdW1lZCB3ZSBnZW5lcmF0ZSBhIHNpZ25hbCBv dXJzZWx2ZXMuICAqLworICBnZW5fc2lnbmFsICgpOworCisgIHJldHVybiAw OworfQpJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL3Vud2luZG9uc2lnbmFs LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRl L2dkYi5iYXNlL3Vud2luZG9uc2lnbmFsLmMKZGlmZiAtTiB0ZXN0c3VpdGUv Z2RiLmJhc2UvdW53aW5kb25zaWduYWwuYwotLS0gL2Rldi9udWxsCTEgSmFu IDE5NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuYmFzZS91 bndpbmRvbnNpZ25hbC5jCTMgRGVjIDIwMDggMDU6MDA6NDMgLTAwMDAKQEAg LTAsMCArMSw2NSBAQAorLyogVGhpcyB0ZXN0Y2FzZSBpcyBwYXJ0IG9mIEdE QiwgdGhlIEdOVSBkZWJ1Z2dlci4KKworICAgQ29weXJpZ2h0IDIwMDggRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3Jh bSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAg dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24g MyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmli dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAg YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisK KyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMg cHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGlj ZW5zZXMvPi4gICovCisKKy8qIFN1cHBvcnQgcHJvZ3JhbSBmb3IgdGVzdGlu ZyB1bndpbmRvbnNpZ25hbC4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgor I2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit2 b2lkCitnZW5fc2lnbmFsICgpCit7CisgIC8qIEFjY29yZGluZyB0byBzaWdh bGwuZXhwLCBTSUdBQlJUIGlzIGFsd2F5cyBzdXBwb3J0ZWQuICAqLworI2lm ZGVmIFNJR0FCUlQKKyAga2lsbCAoZ2V0cGlkICgpLCBTSUdBQlJUKTsKKyNl bmRpZgorICAvKiBJZiB3ZSBnZXQgaGVyZSB3ZSBjb3VsZG4ndCBnZW5lcmF0 ZSBhIHNpZ25hbCwgdGVsbCBkZWphZ251LiAgKi8KKyAgcHJpbnRmICgibm8g c2lnbmFsXG4iKTsKK30KKworLyogRWFzeSBwbGFjZSB0byBzZXQgYSBicmVh a3BvaW50LiAgKi8KKwordm9pZAorc3RvcF9oZXJlICgpCit7Cit9CisKK2lu dAorbWFpbiAoKQoreworI2lmZGVmIHVzZXN0dWJzCisgIHNldF9kZWJ1Z190 cmFwcyAoKTsKKyAgYnJlYWtwb2ludCAoKTsKKyNlbmRpZgorCisjaWZkZWYg U0lHX1NFVE1BU0sKKyAgLyogRW5zdXJlIGFsbCB0aGUgc2lnbmFscyBhcmVu J3QgYmxvY2tlZC4KKyAgICAgVGhlIGVudmlyb25tZW50IGluIHdoaWNoIHRo ZSB0ZXN0c3VpdGUgaXMgcnVuIG1heSBoYXZlIGJsb2NrZWQgc29tZQorICAg ICBmb3Igd2hhdGV2ZXIgcmVhc29uLiAgKi8KKyAgeworICAgIHNpZ3NldF90 IG5ld3NldDsKKyAgICBzaWdlbXB0eXNldCAoJm5ld3NldCk7CisgICAgc2ln cHJvY21hc2sgKFNJR19TRVRNQVNLLCAmbmV3c2V0LCBOVUxMKTsKKyAgfQor I2VuZGlmCisKKyAgLyogU3RvcCBoZXJlIHNvIHdlIGNhbiBoYW5kLWNhbGwg Z2VuX3NpZ25hbC4gICovCisgIHN0b3BfaGVyZSAoKTsKKworICByZXR1cm4g MDsKK30KSW5kZXg6IHRlc3RzdWl0ZS9nZGIuYmFzZS91bndpbmRvbnNpZ25h bC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1 aXRlL2dkYi5iYXNlL3Vud2luZG9uc2lnbmFsLmV4cApkaWZmIC1OIHRlc3Rz dWl0ZS9nZGIuYmFzZS91bndpbmRvbnNpZ25hbC5leHAKLS0tIC9kZXYvbnVs bAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3VpdGUvZ2Ri LmJhc2UvdW53aW5kb25zaWduYWwuZXhwCTMgRGVjIDIwMDggMDU6MDA6NDMg LTAwMDAKQEAgLTAsMCArMSw5OCBAQAorIyBDb3B5cmlnaHQgMjAwOCBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisJc3RyYWNlICR0cmFjZWxldmVs Cit9CisKK2lmIFt0YXJnZXRfaW5mbyBleGlzdHMgZ2RiLG5vaW5mZXJpb3Jp b10geworICAgIHZlcmJvc2UgIlNraXBwaW5nIHVud2luZG9uc2lnbmFsLmV4 cCBiZWNhdXNlIG9mIG5vIGZpbGVpbyBjYXBhYmlsaXRpZXMuIgorICAgIGNv bnRpbnVlCit9CisKK3NldCBwcm1zX2lkIDAKK3NldCBidWdfaWQgMAorCitz ZXQgdGVzdGZpbGUgInVud2luZG9uc2lnbmFsIgorc2V0IHNyY2ZpbGUgJHt0 ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUgJHtvYmpkaXJ9LyR7c3ViZGlyfS8k e3Rlc3RmaWxlfQorCitpZiAgeyBbZ2RiX2NvbXBpbGUgIiR7c3JjZGlyfS8k e3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7YmluZmlsZX0iIGV4ZWN1dGFibGUg e2RlYnVnfV0gIT0gIiIgfSB7CisgICAgIHVudGVzdGVkIHVud2luZG9uc2ln bmFsLmV4cAorICAgICByZXR1cm4gLTEKK30KKworIyBTb21lIHRhcmdldHMg Y2FuJ3QgZG8gZnVuY3Rpb24gY2FsbHMsIHNvIGRvbid0IGV2ZW4gYm90aGVy IHdpdGggdGhpcworIyB0ZXN0LgoraWYgW3RhcmdldF9pbmZvIGV4aXN0cyBn ZGIsY2Fubm90X2NhbGxfZnVuY3Rpb25zXSB7CisgICAgc2V0dXBfeGZhaWwg IiotKi0qIiAyNDE2CisgICAgZmFpbCAiVGhpcyB0YXJnZXQgY2FuIG5vdCBj YWxsIGZ1bmN0aW9ucyIKKyAgICBjb250aW51ZQorfQorCisjIFN0YXJ0IHdp dGggYSBmcmVzaCBnZGIuCisKK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9y ZWluaXRpYWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHti aW5maWxlfQorCitpZiB7ICFbcnVudG9fbWFpbl0gfSB7CisgICAgZmFpbCAi Q2FuJ3QgcnVuIHRvIG1haW4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rl c3QgImJyZWFrIHN0b3BfaGVyZSIgIkJyZWFrcG9pbnQgXFswLTlcXSogYXQg LioiCitnZGJfdGVzdCAiY29udGludWUiICJDb250aW51aW5nLipCcmVha3Bv aW50IFxbMC05XF0qLCBzdG9wX2hlcmUuKiIgXAorICAgICJjb250aW51ZSB0 byBicmVha3BvaW50IGF0IHN0b3BfaGVyZSIKKworIyBUdXJuIG9uIHVud2lu ZG9uc2lnbmFsLgorZ2RiX3Rlc3QgInNldCB1bndpbmRvbnNpZ25hbCBvbiIg XAorCSIiIFwKKwkic2V0dGluZyB1bndpbmRvbnNpZ25hbCIKK2dkYl90ZXN0 ICJzaG93IHVud2luZG9uc2lnbmFsIiBcCisJIlVud2luZGluZyBvZiBzdGFj ayAuKiBpcyBvbi4iIFwKKwkic2hvd2luZyB1bndpbmRvbnNpZ25hbCIKKwor IyBDYWxsIGZ1bmN0aW9uIChjYXVzaW5nIHRoZSBwcm9ncmFtIHRvIGdldCBh IHNpZ25hbCksIGFuZCBzZWUgaWYgZ2RiIGhhbmRsZXMKKyMgaXQgcHJvcGVy bHkuCitnZGJfdGVzdF9tdWx0aXBsZSAiY2FsbCBnZW5fc2lnbmFsICgpIiBc CisJInVud2luZG9uc2lnbmFsLCBpbmZlcmlvciBmdW5jdGlvbiBjYWxsIHNp Z25hbGVkIiB7CisgICAgLXJlICJcW1xyXG5cXSpubyBzaWduYWxcW1xyXG5c XSskZ2RiX3Byb21wdCAkIiB7CisJdW5zdXBwb3J0ZWQgInVud2luZG9uc2ln bmFsLCBpbmZlcmlvciBmdW5jdGlvbiBjYWxsIHNpZ25hbGVkIgorCXJldHVy biAwCisgICAgfQorICAgIC1yZSAiXFtcclxuXF0qVGhlIHByb2dyYW0gYmVp bmcgZGVidWdnZWQgd2FzIHNpZ25hbGVkLipcW1xyXG5cXSskZ2RiX3Byb21w dCAkIiB7CisJcGFzcyAidW53aW5kb25zaWduYWwsIGluZmVyaW9yIGZ1bmN0 aW9uIGNhbGwgc2lnbmFsZWQiCisgICAgfQorfQorCisjIFZlcmlmeSB0aGUg c3RhY2sgZ290IHVud291bmQuCitnZGJfdGVzdCAiYnQiIFwKKyAgICAiIzAg KlxbeDAtOWEtZiBpblxdKnN0b3BfaGVyZSBcXCguKlxcKSBhdCAuKiMxICpc W3gwLTlhLWYgaW5cXSptYWluIFxcKC4qXFwpIGF0IC4qIiBcCisJInVud2lu ZG9uc2lnbmFsLCBzdGFjayB1bndvdW5kIgorCisjIFZlcmlmeSB0aGUgZHVt bXkgZnJhbWUgZ290IHJlbW92ZWQgZnJvbSBkdW1teV9mcmFtZV9zdGFjay4K K2dkYl90ZXN0X211bHRpcGxlICJtYWludCBwcmludCBkdW1teS1mcmFtZXMi IFwKKwkidW53aW5kb25zaWduYWwsIGR1bW15IGZyYW1lIHJlbW92ZWQiIHsK KyAgICAtcmUgIlxbXHJcblxdKi4qc3RhY2s9Lipjb2RlPS4qXFtcclxuXF0r JGdkYl9wcm9tcHQgJCIgeworCWZhaWwgInVud2luZG9uc2lnbmFsLCBkdW1t eSBmcmFtZSByZW1vdmVkIgorICAgIH0KKyAgICAtcmUgIlxbXHJcblxdKyRn ZGJfcHJvbXB0ICQiIHsKKwlwYXNzICJ1bndpbmRvbnNpZ25hbCwgZHVtbXkg ZnJhbWUgcmVtb3ZlZCIKKyAgICB9Cit9CisKK3JldHVybiAwCkluZGV4OiB0 ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaW50ZXJydXB0ZWQtaGFuZC1jYWxsLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogdGVzdHN1aXRlL2dk Yi50aHJlYWRzL2ludGVycnVwdGVkLWhhbmQtY2FsbC5jCmRpZmYgLU4gdGVz dHN1aXRlL2dkYi50aHJlYWRzL2ludGVycnVwdGVkLWhhbmQtY2FsbC5jCi0t LSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVz dHN1aXRlL2dkYi50aHJlYWRzL2ludGVycnVwdGVkLWhhbmQtY2FsbC5jCTMg RGVjIDIwMDggMDU6MDA6NDMgLTAwMDAKQEAgLTAsMCArMSwxNDQgQEAKKy8q IFRlc3QgY2FzZSBmb3IgaGFuZCBmdW5jdGlvbiBjYWxscyBpbnRlcnJ1cHRl ZCBieSBhIHNpZ25hbCBpbiBhbm90aGVyIHRocmVhZC4KKworICAgQ29weXJp Z2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAg IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4KKworICAgVGhpcyBwcm9ncmFt IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1 dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBi dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w bGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKwor ICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBw cm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRl IDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0 ZGxpYi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQu aD4KKworI2lmbmRlZiBOUl9USFJFQURTCisjZGVmaW5lIE5SX1RIUkVBRFMg NAorI2VuZGlmCisKK3B0aHJlYWRfdCB0aHJlYWRzW05SX1RIUkVBRFNdOwor CisvKiBOdW1iZXIgb2YgdGhyZWFkcyBjdXJyZW50bHkgcnVubmluZy4gICov CitpbnQgdGhyZWFkX2NvdW50OworCitwdGhyZWFkX211dGV4X3QgdGhyZWFk X2NvdW50X211dGV4OworCitwdGhyZWFkX2NvbmRfdCB0aHJlYWRfY291bnRf Y29uZHZhcjsKKworc2lnX2F0b21pY190IHNpZ2FicnRfcmVjZWl2ZWQ7CisK K3ZvaWQKK2luY3JfdGhyZWFkX2NvdW50ICh2b2lkKQoreworICBwdGhyZWFk X211dGV4X2xvY2sgKCZ0aHJlYWRfY291bnRfbXV0ZXgpOworICArK3RocmVh ZF9jb3VudDsKKyAgaWYgKHRocmVhZF9jb3VudCA9PSBOUl9USFJFQURTKQor ICAgIHB0aHJlYWRfY29uZF9zaWduYWwgKCZ0aHJlYWRfY291bnRfY29uZHZh cik7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmdGhyZWFkX2NvdW50X211 dGV4KTsKK30KKwordm9pZAorY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAq Y29uZCwgcHRocmVhZF9tdXRleF90ICptdXQpCit7CisgIHB0aHJlYWRfbXV0 ZXhfbG9jayAobXV0KTsKKyAgcHRocmVhZF9jb25kX3dhaXQgKGNvbmQsIG11 dCk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXQpOworfQorCit2b2lk Citub3JldHVybiAodm9pZCkKK3sKKyAgcHRocmVhZF9tdXRleF90IG11dDsK KyAgcHRocmVhZF9jb25kX3QgY29uZDsKKworICBwdGhyZWFkX211dGV4X2lu aXQgKCZtdXQsIE5VTEwpOworICBwdGhyZWFkX2NvbmRfaW5pdCAoJmNvbmQs IE5VTEwpOworCisgIC8qIFdhaXQgZm9yIGEgY29uZGl0aW9uIHRoYXQgd2ls bCBuZXZlciBiZSBzaWduYWxlZCwgc28gd2UgZWZmZWN0aXZlbHkKKyAgICAg YmxvY2sgdGhlIHRocmVhZCBoZXJlLiAgKi8KKyAgY29uZF93YWl0ICgmY29u ZCwgJm11dCk7Cit9CisKK3ZvaWQgKgordGhyZWFkX2VudHJ5ICh2b2lkICp1 bnVzZWQpCit7CisgIGluY3JfdGhyZWFkX2NvdW50ICgpOworICBub3JldHVy biAoKTsKK30KKwordm9pZAorc2lnYWJydF9oYW5kbGVyIChpbnQgc2lnbm8p Cit7CisgIHNpZ2FicnRfcmVjZWl2ZWQgPSAxOworfQorCisvKiBIZWxwZXIg dG8gdGVzdCBhIGhhbmQtY2FsbCBiZWluZyAiaW50ZXJydXB0ZWQiIGJ5IGEg c2lnbmFsIG9uIGFub3RoZXIKKyAgIHRocmVhZC4gICovCisKK3ZvaWQKK2hh bmRfY2FsbF93aXRoX3NpZ25hbCAodm9pZCkKK3sKKyAgY29uc3Qgc3RydWN0 IHRpbWVzcGVjIHRzID0geyAwLCAxMDAwMDAwMCB9OyAvKiAwLjAxIHNlYyAq LworCisgIHNpZ2FicnRfcmVjZWl2ZWQgPSAwOworICBwdGhyZWFkX2tpbGwg KHRocmVhZHNbMF0sIFNJR0FCUlQpOworICB3aGlsZSAoISBzaWdhYnJ0X3Jl Y2VpdmVkKQorICAgIG5hbm9zbGVlcCAoJnRzLCBOVUxMKTsKK30KKworLyog V2FpdCB1bnRpbCBhbGwgdGhyZWFkcyBhcmUgcnVubmluZy4gICovCisKK3Zv aWQKK3dhaXRfYWxsX3RocmVhZHNfcnVubmluZyAodm9pZCkKK3sKKyAgcHRo cmVhZF9tdXRleF9sb2NrICgmdGhyZWFkX2NvdW50X211dGV4KTsKKyAgcHRo cmVhZF9jb25kX3dhaXQgKCZ0aHJlYWRfY291bnRfY29uZHZhciwgJnRocmVh ZF9jb3VudF9tdXRleCk7CisgIGlmICh0aHJlYWRfY291bnQgPT0gTlJfVEhS RUFEUykKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4X3VubG9jayAoJnRo cmVhZF9jb3VudF9tdXRleCk7CisgICAgICByZXR1cm47CisgICAgfQorICBw dGhyZWFkX211dGV4X3VubG9jayAoJnRocmVhZF9jb3VudF9tdXRleCk7Cisg IHByaW50ZiAoImZhaWxlZCB3YWl0aW5nIGZvciBhbGwgdGhyZWFkcyB0byBz dGFydFxuIik7CisgIGFib3J0ICgpOworfQorCisvKiBDYWxsZWQgd2hlbiBh bGwgdGhyZWFkcyBhcmUgcnVubmluZy4KKyAgIEVhc3kgcGxhY2UgZm9yIGEg YnJlYWtwb2ludC4gICovCisKK3ZvaWQKK2FsbF90aHJlYWRzX3J1bm5pbmcg KHZvaWQpCit7Cit9CisKK2ludAorbWFpbiAodm9pZCkKK3sKKyAgaW50IGk7 CisKKyAgc2lnbmFsIChTSUdBQlJULCBzaWdhYnJ0X2hhbmRsZXIpOworCisg IHB0aHJlYWRfbXV0ZXhfaW5pdCAoJnRocmVhZF9jb3VudF9tdXRleCwgTlVM TCk7CisgIHB0aHJlYWRfY29uZF9pbml0ICgmdGhyZWFkX2NvdW50X2NvbmR2 YXIsIE5VTEwpOworCisgIGZvciAoaSA9IDA7IGkgPCBOUl9USFJFQURTOyAr K2kpCisgICAgcHRocmVhZF9jcmVhdGUgKCZ0aHJlYWRzW2ldLCBOVUxMLCB0 aHJlYWRfZW50cnksIE5VTEwpOworCisgIHdhaXRfYWxsX3RocmVhZHNfcnVu bmluZyAoKTsKKyAgYWxsX3RocmVhZHNfcnVubmluZyAoKTsKKworICByZXR1 cm4gMDsKK30KKwpJbmRleDogdGVzdHN1aXRlL2dkYi50aHJlYWRzL2ludGVy cnVwdGVkLWhhbmQtY2FsbC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS Q1MgZmlsZTogdGVzdHN1aXRlL2dkYi50aHJlYWRzL2ludGVycnVwdGVkLWhh bmQtY2FsbC5leHAKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaW50 ZXJydXB0ZWQtaGFuZC1jYWxsLmV4cAotLS0gL2Rldi9udWxsCTEgSmFuIDE5 NzAgMDA6MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIudGhyZWFkcy9p bnRlcnJ1cHRlZC1oYW5kLWNhbGwuZXhwCTMgRGVjIDIwMDggMDU6MDA6NDMg LTAwMDAKQEAgLTAsMCArMSw5MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMDQs IDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisK KyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRl cm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFt IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0 aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0 YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv ZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0 aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uCisKKyMgVGVzdCByZWNvdmVyaW5nIGZyb20gYSBo YW5kIGZ1bmN0aW9uIGNhbGwgdGhhdCBnZXRzIGludGVycnVwdGVkCisjIGJ5 IGEgc2lnbmFsIGluIGFub3RoZXIgdGhyZWFkLgorCitzZXQgTlJfVEhSRUFE UyA0CisKK2lmICR0cmFjZWxldmVsIHRoZW4geworCXN0cmFjZSAkdHJhY2Vs ZXZlbAorfQorCitzZXQgdGVzdGZpbGUgImludGVycnVwdGVkLWhhbmQtY2Fs bCIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmMKK3NldCBiaW5maWxlICR7 b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0KKworaWYge1tnZGJfY29t cGlsZV9wdGhyZWFkcyAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9 IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSBbbGlzdCBkZWJ1ZyAiaW5jZGly PSR7b2JqZGlyfSIgImFkZGl0aW9uYWxfZmxhZ3M9LUROUl9USFJFQURTPSRO Ul9USFJFQURTIl1dICE9ICIiIH0geworICAgIHJldHVybiAtMQorfQorCisj IFNvbWUgdGFyZ2V0cyBjYW4ndCBkbyBmdW5jdGlvbiBjYWxscywgc28gZG9u J3QgZXZlbiBib3RoZXIgd2l0aCB0aGlzCisjIHRlc3QuCitpZiBbdGFyZ2V0 X2luZm8gZXhpc3RzIGdkYixjYW5ub3RfY2FsbF9mdW5jdGlvbnNdIHsKKyAg ICBzZXR1cF94ZmFpbCAiKi0qLSoiIDI0MTYKKyAgICBmYWlsICJUaGlzIHRh cmdldCBjYW4gbm90IGNhbGwgZnVuY3Rpb25zIgorICAgIGNvbnRpbnVlCit9 CisKK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRpYWxpemVfZGly ICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxlfQorCitpZiB7 ICFbcnVudG9fbWFpbl0gfSB7CisgICAgZmFpbCAiQ2FuJ3QgcnVuIHRvIG1h aW4iCisgICAgcmV0dXJuIDAKK30KKworZ2RiX3Rlc3QgImJyZWFrIGFsbF90 aHJlYWRzX3J1bm5pbmciIFwKKyAgICAgICAgICJCcmVha3BvaW50IDIgYXQg Lio6IGZpbGUgLioke3NyY2ZpbGV9LCBsaW5lIC4qIiBcCisgICAgICAgICAi YnJlYWtwb2ludCBvbiBhbGxfdGhyZWFkc19ydW5uaW5nIgorCisjIFJ1biB0 aGUgcHJvZ3JhbSBhbmQgbWFrZSBzdXJlIEdEQiByZXBvcnRzIHRoYXQgd2Ug c3RvcHBlZCBhZnRlcgorIyBoaXR0aW5nIGJyZWFrcG9pbnQgMiBpbiBhbGxf dGhyZWFkc19ydW5uaW5nKCkuCisKK2dkYl90ZXN0ICJjb250aW51ZSIgXAor ICAgICAgICAgIi4qQnJlYWtwb2ludCAyLCBhbGxfdGhyZWFkc19ydW5uaW5n ICgpLioiIFwKKyAgICAgICAgICJydW4gdG8gYWxsX3RocmVhZHNfcnVubmlu ZyIKKworIyBOT1RFOiBEb24ndCB0dXJuIG9uIHNjaGVkdWxlci1sb2NraW5n IGhlcmUuCisjIFdlIHdhbnQgdGhlIG1haW4gdGhyZWFkIChoYW5kX2NhbGxf d2l0aF9zaWduYWwpIGFuZAorIyB0aHJlYWQgMSAoc2lnYWJydF9oYW5kbGVy KSB0byBib3RoIHJ1bi4KKworZ2RiX3Rlc3QgImNhbGwgaGFuZF9jYWxsX3dp dGhfc2lnbmFsKCkiIFwKKyAgICAiLipjdXJyZW50IHRocmVhZCBoYXMgY2hh bmdlZC4qIiBcCisgICAgImhhbmQtY2FsbCBpbnRlcnJ1cHRlZCBieSBzaWdu YWwgaW4gYW5vdGhlciB0aHJlYWQiCisKKyMgVmVyaWZ5IGR1bW15IHN0YWNr IGZyYW1lIGlzIHN0aWxsIHByZXNlbnQuCisKK2dkYl90ZXN0ICJtYWludCBw cmludCBkdW1teS1mcmFtZXMiICIuKnN0YWNrPS4qIiAiZHVtbXkgc3RhY2sg ZnJhbWUgcHJlc2VudCIKKworIyBDb250aW51aW5nIG5vdyBzaG91bGQgZXhp dCB0aGUgaGFuZC1jYWxsIGFuZCBwb3AgdGhlIGR1bW15IGZyYW1lLgorCitn ZGJfdGVzdCAiY29udGludWUiICIiICJmaW5pc2ggaGFuZC1jYWxsIgorCitn ZGJfdGVzdF9tdWx0aXBsZSAibWFpbnQgcHJpbnQgZHVtbXktZnJhbWVzIiAi ZHVtbXkgZnJhbWUgcG9wcGVkIiB7CisgICAgLXJlICIuKnN0YWNrPS4qJGdk Yl9wcm9tcHQgJCIgeworCWZhaWwgImFsbCBkdW1taWVzIHBvcHBlZCIKKyAg ICB9CisgICAgLXJlICIuKiRnZGJfcHJvbXB0ICQiIHsKKwlwYXNzICJhbGwg ZHVtbWllcyBwb3BwZWQiCisgICAgfQorfQorCisjIENvbnRpbnVlIG9uZSBs YXN0IHRpbWUsIHRoZSBwcm9ncmFtIHNob3VsZCBleGl0IG5vcm1hbGx5Lgor CitnZGJfdGVzdCAiY29udGludWUiICJQcm9ncmFtIGV4aXRlZCBub3JtYWxs eS4iIFwKKyAgICAiY29udGludWUgdG8gcHJvZ3JhbSBleGl0IgorCityZXR1 cm4gMAo= --000e0cd21182e2b807045d1e32df--