From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17322 invoked by alias); 20 Nov 2008 08:08:24 -0000 Received: (qmail 15370 invoked by uid 22791); 20 Nov 2008 08:08:11 -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.31) with ESMTP; Thu, 20 Nov 2008 08:07:13 +0000 Received: from spaceape12.eur.corp.google.com (spaceape12.eur.corp.google.com [172.28.16.146]) by smtp-out.google.com with ESMTP id mAK879Qt026430 for ; Thu, 20 Nov 2008 00:07:10 -0800 Received: from rv-out-0708.google.com (rvbf25.prod.google.com [10.140.82.25]) by spaceape12.eur.corp.google.com with ESMTP id mAK876w9023940 for ; Thu, 20 Nov 2008 00:07:07 -0800 Received: by rv-out-0708.google.com with SMTP id f25so322652rvb.22 for ; Thu, 20 Nov 2008 00:07:06 -0800 (PST) MIME-Version: 1.0 Received: by 10.141.68.12 with SMTP id v12mr1093527rvk.228.1227168426479; Thu, 20 Nov 2008 00:07:06 -0800 (PST) In-Reply-To: References: <20081118125838.0613C412301@localhost> Date: Thu, 20 Nov 2008 15:06:00 -0000 Message-ID: Subject: Re: [RFA] dummy frame handling cleanup, plus inferior fun call signal handling improvement From: Doug Evans To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd14cb223d0c3045c1a6a20 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-11/txt/msg00546.txt.bz2 --000e0cd14cb223d0c3045c1a6a20 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 11120 On Thu, Nov 20, 2008 at 12:03 AM, Doug Evans wrote: > On Tue, Nov 18, 2008 at 4:58 AM, Doug Evans wrote: >> Hi. This patch was in progress when I wrote >> http://sourceware.org/ml/gdb-patches/2008-11/msg00391.html >> This patch subsumes that one. >> >> There are two things this patch does: >> 1) properly pop dummy frames more often >> 2) make the inferior resumable after an inferior function call gets a >> signal without having to remember to do "signal 0" >> >> 1) properly pop dummy frames more often >> >> Ulrich asked: >>> I agree that it would be better if call_function_by_hand were to call >>> dummy_frame_pop in this case. However, why exactly is this a bug? >> >> It's a bug because it's confusing to not pop the frame in the places >> where one is able to. Plus it's, well, unclean. >> I recognize that the dummy frame stack can't be precisely managed because >> the user can do things like: >> >> set $orig_pc = $pc >> set $orig_sp = $sp >> break my_fun >> call my_fun() >> set $pc = $orig_pc >> set $sp = $orig_sp >> continue >> >> [This doesn't always work, but you get the idea.] >> At the "continue", the inferior function call no longer exists and >> gdb's mechanisms for removing the dummy frame from dummy_frame_stack >> will never trigger (until the program is resumed and cleanup_dummy_frames >> is called). But we can still keep things clean >> and unconfusing for the common case. >> >> 2) make the inferior resumable after an inferior function call gets a >> signal without having to remember to do "signal 0" >> >> If an inferior function call gets a signal (say SIGSEGV or SIGABRT), >> one should be able to easily resume program execution after popping the stack. >> It works today, but after manually popping the stack (e.g. with >> "frame ; return" where is the dummy stack frame's number) >> one has to remember to resume the program with "signal 0". >> This is because stop_signal doesn't get restored. >> Maybe there's a reason it shouldn't be, or maybe should be made an option, >> but the current behaviour seems user-unfriendly for the normal case. >> >> Restoring stop_signal also has the benefit that if an inferior function >> call is made after getting a signal, and the inferior function call >> doesn't complete (e.g. has a breakpoint and doesn't complete right away), >> the user can resume the program (after popping the inf fun call off the >> stack) with "continue" without having to remember what the signal was >> and remember to use "signal N". >> >> [BTW, IWBN if there was a command that did the equivalent of >> "frame ; return", named say "abandon", so that one didn't have >> to go to the trouble of finding the dummy frame's stack number. >> "abandon" would have the additional benefit that if the stack >> was corrupted and one couldn't find the dummy frame, it would still >> work since everything it needs is in dummy_frame_stack - it doesn't need >> to examine the inferior's stack, except maybe for some sanity checking. >> Continuing the inferior may still not be possible, but it does give the >> user a more straightforward way to abandon an inferior function call >> than exists today.] >> >> The bulk of the patch goes into making (2) work in a clean way. >> Right now the inferior state that can be restored is a collection of >> inferior_status, regcache, and misc. things like stop_pc (see the >> assignment of stop_pc in normal_stop() when stop_stack_dummy). >> The patch organizes the state into two pieces: inferior program state >> (registers, stop_pc, stop_signal) and gdb session state >> (the rest of inferior_status). >> Program state is recorded on the dummy frame stack and is always >> restored, either when the inferior function call completes or >> when the stack frame is manually popped. >> inferior_status contains the things that only get restored >> if either the inferior function call successfully completes or >> it gets a signal and unwindonsignal is set. >> >> P.S. I've removed one copy of the regcache. Hopefully I've structured >> things in a way that doesn't lose. >> >> NOTES: >> - this adds the unwindonsignal.exp testcase from before, plus a new >> testcase that verifies one can resume the inferior after abandoning >> an inferior function call that gets a signal >> >> It's a big patch so presumably there are issues with it. >> Comments? >> >> [tested on i386-linux and x86_64-linux] >> >> 2008-11-18 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, >> assert_dummy_present,pop_dummy_frame_below,lookup_dummy_id, >> 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. Discard dummy frames below >> the one being deleted. >> (dummy_frame_sniffer): Update. >> * dummy-frame.h (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. >> Ensure dummy frame is popped/discarded for all possible exit paths. >> * 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, >> make_cleanup_restore_inferior_program_state, >> discard_inferior_program_state, >> get_inferior_program_state_regcache): New functions. >> (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. > > ref: http://sourceware.org/ml/gdb-patches/2008-11/msg00454.html > > Blech. I went too far in trying to keep dummy_frame_stack accurate. > One can (theoretically) have multiple hand-function-calls outstanding > in multiple threads (and soon in multiple processes presumably). > Attached is a new version of the patch that goes back to having > dummy_frame_pop only popping the requested frame (and similarily for > dummy_frame_discard). > > I wrote a testcase that calls functions in multiple threads (with > scheduler-locking on) by setting a breakpoint on the function being > called. I think there's a bug in scheduler-locking support as when I > make the second call in the second thread, gdb makes the first thread > step over the breakpoint and then resume, and control returns to > call_function_by_hand with inferior_ptid changed to the first thread. > To protect call_function_by_hand from this it now flags an error if > the thread changes. > [I'll submit the testcase separately once I can get it to pass, unless > folks want it to see it.] > > How's this? > > 2008-11-18 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 (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. > Ensure dummy frame is popped/discarded for all possible exit paths. > 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. > Ummm, this time with the correct patch attached. Sorry! --000e0cd14cb223d0c3045c1a6a20 Content-Type: text/plain; charset=US-ASCII; name="gdb-081119-infcall-2.patch.txt" Content-Disposition: attachment; filename="gdb-081119-infcall-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fnr4cljp1 Content-length: 53912 MjAwOC0xMS0xOCAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog ZHVtbXktZnJhbWUuYyAoZHVtbXlfZnJhbWUpOiBSZXBsYWNlIHJlZ2NhY2hl IG1lbWJlciB3aXRoCgljYWxsZXJfc3RhdGUuCgkoZHVtbXlfZnJhbWVfcHVz aCk6IFJlcGxhY2UgY2FsbGVyX3JlZ2NhY2hlIGFyZyB3aXRoIGNhbGxlcl9z dGF0ZS4KCVJldHVybiBwb2ludGVyIHRvIGNyZWF0ZWQgZHVtbXkgZnJhbWUu ICBBbGwgY2FsbGVycyB1cGRhdGVkLgoJKHJlbW92ZV9kdW1teV9mcmFtZSxk b19kdW1teV9mcmFtZV9jbGVhbnVwLHBvcF9kdW1teV9mcmFtZV9mcm9tX3B0 ciwKCWxvb2t1cF9kdW1teSxsb29rdXBfZHVtbXlfaWQsIHBvcF9kdW1teV9m cmFtZSxkdW1teV9mcmFtZV9kaXNjYXJkLAoJZG9fcG9wX2R1bW15X2ZyYW1l X2NsZWFudXAsbWFrZV9jbGVhbnVwX3BvcF9kdW1teV9mcmFtZSk6IE5ldwoJ ZnVuY3Rpb25zLgoJKGR1bW15X2ZyYW1lX3BvcCk6IFJld3JpdGUuICBWZXJp ZnkgcmVxdWVzdGVkIGZyYW1lIGlzIGluIHRoZQoJZHVtbXkgZnJhbWUgc3Rh Y2suICBSZXN0b3JlIHByb2dyYW0gc3RhdGUuCgkoY2xlYW51cF9kdW1teV9m cmFtZXMpOiBSZXdyaXRlLgoJKGR1bW15X2ZyYW1lX3NuaWZmZXIpOiBVcGRh dGUuCgkqIGR1bW15LWZyYW1lLmggKGR1bW15X2ZyYW1lX3B1c2gpOiBVcGRh dGUgcHJvdG90eXBlLgoJKGR1bW15X2ZyYW1lX2Rpc2NhcmQsbWFrZV9jbGVh bnVwX3BvcF9kdW1teV9mcmFtZSk6IERlY2xhcmUuCgkqIGZyYW1lLmMgKGZy YW1lX3BvcCk6IGR1bW15X2ZyYW1lX3BvcCBub3cgZG9lcyBhbGwgdGhlIHdv cmsgZm9yCglEVU1NWV9GUkFNRXMuCgkqIGluZmNhbGwuYyAoY2FsbF9mdW5j dGlvbl9ieV9oYW5kKTogUmVwbGFjZSBjYWxsZXJfcmVnY2FjaGUsCgljYWxs ZXJfcmVnY2FjaGVfY2xlYW51cCB3aXRoIGNhbGxlcl9zdGF0ZSwgY2FsbGVy X3N0YXRlX2NsZWFudXAuCglOZXcgbG9jYWxzIGR1bW15X2ZyYW1lLCBkdW1t eV9mcmFtZV9jbGVhbnVwLCB0aGlzX3RocmVhZC4KCUVuc3VyZSBkdW1teSBm cmFtZSBpcyBwb3BwZWQvZGlzY2FyZGVkIGZvciBhbGwgcG9zc2libGUgZXhp dCBwYXRocy4KCURldGVjdCBwcm9ncmFtIHN0b3BwaW5nIGluIGEgZGlmZmVy ZW50IHRocmVhZC4KCSogaW5mZXJpb3IuaCAoaW5mZXJpb3JfcHJvZ3JhbV9z dGF0ZSk6IERlY2xhcmUgKG9wYXF1ZSB0eXBlKS4KCShzYXZlX2luZmVyaW9y X3Byb2dyYW1fc3RhdGUscmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRl LAoJbWFrZV9jbGVhbnVwX3Jlc3RvcmVfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0 ZSwKCWRpc2NhcmRfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSwKCWdldF9pbmZl cmlvcl9wcm9ncmFtX3N0YXRlX3JlZ2NhY2hlKTogRGVjbGFyZS4KCShzYXZl X2luZmVyaW9yX3N0YXR1cyk6IFVwZGF0ZSBwcm90b3R5cGUuCgkqIGluZnJ1 bi5jOiAjaW5jbHVkZSAiZHVtbXktZnJhbWUuaCIKCShub3JtYWxfc3RvcCk6 IFdoZW4gc3RvcHBlZCBmb3IgdGhlIGNvbXBsZXRpb24gb2YgYW4gaW5mZXJp b3IgZnVuY3Rpb24KCWNhbGwsIHZlcmlmeSB0aGUgZXhwZWN0ZWQgc3RhY2sg ZnJhbWUga2luZCBhbmQgdXNlIGR1bW15X2ZyYW1lX3BvcC4KCShpbmZlcmlv cl9wcm9ncmFtX3N0YXRlKTogTmV3IHN0cnVjdC4KCShzYXZlX2luZmVyaW9y X3Byb2dyYW1fc3RhdGUscmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRl LAoJZG9fcmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlX2NsZWFudXAs CgltYWtlX2NsZWFudXBfcmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRl LAoJZGlzY2FyZF9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlLAoJZ2V0X2luZmVy aW9yX3Byb2dyYW1fc3RhdGVfcmVnY2FjaGUpOiBOZXcgZnVuY3Rpb25zLgoJ KGluZmVyaW9yX3N0YXR1cyk6IFJlbW92ZSBtZW1iZXJzIHN0b3Bfc2lnbmFs LCBzdG9wX3BjLCByZWdpc3RlcnMsCglyZXN0b3JlX3N0YWNrX2luZm8uCgko c2F2ZV9pbmZlcmlvcl9zdGF0dXMpOiBSZW1vdmUgYXJnIHJlc3RvcmVfc3Rh Y2tfaW5mby4KCUFsbCBjYWxsZXJzIHVwZGF0ZWQuICBSZW1vdmUgc2F2aW5n IG9mIHN0YXRlIG5vdyBzYXZlZCBieQoJc2F2ZV9pbmZlcmlvcl9wcm9ncmFt X3N0YXRlLgoJKHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzKTogUmVtb3ZlIHJl c3RvcmF0aW9uIG9mIHN0YXRlIG5vdyBkb25lIGJ5CglyZXN0b3JlX2luZmVy aW9yX3Byb2dyYW1fc3RhdGUuCgkoZGlzY2FyZF9pbmZlcmlvcl9zdGF0dXMp OiBSZW1vdmUgZnJlZWluZyBvZiByZWdpc3RlcnMsIG5vdyBkb25lIGJ5Cglk aXNjYXJkX2luZmVyaW9yX3Byb2dyYW1fc3RhdGUuCgoJKiBnZGIuYmFzZS9j YWxsLXNpZ25hbC1yZXN1bWUuZXhwOiBOZXcgZmlsZS4KCSogZ2RiLmJhc2Uv Y2FsbC1zaWduYWxzLmM6IE5ldyBmaWxlLgoJKiBnZGIuYmFzZS91bndpbmRv bnNpZ25hbC5leHA6IE5ldyBmaWxlLgoKSW5kZXg6IGR1bW15LWZyYW1lLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9kdW1teS1mcmFtZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjUz CmRpZmYgLXUgLXAgLXIxLjUzIGR1bW15LWZyYW1lLmMKLS0tIGR1bW15LWZy YW1lLmMJMzAgT2N0IDIwMDggMjA6MzU6MzAgLTAwMDAJMS41MworKysgZHVt bXktZnJhbWUuYwkyMCBOb3YgMjAwOCAwNzowOTo1OCAtMDAwMApAQCAtNDIs OCArNDIsOCBAQCBzdHJ1Y3QgZHVtbXlfZnJhbWUKICAgLyogVGhpcyBmcmFt ZSdzIElELiAgTXVzdCBtYXRjaCB0aGUgdmFsdWUgcmV0dXJuZWQgYnkKICAg ICAgZ2RiYXJjaF9kdW1teV9pZC4gICovCiAgIHN0cnVjdCBmcmFtZV9pZCBp ZDsKLSAgLyogVGhlIGNhbGxlcidzIHJlZ2NhY2hlLiAgKi8KLSAgc3RydWN0 IHJlZ2NhY2hlICpyZWdjYWNoZTsKKyAgLyogVGhlIGNhbGxlcidzIHN0YXRl IHByaW9yIHRvIHRoZSBjYWxsLiAgKi8KKyAgc3RydWN0IGluZmVyaW9yX3By b2dyYW1fc3RhdGUgKmNhbGxlcl9zdGF0ZTsKIH07CiAKIHN0YXRpYyBzdHJ1 Y3QgZHVtbXlfZnJhbWUgKmR1bW15X2ZyYW1lX3N0YWNrID0gTlVMTDsKQEAg LTgxLDYxICs4MSwxODEgQEAgZGVwcmVjYXRlZF9wY19pbl9jYWxsX2R1bW15 IChDT1JFX0FERFIgcAogICByZXR1cm4gMDsKIH0KIAotLyogUHVzaCB0aGUg Y2FsbGVyJ3Mgc3RhdGUsIGFsb25nIHdpdGggdGhlIGR1bW15IGZyYW1lIGlu Zm8sIG9udG8gYQorLyogUHVzaCB0aGUgY2FsbGVyJ3Mgc3RhdGUsIGFsb25n IHdpdGggdGhlIGR1bW15IGZyYW1lIGluZm8sIG9udG8gdGhlCiAgICBkdW1t eS1mcmFtZSBzdGFjay4gICovCiAKLXZvaWQKLWR1bW15X2ZyYW1lX3B1c2gg KHN0cnVjdCByZWdjYWNoZSAqY2FsbGVyX3JlZ2NhY2hlLAorc3RydWN0IGR1 bW15X2ZyYW1lICoKK2R1bW15X2ZyYW1lX3B1c2ggKHN0cnVjdCBpbmZlcmlv cl9wcm9ncmFtX3N0YXRlICpjYWxsZXJfc3RhdGUsCiAJCSAgY29uc3Qgc3Ry dWN0IGZyYW1lX2lkICpkdW1teV9pZCkKIHsKICAgc3RydWN0IGR1bW15X2Zy YW1lICpkdW1teV9mcmFtZTsKIAogICBkdW1teV9mcmFtZSA9IFhaQUxMT0Mg KHN0cnVjdCBkdW1teV9mcmFtZSk7Ci0gIGR1bW15X2ZyYW1lLT5yZWdjYWNo ZSA9IGNhbGxlcl9yZWdjYWNoZTsKKyAgZHVtbXlfZnJhbWUtPmNhbGxlcl9z dGF0ZSA9IGNhbGxlcl9zdGF0ZTsKICAgZHVtbXlfZnJhbWUtPmlkID0gKCpk dW1teV9pZCk7CiAgIGR1bW15X2ZyYW1lLT5uZXh0ID0gZHVtbXlfZnJhbWVf c3RhY2s7CiAgIGR1bW15X2ZyYW1lX3N0YWNrID0gZHVtbXlfZnJhbWU7CisK KyAgcmV0dXJuIGR1bW15X2ZyYW1lOwogfQogCi0vKiBQb3AgdGhlIGR1bW15 IGZyYW1lIHdpdGggSUQgZHVtbXlfaWQgZnJvbSB0aGUgZHVtbXktZnJhbWUg c3RhY2suICAqLworLyogUmVtb3ZlICpEVU1NWV9QVFIgZnJvbSB0aGUgZHVt bXkgZnJhbWUgc3RhY2suICAqLwogCi12b2lkCi1kdW1teV9mcmFtZV9wb3Ag KHN0cnVjdCBmcmFtZV9pZCBkdW1teV9pZCkKK3N0YXRpYyB2b2lkCityZW1v dmVfZHVtbXlfZnJhbWUgKHN0cnVjdCBkdW1teV9mcmFtZSAqKmR1bW15X3B0 cikKK3sKKyAgc3RydWN0IGR1bW15X2ZyYW1lICpkdW1teSA9ICpkdW1teV9w dHI7CisKKyAgKmR1bW15X3B0ciA9IGR1bW15LT5uZXh0OworICBkaXNjYXJk X2luZmVyaW9yX3Byb2dyYW1fc3RhdGUgKGR1bW15LT5jYWxsZXJfc3RhdGUp OworICB4ZnJlZSAoZHVtbXkpOworfQorCisvKiBDbGVhbnVwIGhhbmRsZXIg Zm9yIGR1bW15X2ZyYW1lX3BvcC4gICovCisKK3N0YXRpYyB2b2lkCitkb19k dW1teV9mcmFtZV9jbGVhbnVwICh2b2lkICphcmcpCiB7Ci0gIHN0cnVjdCBk dW1teV9mcmFtZSAqKmR1bW15X3B0cjsKKyAgc3RydWN0IGR1bW15X2ZyYW1l ICoqZHVtbXlfcHRyID0gYXJnOworCisgIHJlbW92ZV9kdW1teV9mcmFtZSAo ZHVtbXlfcHRyKTsKK30KKworLyogUG9wICpEVU1NWV9QVFIsIHJlc3Rvcmlu ZyBwcm9ncmFtIHN0YXRlIHRvIHRoYXQgYmVmb3JlIHRoZQorICAgZnJhbWUg d2FzIGNyZWF0ZWQuICAqLworCitzdGF0aWMgdm9pZAorcG9wX2R1bW15X2Zy YW1lX2Zyb21fcHRyIChzdHJ1Y3QgZHVtbXlfZnJhbWUgKipkdW1teV9wdHIp Cit7CisgIHN0cnVjdCBjbGVhbnVwICpjbGVhbnVwczsKKyAgc3RydWN0IGR1 bW15X2ZyYW1lICpkdW1teTsKKworICBjbGVhbnVwcyA9IG1ha2VfY2xlYW51 cCAoZG9fZHVtbXlfZnJhbWVfY2xlYW51cCwgZHVtbXlfcHRyKTsKIAotICBm b3IgKGR1bW15X3B0ciA9ICZkdW1teV9mcmFtZV9zdGFjazsKLSAgICAgICAo KmR1bW15X3B0cikgIT0gTlVMTDsKLSAgICAgICBkdW1teV9wdHIgPSAmKCpk dW1teV9wdHIpLT5uZXh0KQorICByZXN0b3JlX2luZmVyaW9yX3Byb2dyYW1f c3RhdGUgKCgqZHVtbXlfcHRyKS0+Y2FsbGVyX3N0YXRlKTsKKworICAvKiBy ZXN0b3JlX2luZmVyaW9yX3N0YXR1cyBmcmVlcyBpbmZfc3RhdHVzLAorICAg ICBhbGwgdGhhdCByZW1haW5zIGlzIHRvIHBvcCAqZHVtbXlfcHRyICovCisg IGRpc2NhcmRfY2xlYW51cHMgKGNsZWFudXBzKTsKKyAgZHVtbXkgPSAqZHVt bXlfcHRyOworICAqZHVtbXlfcHRyID0gZHVtbXktPm5leHQ7CisgIHhmcmVl IChkdW1teSk7CisKKyAgLyogV2UndmUgbWFkZSByaWdodCBtZXNzIG9mIEdE QidzIGxvY2FsIHN0YXRlLCBqdXN0IGRpc2NhcmQKKyAgICAgZXZlcnl0aGlu Zy4gICovCisgIHJlaW5pdF9mcmFtZV9jYWNoZSAoKTsKK30KKworLyogUmV0 dXJuIGEgcG9pbnRlciB0byBEVU1NWSdzIGVudHJ5IGluIHRoZSBkdW1teSBm cmFtZSBzdGFjay4KKyAgIFJldHVybnMgTlVMTCBpZiBEVU1NWSBpcyBub3Qg cHJlc2VudC4gICovCisKK3N0YXRpYyBzdHJ1Y3QgZHVtbXlfZnJhbWUgKioK K2xvb2t1cF9kdW1teSAoc3RydWN0IGR1bW15X2ZyYW1lICpkdW1teSkKK3sK KyAgc3RydWN0IGR1bW15X2ZyYW1lICoqZHA7CisKKyAgZm9yIChkcCA9ICZk dW1teV9mcmFtZV9zdGFjazsgKmRwICE9IE5VTEw7IGRwID0gJigqZHApLT5u ZXh0KQogICAgIHsKLSAgICAgIHN0cnVjdCBkdW1teV9mcmFtZSAqZHVtbXkg PSAqZHVtbXlfcHRyOwotICAgICAgaWYgKGZyYW1lX2lkX2VxIChkdW1teS0+ aWQsIGR1bW15X2lkKSkKLQl7Ci0JICAqZHVtbXlfcHRyID0gZHVtbXktPm5l eHQ7Ci0JICByZWdjYWNoZV94ZnJlZSAoZHVtbXktPnJlZ2NhY2hlKTsKLQkg IHhmcmVlIChkdW1teSk7Ci0JICBicmVhazsKLQl9CisgICAgICBpZiAoKmRw ID09IGR1bW15KQorCXJldHVybiBkcDsKICAgICB9CisKKyAgcmV0dXJuIE5V TEw7CiB9CiAKLS8qIFRoZXJlIG1heSBiZSBzdGFsZSBkdW1teSBmcmFtZXMs IHBlcmhhcHMgbGVmdCBvdmVyIGZyb20gd2hlbiBhIGxvbmdqdW1wIHRvb2sg dXMKLSAgIG91dCBvZiBhIGZ1bmN0aW9uIHRoYXQgd2FzIGNhbGxlZCBieSB0 aGUgZGVidWdnZXIuICBDbGVhbiB0aGVtIHVwIGF0IGxlYXN0IG9uY2UKLSAg IHdoZW5ldmVyIHdlIHN0YXJ0IGEgbmV3IGluZmVyaW9yLiAgKi8KKy8qIExv b2sgdXAgRFVNTVlfSUQuCisgICBSZXR1cm4gTlVMTCBpZiBub3QgZm91bmQu ICAqLwogCi1zdGF0aWMgdm9pZAotY2xlYW51cF9kdW1teV9mcmFtZXMgKHN0 cnVjdCB0YXJnZXRfb3BzICp0YXJnZXQsIGludCBmcm9tX3R0eSkKK3N0YXRp YyBzdHJ1Y3QgZHVtbXlfZnJhbWUgKioKK2xvb2t1cF9kdW1teV9pZCAoc3Ry dWN0IGZyYW1lX2lkIGR1bW15X2lkKQogewotICBzdHJ1Y3QgZHVtbXlfZnJh bWUgKmR1bW15LCAqbmV4dDsKKyAgc3RydWN0IGR1bW15X2ZyYW1lICoqZHA7 CiAKLSAgZm9yIChkdW1teSA9IGR1bW15X2ZyYW1lX3N0YWNrOyBkdW1teTsg ZHVtbXkgPSBuZXh0KQorICBmb3IgKGRwID0gJmR1bW15X2ZyYW1lX3N0YWNr OyAqZHAgIT0gTlVMTDsgZHAgPSAmKCpkcCktPm5leHQpCiAgICAgewotICAg ICAgbmV4dCA9IGR1bW15LT5uZXh0OwotICAgICAgcmVnY2FjaGVfeGZyZWUg KGR1bW15LT5yZWdjYWNoZSk7Ci0gICAgICB4ZnJlZSAoZHVtbXkpOworICAg ICAgaWYgKGZyYW1lX2lkX2VxICgoKmRwKS0+aWQsIGR1bW15X2lkKSkKKwly ZXR1cm4gZHA7CiAgICAgfQogCi0gIGR1bW15X2ZyYW1lX3N0YWNrID0gTlVM TDsKKyAgcmV0dXJuIE5VTEw7Cit9CisKKy8qIFBvcCBEVU1NWSwgcmVzdG9y ZSBpbmZlcmlvciBzdGF0ZS4KKyAgIE9uIHJldHVybiByZWluaXRfZnJhbWVf Y2FjaGUgaGFzIGJlZW4gY2FsbGVkLgorICAgSWYgdGhlIGZyYW1lIGlzbid0 IGZvdW5kLCBmbGFnIGFuIGludGVybmFsIGVycm9yLiAgKi8KKworc3RhdGlj IHZvaWQKK3BvcF9kdW1teV9mcmFtZSAoc3RydWN0IGR1bW15X2ZyYW1lICpk dW1teSkKK3sKKyAgc3RydWN0IGR1bW15X2ZyYW1lICoqZHA7CisKKyAgZHAg PSBsb29rdXBfZHVtbXkgKGR1bW15KTsKKyAgZ2RiX2Fzc2VydCAoZHAgIT0g TlVMTCk7CisKKyAgcG9wX2R1bW15X2ZyYW1lX2Zyb21fcHRyIChkcCk7Cit9 CisKKy8qIFBvcCB0aGUgZHVtbXkgZnJhbWUgRFVNTVlfSUQsIHJlc3Rvcmlu ZyBwcm9ncmFtIHN0YXRlIHRvIHRoYXQgYmVmb3JlIHRoZQorICAgZnJhbWUg d2FzIGNyZWF0ZWQuCisgICBPbiByZXR1cm4gcmVpbml0X2ZyYW1lX2NhY2hl IGhhcyBiZWVuIGNhbGxlZC4KKyAgIElmIHRoZSBmcmFtZSBpc24ndCBmb3Vu ZCwgZmxhZyBhbiBpbnRlcm5hbCBlcnJvci4KKworICAgTk9URTogVGhpcyBj YW4gb25seSBwb3AgdGhlIG9uZSBmcmFtZSwgZXZlbiBpZiBpdCBpcyBpbiB0 aGUgbWlkZGxlIG9mIHRoZQorICAgc3RhY2ssIGJlY2F1c2UgdGhlIG90aGVy IGZyYW1lcyBtYXkgYmUgZm9yIGRpZmZlcmVudCB0aHJlYWRzLCBhbmQgdGhl cmUncworICAgY3VycmVudGx5IG5vIHdheSB0byB0ZWxsIHdoaWNoIHN0YWNr IGZyYW1lIGlzIGZvciB3aGljaCB0aHJlYWQuICAqLworCit2b2lkCitkdW1t eV9mcmFtZV9wb3AgKHN0cnVjdCBmcmFtZV9pZCBkdW1teV9pZCkKK3sKKyAg c3RydWN0IGR1bW15X2ZyYW1lICoqZHA7CisKKyAgZHAgPSBsb29rdXBfZHVt bXlfaWQgKGR1bW15X2lkKTsKKyAgZ2RiX2Fzc2VydCAoZHAgIT0gTlVMTCk7 CisKKyAgcG9wX2R1bW15X2ZyYW1lX2Zyb21fcHRyIChkcCk7Cit9CisKKy8q IERpc2NhcmQgRFVNTVkgYW5kIHJlbW92ZSBpdCBmcm9tIHRoZSBkdW1teSBm cmFtZSBzdGFjay4KKyAgIElmIHRoZSBmcmFtZSBpc24ndCBmb3VuZCwgZmxh ZyBhbiBpbnRlcm5hbCBlcnJvci4gICovCisKK3ZvaWQKK2R1bW15X2ZyYW1l X2Rpc2NhcmQgKHN0cnVjdCBkdW1teV9mcmFtZSAqZHVtbXkpCit7CisgIHN0 cnVjdCBkdW1teV9mcmFtZSAqKmRwOworCisgIGRwID0gbG9va3VwX2R1bW15 IChkdW1teSk7CisgIGdkYl9hc3NlcnQgKGRwICE9IE5VTEwpOworCisgIHJl bW92ZV9kdW1teV9mcmFtZSAoZHApOworfQorCisvKiBVdGlsaXR5IGZvciBt YWtlX2NsZWFudXBfcG9wX2R1bW15X2ZyYW1lLiAgKi8KKworc3RhdGljIHZv aWQKK2RvX3BvcF9kdW1teV9mcmFtZV9jbGVhbnVwICh2b2lkICpkdW1teSkK K3sKKyAgcG9wX2R1bW15X2ZyYW1lIChkdW1teSk7Cit9CisKKy8qIFNjaGVk dWxlIGEgY2xlYW51cCB0byBwb3AgRFVNTVlfRlJBTUUgYW5kIHJlc3RvcmUg aW5mZXJpb3Igc3RhdGUuICAqLworCitzdHJ1Y3QgY2xlYW51cCAqCittYWtl X2NsZWFudXBfcG9wX2R1bW15X2ZyYW1lIChzdHJ1Y3QgZHVtbXlfZnJhbWUg KmR1bW15KQoreworICByZXR1cm4gbWFrZV9jbGVhbnVwIChkb19wb3BfZHVt bXlfZnJhbWVfY2xlYW51cCwgZHVtbXkpOworfQorCisvKiBUaGVyZSBtYXkg YmUgc3RhbGUgZHVtbXkgZnJhbWVzLCBwZXJoYXBzIGxlZnQgb3ZlciBmcm9t IHdoZW4gYSBsb25nanVtcCB0b29rCisgICB1cyBvdXQgb2YgYSBmdW5jdGlv biB0aGF0IHdhcyBjYWxsZWQgYnkgdGhlIGRlYnVnZ2VyLiAgQ2xlYW4gdGhl bSB1cCBhdAorICAgbGVhc3Qgb25jZSB3aGVuZXZlciB3ZSBzdGFydCBhIG5l dyBpbmZlcmlvci4gICovCisKK3N0YXRpYyB2b2lkCitjbGVhbnVwX2R1bW15 X2ZyYW1lcyAoc3RydWN0IHRhcmdldF9vcHMgKnRhcmdldCwgaW50IGZyb21f dHR5KQoreworICB3aGlsZSAoZHVtbXlfZnJhbWVfc3RhY2sgIT0gTlVMTCkK KyAgICB7CisgICAgICByZW1vdmVfZHVtbXlfZnJhbWUgKCZkdW1teV9mcmFt ZV9zdGFjayk7CisgICAgfQogfQogCiAvKiBSZXR1cm4gdGhlIGR1bW15IGZy YW1lIGNhY2hlLCBpdCBjb250YWlucyBib3RoIHRoZSBJRCwgYW5kIGEKQEAg LTE3OCw3ICsyOTgsNyBAQCBkdW1teV9mcmFtZV9zbmlmZmVyIChjb25zdCBz dHJ1Y3QgZnJhbWVfCiAJICAgIHsKIAkgICAgICBzdHJ1Y3QgZHVtbXlfZnJh bWVfY2FjaGUgKmNhY2hlOwogCSAgICAgIGNhY2hlID0gRlJBTUVfT0JTVEFD S19aQUxMT0MgKHN0cnVjdCBkdW1teV9mcmFtZV9jYWNoZSk7Ci0JICAgICAg Y2FjaGUtPnByZXZfcmVnY2FjaGUgPSBkdW1teWZyYW1lLT5yZWdjYWNoZTsK KwkgICAgICBjYWNoZS0+cHJldl9yZWdjYWNoZSA9IGdldF9pbmZlcmlvcl9w cm9ncmFtX3N0YXRlX3JlZ2NhY2hlIChkdW1teWZyYW1lLT5jYWxsZXJfc3Rh dGUpOwogCSAgICAgIGNhY2hlLT50aGlzX2lkID0gdGhpc19pZDsKIAkgICAg ICAoKnRoaXNfcHJvbG9ndWVfY2FjaGUpID0gY2FjaGU7CiAJICAgICAgcmV0 dXJuIDE7CkBAIC0yMTUsNyArMzM1LDcgQEAgZHVtbXlfZnJhbWVfcHJldl9y ZWdpc3RlciAoc3RydWN0IGZyYW1lXwogICByZXR1cm4gcmVnX3ZhbDsKIH0K IAotLyogQXNzdW1pbmcgdGhhdCBUSElTIGZyYW1lIGlzIGEgZHVtbXksIHJl dHVybiB0aGUgSUQgb2YgVEhJUyBmcmFtZS4gIFRoYXQgSUQgaXMKKy8qIEFz c3VtaW5nIHRoYXQgVEhJU19GUkFNRSBpcyBhIGR1bW15LCByZXR1cm4gaXRz IElELiAgVGhhdCBJRCBpcwogICAgZGV0ZXJtaW5lZCBieSBleGFtaW5pbmcg dGhlIE5FWFQgZnJhbWUncyB1bndvdW5kIHJlZ2lzdGVycyB1c2luZwogICAg dGhlIG1ldGhvZCBkdW1teV9pZCgpLiAgQXMgYSBzaWRlIGVmZmVjdCwgVEhJ UyBkdW1teSBmcmFtZSdzCiAgICBkdW1teSBjYWNoZSBpcyBsb2NhdGVkIGFu ZCBhbmQgc2F2ZWQgaW4gVEhJU19QUk9MT0dVRV9DQUNIRS4gICovCkluZGV4 OiBkdW1teS1mcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZp bGU6IC9jdnMvc3JjL3NyYy9nZGIvZHVtbXktZnJhbWUuaCx2CnJldHJpZXZp bmcgcmV2aXNpb24gMS4yMwpkaWZmIC11IC1wIC1yMS4yMyBkdW1teS1mcmFt ZS5oCi0tLSBkdW1teS1mcmFtZS5oCTggU2VwIDIwMDggMTU6MjM6MTIgLTAw MDAJMS4yMworKysgZHVtbXktZnJhbWUuaAkyMCBOb3YgMjAwOCAwNzowOTo1 OCAtMDAwMApAQCAtMjMsOCArMjMsMTAgQEAKICNpbmNsdWRlICJmcmFtZS5o IgogCiBzdHJ1Y3QgZnJhbWVfaW5mbzsKLXN0cnVjdCByZWdjYWNoZTsKK3N0 cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlOwogc3RydWN0IGZyYW1lX3Vu d2luZDsKK3N0cnVjdCBkdW1teV9mcmFtZTsKK3N0cnVjdCBjbGVhbnVwOwog CiAvKiBQdXNoIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gaWRlbnRpZnks IGFuZCB1bndpbmQgZnJvbSwgYSBkdW1teQogICAgZnJhbWUgb250byB0aGUg ZHVtbXkgZnJhbWUgc3RhY2suICAqLwpAQCAtMzksMTEgKzQxLDI5IEBAIHN0 cnVjdCBmcmFtZV91bndpbmQ7CiAgICBiZSBleHBhbmRlZCBzbyB0aGF0IGl0 IGtub3ducyB0aGUgbG93ZXIvdXBwZXIgZXh0ZW50IG9mIHRoZSBkdW1teQog ICAgZnJhbWUncyBjb2RlLiAgKi8KIAotZXh0ZXJuIHZvaWQgZHVtbXlfZnJh bWVfcHVzaCAoc3RydWN0IHJlZ2NhY2hlICpyZWdjYWNoZSwKLQkJCSAgICAg IGNvbnN0IHN0cnVjdCBmcmFtZV9pZCAqZHVtbXlfaWQpOworZXh0ZXJuIHN0 cnVjdCBkdW1teV9mcmFtZSAqZHVtbXlfZnJhbWVfcHVzaCAoc3RydWN0IGlu ZmVyaW9yX3Byb2dyYW1fc3RhdGUgKmNhbGxlcl9zdGF0ZSwKKwkJCQkJICAg ICBjb25zdCBzdHJ1Y3QgZnJhbWVfaWQgKmR1bW15X2lkKTsKKworLyogUG9w IHRoZSBkdW1teSBmcmFtZSBEVU1NWV9JRCwgcmVzdG9yaW5nIHByb2dyYW0g c3RhdGUgdG8gdGhhdCBiZWZvcmUgdGhlCisgICBmcmFtZSB3YXMgY3JlYXRl ZC4KKyAgIE9uIHJldHVybiByZWluaXRfZnJhbWVfY2FjaGUgaGFzIGJlZW4g Y2FsbGVkLgorICAgSWYgdGhlIGZyYW1lIGlzbid0IGZvdW5kLCBmbGFnIGFu IGludGVybmFsIGVycm9yLgorCisgICBOT1RFOiBUaGlzIGNhbiBvbmx5IHBv cCB0aGUgb25lIGZyYW1lLCBldmVuIGlmIGl0IGlzIGluIHRoZSBtaWRkbGUg b2YgdGhlCisgICBzdGFjaywgYmVjYXVzZSB0aGUgb3RoZXIgZnJhbWVzIG1h eSBiZSBmb3IgZGlmZmVyZW50IHRocmVhZHMsIGFuZCB0aGVyZSdzCisgICBj dXJyZW50bHkgbm8gd2F5IHRvIHRlbGwgd2hpY2ggc3RhY2sgZnJhbWUgaXMg Zm9yIHdoaWNoIHRocmVhZC4gICovCiAKIGV4dGVybiB2b2lkIGR1bW15X2Zy YW1lX3BvcCAoc3RydWN0IGZyYW1lX2lkIGR1bW15X2lkKTsKIAorLyogRGlz Y2FyZCBEVU1NWSBhbmQgcmVtb3ZlIGl0IGZyb20gdGhlIGR1bW15IGZyYW1l IHN0YWNrLgorICAgSWYgdGhlIGZyYW1lIGlzbid0IGZvdW5kLCBmbGFnIGFu IGludGVybmFsIGVycm9yLiAgKi8KKworZXh0ZXJuIHZvaWQgZHVtbXlfZnJh bWVfZGlzY2FyZCAoc3RydWN0IGR1bW15X2ZyYW1lICpkdW1teSk7CisKKy8q IFNjaGVkdWxlIGEgY2xlYW51cCB0byBwb3AgRFVNTVlfRlJBTUUuICAqLwor CitleHRlcm4gc3RydWN0IGNsZWFudXAgKm1ha2VfY2xlYW51cF9wb3BfZHVt bXlfZnJhbWUgKHN0cnVjdCBkdW1teV9mcmFtZSAqKTsKKwogLyogSWYgdGhl IFBDIGZhbGxzIGluIGEgZHVtbXkgZnJhbWUsIHJldHVybiBhIGR1bW15IGZy YW1lCiAgICB1bndpbmRlci4gICovCiAKSW5kZXg6IGZyYW1lLmMKPT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9m cmFtZS5jLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjI1NQpkaWZmIC11IC1w IC1yMS4yNTUgZnJhbWUuYwotLS0gZnJhbWUuYwkyNCBTZXAgMjAwOCAxMjo1 OTo0OSAtMDAwMAkxLjI1NQorKysgZnJhbWUuYwkyMCBOb3YgMjAwOCAwNzow OTo1OCAtMDAwMApAQCAtNTM2LDYgKzUzNiwxNCBAQCBmcmFtZV9wb3AgKHN0 cnVjdCBmcmFtZV9pbmZvICp0aGlzX2ZyYW1lCiAgIHN0cnVjdCByZWdjYWNo ZSAqc2NyYXRjaDsKICAgc3RydWN0IGNsZWFudXAgKmNsZWFudXBzOwogCisg IGlmIChnZXRfZnJhbWVfdHlwZSAodGhpc19mcmFtZSkgPT0gRFVNTVlfRlJB TUUpCisgICAgeworICAgICAgLyogUG9wcGluZyBhIGR1bW15IGZyYW1lIGlu dm9sdmVzIHJlc3RvcmluZyBtb3JlIHRoYW4ganVzdCByZWdpc3RlcnMuCisJ IGR1bW15X2ZyYW1lX3BvcCBkb2VzIGFsbCB0aGUgd29yay4gICovCisgICAg ICBkdW1teV9mcmFtZV9wb3AgKGdldF9mcmFtZV9pZCAodGhpc19mcmFtZSkp OworICAgICAgcmV0dXJuOworICAgIH0KKwogICAvKiBFbnN1cmUgdGhhdCB3 ZSBoYXZlIGEgZnJhbWUgdG8gcG9wIHRvLiAgKi8KICAgcHJldl9mcmFtZSA9 IGdldF9wcmV2X2ZyYW1lXzEgKHRoaXNfZnJhbWUpOwogCkBAIC01NDksMTEg KzU1Nyw2IEBAIGZyYW1lX3BvcCAoc3RydWN0IGZyYW1lX2luZm8gKnRoaXNf ZnJhbWUKICAgc2NyYXRjaCA9IGZyYW1lX3NhdmVfYXNfcmVnY2FjaGUgKHBy ZXZfZnJhbWUpOwogICBjbGVhbnVwcyA9IG1ha2VfY2xlYW51cF9yZWdjYWNo ZV94ZnJlZSAoc2NyYXRjaCk7CiAKLSAgLyogSWYgd2UgYXJlIHBvcHBpbmcg YSBkdW1teSBmcmFtZSwgY2xlYW4gdXAgdGhlIGFzc29jaWF0ZWQKLSAgICAg ZGF0YSBhcyB3ZWxsLiAgKi8KLSAgaWYgKGdldF9mcmFtZV90eXBlICh0aGlz X2ZyYW1lKSA9PSBEVU1NWV9GUkFNRSkKLSAgICBkdW1teV9mcmFtZV9wb3Ag KGdldF9mcmFtZV9pZCAodGhpc19mcmFtZSkpOwotCiAgIC8qIEZJWE1FOiBj YWduZXkvMjAwMy0wMy0xNjogSXQgc2hvdWxkIGJlIHBvc3NpYmxlIHRvIHRl bGwgdGhlCiAgICAgIHRhcmdldCdzIHJlZ2lzdGVyIGNhY2hlIHRoYXQgaXQg aXMgYWJvdXQgdG8gYmUgaGl0IHdpdGggYSBidXJzdAogICAgICByZWdpc3Rl ciB0cmFuc2ZlciBhbmQgdGhhdCB0aGUgc2VxdWVuY2Ugb2YgcmVnaXN0ZXIg d3JpdGVzIHNob3VsZApJbmRleDogaW5mY2FsbC5jCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvc3JjL3NyYy9nZGIvaW5mY2FsbC5j LHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjEwNgpkaWZmIC11IC1wIC1yMS4x MDYgaW5mY2FsbC5jCi0tLSBpbmZjYWxsLmMJMTggTm92IDIwMDggMDA6MTM6 MDIgLTAwMDAJMS4xMDYKKysrIGluZmNhbGwuYwkyMCBOb3YgMjAwOCAwNzow OTo1OCAtMDAwMApAQCAtMzE4LDE2ICszMTgsMTkgQEAgY2FsbF9mdW5jdGlv bl9ieV9oYW5kIChzdHJ1Y3QgdmFsdWUgKmZ1bgogICBzdHJ1Y3QgY2xlYW51 cCAqcmV0YnVmX2NsZWFudXA7CiAgIHN0cnVjdCBpbmZlcmlvcl9zdGF0dXMg KmluZl9zdGF0dXM7CiAgIHN0cnVjdCBjbGVhbnVwICppbmZfc3RhdHVzX2Ns ZWFudXA7CisgIHN0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlICpjYWxs ZXJfc3RhdGU7CisgIHN0cnVjdCBjbGVhbnVwICpjYWxsZXJfc3RhdGVfY2xl YW51cDsKKyAgc3RydWN0IGR1bW15X2ZyYW1lICpkdW1teV9mcmFtZTsKKyAg c3RydWN0IGNsZWFudXAgKmR1bW15X2ZyYW1lX2NsZWFudXA7CiAgIENPUkVf QUREUiBmdW5hZGRyOwogICBDT1JFX0FERFIgcmVhbF9wYzsKICAgc3RydWN0 IHR5cGUgKmZ0eXBlID0gY2hlY2tfdHlwZWRlZiAodmFsdWVfdHlwZSAoZnVu Y3Rpb24pKTsKICAgQ09SRV9BRERSIGJwX2FkZHI7Ci0gIHN0cnVjdCByZWdj YWNoZSAqY2FsbGVyX3JlZ2NhY2hlOwotICBzdHJ1Y3QgY2xlYW51cCAqY2Fs bGVyX3JlZ2NhY2hlX2NsZWFudXA7CiAgIHN0cnVjdCBmcmFtZV9pZCBkdW1t eV9pZDsKICAgc3RydWN0IGNsZWFudXAgKmFyZ3NfY2xlYW51cDsKICAgc3Ry dWN0IGZyYW1lX2luZm8gKmZyYW1lOwogICBzdHJ1Y3QgZ2RiYXJjaCAqZ2Ri YXJjaDsKKyAgc3RydWN0IHRocmVhZF9pbmZvICp0aGlzX3RocmVhZDsKIAog ICBpZiAoVFlQRV9DT0RFIChmdHlwZSkgPT0gVFlQRV9DT0RFX1BUUikKICAg ICBmdHlwZSA9IGNoZWNrX3R5cGVkZWYgKFRZUEVfVEFSR0VUX1RZUEUgKGZ0 eXBlKSk7CkBAIC0zMzUsNiArMzM4LDcgQEAgY2FsbF9mdW5jdGlvbl9ieV9o YW5kIChzdHJ1Y3QgdmFsdWUgKmZ1bgogICBpZiAoIXRhcmdldF9oYXNfZXhl Y3V0aW9uKQogICAgIG5vcHJvY2VzcyAoKTsKIAorICB0aGlzX3RocmVhZCA9 IGluZmVyaW9yX3RocmVhZCAoKTsKICAgZnJhbWUgPSBnZXRfY3VycmVudF9m cmFtZSAoKTsKICAgZ2RiYXJjaCA9IGdldF9mcmFtZV9hcmNoIChmcmFtZSk7 CiAKQEAgLTM1MSwxNSArMzU1LDE2IEBAIGNhbGxfZnVuY3Rpb25fYnlfaGFu ZCAoc3RydWN0IHZhbHVlICpmdW4KICAgLyogQSBjbGVhbnVwIGZvciB0aGUg aW5mZXJpb3Igc3RhdHVzLiAgQ3JlYXRlIHRoaXMgQUZURVIgdGhlIHJldGJ1 ZgogICAgICBzbyB0aGF0IHRoaXMgY2FuIGJlIGRpc2NhcmRlZCBvciBhcHBs aWVkIHdpdGhvdXQgaW50ZXJmZXJpbmcgd2l0aAogICAgICB0aGUgcmVnYnVm LiAgKi8KLSAgaW5mX3N0YXR1cyA9IHNhdmVfaW5mZXJpb3Jfc3RhdHVzICgx KTsKKyAgaW5mX3N0YXR1cyA9IHNhdmVfaW5mZXJpb3Jfc3RhdHVzICgpOwog ICBpbmZfc3RhdHVzX2NsZWFudXAgPSBtYWtlX2NsZWFudXBfcmVzdG9yZV9p bmZlcmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOwogCi0gIC8qIFNhdmUgdGhl IGNhbGxlcidzIHJlZ2lzdGVycyBzbyB0aGF0IHRoZXkgY2FuIGJlIHJlc3Rv cmVkIG9uY2UgdGhlCisgIC8qIFNhdmUgdGhlIGNhbGxlcidzIHJlZ2lzdGVy cyBhbmQgb3RoZXIgc3RhdGUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICBp bmZlcmlvciBpdHNlbGYgc28gdGhhdCB0aGV5IGNhbiBiZSByZXN0b3JlZCBv bmNlIHRoZQogICAgICBjYWxsZWUgcmV0dXJucy4gIFRvIGFsbG93IG5lc3Rl ZCBjYWxscyB0aGUgcmVnaXN0ZXJzIGFyZSAoZnVydGhlcgogICAgICBkb3du KSBwdXNoZWQgb250byBhIGR1bW15IGZyYW1lIHN0YWNrLiAgSW5jbHVkZSBh IGNsZWFudXAgKHdoaWNoCiAgICAgIGlzIHRvc3NlZCBvbmNlIHRoZSByZWdj YWNoZSBoYXMgYmVlbiBwdXNoZWQpLiAgKi8KLSAgY2FsbGVyX3JlZ2NhY2hl ID0gZnJhbWVfc2F2ZV9hc19yZWdjYWNoZSAoZnJhbWUpOwotICBjYWxsZXJf cmVnY2FjaGVfY2xlYW51cCA9IG1ha2VfY2xlYW51cF9yZWdjYWNoZV94ZnJl ZSAoY2FsbGVyX3JlZ2NhY2hlKTsKKyAgY2FsbGVyX3N0YXRlID0gc2F2ZV9p bmZlcmlvcl9wcm9ncmFtX3N0YXRlICgpOworICBjYWxsZXJfc3RhdGVfY2xl YW51cCA9IG1ha2VfY2xlYW51cF9yZXN0b3JlX2luZmVyaW9yX3Byb2dyYW1f c3RhdGUgKGNhbGxlcl9zdGF0ZSk7CiAKICAgLyogRW5zdXJlIHRoYXQgdGhl IGluaXRpYWwgU1AgaXMgY29ycmVjdGx5IGFsaWduZWQuICAqLwogICB7CkBA IC02NDIsOCArNjQ3LDEwIEBAIGNhbGxfZnVuY3Rpb25fYnlfaGFuZCAoc3Ry dWN0IHZhbHVlICpmdW4KICAgLyogRXZlcnl0aGluZydzIHJlYWR5LCBwdXNo IGFsbCB0aGUgaW5mbyBuZWVkZWQgdG8gcmVzdG9yZSB0aGUKICAgICAgY2Fs bGVyIChhbmQgaWRlbnRpZnkgdGhlIGR1bW15LWZyYW1lKSBvbnRvIHRoZSBk dW1teS1mcmFtZQogICAgICBzdGFjay4gICovCi0gIGR1bW15X2ZyYW1lX3B1 c2ggKGNhbGxlcl9yZWdjYWNoZSwgJmR1bW15X2lkKTsKLSAgZGlzY2FyZF9j bGVhbnVwcyAoY2FsbGVyX3JlZ2NhY2hlX2NsZWFudXApOworICBkdW1teV9m cmFtZSA9IGR1bW15X2ZyYW1lX3B1c2ggKGNhbGxlcl9zdGF0ZSwgJmR1bW15 X2lkKTsKKyAgLyogRG8gdGhpcyBiZWZvcmUgY2FsbGluZyBtYWtlX2NsZWFu dXBfcG9wX2R1bW15X2ZyYW1lLiAgKi8KKyAgZGlzY2FyZF9jbGVhbnVwcyAo Y2FsbGVyX3N0YXRlX2NsZWFudXApOworICBkdW1teV9mcmFtZV9jbGVhbnVw ID0gbWFrZV9jbGVhbnVwX3BvcF9kdW1teV9mcmFtZSAoZHVtbXlfZnJhbWUp OwogCiAgIC8qIC0gU05JUCAtIFNOSVAgLSBTTklQIC0gU05JUCAtIFNOSVAg LSBTTklQIC0gU05JUCAtIFNOSVAgLSBTTklQIC0KICAgICAgSWYgeW91J3Jl IGxvb2tpbmcgdG8gaW1wbGVtZW50IGFzeW5jaHJvbm91cyBkdW1teS1mcmFt ZXMsIHRoZW4KQEAgLTY3MSw3ICs2NzgsNiBAQCBjYWxsX2Z1bmN0aW9uX2J5 X2hhbmQgKHN0cnVjdCB2YWx1ZSAqZnVuCiAgICAgc3RydWN0IGNsZWFudXAg Km9sZF9jbGVhbnVwcyA9IG1ha2VfY2xlYW51cCAobnVsbF9jbGVhbnVwLCAw KTsKICAgICBzdHJ1Y3QgY2xlYW51cCAqb2xkX2NsZWFudXBzMjsKICAgICBp bnQgc2F2ZWRfYXN5bmMgPSAwOwotICAgIHN0cnVjdCB0aHJlYWRfaW5mbyAq dHAgPSBpbmZlcmlvcl90aHJlYWQgKCk7CiAKICAgICAvKiBJZiBhbGwgZXJy b3IoKXMgb3V0IG9mIHByb2NlZWQgZW5kZWQgdXAgY2FsbGluZyBub3JtYWxf c3RvcAogICAgICAgIChhbmQgcGVyaGFwcyB0aGV5IHNob3VsZDsgaXQgYWxy ZWFkeSBkb2VzIGluIHRoZSBzcGVjaWFsIGNhc2UKQEAgLTY3OSw3ICs2ODUs NyBAQCBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQgKHN0cnVjdCB2YWx1ZSAqZnVu CiAgICAgbWFrZV9jbGVhbnVwIChicmVha3BvaW50X2F1dG9fZGVsZXRlX2Nv bnRlbnRzLCBOVUxMKTsKIAogICAgIGRpc2FibGVfd2F0Y2hwb2ludHNfYmVm b3JlX2ludGVyYWN0aXZlX2NhbGxfc3RhcnQgKCk7Ci0gICAgdHAtPnByb2Nl ZWRfdG9fZmluaXNoID0gMTsJLyogV2Ugd2FudCBzdG9wX3JlZ2lzdGVycywg cGxlYXNlLi4uICovCisgICAgdGhpc190aHJlYWQtPnByb2NlZWRfdG9fZmlu aXNoID0gMTsgLyogV2Ugd2FudCBzdG9wX3JlZ2lzdGVycywgcGxlYXNlLi4u ICovCiAKICAgICBpZiAodGFyZ2V0X2Nhbl9hc3luY19wICgpKQogICAgICAg c2F2ZWRfYXN5bmMgPSB0YXJnZXRfYXN5bmNfbWFzayAoMCk7CkBAIC02OTAs MTIgKzY5NiwxMiBAQCBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQgKHN0cnVjdCB2 YWx1ZSAqZnVuCiAgICAgc3VwcHJlc3Nfc3RvcF9vYnNlcnZlciA9IDE7CiAg ICAgcHJvY2VlZCAocmVhbF9wYywgVEFSR0VUX1NJR05BTF8wLCAwKTsKICAg ICBkb19jbGVhbnVwcyAob2xkX2NsZWFudXBzMik7Ci0gICAgCisKICAgICBp ZiAoc2F2ZWRfYXN5bmMpCiAgICAgICB0YXJnZXRfYXN5bmNfbWFzayAoc2F2 ZWRfYXN5bmMpOwotICAgIAorCiAgICAgZW5hYmxlX3dhdGNocG9pbnRzX2Fm dGVyX2ludGVyYWN0aXZlX2NhbGxfc3RvcCAoKTsKLSAgICAgIAorCiAgICAg ZGlzY2FyZF9jbGVhbnVwcyAob2xkX2NsZWFudXBzKTsKICAgfQogCkBAIC03 MDUsMTAgKzcxMSwyNyBAQCBjYWxsX2Z1bmN0aW9uX2J5X2hhbmQgKHN0cnVj dCB2YWx1ZSAqZnVuCiAJIHdlJ2xsIGNyYXNoIGFzIHRoZSBpbmZlcmlvciBp cyBubyBsb25nZXIgcnVubmluZy4gICovCiAgICAgICBkaXNjYXJkX2NsZWFu dXBzIChpbmZfc3RhdHVzX2NsZWFudXApOwogICAgICAgZGlzY2FyZF9pbmZl cmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOworICAgICAgZHVtbXlfZnJhbWVf ZGlzY2FyZCAoZHVtbXlfZnJhbWUpOwogICAgICAgZXJyb3IgKF8oIlwKIFRo ZSBwcm9ncmFtIGJlaW5nIGRlYnVnZ2VkIGV4aXRlZCB3aGlsZSBpbiBhIGZ1 bmN0aW9uIGNhbGxlZCBmcm9tIEdEQi4iKSk7CiAgICAgfQogCisgIGlmICgh IHB0aWRfZXF1YWwgKHRoaXNfdGhyZWFkLT5wdGlkLCBpbmZlcmlvcl90aHJl YWQgKCktPnB0aWQpKQorICAgIHsKKyAgICAgIC8qIFdlJ3ZlIHN3aXRjaGVk IHRocmVhZHMuICBQZXJoYXBzIHRoaXMgc2hvdWxkbid0IGhhcHBlbiwgYnV0 IHdlCisJIHByb3RlY3Qgb3Vyc2VsdmVzIGFueXdheS4KKwkgVGhlcmUncyBu byBwb2ludCBpbiByZXN0b3JpbmcgdGhlIGluZmVyaW9yIHN0YXR1cywKKwkg d2UncmUgaW4gYSBkaWZmZXJlbnQgdGhyZWFkLiAgKi8KKyAgICAgIGRpc2Nh cmRfY2xlYW51cHMgKGluZl9zdGF0dXNfY2xlYW51cCk7CisgICAgICBkaXNj YXJkX2luZmVyaW9yX3N0YXR1cyAoaW5mX3N0YXR1cyk7CisgICAgICBkdW1t eV9mcmFtZV9kaXNjYXJkIChkdW1teV9mcmFtZSk7CisgICAgICBlcnJvciAo XygiXAorVGhlIGN1cnJlbnQgdGhyZWFkIGhhcyBzd2l0Y2hlZCB3aGlsZSBt YWtpbmcgYSBmdW5jdGlvbiBjYWxsIGZyb20gR0RCLlxuXAorVGhlIHN0YXRl IG9mIHRoZSBmdW5jdGlvbiBjYWxsIGhhcyBiZWVuIGxvc3QuXG5cCitJdCBt YXkgYmUgcmVjb3ZlcmFibGUgYnkgY2hhbmdpbmcgYmFjayB0byB0aGUgb3Jp Z2luYWwgdGhyZWFkXG5cCithbmQgZXhhbWluaW5nIHRoZSBzdGF0ZS4iKSk7 CisgICAgfQorCiAgIGlmIChzdG9wcGVkX2J5X3JhbmRvbV9zaWduYWwgfHwg IXN0b3Bfc3RhY2tfZHVtbXkpCiAgICAgewogICAgICAgLyogRmluZCB0aGUg bmFtZSBvZiB0aGUgZnVuY3Rpb24gd2UncmUgYWJvdXQgdG8gY29tcGxhaW4g YWJvdXQuICAqLwpAQCAtNzQ1LDkgKzc2OCwxMCBAQCBUaGUgcHJvZ3JhbSBi ZWluZyBkZWJ1Z2dlZCBleGl0ZWQgd2hpbGUgCiAJICAgIHsKIAkgICAgICAv KiBUaGUgdXNlciB3YW50cyB0aGUgY29udGV4dCByZXN0b3JlZC4gKi8KIAot CSAgICAgIC8qIFdlIG11c3QgZ2V0IGJhY2sgdG8gdGhlIGZyYW1lIHdlIHdl cmUgYmVmb3JlIHRoZQotCQkgZHVtbXkgY2FsbC4gKi8KLQkgICAgICBmcmFt ZV9wb3AgKGdldF9jdXJyZW50X2ZyYW1lICgpKTsKKwkgICAgICAvKiBXZSBt dXN0IGdldCBiYWNrIHRvIHRoZSBmcmFtZSB3ZSB3ZXJlIGJlZm9yZSB0aGUg ZHVtbXkgY2FsbC4KKwkJIFBsdXMgd2UgbmVlZCB0byByZXN0b3JlIGluZmVy aW9yIHN0YXR1cyB0byB0aGF0IGJlZm9yZSB0aGUKKwkJIGR1bW15IGNhbGwu ICBUaGlzIGlzIGFsbCBoYW5kbGVkIGJ5IGNsZWFudXBzCisJCSBkdW1teV9m cmFtZV9jbGVhbnVwIGFuZCBpbmZfc3RhdHVzX2NsZWFudXAuICAqLwogCiAJ ICAgICAgLyogRklYTUU6IEluc2VydCBhIGJ1bmNoIG9mIHdyYXBfaGVyZTsg bmFtZSBjYW4gYmUgdmVyeQogCQkgbG9uZyBpZiBpdCdzIGEgQysrIG5hbWUg d2l0aCBhcmd1bWVudHMgYW5kIHN0dWZmLiAgKi8KQEAgLTc2MSwxNCArNzg1 LDE2IEBAIEV2YWx1YXRpb24gb2YgdGhlIGV4cHJlc3Npb24gY29udGFpbmlu ZyAKIAkgIGVsc2UKIAkgICAgewogCSAgICAgIC8qIFRoZSB1c2VyIHdhbnRz IHRvIHN0YXkgaW4gdGhlIGZyYW1lIHdoZXJlIHdlIHN0b3BwZWQKLSAgICAg ICAgICAgICAgICAgKGRlZmF1bHQpLiovCi0JICAgICAgLyogSWYgd2UgcmVz dG9yZWQgdGhlIGluZmVyaW9yIHN0YXR1cyAodmlhIHRoZSBjbGVhbnVwKSwK KwkJIChkZWZhdWx0KS4KKwkJIElmIHdlIHJlc3RvcmVkIHRoZSBpbmZlcmlv ciBzdGF0dXMgKHZpYSB0aGUgY2xlYW51cCksCiAJCSB3ZSB3b3VsZCBwcmlu dCBhIHNwdXJpb3VzIGVycm9yIG1lc3NhZ2UgKFVuYWJsZSB0bwotCQkgcmVz dG9yZSBwcmV2aW91c2x5IHNlbGVjdGVkIGZyYW1lKSwgd291bGQgd3JpdGUg dGhlCi0JCSByZWdpc3RlcnMgZnJvbSB0aGUgaW5mX3N0YXR1cyAod2hpY2gg aXMgd3JvbmcpLCBhbmQKLQkJIHdvdWxkIGRvIG90aGVyIHdyb25nIHRoaW5n cy4gICovCisJCSByZXN0b3JlIHByZXZpb3VzbHkgc2VsZWN0ZWQgZnJhbWUp LCBhbmQKKwkJIHdvdWxkIGRvIG90aGVyIHdyb25nIHRoaW5ncy4KKwkJIERp c2NhcmRpbmcgaW5mX3N0YXR1c19jbGVhbnVwIGFsc28gZGlzY2FyZHMKKwkJ IGR1bW15X2ZyYW1lX2NsZWFudXAuICAqLwogCSAgICAgIGRpc2NhcmRfY2xl YW51cHMgKGluZl9zdGF0dXNfY2xlYW51cCk7CiAJICAgICAgZGlzY2FyZF9p bmZlcmlvcl9zdGF0dXMgKGluZl9zdGF0dXMpOworCiAJICAgICAgLyogRklY TUU6IEluc2VydCBhIGJ1bmNoIG9mIHdyYXBfaGVyZTsgbmFtZSBjYW4gYmUg dmVyeQogCQkgbG9uZyBpZiBpdCdzIGEgQysrIG5hbWUgd2l0aCBhcmd1bWVu dHMgYW5kIHN0dWZmLiAgKi8KIAkgICAgICBlcnJvciAoXygiXApAQCAtNzgy LDE0ICs4MDgsMTcgQEAgRXZhbHVhdGlvbiBvZiB0aGUgZXhwcmVzc2lvbiBj b250YWluaW5nIAogCiAgICAgICBpZiAoIXN0b3Bfc3RhY2tfZHVtbXkpCiAJ ewotCSAgLyogV2UgaGl0IGEgYnJlYWtwb2ludCBpbnNpZGUgdGhlIEZVTkNU SU9OLiAqLwotCSAgLyogSWYgd2UgcmVzdG9yZWQgdGhlIGluZmVyaW9yIHN0 YXR1cyAodmlhIHRoZSBjbGVhbnVwKSwgd2UKKwkgIC8qIFdlIGhpdCBhIGJy ZWFrcG9pbnQgaW5zaWRlIHRoZSBGVU5DVElPTi4KKwkgICAgIElmIHdlIHJl c3RvcmVkIHRoZSBpbmZlcmlvciBzdGF0dXMgKHZpYSB0aGUgY2xlYW51cCks IHdlCiAJICAgICB3b3VsZCBwcmludCBhIHNwdXJpb3VzIGVycm9yIG1lc3Nh Z2UgKFVuYWJsZSB0byByZXN0b3JlCiAJICAgICBwcmV2aW91c2x5IHNlbGVj dGVkIGZyYW1lKSwgd291bGQgd3JpdGUgdGhlIHJlZ2lzdGVycwogCSAgICAg ZnJvbSB0aGUgaW5mX3N0YXR1cyAod2hpY2ggaXMgd3JvbmcpLCBhbmQgd291 bGQgZG8gb3RoZXIKLQkgICAgIHdyb25nIHRoaW5ncy4gICovCisJICAgICB3 cm9uZyB0aGluZ3MuCisJICAgICBEaXNjYXJkaW5nIGluZl9zdGF0dXNfY2xl YW51cCBhbHNvIGRpc2NhcmRzCisJICAgICBkdW1teV9mcmFtZV9jbGVhbnVw LiAgKi8KIAkgIGRpc2NhcmRfY2xlYW51cHMgKGluZl9zdGF0dXNfY2xlYW51 cCk7CiAJICBkaXNjYXJkX2luZmVyaW9yX3N0YXR1cyAoaW5mX3N0YXR1cyk7 CisKIAkgIC8qIFRoZSBmb2xsb3dpbmcgZXJyb3IgbWVzc2FnZSB1c2VkIHRv IHNheSAiVGhlIGV4cHJlc3Npb24KIAkgICAgIHdoaWNoIGNvbnRhaW5lZCB0 aGUgZnVuY3Rpb24gY2FsbCBoYXMgYmVlbiBkaXNjYXJkZWQuIgogCSAgICAg SXQgaXMgYSBoYXJkIGNvbmNlcHQgdG8gZXhwbGFpbiBpbiBhIGZldyB3b3Jk cy4gIElkZWFsbHksCkBAIC04MTEsNiArODQwLDkgQEAgdGhlIGZ1bmN0aW9u IGNhbGwpLiIpLCBuYW1lKTsKIAogICAvKiBJZiB3ZSBnZXQgaGVyZSB0aGUg Y2FsbGVkIEZVTkNUSU9OIHJ1biB0byBjb21wbGV0aW9uLiAqLwogCisgIC8q IFRoZSBkdW1teSBmcmFtZSBoYXMgYmVlbiBwb3BwZWQgc28gZGlzY2FyZCBp dHMgY2xlYW51cC4gICovCisgIGRpc2NhcmRfY2xlYW51cHMgKGR1bW15X2Zy YW1lX2NsZWFudXApOworCiAgIC8qIE9uIG5vcm1hbCByZXR1cm4sIHRoZSBz dGFjayBkdW1teSBoYXMgYmVlbiBwb3BwZWQgYWxyZWFkeS4gICovCiAgIHJl Z2NhY2hlX2NweV9ub19wYXNzdGhyb3VnaCAocmV0YnVmLCBzdG9wX3JlZ2lz dGVycyk7CiAKSW5kZXg6IGluZmVyaW9yLmgKPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3JjL2dkYi9pbmZlcmlvci5oLHYK cmV0cmlldmluZyByZXZpc2lvbiAxLjExNgpkaWZmIC11IC1wIC1yMS4xMTYg aW5mZXJpb3IuaAotLS0gaW5mZXJpb3IuaAkyMCBOb3YgMjAwOCAwMDozNToy MyAtMDAwMAkxLjExNgorKysgaW5mZXJpb3IuaAkyMCBOb3YgMjAwOCAwNzow OTo1OCAtMDAwMApAQCAtNDAsMjQgKzQwLDQwIEBAIHN0cnVjdCB1aV9vdXQ7 CiAvKiBGb3Igc3RydWN0IGZyYW1lX2lkLiAgKi8KICNpbmNsdWRlICJmcmFt ZS5oIgogCi0vKiBTdHJ1Y3R1cmUgaW4gd2hpY2ggdG8gc2F2ZSB0aGUgc3Rh dHVzIG9mIHRoZSBpbmZlcmlvci4gIENyZWF0ZS9TYXZlCi0gICB0aHJvdWdo ICJzYXZlX2luZmVyaW9yX3N0YXR1cyIsIHJlc3RvcmUgdGhyb3VnaAotICAg InJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzIi4KLQotICAgVGhpcyBwYWlyIG9m IHJvdXRpbmVzIHNob3VsZCBiZSBjYWxsZWQgYXJvdW5kIGFueSB0cmFuc2Zl ciBvZgotICAgY29udHJvbCB0byB0aGUgaW5mZXJpb3Igd2hpY2ggeW91IGRv bid0IHdhbnQgc2hvd2luZyB1cCBpbiB5b3VyCi0gICBjb250cm9sIHZhcmlh Ymxlcy4gICovCisvKiBUd28gc3RydWN0dXJlcyBhcmUgdXNlZCB0byByZWNv cmQgaW5mZXJpb3Igc3RhdGUuCiAKKyAgIGluZmVyaW9yX3Byb2dyYW1fc3Rh dGUgY29udGFpbnMgc3RhdGUgYWJvdXQgdGhlIHByb2dyYW0gaXRzZWxmIGxp a2UgaXRzCisgICByZWdpc3RlcnMgYW5kIGFueSBzaWduYWwgaXQgcmVjZWl2 ZWQgd2hlbiBpdCBsYXN0IHN0b3BwZWQuCisgICBUaGlzIHN0YXRlIG11c3Qg YmUgcmVzdG9yZWQgcmVnYXJkbGVzcyBvZiBob3cgdGhlIGluZmVyaW9yIGZ1 bmN0aW9uIGNhbGwKKyAgIGVuZHMgKGVpdGhlciBzdWNjZXNzZnVsbHksIG9y IGFmdGVyIGl0IGhpdHMgYSBicmVha3BvaW50IG9yIHNpZ25hbCkKKyAgIGlm IHRoZSBwcm9ncmFtIGlzIHRvIHByb3Blcmx5IGNvbnRpbnVlIHdoZXJlIGl0 IGxlZnQgb2ZmLgorCisgICBpbmZlcmlvcl9zdGF0dXMgY29udGFpbnMgc3Rh dGUgcmVnYXJkaW5nIGdkYidzIGNvbnRyb2wgb2YgdGhlIGluZmVyaW9yCisg ICBpdHNlbGYgbGlrZSBzdGVwcGluZyBjb250cm9sLiAgSXQgYWxzbyBjb250 YWlucyBzZXNzaW9uIHN0YXRlIGxpa2UgdGhlCisgICB1c2VyJ3MgY3VycmVu dGx5IHNlbGVjdGVkIGZyYW1lLgorICAgVGhpcyBzdGF0ZSBpcyBvbmx5IHJl c3RvcmVkIHVwb24gc3VjY2Vzc2Z1bCBjb21wbGV0aW9uIG9mIHRoZQorICAg aW5mZXJpb3IgZnVuY3Rpb24gY2FsbC4KKworICAgQ2FsbCB0aGVzZSByb3V0 aW5lcyBhcm91bmQgaGFuZCBjYWxsZWQgZnVuY3Rpb25zLCBpbmNsdWRpbmcg ZnVuY3Rpb24gY2FsbHMKKyAgIGluIGNvbmRpdGlvbmFsIGJyZWFrcG9pbnRz IGZvciBleGFtcGxlLiAgKi8KKworc3RydWN0IGluZmVyaW9yX3Byb2dyYW1f c3RhdGU7CiBzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzOwogCi1leHRlcm4gc3Ry dWN0IGluZmVyaW9yX3N0YXR1cyAqc2F2ZV9pbmZlcmlvcl9zdGF0dXMgKGlu dCk7CitleHRlcm4gc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKnNh dmVfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSAodm9pZCk7CitleHRlcm4gc3Ry dWN0IGluZmVyaW9yX3N0YXR1cyAqc2F2ZV9pbmZlcmlvcl9zdGF0dXMgKHZv aWQpOwogCitleHRlcm4gdm9pZCByZXN0b3JlX2luZmVyaW9yX3Byb2dyYW1f c3RhdGUgKHN0cnVjdCBpbmZlcmlvcl9wcm9ncmFtX3N0YXRlICopOwogZXh0 ZXJuIHZvaWQgcmVzdG9yZV9pbmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZl cmlvcl9zdGF0dXMgKik7CiAKK2V4dGVybiBzdHJ1Y3QgY2xlYW51cCAqbWFr ZV9jbGVhbnVwX3Jlc3RvcmVfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSAoc3Ry dWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKik7CiBleHRlcm4gc3RydWN0 IGNsZWFudXAgKm1ha2VfY2xlYW51cF9yZXN0b3JlX2luZmVyaW9yX3N0YXR1 cyAoc3RydWN0IGluZmVyaW9yX3N0YXR1cyAqKTsKIAorZXh0ZXJuIHZvaWQg ZGlzY2FyZF9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlIChzdHJ1Y3QgaW5mZXJp b3JfcHJvZ3JhbV9zdGF0ZSAqKTsKIGV4dGVybiB2b2lkIGRpc2NhcmRfaW5m ZXJpb3Jfc3RhdHVzIChzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzICopOwogCitl eHRlcm4gc3RydWN0IHJlZ2NhY2hlICpnZXRfaW5mZXJpb3JfcHJvZ3JhbV9z dGF0ZV9yZWdjYWNoZSAoc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUg Kik7CisKIC8qIFRoZSAtMSBwdGlkLCBvZnRlbiB1c2VkIHRvIGluZGljYXRl IGVpdGhlciBhbiBlcnJvciBjb25kaXRpb24KICAgIG9yIGEgImRvbid0IGNh cmUiIGNvbmRpdGlvbiwgaS5lLCAicnVuIGFsbCB0aHJlYWRzLiIgICovCiBl eHRlcm4gcHRpZF90IG1pbnVzX29uZV9wdGlkOwpJbmRleDogaW5mcnVuLmMK PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9zcmMvc3Jj L2dkYi9pbmZydW4uYyx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4zMzkKZGlm ZiAtdSAtcCAtcjEuMzM5IGluZnJ1bi5jCi0tLSBpbmZydW4uYwkyMCBOb3Yg MjAwOCAwMDozNToyMyAtMDAwMAkxLjMzOQorKysgaW5mcnVuLmMJMjAgTm92 IDIwMDggMDc6MDk6NTggLTAwMDAKQEAgLTQ1LDcgKzQ1LDcgQEAKICNpbmNs dWRlICJsYW5ndWFnZS5oIgogI2luY2x1ZGUgInNvbGliLmgiCiAjaW5jbHVk ZSAibWFpbi5oIgotCisjaW5jbHVkZSAiZHVtbXktZnJhbWUuaCIKICNpbmNs dWRlICJnZGJfYXNzZXJ0LmgiCiAjaW5jbHVkZSAibWkvbWktY29tbW9uLmgi CiAjaW5jbHVkZSAiZXZlbnQtdG9wLmgiCkBAIC00MzQyLDE1ICs0MzQyLDIz IEBAIEZ1cnRoZXIgZXhlY3V0aW9uIGlzIHByb2JhYmx5IGltcG9zc2libGUK IAogICBpZiAoc3RvcF9zdGFja19kdW1teSkKICAgICB7Ci0gICAgICAvKiBQ b3AgdGhlIGVtcHR5IGZyYW1lIHRoYXQgY29udGFpbnMgdGhlIHN0YWNrIGR1 bW15LiAgUE9QX0ZSQU1FCi0gICAgICAgICBlbmRzIHdpdGggYSBzZXR0aW5n IG9mIHRoZSBjdXJyZW50IGZyYW1lLCBzbyB3ZSBjYW4gdXNlIHRoYXQKLSAg ICAgICAgIG5leHQuICovCi0gICAgICBmcmFtZV9wb3AgKGdldF9jdXJyZW50 X2ZyYW1lICgpKTsKLSAgICAgIC8qIFNldCBzdG9wX3BjIHRvIHdoYXQgaXQg d2FzIGJlZm9yZSB3ZSBjYWxsZWQgdGhlIGZ1bmN0aW9uLgotICAgICAgICAg Q2FuJ3QgcmVseSBvbiByZXN0b3JlX2luZmVyaW9yX3N0YXR1cyBiZWNhdXNl IHRoYXQgb25seSBnZXRzCi0gICAgICAgICBjYWxsZWQgaWYgd2UgZG9uJ3Qg c3RvcCBpbiB0aGUgY2FsbGVkIGZ1bmN0aW9uLiAgKi8KLSAgICAgIHN0b3Bf cGMgPSByZWFkX3BjICgpOwotICAgICAgc2VsZWN0X2ZyYW1lIChnZXRfY3Vy cmVudF9mcmFtZSAoKSk7CisgICAgICAvKiBQb3AgdGhlIGVtcHR5IGZyYW1l IHRoYXQgY29udGFpbnMgdGhlIHN0YWNrIGR1bW15LgorCSBUaGlzIGFsc28g cmVzdG9yZXMgYWxsIGluZmVyaW9yIHN0YXRlIHByaW9yIHRvIHRoZSBjYWxs LgorCSBJZiB0aGUgY3VycmVudCBmcmFtZSBpcyBub3QgYSBzdGFjayBkdW1t eSwgZG8gbm90aGluZyBhbmQgd2FybgorCSB0aGUgdXNlci4gICovCisgICAg ICBzdHJ1Y3QgZnJhbWVfaW5mbyAqZnJhbWUgPSBnZXRfY3VycmVudF9mcmFt ZSAoKTsKKyAgICAgIGlmIChnZXRfZnJhbWVfdHlwZSAoZnJhbWUpID09IERV TU1ZX0ZSQU1FKQorCXsKKwkgIGR1bW15X2ZyYW1lX3BvcCAoZ2V0X2ZyYW1l X2lkIChmcmFtZSkpOworCX0KKyAgICAgIGVsc2UKKwl7CisJICAvKiBXZSBh dm9pZCBjYWxsaW5nIHRoZSBmcmFtZSBhIGR1bW15IGZyYW1lIGFzIGl0IGhh cyBsaXR0bGUKKwkgICAgIG1lYW5pbmcgdG8gdGhlIHVzZXIuICAqLworCSAg cHJpbnRmX2ZpbHRlcmVkIChfKCJcCitTdG9wcGVkIGFmdGVyIGFuIGluZmVy aW9yIGZ1bmN0aW9uIGNhbGwsIGJ1dCBub3QgaW4gdGhlIGV4cGVjdGVkIHN0 YWNrIGZyYW1lLlxuXAorUHJvY2VlZCB3aXRoIGNhdXRpb24uXG4iKSk7CisJ fQogICAgIH0KIAogZG9uZToKQEAgLTQ3NDYsMTAgKzQ3NTQsODYgQEAgc2ln bmFsc19pbmZvIChjaGFyICpzaWdudW1fZXhwLCBpbnQgZnJvbQogICBwcmlu dGZfZmlsdGVyZWQgKF8oIlxuVXNlIHRoZSBcImhhbmRsZVwiIGNvbW1hbmQg dG8gY2hhbmdlIHRoZXNlIHRhYmxlcy5cbiIpKTsKIH0KIAwKLXN0cnVjdCBp bmZlcmlvcl9zdGF0dXMKKy8qIEluZmVyaW9yIHByb2dyYW0gc3RhdGUuCisg ICBUaGVzZSBhcmUgZGV0YWlscyByZWxhdGVkIHRvIHRoZSBpbmZlcmlvciBp dHNlbGYsIGFuZCBkb24ndCBpbmNsdWRlCisgICB0aGluZ3MgbGlrZSB3aGF0 IGZyYW1lIHRoZSB1c2VyIGhhZCBzZWxlY3RlZCBvciB3aGF0IGdkYiB3YXMg ZG9pbmcKKyAgIHdpdGggdGhlIHRhcmdldCBhdCB0aGUgdGltZS4KKyAgIEZv ciBpbmZlcmlvciBmdW5jdGlvbiBjYWxscyB0aGVzZSBhcmUgdGhpbmdzIHdl IHdhbnQgdG8gcmVzdG9yZQorICAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRo ZSBmdW5jdGlvbiBjYWxsIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZXMKKyAgIG9y IHRoZSBkdW1teSBmcmFtZSBoYXMgdG8gYmUgbWFudWFsbHkgcG9wcGVkLiAg Ki8KKworc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUKIHsKICAgZW51 bSB0YXJnZXRfc2lnbmFsIHN0b3Bfc2lnbmFsOwogICBDT1JFX0FERFIgc3Rv cF9wYzsKKyAgc3RydWN0IHJlZ2NhY2hlICpyZWdpc3RlcnM7Cit9OworCitz dHJ1Y3QgaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZSAqCitzYXZlX2luZmVyaW9y X3Byb2dyYW1fc3RhdGUgKCkKK3sKKyAgc3RydWN0IGluZmVyaW9yX3Byb2dy YW1fc3RhdGUgKmluZl9zdGF0ZSA9IFhNQUxMT0MgKHN0cnVjdCBpbmZlcmlv cl9wcm9ncmFtX3N0YXRlKTsKKyAgc3RydWN0IHRocmVhZF9pbmZvICp0cCA9 IGluZmVyaW9yX3RocmVhZCAoKTsKKyAgc3RydWN0IGluZmVyaW9yICppbmYg PSBjdXJyZW50X2luZmVyaW9yICgpOworCisgIGluZl9zdGF0ZS0+c3RvcF9z aWduYWwgPSB0cC0+c3RvcF9zaWduYWw7CisgIGluZl9zdGF0ZS0+c3RvcF9w YyA9IHN0b3BfcGM7CisKKyAgaW5mX3N0YXRlLT5yZWdpc3RlcnMgPSByZWdj YWNoZV9kdXAgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgpKTsKKworICByZXR1 cm4gaW5mX3N0YXRlOworfQorCisvKiBSZXN0b3JlIGluZmVyaW9yIHNlc3Np b24gc3RhdGUgdG8gSU5GX1NUQVRFLiAgKi8KKwordm9pZAorcmVzdG9yZV9p bmZlcmlvcl9wcm9ncmFtX3N0YXRlIChzdHJ1Y3QgaW5mZXJpb3JfcHJvZ3Jh bV9zdGF0ZSAqaW5mX3N0YXRlKQoreworICBzdHJ1Y3QgdGhyZWFkX2luZm8g KnRwID0gaW5mZXJpb3JfdGhyZWFkICgpOworICBzdHJ1Y3QgaW5mZXJpb3Ig KmluZiA9IGN1cnJlbnRfaW5mZXJpb3IgKCk7CisKKyAgdHAtPnN0b3Bfc2ln bmFsID0gaW5mX3N0YXRlLT5zdG9wX3NpZ25hbDsKKyAgc3RvcF9wYyA9IGlu Zl9zdGF0ZS0+c3RvcF9wYzsKKworICAvKiBUaGUgaW5mZXJpb3IgY2FuIGJl IGdvbmUgaWYgdGhlIHVzZXIgdHlwZXMgInByaW50IGV4aXQoMCkiCisgICAg IChhbmQgcGVyaGFwcyBvdGhlciB0aW1lcykuICAqLworICBpZiAodGFyZ2V0 X2hhc19leGVjdXRpb24pCisgICAgLyogTkI6IFRoZSByZWdpc3RlciB3cml0 ZSBnb2VzIHRocm91Z2ggdG8gdGhlIHRhcmdldC4gICovCisgICAgcmVnY2Fj aGVfY3B5IChnZXRfY3VycmVudF9yZWdjYWNoZSAoKSwgaW5mX3N0YXRlLT5y ZWdpc3RlcnMpOworICByZWdjYWNoZV94ZnJlZSAoaW5mX3N0YXRlLT5yZWdp c3RlcnMpOworfQorCitzdGF0aWMgdm9pZAorZG9fcmVzdG9yZV9pbmZlcmlv cl9wcm9ncmFtX3N0YXRlX2NsZWFudXAgKHZvaWQgKnN0YXRlKQoreworICBy ZXN0b3JlX2luZmVyaW9yX3Byb2dyYW1fc3RhdGUgKHN0YXRlKTsKK30KKwor c3RydWN0IGNsZWFudXAgKgorbWFrZV9jbGVhbnVwX3Jlc3RvcmVfaW5mZXJp b3JfcHJvZ3JhbV9zdGF0ZSAoc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3Rh dGUgKmluZl9zdGF0ZSkKK3sKKyAgcmV0dXJuIG1ha2VfY2xlYW51cCAoZG9f cmVzdG9yZV9pbmZlcmlvcl9wcm9ncmFtX3N0YXRlX2NsZWFudXAsIGluZl9z dGF0ZSk7Cit9CisKK3ZvaWQKK2Rpc2NhcmRfaW5mZXJpb3JfcHJvZ3JhbV9z dGF0ZSAoc3RydWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKmluZl9zdGF0 ZSkKK3sKKyAgcmVnY2FjaGVfeGZyZWUgKGluZl9zdGF0ZS0+cmVnaXN0ZXJz KTsKKyAgeGZyZWUgKGluZl9zdGF0ZSk7Cit9CisKK3N0cnVjdCByZWdjYWNo ZSAqCitnZXRfaW5mZXJpb3JfcHJvZ3JhbV9zdGF0ZV9yZWdjYWNoZSAoc3Ry dWN0IGluZmVyaW9yX3Byb2dyYW1fc3RhdGUgKmluZl9zdGF0ZSkKK3sKKyAg cmV0dXJuIGluZl9zdGF0ZS0+cmVnaXN0ZXJzOworfQorCisvKiBTZXNzaW9u IHJlbGF0ZWQgc3RhdGUgZm9yIGluZmVyaW9yIGZ1bmN0aW9uIGNhbGxzLgor ICAgVGhlc2UgYXJlIHRoZSBhZGRpdGlvbmFsIGJpdHMgb2Ygc3RhdGUgdGhh dCBuZWVkIHRvIGJlIHJlc3RvcmVkCisgICB3aGVuIGFuIGluZmVyaW9yIGZ1 bmN0aW9uIGNhbGwgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlcy4gICovCisKK3N0 cnVjdCBpbmZlcmlvcl9zdGF0dXMKK3sKICAgYnBzdGF0IHN0b3BfYnBzdGF0 OwogICBpbnQgc3RvcF9zdGVwOwogICBpbnQgc3RvcF9zdGFja19kdW1teTsK QEAgLTQ3NjMsMzIgKzQ4NDcsMjMgQEAgc3RydWN0IGluZmVyaW9yX3N0YXR1 cwogICBpbnQgc3RvcF9hZnRlcl90cmFwOwogICBpbnQgc3RvcF9zb29uOwog Ci0gIC8qIFRoZXNlIGFyZSBoZXJlIGJlY2F1c2UgaWYgY2FsbF9mdW5jdGlv bl9ieV9oYW5kIGhhcyB3cml0dGVuIHNvbWUKLSAgICAgcmVnaXN0ZXJzIGFu ZCB0aGVuIGRlY2lkZXMgdG8gY2FsbCBlcnJvcigpLCB3ZSBiZXR0ZXIgbm90 IGhhdmUgY2hhbmdlZAotICAgICBhbnkgcmVnaXN0ZXJzLiAgKi8KLSAgc3Ry dWN0IHJlZ2NhY2hlICpyZWdpc3RlcnM7Ci0KLSAgLyogQSBmcmFtZSB1bmlx dWUgaWRlbnRpZmllci4gICovCisgIC8qIElEIGlmIHRoZSBzZWxlY3RlZCBm cmFtZSB3aGVuIHRoZSBpbmZlcmlvciBmdW5jdGlvbiBjYWxsIHdhcyBtYWRl LiAgKi8KICAgc3RydWN0IGZyYW1lX2lkIHNlbGVjdGVkX2ZyYW1lX2lkOwog CiAgIGludCBicmVha3BvaW50X3Byb2NlZWRlZDsKLSAgaW50IHJlc3RvcmVf c3RhY2tfaW5mbzsKICAgaW50IHByb2NlZWRfdG9fZmluaXNoOwogfTsKIAog LyogU2F2ZSBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIGFzc29jaWF0ZWQgd2l0 aCB0aGUgaW5mZXJpb3I8PT0+Z2RiCi0gICBjb25uZWN0aW9uLiAgSU5GX1NU QVRVUyBpcyBhIHBvaW50ZXIgdG8gYSAic3RydWN0IGluZmVyaW9yX3N0YXR1 cyIKLSAgIChkZWZpbmVkIGluIGluZmVyaW9yLmgpLiAgKi8KKyAgIGNvbm5l Y3Rpb24uICAqLwogCiBzdHJ1Y3QgaW5mZXJpb3Jfc3RhdHVzICoKLXNhdmVf aW5mZXJpb3Jfc3RhdHVzIChpbnQgcmVzdG9yZV9zdGFja19pbmZvKQorc2F2 ZV9pbmZlcmlvcl9zdGF0dXMgKCkKIHsKICAgc3RydWN0IGluZmVyaW9yX3N0 YXR1cyAqaW5mX3N0YXR1cyA9IFhNQUxMT0MgKHN0cnVjdCBpbmZlcmlvcl9z dGF0dXMpOwogICBzdHJ1Y3QgdGhyZWFkX2luZm8gKnRwID0gaW5mZXJpb3Jf dGhyZWFkICgpOwogICBzdHJ1Y3QgaW5mZXJpb3IgKmluZiA9IGN1cnJlbnRf aW5mZXJpb3IgKCk7CiAKLSAgaW5mX3N0YXR1cy0+c3RvcF9zaWduYWwgPSB0 cC0+c3RvcF9zaWduYWw7Ci0gIGluZl9zdGF0dXMtPnN0b3BfcGMgPSBzdG9w X3BjOwogICBpbmZfc3RhdHVzLT5zdG9wX3N0ZXAgPSB0cC0+c3RvcF9zdGVw OwogICBpbmZfc3RhdHVzLT5zdG9wX3N0YWNrX2R1bW15ID0gc3RvcF9zdGFj a19kdW1teTsKICAgaW5mX3N0YXR1cy0+c3RvcHBlZF9ieV9yYW5kb21fc2ln bmFsID0gc3RvcHBlZF9ieV9yYW5kb21fc2lnbmFsOwpAQCAtNDgwNiwxMiAr NDg4MSwxMCBAQCBzYXZlX2luZmVyaW9yX3N0YXR1cyAoaW50IHJlc3RvcmVf c3RhY2tfCiAgIGluZl9zdGF0dXMtPnN0b3BfYnBzdGF0ID0gdHAtPnN0b3Bf YnBzdGF0OwogICB0cC0+c3RvcF9icHN0YXQgPSBicHN0YXRfY29weSAodHAt PnN0b3BfYnBzdGF0KTsKICAgaW5mX3N0YXR1cy0+YnJlYWtwb2ludF9wcm9j ZWVkZWQgPSBicmVha3BvaW50X3Byb2NlZWRlZDsKLSAgaW5mX3N0YXR1cy0+ cmVzdG9yZV9zdGFja19pbmZvID0gcmVzdG9yZV9zdGFja19pbmZvOwogICBp bmZfc3RhdHVzLT5wcm9jZWVkX3RvX2ZpbmlzaCA9IHRwLT5wcm9jZWVkX3Rv X2ZpbmlzaDsKIAotICBpbmZfc3RhdHVzLT5yZWdpc3RlcnMgPSByZWdjYWNo ZV9kdXAgKGdldF9jdXJyZW50X3JlZ2NhY2hlICgpKTsKLQogICBpbmZfc3Rh dHVzLT5zZWxlY3RlZF9mcmFtZV9pZCA9IGdldF9mcmFtZV9pZCAoZ2V0X3Nl bGVjdGVkX2ZyYW1lIChOVUxMKSk7CisKICAgcmV0dXJuIGluZl9zdGF0dXM7 CiB9CiAKQEAgLTQ4MzYsMTQgKzQ5MDksMTQgQEAgcmVzdG9yZV9zZWxlY3Rl ZF9mcmFtZSAodm9pZCAqYXJncykKICAgcmV0dXJuICgxKTsKIH0KIAorLyog UmVzdG9yZSBpbmZlcmlvciBzZXNzaW9uIHN0YXRlIHRvIElORl9TVEFUVVMu ICAqLworCiB2b2lkCiByZXN0b3JlX2luZmVyaW9yX3N0YXR1cyAoc3RydWN0 IGluZmVyaW9yX3N0YXR1cyAqaW5mX3N0YXR1cykKIHsKICAgc3RydWN0IHRo cmVhZF9pbmZvICp0cCA9IGluZmVyaW9yX3RocmVhZCAoKTsKICAgc3RydWN0 IGluZmVyaW9yICppbmYgPSBjdXJyZW50X2luZmVyaW9yICgpOwogCi0gIHRw LT5zdG9wX3NpZ25hbCA9IGluZl9zdGF0dXMtPnN0b3Bfc2lnbmFsOwotICBz dG9wX3BjID0gaW5mX3N0YXR1cy0+c3RvcF9wYzsKICAgdHAtPnN0b3Bfc3Rl cCA9IGluZl9zdGF0dXMtPnN0b3Bfc3RlcDsKICAgc3RvcF9zdGFja19kdW1t eSA9IGluZl9zdGF0dXMtPnN0b3Bfc3RhY2tfZHVtbXk7CiAgIHN0b3BwZWRf YnlfcmFuZG9tX3NpZ25hbCA9IGluZl9zdGF0dXMtPnN0b3BwZWRfYnlfcmFu ZG9tX3NpZ25hbDsKQEAgLTQ4NTYsMjQgKzQ5MjksMTEgQEAgcmVzdG9yZV9p bmZlcmlvcl9zdGF0dXMgKHN0cnVjdCBpbmZlcmlvcgogICBpbmYtPnN0b3Bf c29vbiA9IGluZl9zdGF0dXMtPnN0b3Bfc29vbjsKICAgYnBzdGF0X2NsZWFy ICgmdHAtPnN0b3BfYnBzdGF0KTsKICAgdHAtPnN0b3BfYnBzdGF0ID0gaW5m X3N0YXR1cy0+c3RvcF9icHN0YXQ7CisgIGluZl9zdGF0dXMtPnN0b3BfYnBz dGF0ID0gTlVMTDsKICAgYnJlYWtwb2ludF9wcm9jZWVkZWQgPSBpbmZfc3Rh dHVzLT5icmVha3BvaW50X3Byb2NlZWRlZDsKICAgdHAtPnByb2NlZWRfdG9f ZmluaXNoID0gaW5mX3N0YXR1cy0+cHJvY2VlZF90b19maW5pc2g7CiAKLSAg LyogVGhlIGluZmVyaW9yIGNhbiBiZSBnb25lIGlmIHRoZSB1c2VyIHR5cGVz ICJwcmludCBleGl0KDApIgotICAgICAoYW5kIHBlcmhhcHMgb3RoZXIgdGlt ZXMpLiAgKi8KLSAgaWYgKHRhcmdldF9oYXNfZXhlY3V0aW9uKQotICAgIC8q IE5COiBUaGUgcmVnaXN0ZXIgd3JpdGUgZ29lcyB0aHJvdWdoIHRvIHRoZSB0 YXJnZXQuICAqLwotICAgIHJlZ2NhY2hlX2NweSAoZ2V0X2N1cnJlbnRfcmVn Y2FjaGUgKCksIGluZl9zdGF0dXMtPnJlZ2lzdGVycyk7Ci0gIHJlZ2NhY2hl X3hmcmVlIChpbmZfc3RhdHVzLT5yZWdpc3RlcnMpOwotCi0gIC8qIEZJWE1F OiBJZiB3ZSBhcmUgYmVpbmcgY2FsbGVkIGFmdGVyIHN0b3BwaW5nIGluIGEg ZnVuY3Rpb24gd2hpY2gKLSAgICAgaXMgY2FsbGVkIGZyb20gZ2RiLCB3ZSBz aG91bGQgbm90IGJlIHRyeWluZyB0byByZXN0b3JlIHRoZQotICAgICBzZWxl Y3RlZCBmcmFtZTsgaXQganVzdCBwcmludHMgYSBzcHVyaW91cyBlcnJvciBt ZXNzYWdlIChUaGUKLSAgICAgbWVzc2FnZSBpcyB1c2VmdWwsIGhvd2V2ZXIs IGluIGRldGVjdGluZyBidWdzIGluIGdkYiAobGlrZSBpZiBnZGIKLSAgICAg Y2xvYmJlcnMgdGhlIHN0YWNrKSkuICBJbiBmYWN0LCBzaG91bGQgd2UgYmUg cmVzdG9yaW5nIHRoZQotICAgICBpbmZlcmlvciBzdGF0dXMgYXQgYWxsIGlu IHRoYXQgY2FzZT8gIC4gICovCi0KLSAgaWYgKHRhcmdldF9oYXNfc3RhY2sg JiYgaW5mX3N0YXR1cy0+cmVzdG9yZV9zdGFja19pbmZvKQorICBpZiAodGFy Z2V0X2hhc19zdGFjaykKICAgICB7CiAgICAgICAvKiBUaGUgcG9pbnQgb2Yg Y2F0Y2hfZXJyb3JzIGlzIHRoYXQgaWYgdGhlIHN0YWNrIGlzIGNsb2JiZXJl ZCwKICAgICAgICAgIHdhbGtpbmcgdGhlIHN0YWNrIG1pZ2h0IGVuY291bnRl ciBhIGdhcmJhZ2UgcG9pbnRlciBhbmQKQEAgLTQ4ODUsNyArNDk0NSw2IEBA IHJlc3RvcmVfaW5mZXJpb3Jfc3RhdHVzIChzdHJ1Y3QgaW5mZXJpb3IKIAkv KiBFcnJvciBpbiByZXN0b3JpbmcgdGhlIHNlbGVjdGVkIGZyYW1lLiAgU2Vs ZWN0IHRoZSBpbm5lcm1vc3QKIAkgICBmcmFtZS4gICovCiAJc2VsZWN0X2Zy YW1lIChnZXRfY3VycmVudF9mcmFtZSAoKSk7Ci0KICAgICB9CiAKICAgeGZy ZWUgKGluZl9zdGF0dXMpOwpAQCAtNDkwOCwxMCArNDk2Nyw5IEBAIGRpc2Nh cmRfaW5mZXJpb3Jfc3RhdHVzIChzdHJ1Y3QgaW5mZXJpb3IKIHsKICAgLyog U2VlIHNhdmVfaW5mZXJpb3Jfc3RhdHVzIGZvciBpbmZvIG9uIHN0b3BfYnBz dGF0LiAqLwogICBicHN0YXRfY2xlYXIgKCZpbmZfc3RhdHVzLT5zdG9wX2Jw c3RhdCk7Ci0gIHJlZ2NhY2hlX3hmcmVlIChpbmZfc3RhdHVzLT5yZWdpc3Rl cnMpOwogICB4ZnJlZSAoaW5mX3N0YXR1cyk7CiB9Ci0KKwwKIGludAogaW5m ZXJpb3JfaGFzX2ZvcmtlZCAocHRpZF90IHBpZCwgcHRpZF90ICpjaGlsZF9w aWQpCiB7CkluZGV4OiB0ZXN0c3VpdGUvZ2RiLmJhc2UvY2FsbC1zaWduYWwt cmVzdW1lLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0 ZXN0c3VpdGUvZ2RiLmJhc2UvY2FsbC1zaWduYWwtcmVzdW1lLmV4cApkaWZm IC1OIHRlc3RzdWl0ZS9nZGIuYmFzZS9jYWxsLXNpZ25hbC1yZXN1bWUuZXhw Ci0tLSAvZGV2L251bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysg dGVzdHN1aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFsLXJlc3VtZS5leHAJMjAg Tm92IDIwMDggMDc6MDk6NTkgLTAwMDAKQEAgLTAsMCArMSwxMDcgQEAKKyMg Q29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu CisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhl IHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9n cmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi ZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91 dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJ TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl ZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg ZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcg d2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisKK2lmICR0cmFjZWxldmVsIHRoZW4gewor CXN0cmFjZSAkdHJhY2VsZXZlbAorfQorCitpZiBbdGFyZ2V0X2luZm8gZXhp c3RzIGdkYixub2luZmVyaW9yaW9dIHsKKyAgICB2ZXJib3NlICJTa2lwcGlu ZyBjYWxsLXNpZ25hbC1yZXN1bWUuZXhwIGJlY2F1c2Ugb2Ygbm8gZmlsZWlv IGNhcGFiaWxpdGllcy4iCisgICAgY29udGludWUKK30KKworc2V0IHBybXNf aWQgMAorc2V0IGJ1Z19pZCAwCisKK3NldCB0ZXN0ZmlsZSAiY2FsbC1zaWdu YWxzIgorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUg JHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQorCitpZiAgeyBbZ2Ri X2NvbXBpbGUgIiR7c3JjZGlyfS8ke3N1YmRpcn0vJHtzcmNmaWxlfSIgIiR7 YmluZmlsZX0iIGV4ZWN1dGFibGUge2RlYnVnfV0gIT0gIiIgfSB7CisgICAg IHVudGVzdGVkIGNhbGwtc2lnbmFsLXJlc3VtZS5leHAKKyAgICAgcmV0dXJu IC0xCit9CisKKyMgU29tZSB0YXJnZXRzIGNhbid0IGRvIGZ1bmN0aW9uIGNh bGxzLCBzbyBkb24ndCBldmVuIGJvdGhlciB3aXRoIHRoaXMKKyMgdGVzdC4K K2lmIFt0YXJnZXRfaW5mbyBleGlzdHMgZ2RiLGNhbm5vdF9jYWxsX2Z1bmN0 aW9uc10geworICAgIHNldHVwX3hmYWlsICIqLSotKiIgMjQxNgorICAgIGZh aWwgIlRoaXMgdGFyZ2V0IGNhbiBub3QgY2FsbCBmdW5jdGlvbnMiCisgICAg Y29udGludWUKK30KKworcHJvYyBnZXRfZHVtbXlfZnJhbWVfbnVtYmVyIHsg fSB7CisgIGdsb2JhbCBnZGJfcHJvbXB0CisKKyAgc2VuZF9nZGIgImJ0XG4i CisgIGdkYl9leHBlY3QgeworICAgIC1yZSAiIyhcWzAtOVxdKikgKjxmdW5j dGlvbiBjYWxsZWQgZnJvbSBnZGI+LiokZ2RiX3Byb21wdCAkIgorICAgICAg eworCXJldHVybiAkZXhwZWN0X291dCgxLHN0cmluZykKKyAgICAgIH0KKyAg ICAtcmUgIiRnZGJfcHJvbXB0ICQiCisgICAgICB7CisJcmV0dXJuICIiCisg ICAgICB9CisgICAgdGltZW91dAorICAgICAgeworCXJldHVybiAiIgorICAg ICAgfQorICB9CisgIHJldHVybiAiIgorfQorCisjIFN0YXJ0IHdpdGggYSBm cmVzaCBnZGIuCisKK2dkYl9leGl0CitnZGJfc3RhcnQKK2dkYl9yZWluaXRp YWxpemVfZGlyICRzcmNkaXIvJHN1YmRpcgorZ2RiX2xvYWQgJHtiaW5maWxl fQorCitpZiB7ICFbcnVudG9fbWFpbl0gfSB7CisgICAgZmFpbCAiQ2FuJ3Qg cnVuIHRvIG1haW4iCisgICAgcmV0dXJuIDAKK30KKworIyBDYWxsIGZ1bmN0 aW9uIChjYXVzaW5nIHRoZSBwcm9ncmFtIHRvIGdldCBhIHNpZ25hbCksIGFu ZCBzZWUgaWYgZ2RiIGhhbmRsZXMKKyMgaXQgcHJvcGVybHkuCitnZGJfdGVz dF9tdWx0aXBsZSAiY2FsbCBnZW5fc2lnbmFsICgpIiBcCisJImNhbGwtc2ln bmFsLXJlc3VtZSwgaW5mZXJpb3IgZnVuY3Rpb24gY2FsbCBzaWduYWxlZCIg eworICAgIC1yZSAiXFtcclxuXF0qbm8gc2lnbmFsXFtcclxuXF0rJGdkYl9w cm9tcHQgJCIgeworCXVuc3VwcG9ydGVkICJjYWxsLXNpZ25hbC1yZXN1bWUs IGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwgc2lnbmFsZWQiCisJcmV0dXJuIDAK KyAgICB9CisgICAgLXJlICJcW1xyXG5cXSpUaGUgcHJvZ3JhbSBiZWluZyBk ZWJ1Z2dlZCB3YXMgc2lnbmFsZWQuKlxbXHJcblxdKyRnZGJfcHJvbXB0ICQi IHsKKwlwYXNzICJjYWxsLXNpZ25hbC1yZXN1bWUsIGluZmVyaW9yIGZ1bmN0 aW9uIGNhbGwgc2lnbmFsZWQiCisgICAgfQorfQorCitzZXQgZnJhbWVfbnVt YmVyIFtnZXRfZHVtbXlfZnJhbWVfbnVtYmVyXQoraWYgeyAiJGZyYW1lX251 bWJlciIgPT0gIiIgfSB7CisgICAgZmFpbCAiY2FsbC1zaWduYWwtcmVzdW1l LCBkdW1teSBzdGFjayBmcmFtZSBudW1iZXIiCisgICAgc2V0dXBfeGZhaWwg IiotKi0qIgorfSBlbHNlIHsKKyAgICBwYXNzICJjYWxsLXNpZ25hbC1yZXN1 bWUsIGR1bW15IHN0YWNrIGZyYW1lIG51bWJlciIKK30KKworIyBQb3AgdGhl IGR1bW15IGZyYW1lLgorZ2RiX3Rlc3QgImZyYW1lICRmcmFtZV9udW1iZXIi ICIiCitnZGJfdGVzdCAic2V0IGNvbmZpcm0gb2ZmIiAiIgorZ2RiX3Rlc3Qg InJldHVybiIgIiIKKworIyBSZXN1bWUgZXhlY3V0aW9uLCB0aGUgcHJvZ3Jh bSBzaG91bGQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlLgorZ2RiX3Rlc3QgImNv bnRpbnVlIiAiUHJvZ3JhbSBleGl0ZWQgbm9ybWFsbHkuIgorCityZXR1cm4g MApJbmRleDogdGVzdHN1aXRlL2dkYi5iYXNlL2NhbGwtc2lnbmFscy5jCj09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIu YmFzZS9jYWxsLXNpZ25hbHMuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIuYmFz ZS9jYWxsLXNpZ25hbHMuYwotLS0gL2Rldi9udWxsCTEgSmFuIDE5NzAgMDA6 MDA6MDAgLTAwMDAKKysrIHRlc3RzdWl0ZS9nZGIuYmFzZS9jYWxsLXNpZ25h bHMuYwkyMCBOb3YgMjAwOCAwNzowOTo1OSAtMDAwMApAQCAtMCwwICsxLDQ4 IEBACisvKiBUaGlzIHRlc3RjYXNlIGlzIHBhcnQgb2YgR0RCLCB0aGUgR05V IGRlYnVnZ2VyLgorCisgICBDb3B5cmlnaHQgMjAwOCBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBM aWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy YW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNo b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAg SWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAg Ki8KKworLyogU3VwcG9ydCBwcm9ncmFtIGZvciB0ZXN0aW5nIGhhbmRsaW5n IG9mIGluZmVyaW9yIGZ1bmN0aW9uIGNhbGxzCisgICBpbiB0aGUgcHJlc2Vu Y2Ugb2Ygc2lnbmFscy4gICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCit2b2lk CitnZW5fc2lnbmFsICgpCit7CisgIC8qIEFjY29yZGluZyB0byBzaWdhbGwu ZXhwLCBTSUdBQlJUIGlzIGFsd2F5cyBzdXBwb3J0ZWQsCisgICAgIHNvIHRy eSB0aGF0IGZpcnN0LiAgKi8KKyNpZmRlZiBTSUdBQlJUCisgIGtpbGwgKGdl dHBpZCAoKSwgU0lHQUJSVCk7CisjZW5kaWYKKyNpZmRlZiBTSUdTRUdWCisg IGtpbGwgKGdldHBpZCAoKSwgU0lHU0VHVik7CisjZW5kaWYKKyAgLyogSWYg d2UgZ2V0IGhlcmUgd2UgY291bGRuJ3QgZ2VuZXJhdGUgYSBzaWduYWwsIHRl bGwgZGVqYWdudS4gICovCisgIHByaW50ZiAoIm5vIHNpZ25hbFxuIik7Cit9 CisKK2ludAorbWFpbiAoKQoreworI2lmZGVmIHVzZXN0dWJzCisgIHNldF9k ZWJ1Z190cmFwcyAoKTsKKyAgYnJlYWtwb2ludCAoKTsKKyNlbmRpZgorICBy ZXR1cm4gMDsKK30KSW5kZXg6IHRlc3RzdWl0ZS9nZGIuYmFzZS91bndpbmRv bnNpZ25hbC5leHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTog dGVzdHN1aXRlL2dkYi5iYXNlL3Vud2luZG9uc2lnbmFsLmV4cApkaWZmIC1O IHRlc3RzdWl0ZS9nZGIuYmFzZS91bndpbmRvbnNpZ25hbC5leHAKLS0tIC9k ZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0wMDAwCisrKyB0ZXN0c3Vp dGUvZ2RiLmJhc2UvdW53aW5kb25zaWduYWwuZXhwCTIwIE5vdiAyMDA4IDA3 OjA5OjU5IC0wMDAwCkBAIC0wLDAgKzEsOTQgQEAKKyMgQ29weXJpZ2h0IDIw MDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl IGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkK KyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNp b24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisj IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp bXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMK KyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHBy b2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisKK2lmICR0cmFjZWxldmVsIHRoZW4geworCXN0cmFjZSAkdHJh Y2VsZXZlbAorfQorCitpZiBbdGFyZ2V0X2luZm8gZXhpc3RzIGdkYixub2lu ZmVyaW9yaW9dIHsKKyAgICB2ZXJib3NlICJTa2lwcGluZyB1bndpbmRvbnNp Z25hbC5leHAgYmVjYXVzZSBvZiBubyBmaWxlaW8gY2FwYWJpbGl0aWVzLiIK KyAgICBjb250aW51ZQorfQorCitzZXQgcHJtc19pZCAwCitzZXQgYnVnX2lk IDAKKworc2V0IHRlc3RmaWxlICJjYWxsLXNpZ25hbHMiCitzZXQgc3JjZmls ZSAke3Rlc3RmaWxlfS5jCitzZXQgYmluZmlsZSAke29iamRpcn0vJHtzdWJk aXJ9LyR7dGVzdGZpbGV9CisKK2lmICB7IFtnZGJfY29tcGlsZSAiJHtzcmNk aXJ9LyR7c3ViZGlyfS8ke3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0 YWJsZSB7ZGVidWd9XSAhPSAiIiB9IHsKKyAgICAgdW50ZXN0ZWQgdW53aW5k b25zaWduYWwuZXhwCisgICAgIHJldHVybiAtMQorfQorCisjIFNvbWUgdGFy Z2V0cyBjYW4ndCBkbyBmdW5jdGlvbiBjYWxscywgc28gZG9uJ3QgZXZlbiBi b3RoZXIgd2l0aCB0aGlzCisjIHRlc3QuCitpZiBbdGFyZ2V0X2luZm8gZXhp c3RzIGdkYixjYW5ub3RfY2FsbF9mdW5jdGlvbnNdIHsKKyAgICBzZXR1cF94 ZmFpbCAiKi0qLSoiIDI0MTYKKyAgICBmYWlsICJUaGlzIHRhcmdldCBjYW4g bm90IGNhbGwgZnVuY3Rpb25zIgorICAgIGNvbnRpbnVlCit9CisKKyMgU3Rh cnQgd2l0aCBhIGZyZXNoIGdkYi4KKworZ2RiX2V4aXQKK2dkYl9zdGFydAor Z2RiX3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9h ZCAke2JpbmZpbGV9CisKK2lmIHsgIVtydW50b19tYWluXSB9IHsKKyAgICBm YWlsICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgICByZXR1cm4gMAorfQorCisj IFR1cm4gb24gdW53aW5kb25zaWduYWwuCitnZGJfdGVzdCAic2V0IHVud2lu ZG9uc2lnbmFsIG9uIiBcCisJIiIgXAorCSJzZXR0aW5nIHVud2luZG9uc2ln bmFsIgorZ2RiX3Rlc3QgInNob3cgdW53aW5kb25zaWduYWwiIFwKKwkiVW53 aW5kaW5nIG9mIHN0YWNrIC4qIGlzIG9uLiIgXAorCSJzaG93aW5nIHVud2lu ZG9uc2lnbmFsIgorCisjIENhbGwgZnVuY3Rpb24gKGNhdXNpbmcgdGhlIHBy b2dyYW0gdG8gZ2V0IGEgc2lnbmFsKSwgYW5kIHNlZSBpZiBnZGIgaGFuZGxl cworIyBpdCBwcm9wZXJseS4KK2dkYl90ZXN0X211bHRpcGxlICJjYWxsIGdl bl9zaWduYWwgKCkiIFwKKwkidW53aW5kb25zaWduYWwsIGluZmVyaW9yIGZ1 bmN0aW9uIGNhbGwgc2lnbmFsZWQiIHsKKyAgICAtcmUgIlxbXHJcblxdKm5v IHNpZ25hbFxbXHJcblxdKyRnZGJfcHJvbXB0ICQiIHsKKwl1bnN1cHBvcnRl ZCAidW53aW5kb25zaWduYWwsIGluZmVyaW9yIGZ1bmN0aW9uIGNhbGwgc2ln bmFsZWQiCisJcmV0dXJuIDAKKyAgICB9CisgICAgLXJlICJcW1xyXG5cXSpU aGUgcHJvZ3JhbSBiZWluZyBkZWJ1Z2dlZCB3YXMgc2lnbmFsZWQuKlxbXHJc blxdKyRnZGJfcHJvbXB0ICQiIHsKKwlwYXNzICJ1bndpbmRvbnNpZ25hbCwg aW5mZXJpb3IgZnVuY3Rpb24gY2FsbCBzaWduYWxlZCIKKyAgICB9Cit9CisK KyMgVmVyaWZ5IHRoZSBzdGFjayBnb3QgdW53b3VuZC4KK2dkYl90ZXN0ICJi dCIgXAorCSIjMCAqbWFpbiBcXCguKlxcKSBhdCAuKiIgXAorCSJ1bndpbmRv bnNpZ25hbCwgc3RhY2sgdW53b3VuZCIKKworIyBWZXJpZnkgdGhlIGR1bW15 IGZyYW1lIGdvdCByZW1vdmVkIGZyb20gZHVtbXlfZnJhbWVfc3RhY2suCitn ZGJfdGVzdF9tdWx0aXBsZSAibWFpbnQgcHJpbnQgZHVtbXktZnJhbWVzIiBc CisJInVud2luZG9uc2lnbmFsLCBkdW1teSBmcmFtZSByZW1vdmVkIiB7Cisg ICAgLXJlICJcW1xyXG5cXSouKnN0YWNrPS4qY29kZT0uKlxbXHJcblxdKyRn ZGJfcHJvbXB0ICQiIHsKKwlmYWlsICJ1bndpbmRvbnNpZ25hbCwgZHVtbXkg ZnJhbWUgcmVtb3ZlZCIKKyAgICB9CisgICAgLXJlICJcW1xyXG5cXSskZ2Ri X3Byb21wdCAkIiB7CisJcGFzcyAidW53aW5kb25zaWduYWwsIGR1bW15IGZy YW1lIHJlbW92ZWQiCisgICAgfQorfQorCityZXR1cm4gMAo= --000e0cd14cb223d0c3045c1a6a20--