From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 30603 invoked by alias); 2 Dec 2008 11:41:21 -0000 Received: (qmail 30580 invoked by uid 22791); 2 Dec 2008 11:41:18 -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; Tue, 02 Dec 2008 11:40:17 +0000 Received: from zps78.corp.google.com (zps78.corp.google.com [172.25.146.78]) by smtp-out.google.com with ESMTP id mB2BeFWg008903 for ; Tue, 2 Dec 2008 03:40:15 -0800 Received: from rv-out-0506.google.com (rvbf6.prod.google.com [10.140.82.6]) by zps78.corp.google.com with ESMTP id mB2BeEaN022526 for ; Tue, 2 Dec 2008 03:40:14 -0800 Received: by rv-out-0506.google.com with SMTP id f6so3294535rvb.51 for ; Tue, 02 Dec 2008 03:40:14 -0800 (PST) MIME-Version: 1.0 Received: by 10.140.157.4 with SMTP id f4mr5730110rve.84.1228218014238; Tue, 02 Dec 2008 03:40:14 -0800 (PST) In-Reply-To: References: <20081202030036.C2C201C7A0B@localhost> Date: Tue, 02 Dec 2008 11:41:00 -0000 Message-ID: Subject: Re: [RFA] Fix hand called function when another thread has hit a bp. From: Doug Evans To: gdb-patches@sourceware.org Content-Type: multipart/mixed; boundary=000e0cd146d472077b045d0eca99 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/msg00031.txt.bz2 --000e0cd146d472077b045d0eca99 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-length: 3507 On Mon, Dec 1, 2008 at 7:46 PM, Doug Evans wrote: > On Mon, Dec 1, 2008 at 7:00 PM, Doug Evans wrote: >> Hi. In http://sourceware.org/ml/gdb-patches/2008-11/msg00531.html >> I wrote: >> >>> 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. >> >> Here's a patch. >> This is separate from my dummy-frames cleanup patch. >> >> Ok to check in? > > Except of course nothing is ever this easy. :-( > > My testcase isn't complete: > > set scheduler-locking off > continue > > Adding the above to the end of the testcase reveals the fact that this > patch causes gdb to lose track of the fact that it needs to single > step over the breakpoint at all_threads_running in the main thread, > and resuming execution causes the breakpoint to be hit again. Global > state, gotta love it. > > I'm assuming non-stop mode doesn't have this problem. > Can we record in struct thread_info (or some such) the last stop > reason and before resuming with !scheduler-locking iterate over all > threads, single stepping them as necessary? Is there a better > solution? This patch fixes the expanded hand-call-in-threads.exp testcase (which is part of the patch). In the process I discovered a bigger problem - gdb doesn't handle resuming after more than one thread is stopped at a breakpoint. This can happen if the user runs several threads in turn with scheduler-locking on, and then turns scheduler-locking off and resumes the program. I wrote another testcase, multi-bp-in-threads.exp, to expose this issue. Fixing this appears to be a much harder problem, and I think I'd like to declare partial victory with this patch ... Comments? I have some questions. Is it sufficient to test "thread->stop_signal == TRAP && breakpoint_here_p (pc)" to check if a thread is stopped at a breakpoint? It seems to be. Another thing this revised patch does is stop SIGTRAP from being passed to the current thread to be run if it was received in the last thread that ran. The comments say this is how gdb behaved before stop_signal was recorded for each thread. It seems odd though. If an asynchronous signal comes in and it is masked in some threads, if the kernel chooses a thread in which it's not blocked, should gdb be changing the thread that receives the signal? This patch takes a minimalist approach and only changes the behaviour of SIGTRAP. 2008-12-02 Doug Evans * infrun.c (prepare_to_proceed_callback): New function. (prepare_to_proceed): Document. Assert !non_stop. Add debugging printf. If scheduler-locking is enabled, no other thread need to be singlestepped. Otherwise scan all threads for whether they're stopped at a breakpoint instead of just the last thread that ran. (proceed): Add FIXME. Don't pass on TARGET_SIGNAL_TRAP from the last thread that ran to the current thread to run. * gdb.threads/hand-call-in-threads.exp: New file. * gdb.threads/hand-call-in-threads.c: New file. * gdb.threads/multi-bp-in-threads.exp: New file. * gdb.threads/multi-bp-in-threads.c: New file. --000e0cd146d472077b045d0eca99 Content-Type: text/plain; charset=US-ASCII; name="gdb-081202-schedlock-2.patch.txt" Content-Disposition: attachment; filename="gdb-081202-schedlock-2.patch.txt" Content-Transfer-Encoding: base64 X-Attachment-Id: f_fo8h6kvp0 Content-length: 29516 MjAwOC0xMi0wMiAgRG91ZyBFdmFucyAgPGRqZUBnb29nbGUuY29tPgoKCSog aW5mcnVuLmMgKHByZXBhcmVfdG9fcHJvY2VlZF9jYWxsYmFjayk6IE5ldyBm dW5jdGlvbi4KCShwcmVwYXJlX3RvX3Byb2NlZWQpOiBEb2N1bWVudC4gIEFz c2VydCAhbm9uX3N0b3AuICBBZGQgZGVidWdnaW5nCglwcmludGYuICBJZiBz Y2hlZHVsZXItbG9ja2luZyBpcyBlbmFibGVkLCBubyBvdGhlciB0aHJlYWQg bmVlZCB0bwoJYmUgc2luZ2xlc3RlcHBlZC4gIE90aGVyd2lzZSBzY2FuIGFs bCB0aHJlYWRzIGZvciB3aGV0aGVyIHRoZXkncmUKCXN0b3BwZWQgYXQgYSBi cmVha3BvaW50IGluc3RlYWQgb2YganVzdCB0aGUgbGFzdCB0aHJlYWQgdGhh dCByYW4uCgkocHJvY2VlZCk6IEFkZCBGSVhNRS4gIERvbid0IHBhc3Mgb24g VEFSR0VUX1NJR05BTF9UUkFQIGZyb20gdGhlCglsYXN0IHRocmVhZCB0aGF0 IHJhbiB0byB0aGUgY3VycmVudCB0aHJlYWQgdG8gcnVuLgoKCSogZ2RiLnRo cmVhZHMvaGFuZC1jYWxsLWluLXRocmVhZHMuZXhwOiBOZXcgZmlsZS4KCSog Z2RiLnRocmVhZHMvaGFuZC1jYWxsLWluLXRocmVhZHMuYzogTmV3IGZpbGUu CgkqIGdkYi50aHJlYWRzL211bHRpLWJwLWluLXRocmVhZHMuZXhwOiBOZXcg ZmlsZS4KCSogZ2RiLnRocmVhZHMvbXVsdGktYnAtaW4tdGhyZWFkcy5jOiBO ZXcgZmlsZS4KCkluZGV4OiBpbmZydW4uYwo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09ClJDUyBmaWxlOiAvY3ZzL3NyYy9zcmMvZ2RiL2luZnJ1bi5jLHYKcmV0 cmlldmluZyByZXZpc2lvbiAxLjM0NApkaWZmIC11IC1wIC1yMS4zNDQgaW5m cnVuLmMKLS0tIGluZnJ1bi5jCTIgRGVjIDIwMDggMDk6NTI6MzEgLTAwMDAJ MS4zNDQKKysrIGluZnJ1bi5jCTIgRGVjIDIwMDggMTA6MzY6MTYgLTAwMDAK QEAgLTEyNDAsNDYgKzEyNDAsMTEzIEBAIGNsZWFyX3Byb2NlZWRfc3RhdHVz ICh2b2lkKQogICAgIH0KIH0KIAotLyogVGhpcyBzaG91bGQgYmUgc3VpdGFi bGUgZm9yIGFueSB0YXJnZXRzIHRoYXQgc3VwcG9ydCB0aHJlYWRzLiAqLwor LyogQ2FsbGJhY2sgZm9yIHByZXBhcmVfdG9fcHJvY2VlZC4KKyAgIFJldHVy biBub24temVybyBpZiB0aHJlYWQgVFAgaXMgbm90IHRoZSBjdXJyZW50IHRo cmVhZCBhbmQgaXMgc3RvcHBlZAorICAgYXQgYSBicmVha3BvaW50LiAgKi8K Kworc3RhdGljIGludAorcHJlcGFyZV90b19wcm9jZWVkX2NhbGxiYWNrIChz dHJ1Y3QgdGhyZWFkX2luZm8gKnRwLCB2b2lkICpkYXRhKQoreworICBzdHJ1 Y3QgcmVnY2FjaGUgKnJlZ2NhY2hlOworCisgIGlmICh0cC0+c3RvcF9zaWdu YWwgIT0gVEFSR0VUX1NJR05BTF9UUkFQKQorICAgIHJldHVybiAwOworCisg IGlmIChwdGlkX2VxdWFsICh0cC0+cHRpZCwgaW5mZXJpb3JfcHRpZCkpCisg ICAgcmV0dXJuIDA7CisKKyAgLyogRGVmZXIgcmVhZGluZyByZWdpc3RlcnMg YXMgbG9uZyBhcyBwb3NzaWJsZS4KKyAgICAgV2UncmUgaXRlcmF0aW5nIG92 ZXIgYWxsIHRocmVhZHMuICAqLworICByZWdjYWNoZSA9IGdldF90aHJlYWRf cmVnY2FjaGUgKHRwLT5wdGlkKTsKKworICBpZiAoYnJlYWtwb2ludF9oZXJl X3AgKHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hlKSkpCisgICAgcmV0dXJu IDE7CisKKyAgcmV0dXJuIDA7Cit9CisKKy8qIENoZWNrIHdoZXRoZXIgYW55 IHRocmVhZHMgb3RoZXIgdGhhbiB0aGUgY3VycmVudCB0aHJlYWQgbmVlZCB0 byBzdGVwIG92ZXIKKyAgIGEgYnJlYWtwb2ludC4KKyAgIElmIGEgc3RlcC1v dmVyIGlzIHJlcXVpcmVkIHJldHVybiBUUlVFIGFuZCBzZXQgdGhlIGN1cnJl bnQgdGhyZWFkCisgICB0byB0aGUgb2xkIHRocmVhZC4gIE90aGVyd2lzZSBy ZXR1cm4gRkFMU0UuCisKKyAgIFRoaXMgc2hvdWxkIGJlIHN1aXRhYmxlIGZv ciBhbnkgdGFyZ2V0cyB0aGF0IHN1cHBvcnQgdGhyZWFkcy4gICovCiAKIHN0 YXRpYyBpbnQKIHByZXBhcmVfdG9fcHJvY2VlZCAoaW50IHN0ZXApCiB7CiAg IHB0aWRfdCB3YWl0X3B0aWQ7CiAgIHN0cnVjdCB0YXJnZXRfd2FpdHN0YXR1 cyB3YWl0X3N0YXR1czsKKyAgaW50IG5lZWRfdG9fc3RlcF9vdGhlcl90aHJl YWQ7CiAKLSAgLyogR2V0IHRoZSBsYXN0IHRhcmdldCBzdGF0dXMgcmV0dXJu ZWQgYnkgdGFyZ2V0X3dhaXQoKS4gICovCi0gIGdldF9sYXN0X3RhcmdldF9z dGF0dXMgKCZ3YWl0X3B0aWQsICZ3YWl0X3N0YXR1cyk7CisgIGlmIChkZWJ1 Z19pbmZydW4pCisgICAgZnByaW50Zl91bmZpbHRlcmVkIChnZGJfc3RkbG9n LAorCQkJImluZnJ1bjogcHJlcGFyZV90b19wcm9jZWVkIChzdGVwPSVkKSwg aW5mZXJpb3JfcHRpZCAlc1xuIiwKKwkJCXN0ZXAsIHRhcmdldF9waWRfdG9f c3RyIChpbmZlcmlvcl9wdGlkKSk7CiAKLSAgLyogTWFrZSBzdXJlIHdlIHdl cmUgc3RvcHBlZCBhdCBhIGJyZWFrcG9pbnQuICAqLwotICBpZiAod2FpdF9z dGF0dXMua2luZCAhPSBUQVJHRVRfV0FJVEtJTkRfU1RPUFBFRAotICAgICAg fHwgd2FpdF9zdGF0dXMudmFsdWUuc2lnICE9IFRBUkdFVF9TSUdOQUxfVFJB UCkKLSAgICB7Ci0gICAgICByZXR1cm4gMDsKLSAgICB9CisgIC8qIFdpdGgg bm9uLXN0b3AgbW9kZSBvbiwgdGhyZWFkcyBhcmUgYWx3YXlzIGhhbmRsZWQg aW5kaXZpZHVhbGx5LiAgKi8KKyAgZ2RiX2Fzc2VydCAoISBub25fc3RvcCk7 CisKKyAgLyogV2Ugd29uJ3QgYmUgcnVubmluZyBhbnkgb3RoZXIgdGhyZWFk cyBvZiBzY2hlZHVsZXIgbG9ja2luZyBpcyBlbmFibGVkLiAgKi8KKyAgaWYg KHNjaGVkdWxlcl9tb2RlID09IHNjaGVkbG9ja19vbgorICAgICAgfHwgKHNj aGVkdWxlcl9tb2RlID09IHNjaGVkbG9ja19zdGVwCisJICAmJiBzdGVwKSkK KyAgICByZXR1cm4gMDsKKworICBuZWVkX3RvX3N0ZXBfb3RoZXJfdGhyZWFk ID0gMDsKKworICAvKiA/Pz8gV2UgY2FsbCBnZXRfbGFzdF90YXJnZXRfc3Rh dHVzIGhlcmUgYW5kIHNlZSBpZiBpdAorICAgICBpcyBkaWZmZXJlbnQgdGhh biBpbmZlcmlvcl9wdGlkIGFuZCBpZiBpdCBzdG9wcGVkIGF0IGEgYnJlYWtw b2ludC4KKyAgICAgSWYgaXQgaXMgaXQgc2F2ZXMgdXMgaXRlcmF0aW5nIG92 ZXIgdGhlIHRocmVhZCBsaXN0LgorICAgICBCdXQgaG93IG9mdGVuIGlzIGl0 IGEgd2luPyAgKi8KKyAgZ2V0X2xhc3RfdGFyZ2V0X3N0YXR1cyAoJndhaXRf cHRpZCwgJndhaXRfc3RhdHVzKTsKIAotICAvKiBTd2l0Y2hlZCBvdmVyIGZy b20gV0FJVF9QSUQuICAqLwogICBpZiAoIXB0aWRfZXF1YWwgKHdhaXRfcHRp ZCwgbWludXNfb25lX3B0aWQpCi0gICAgICAmJiAhcHRpZF9lcXVhbCAoaW5m ZXJpb3JfcHRpZCwgd2FpdF9wdGlkKSkKKyAgICAgICYmICFwdGlkX2VxdWFs ICh3YWl0X3B0aWQsIGluZmVyaW9yX3B0aWQpCisgICAgICAmJiB3YWl0X3N0 YXR1cy5raW5kID09IFRBUkdFVF9XQUlUS0lORF9TVE9QUEVECisgICAgICAm JiB3YWl0X3N0YXR1cy52YWx1ZS5zaWcgPT0gVEFSR0VUX1NJR05BTF9UUkFQ KQogICAgIHsKICAgICAgIHN0cnVjdCByZWdjYWNoZSAqcmVnY2FjaGUgPSBn ZXRfdGhyZWFkX3JlZ2NhY2hlICh3YWl0X3B0aWQpOwogCiAgICAgICBpZiAo YnJlYWtwb2ludF9oZXJlX3AgKHJlZ2NhY2hlX3JlYWRfcGMgKHJlZ2NhY2hl KSkpCiAJewotCSAgLyogSWYgc3RlcHBpbmcsIHJlbWVtYmVyIGN1cnJlbnQg dGhyZWFkIHRvIHN3aXRjaCBiYWNrIHRvLiAgKi8KLQkgIGlmIChzdGVwKQot CSAgICBkZWZlcnJlZF9zdGVwX3B0aWQgPSBpbmZlcmlvcl9wdGlkOwotCi0J ICAvKiBTd2l0Y2ggYmFjayB0byBXQUlUX1BJRCB0aHJlYWQuICAqLwotCSAg c3dpdGNoX3RvX3RocmVhZCAod2FpdF9wdGlkKTsKLQotCSAgLyogV2UgcmV0 dXJuIDEgdG8gaW5kaWNhdGUgdGhhdCB0aGVyZSBpcyBhIGJyZWFrcG9pbnQg aGVyZSwKLQkgICAgIHNvIHdlIG5lZWQgdG8gc3RlcCBvdmVyIGl0IGJlZm9y ZSBjb250aW51aW5nIHRvIGF2b2lkCi0JICAgICBoaXR0aW5nIGl0IHN0cmFp Z2h0IGF3YXkuICovCi0JICByZXR1cm4gMTsKKwkgIG5lZWRfdG9fc3RlcF9v dGhlcl90aHJlYWQgPSAxOwogCX0KICAgICB9CiAKKyAgaWYgKCEgbmVlZF90 b19zdGVwX290aGVyX3RocmVhZCkKKyAgICB7CisgICAgICAvKiBCYWQgbHVj aywgbmVlZCB0byBzZWFyY2ggYWxsIHRocmVhZHMuICAqLworICAgICAgc3Ry dWN0IHRocmVhZF9pbmZvICp0cDsKKworICAgICAgdHAgPSBpdGVyYXRlX292 ZXJfdGhyZWFkcyAocHJlcGFyZV90b19wcm9jZWVkX2NhbGxiYWNrLCBOVUxM KTsKKyAgICAgIGlmICh0cCAhPSBOVUxMKQorCXsKKwkgIG5lZWRfdG9fc3Rl cF9vdGhlcl90aHJlYWQgPSAxOworCSAgd2FpdF9wdGlkID0gdHAtPnB0aWQ7 CisJfQorICAgIH0KKworICBpZiAobmVlZF90b19zdGVwX290aGVyX3RocmVh ZCkKKyAgICB7CisgICAgICBpZiAoZGVidWdfaW5mcnVuKQorCWZwcmludGZf dW5maWx0ZXJlZCAoZ2RiX3N0ZGxvZywKKwkJCSAgICAiaW5mcnVuOiBwcmVw YXJlX3RvX3Byb2NlZWQ6IG5lZWQgdG8gc3RlcCBvdGhlciB0aHJlYWQgZmly c3Q6ICVzXG4iLAorCQkJICAgIHRhcmdldF9waWRfdG9fc3RyICh3YWl0X3B0 aWQpKTsKKworICAgICAgLyogSWYgc3RlcHBpbmcsIHJlbWVtYmVyIGN1cnJl bnQgdGhyZWFkIHRvIHN3aXRjaCBiYWNrIHRvLiAgKi8KKyAgICAgIGlmIChz dGVwKQorCWRlZmVycmVkX3N0ZXBfcHRpZCA9IGluZmVyaW9yX3B0aWQ7CisK KyAgICAgIC8qIFN3aXRjaCBiYWNrIHRvIFdBSVRfUElEIHRocmVhZC4gICov CisgICAgICBzd2l0Y2hfdG9fdGhyZWFkICh3YWl0X3B0aWQpOworCisgICAg ICAvKiBXZSByZXR1cm4gMSB0byBpbmRpY2F0ZSB0aGF0IHRoZXJlIGlzIGEg YnJlYWtwb2ludCBoZXJlLAorCSBzbyB3ZSBuZWVkIHRvIHN0ZXAgb3ZlciBp dCBiZWZvcmUgY29udGludWluZyB0byBhdm9pZAorCSBoaXR0aW5nIGl0IHN0 cmFpZ2h0IGF3YXkuICAqLworICAgICAgcmV0dXJuIDE7CisgICAgfQorCiAg IHJldHVybiAwOwogfQogCkBAIC0xMzU3LDcgKzE0MjQsMTYgQEAgcHJvY2Vl ZCAoQ09SRV9BRERSIGFkZHIsIGVudW0gdGFyZ2V0X3NpZwogCSBwcmVwYXJl X3RvX3Byb2NlZWQgY2hlY2tzIHRoZSBjdXJyZW50IHRocmVhZCBhZ2FpbnN0 IHRoZQogCSB0aHJlYWQgdGhhdCByZXBvcnRlZCB0aGUgbW9zdCByZWNlbnQg ZXZlbnQuICBJZiBhIHN0ZXAtb3ZlcgogCSBpcyByZXF1aXJlZCBpdCByZXR1 cm5zIFRSVUUgYW5kIHNldHMgdGhlIGN1cnJlbnQgdGhyZWFkIHRvCi0JIHRo ZSBvbGQgdGhyZWFkLiAqLworCSB0aGUgb2xkIHRocmVhZC4KKworCSBGSVhN RTogVGhpcyBkb2Vzbid0IGhhbmRsZSB0aGUgY2FzZSBvZiByZXN1bWluZyB3 aXRoIG11bHRpcGxlIHRocmVhZHMKKwkgYWxsIHN0b3BwZWQgYXQgYnJlYWtw b2ludHMuICBXaGVuIHNjaGVkdWxlci1sb2NraW5nIGlzIG9mZiwgd2UgbmVl ZCB0bworCSBzaW5nbGVzdGVwIGFsbCB0aHJlYWRzIHRoYXQgYXJlIGN1cnJl bnRseSBzdG9wcGVkIGF0IGEgYnJlYWtwb2ludCwKKwkgbm90IGp1c3QgdGhl IGxhc3Qgb25lLiAgVGhpcyBzaXR1YXRpb24gY2FuIGhhcHBlbiBpZiB0aGUg dXNlciBydW5zCisJIG11bHRpcGxlIHRocmVhZHMgaW4gdHVybiB3aXRoIHNj aGVkdWxlci1sb2NraW5nIG9uLCBhbmQgdGhlbiB0dXJucworCSBzY2hlZHVs ZXItbG9ja2luZyBvZmYgYW5kIHJlc3VtZXMgdGhlIHByb2dyYW0uCisJIFNl ZSB0ZXN0Y2FzZSBnZGIudGhyZWFkcy9tdWx0aS1icC1pbi10aHJlYWRzLmV4 cC4gICovCisKICAgICAgIGlmIChwcmVwYXJlX3RvX3Byb2NlZWQgKHN0ZXAp KQogCW9uZXByb2MgPSAxOwogICAgIH0KQEAgLTEzODgsNyArMTQ2NCwxMCBA QCBwcm9jZWVkIChDT1JFX0FERFIgYWRkciwgZW51bSB0YXJnZXRfc2lnCiAg ICAgICAvKiBQYXNzIHRoZSBsYXN0IHN0b3Agc2lnbmFsIHRvIHRoZSB0aHJl YWQgd2UncmUgcmVzdW1pbmcsCiAJIGlycmVzcGVjdGl2ZSBvZiB3aGV0aGVy IHRoZSBjdXJyZW50IHRocmVhZCBpcyB0aGUgdGhyZWFkIHRoYXQKIAkgZ290 IHRoZSBsYXN0IGV2ZW50IG9yIG5vdC4gIFRoaXMgd2FzIGhpc3RvcmljYWxs eSBHREIncwotCSBiZWhhdmlvdXIgYmVmb3JlIGtlZXBpbmcgYSBzdG9wX3Np Z25hbCBwZXIgdGhyZWFkLiAgKi8KKwkgYmVoYXZpb3VyIGJlZm9yZSBrZWVw aW5nIGEgc3RvcF9zaWduYWwgcGVyIHRocmVhZC4KKwkgSG93ZXZlciwgd2Ug ZG9uJ3QgcGFzcyBTSUdUUkFQIC0gdGhlIGJyZWFrcG9pbnQgc2lnbmFsLgor CSA/Pz8gVGhlcmUgYXJlIG90aGVyIHNpZ25hbHMgbGlrZSBTSUdTRUdWIHdo aWNoIHdlIHNob3VsZG4ndAorCSBwYXNzIGVpdGhlci4gICovCiAKICAgICAg IHN0cnVjdCB0aHJlYWRfaW5mbyAqbGFzdF90aHJlYWQ7CiAgICAgICBwdGlk X3QgbGFzdF9wdGlkOwpAQCAtMTQwMCw3ICsxNDc5LDggQEAgcHJvY2VlZCAo Q09SRV9BRERSIGFkZHIsIGVudW0gdGFyZ2V0X3NpZwogCSAgJiYgIXB0aWRf ZXF1YWwgKGxhc3RfcHRpZCwgbWludXNfb25lX3B0aWQpKQogCXsKIAkgIGxh c3RfdGhyZWFkID0gZmluZF90aHJlYWRfcGlkIChsYXN0X3B0aWQpOwotCSAg aWYgKGxhc3RfdGhyZWFkKQorCSAgaWYgKGxhc3RfdGhyZWFkCisJICAgICAg JiYgbGFzdF90aHJlYWQtPnN0b3Bfc2lnbmFsICE9IFRBUkdFVF9TSUdOQUxf VFJBUCkKIAkgICAgewogCSAgICAgIHRwLT5zdG9wX3NpZ25hbCA9IGxhc3Rf dGhyZWFkLT5zdG9wX3NpZ25hbDsKIAkgICAgICBsYXN0X3RocmVhZC0+c3Rv cF9zaWduYWwgPSBUQVJHRVRfU0lHTkFMXzA7CkluZGV4OiB0ZXN0c3VpdGUv Z2RiLnRocmVhZHMvaGFuZC1jYWxsLWluLXRocmVhZHMuYwo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09ClJDUyBmaWxlOiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMv aGFuZC1jYWxsLWluLXRocmVhZHMuYwpkaWZmIC1OIHRlc3RzdWl0ZS9nZGIu dGhyZWFkcy9oYW5kLWNhbGwtaW4tdGhyZWFkcy5jCi0tLSAvZGV2L251bGwJ MSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi50 aHJlYWRzL2hhbmQtY2FsbC1pbi10aHJlYWRzLmMJMiBEZWMgMjAwOCAxMDoz NjoyMSAtMDAwMApAQCAtMCwwICsxLDEyMSBAQAorLyogVGVzdCBjYXNlIGZv ciBoYW5kIGZ1bmN0aW9uIGNhbGxzIGluIG11bHRpLXRocmVhZGVkIHByb2dy YW0uCisKKyAgIENvcHlyaWdodCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbiwgSW5jLgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiBHREIuCisK KyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICBpdCB1bmRlciB0aGUg dGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAgIChhdCB5 b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJv Z3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg YmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt b3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBh bG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4gICovCisKKyNpbmNsdWRlIDxwdGhy ZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIu aD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisK Ky8qIE5PVEU6IEFsc28gZGVmaW5lZCBpbiBoYW5kLWNhbGwtaW4tdGhyZWFk cy5leHAuICAqLworI2RlZmluZSBOUl9USFJFQURTIDQKKworaW50IHRocmVh ZF9jb3VudDsKKworcHRocmVhZF9tdXRleF90IHRocmVhZF9jb3VudF9tdXRl eDsKKworcHRocmVhZF9jb25kX3QgdGhyZWFkX2NvdW50X2NvbmR2YXI7CisK K3ZvaWQKK2luY3JfdGhyZWFkX2NvdW50ICh2b2lkKQoreworICBwdGhyZWFk X211dGV4X2xvY2sgKCZ0aHJlYWRfY291bnRfbXV0ZXgpOworICArK3RocmVh ZF9jb3VudDsKKyAgaWYgKHRocmVhZF9jb3VudCA9PSBOUl9USFJFQURTKQor ICAgIHB0aHJlYWRfY29uZF9zaWduYWwgKCZ0aHJlYWRfY291bnRfY29uZHZh cik7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmdGhyZWFkX2NvdW50X211 dGV4KTsKK30KKwordm9pZAorY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAq Y29uZCwgcHRocmVhZF9tdXRleF90ICptdXQpCit7CisgIHB0aHJlYWRfbXV0 ZXhfbG9jayAobXV0KTsKKyAgcHRocmVhZF9jb25kX3dhaXQgKGNvbmQsIG11 dCk7CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChtdXQpOworfQorCit2b2lk Citub3JldHVybiAodm9pZCkKK3sKKyAgcHRocmVhZF9tdXRleF90IG11dDsK KyAgcHRocmVhZF9jb25kX3QgY29uZDsKKworICBwdGhyZWFkX211dGV4X2lu aXQgKCZtdXQsIE5VTEwpOworICBwdGhyZWFkX2NvbmRfaW5pdCAoJmNvbmQs IE5VTEwpOworCisgIC8qIFdhaXQgZm9yIGEgY29uZGl0aW9uIHRoYXQgd2ls bCBuZXZlciBiZSBzaWduYWxlZCwgc28gd2UgZWZmZWN0aXZlbHkKKyAgICAg YmxvY2sgdGhlIHRocmVhZCBoZXJlLiAgKi8KKyAgY29uZF93YWl0ICgmY29u ZCwgJm11dCk7Cit9CisKK3ZvaWQgKgorZm9yZXZlcl9wdGhyZWFkICh2b2lk ICp1bnVzZWQpCit7CisgIGluY3JfdGhyZWFkX2NvdW50ICgpOworICBub3Jl dHVybiAoKTsKK30KKwordm9pZAoraGFuZF9jYWxsICh2b2lkKQoreworfQor CisvKiBXYWl0IHVudGlsIGFsbCB0aHJlYWRzIGFyZSBydW5uaW5nLiAgKi8K Kwordm9pZAord2FpdF9hbGxfdGhyZWFkc19ydW5uaW5nICh2b2lkKQorewor ICBwdGhyZWFkX211dGV4X2xvY2sgKCZ0aHJlYWRfY291bnRfbXV0ZXgpOwor ICBwdGhyZWFkX2NvbmRfd2FpdCAoJnRocmVhZF9jb3VudF9jb25kdmFyLCAm dGhyZWFkX2NvdW50X211dGV4KTsKKyAgaWYgKHRocmVhZF9jb3VudCA9PSBO Ul9USFJFQURTKQorICAgIHsKKyAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2Nr ICgmdGhyZWFkX2NvdW50X211dGV4KTsKKyAgICAgIHJldHVybjsKKyAgICB9 CisgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrICgmdGhyZWFkX2NvdW50X211dGV4 KTsKKyAgcHJpbnRmICgiZmFpbGVkIHdhaXRpbmcgZm9yIGFsbCB0aHJlYWRz IHRvIHN0YXJ0XG4iKTsKKyAgYWJvcnQgKCk7Cit9CisKKy8qIENhbGxlZCB3 aGVuIGFsbCB0aHJlYWRzIGFyZSBydW5uaW5nLgorICAgRWFzeSBwbGFjZSBm b3IgYSBicmVha3BvaW50LiAgKi8KKwordm9pZAorYWxsX3RocmVhZHNfcnVu bmluZyAodm9pZCkKK3sKK30KKworaW50CittYWluICh2b2lkKQoreworICBw dGhyZWFkX3QgZm9yZXZlcltOUl9USFJFQURTXTsKKyAgaW50IGk7CisKKyAg cHRocmVhZF9tdXRleF9pbml0ICgmdGhyZWFkX2NvdW50X211dGV4LCBOVUxM KTsKKyAgcHRocmVhZF9jb25kX2luaXQgKCZ0aHJlYWRfY291bnRfY29uZHZh ciwgTlVMTCk7CisKKyAgZm9yIChpID0gMDsgaSA8IE5SX1RIUkVBRFM7ICsr aSkKKyAgICBwdGhyZWFkX2NyZWF0ZSAoJmZvcmV2ZXJbaV0sIE5VTEwsIGZv cmV2ZXJfcHRocmVhZCwgTlVMTCk7CisKKyAgd2FpdF9hbGxfdGhyZWFkc19y dW5uaW5nICgpOworICBhbGxfdGhyZWFkc19ydW5uaW5nICgpOworCisgIHJl dHVybiAwOworfQorCkluZGV4OiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaGFu ZC1jYWxsLWluLXRocmVhZHMuZXhwCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K UkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIudGhyZWFkcy9oYW5kLWNhbGwtaW4t dGhyZWFkcy5leHAKZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvaGFu ZC1jYWxsLWluLXRocmVhZHMuZXhwCi0tLSAvZGV2L251bGwJMSBKYW4gMTk3 MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dkYi50aHJlYWRzL2hh bmQtY2FsbC1pbi10aHJlYWRzLmV4cAkyIERlYyAyMDA4IDEwOjM2OjIxIC0w MDAwCkBAIC0wLDAgKzEsMTUzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwg MjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKwor IyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp c3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVy bXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo ZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBv cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0g aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz ZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh aWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRo IHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5v cmcvbGljZW5zZXMvPi4KKworIyBUZXN0IG1ha2luZyBoYW5kIGZ1bmN0aW9u IGNhbGxzIGluIG11bHRpcGxlIHRocmVhZHMuCisKKyMgTk9URTogQWxzbyBk ZWZpbmVkIGluIGhhbmQtY2FsbC1pbi10aHJlYWRzLmMuCitzZXQgTlJfVEhS RUFEUyA0CisKK2lmICR0cmFjZWxldmVsIHRoZW4geworCXN0cmFjZSAkdHJh Y2VsZXZlbAorfQorCitzZXQgdGVzdGZpbGUgImhhbmQtY2FsbC1pbi10aHJl YWRzIgorc2V0IHNyY2ZpbGUgJHt0ZXN0ZmlsZX0uYworc2V0IGJpbmZpbGUg JHtvYmpkaXJ9LyR7c3ViZGlyfS8ke3Rlc3RmaWxlfQorCitpZiB7W2dkYl9j b21waWxlX3B0aHJlYWRzICIke3NyY2Rpcn0vJHtzdWJkaXJ9LyR7c3JjZmls ZX0iICIke2JpbmZpbGV9IiBleGVjdXRhYmxlIFtsaXN0IGRlYnVnICJpbmNk aXI9JHtvYmpkaXJ9Il1dICE9ICIiIH0geworICAgIHJldHVybiAtMQorfQor CisjIFNvbWUgdGFyZ2V0cyBjYW4ndCBkbyBmdW5jdGlvbiBjYWxscywgc28g ZG9uJ3QgZXZlbiBib3RoZXIgd2l0aCB0aGlzCisjIHRlc3QuCitpZiBbdGFy Z2V0X2luZm8gZXhpc3RzIGdkYixjYW5ub3RfY2FsbF9mdW5jdGlvbnNdIHsK KyAgICBzZXR1cF94ZmFpbCAiKi0qLSoiIDI0MTYKKyAgICBmYWlsICJUaGlz IHRhcmdldCBjYW4gbm90IGNhbGwgZnVuY3Rpb25zIgorICAgIGNvbnRpbnVl Cit9CisKK3Byb2MgZ2V0X2R1bW15X2ZyYW1lX251bWJlciB7IH0geworICBn bG9iYWwgZ2RiX3Byb21wdAorCisgIHNlbmRfZ2RiICJidFxuIgorICBnZGJf ZXhwZWN0IHsKKyAgICAtcmUgIiMoXFswLTlcXSopICo8ZnVuY3Rpb24gY2Fs bGVkIGZyb20gZ2RiPi4qJGdkYl9wcm9tcHQgJCIKKyAgICAgIHsKKwlyZXR1 cm4gJGV4cGVjdF9vdXQoMSxzdHJpbmcpCisgICAgICB9CisgICAgLXJlICIk Z2RiX3Byb21wdCAkIgorICAgICAgeworCXJldHVybiAiIgorICAgICAgfQor ICAgIHRpbWVvdXQKKyAgICAgIHsKKwlyZXR1cm4gIiIKKyAgICAgIH0KKyAg fQorICByZXR1cm4gIiIKK30KKworZ2RiX2V4aXQKK2dkYl9zdGFydAorZ2Ri X3JlaW5pdGlhbGl6ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9hZCAk e2JpbmZpbGV9CisKK2lmIHsgIVtydW50b19tYWluXSB9IHsKKyAgICBmYWls ICJDYW4ndCBydW4gdG8gbWFpbiIKKyAgICByZXR1cm4gMAorfQorCitnZGJf dGVzdCAiYnJlYWsgYWxsX3RocmVhZHNfcnVubmluZyIgXAorICAgICAgICAg IkJyZWFrcG9pbnQgMiBhdCAuKjogZmlsZSAuKiR7c3JjZmlsZX0sIGxpbmUg LioiIFwKKyAgICAgICAgICJicmVha3BvaW50IG9uIGFsbF90aHJlYWRzX3J1 bm5pbmciCisKK2dkYl90ZXN0ICJicmVhayBoYW5kX2NhbGwiIFwKKyAgICAg ICAgICJCcmVha3BvaW50IDMgYXQgLio6IGZpbGUgLioke3NyY2ZpbGV9LCBs aW5lIC4qIiBcCisgICAgICAgICAiYnJlYWtwb2ludCBvbiBoYW5kX2NhbGwi CisKKyMgUnVuIHRoZSBwcm9ncmFtIGFuZCBtYWtlIHN1cmUgR0RCIHJlcG9y dHMgdGhhdCB3ZSBzdG9wcGVkIGFmdGVyCisjIGhpdHRpbmcgYnJlYWtwb2lu dCAyIGluIGFsbF90aHJlYWRzX3J1bm5pbmcoKS4KKworZ2RiX3Rlc3QgImNv bnRpbnVlIiBcCisgICAgICAgICAiLipCcmVha3BvaW50IDIsIGFsbF90aHJl YWRzX3J1bm5pbmcgKCkuKiIgXAorICAgICAgICAgInJ1biB0byBhbGxfdGhy ZWFkc19ydW5uaW5nIgorCisjIEJlZm9yZSB3ZSBzdGFydCBtYWtpbmcgaGFu ZCBmdW5jdGlvbiBjYWxscywgdHVybiBvbiBzY2hlZHVsZXIgbG9ja2luZy4K KworZ2RiX3Rlc3QgInNldCBzY2hlZHVsZXItbG9ja2luZyBvbiIgIiIgImVu YWJsZSBzY2hlZHVsZXIgbG9ja2luZyIKK2dkYl90ZXN0ICJzaG93IHNjaGVk dWxlci1sb2NraW5nIiAiLiogbG9ja2luZyBzY2hlZHVsZXIgLiogaXMgXCJv blwiLiIgInNob3cgc2NoZWR1bGVyIGxvY2tpbmcgb24iCisKKyMgTm93IGhh bmQtY2FsbCBhIGZ1bmN0aW9uIGluIGVhY2ggdGhyZWFkLCBoYXZpbmcgdGhl IGZ1bmN0aW9uCisjIHN0b3Agd2l0aG91dCByZXR1cm5pbmcuCisKKyMgQWRk IG9uZSBmb3IgdGhlIG1haW4gdGhyZWFkLgorc2V0IHRvdGFsX25yX3RocmVh ZHMgW2V4cHIgJE5SX1RIUkVBRFMgKyAxXQorCisjIFRocmVhZCBudW1iZXJp bmcgaW4gZ2RiIGlzIG9yaWdpbi0xLCBzbyBiZWdpbiBudW1iZXJpbmcgYXQg MS4KK2ZvciB7IHNldCBpIDEgfSB7ICRpIDw9ICR0b3RhbF9ucl90aHJlYWRz IH0geyBpbmNyIGkgfSB7CisgICAgc2V0IHRocmVhZF9uciAkaQorICAgIGdk Yl90ZXN0ICJ0aHJlYWQgJHRocmVhZF9uciIgIiIgInByZXBhcmUgdG8gbWFr ZSBoYW5kIGNhbGwsIHRocmVhZCAkdGhyZWFkX25yIgorICAgIGdkYl90ZXN0 ICJjYWxsIGhhbmRfY2FsbCgpIiAiQnJlYWtwb2ludCAzLCAuKiIgImhhbmQg Y2FsbCwgdGhyZWFkICR0aHJlYWRfbnIiCit9CisKKyMgTm93IGhhdmUgZWFj aCBoYW5kLWNhbGxlZCBmdW5jdGlvbiByZXR1cm4uCisKKyMgVHVybiBjb25m aXJtYXRpb24gb2ZmIGZvciB0aGUgInJldHVybiIgY29tbWFuZC4KK2dkYl90 ZXN0ICJzZXQgY29uZmlybSBvZmYiICIiCisKK2NsZWFyX3hmYWlsICIqLSot KiIKKworZm9yIHsgc2V0IGkgMSB9IHsgJGkgPD0gJHRvdGFsX25yX3RocmVh ZHMgfSB7IGluY3IgaSB9IHsKKyAgICBzZXQgdGhyZWFkX25yICRpCisgICAg Z2RiX3Rlc3QgInRocmVhZCAkdGhyZWFkX25yIiAiIiAicHJlcGFyZSB0byBk aXNjYXJkIGhhbmQgY2FsbCwgdGhyZWFkICR0aHJlYWRfbnIiCisgICAgc2V0 IGZyYW1lX251bWJlciBbZ2V0X2R1bW15X2ZyYW1lX251bWJlcl0KKyAgICBp ZiB7ICIkZnJhbWVfbnVtYmVyIiA9PSAiIiB9IHsKKwlmYWlsICJkdW1teSBz dGFjayBmcmFtZSBudW1iZXIsIHRocmVhZCAkdGhyZWFkX25yIgorCXNldHVw X3hmYWlsICIqLSotKiIKKwkjIE5lZWQgc29tZXRoaW5nLgorCXNldCBmcmFt ZV9udW1iZXIgMAorICAgIH0gZWxzZSB7CisJcGFzcyAiZHVtbXkgc3RhY2sg ZnJhbWUgbnVtYmVyLCB0aHJlYWQgJHRocmVhZF9uciIKKyAgICB9CisgICAg IyBQb3AgdGhlIGR1bW15IGZyYW1lLgorICAgIGdkYl90ZXN0ICJmcmFtZSAk ZnJhbWVfbnVtYmVyIiAiIiAic2V0dGluZyBmcmFtZSwgdGhyZWFkICR0aHJl YWRfbnIiCisgICAgZ2RiX3Rlc3QgInJldHVybiIgIiIgImRpc2NhcmQgaGFu ZCBjYWxsLCB0aHJlYWQgJHRocmVhZF9uciIKKyAgICAjIEluIGNhc2UgZ2V0 dGluZyB0aGUgZHVtbXkgZnJhbWUgbnVtYmVyIGZhaWxlZCwgcmUtZW5hYmxl IGZvciBuZXh0IGl0ZXIuCisgICAgY2xlYXJfeGZhaWwgIiotKi0qIgorfQor CisjIE1ha2Ugc3VyZSBhbGwgZHVtbXkgZnJhbWVzIGdvdCBwb3BwZWQuCisK K2dkYl90ZXN0X211bHRpcGxlICJtYWludCBwcmludCBkdW1teS1mcmFtZXMi ICJhbGwgZHVtbWllcyBwb3BwZWQiIHsKKyAgICAtcmUgIi4qc3RhY2s9Liok Z2RiX3Byb21wdCAkIiB7CisJZmFpbCAiYWxsIGR1bW1pZXMgcG9wcGVkIgor ICAgIH0KKyAgICAtcmUgIi4qJGdkYl9wcm9tcHQgJCIgeworCXBhc3MgImFs bCBkdW1taWVzIHBvcHBlZCIKKyAgICB9Cit9CisKKyMgQmVmb3JlIHdlIHJl c3VtZSB0aGUgZnVsbCBwcm9ncmFtLCB0dXJuIG9mIHNjaGVkdWxlciBsb2Nr aW5nLgorZ2RiX3Rlc3QgInNldCBzY2hlZHVsZXItbG9ja2luZyBvZmYiICIi ICJkaXNhYmxlIHNjaGVkdWxlciBsb2NraW5nIgorZ2RiX3Rlc3QgInNob3cg c2NoZWR1bGVyLWxvY2tpbmciICIuKiBsb2NraW5nIHNjaGVkdWxlciAuKiBp cyBcIm9mZlwiLiIgInNob3cgc2NoZWR1bGVyIGxvY2tpbmcgb2ZmIgorCisj Z2RiX3Rlc3QgInNldCBkZWJ1ZyBpbmZydW4gMSIgIiIgImVuYWJsZSBkZWJ1 ZyBpbmZydW4iCisKKyMgQ29udGludWUgb25lIGxhc3QgdGltZSwgdGhlIHBy b2dyYW0gc2hvdWxkIGV4aXQgbm9ybWFsbHkuCisKK2dkYl90ZXN0ICJjb250 aW51ZSIgIlByb2dyYW0gZXhpdGVkIG5vcm1hbGx5LiIgXAorICAgICJjb250 aW51ZSB0byBwcm9ncmFtIGV4aXQiCisKK3JldHVybiAwCkluZGV4OiB0ZXN0 c3VpdGUvZ2RiLnRocmVhZHMvbXVsdGktYnAtaW4tdGhyZWFkcy5jCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IHRlc3RzdWl0ZS9nZGIudGhy ZWFkcy9tdWx0aS1icC1pbi10aHJlYWRzLmMKZGlmZiAtTiB0ZXN0c3VpdGUv Z2RiLnRocmVhZHMvbXVsdGktYnAtaW4tdGhyZWFkcy5jCi0tLSAvZGV2L251 bGwJMSBKYW4gMTk3MCAwMDowMDowMCAtMDAwMAorKysgdGVzdHN1aXRlL2dk Yi50aHJlYWRzL211bHRpLWJwLWluLXRocmVhZHMuYwkyIERlYyAyMDA4IDEw OjM2OjIxIC0wMDAwCkBAIC0wLDAgKzEsMTE2IEBACisvKiBUZXN0IGNhc2Ug Zm9yIGhhbmQgZnVuY3Rpb24gY2FsbHMgaW4gbXVsdGktdGhyZWFkZWQgcHJv Z3JhbS4KKworICAgQ29weXJpZ2h0IDIwMDggRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdEQi4K KworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g cmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u OyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBw cm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls bCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF LiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y IG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk IGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAg IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LiAgKi8KKworI2luY2x1ZGUgPHB0 aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxp Yi5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4K KworLyogTk9URTogQWxzbyBkZWZpbmVkIGluIG11bHRpLWJwLWluLXRocmVh ZHMuZXhwLiAgKi8KKyNkZWZpbmUgTlJfVEhSRUFEUyA0CisKK2ludCB0aHJl YWRfY291bnQ7CisKK3B0aHJlYWRfbXV0ZXhfdCB0aHJlYWRfY291bnRfbXV0 ZXg7CisKK3B0aHJlYWRfY29uZF90IHRocmVhZF9jb3VudF9jb25kdmFyOwor CisvKiBTZXQgYnkgbXVsdGktYnAtaW4tdGhyZWFkcy5leHAgd2hlbiByZWFk eSB0byBhZHZhbmNlIGVhY2ggdGhyZWFkCisgICB0byB0aGVpciBicmVha3Bv aW50LiAgKi8KK2ludCBhZHZhbmNlX3RocmVhZHMgPSAwOworCit2b2lkCitp bmNyX3RocmVhZF9jb3VudCAodm9pZCkKK3sKKyAgcHRocmVhZF9tdXRleF9s b2NrICgmdGhyZWFkX2NvdW50X211dGV4KTsKKyAgKyt0aHJlYWRfY291bnQ7 CisgIGlmICh0aHJlYWRfY291bnQgPT0gTlJfVEhSRUFEUykKKyAgICBwdGhy ZWFkX2NvbmRfc2lnbmFsICgmdGhyZWFkX2NvdW50X2NvbmR2YXIpOworICBw dGhyZWFkX211dGV4X3VubG9jayAoJnRocmVhZF9jb3VudF9tdXRleCk7Cit9 CisKKy8qIEVhc3kgcGxhY2UgdG8gc2V0IGEgYnJlYWtwb2ludC4gICovCisK K3ZvaWQKK3RocmVhZF9icmVha3BvaW50ICh2b2lkKQoreworfQorCit2b2lk ICoKK3RocmVhZF9lbnRyeSAodm9pZCAqdW51c2VkKQoreworICBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgdHMgPSB7IDAsIDEwMDAwMDAwIH07IC8qIDAuMDEg c2VjICovCisKKyAgaW5jcl90aHJlYWRfY291bnQgKCk7CisKKyAgd2hpbGUg KCEgYWR2YW5jZV90aHJlYWRzKQorICAgIG5hbm9zbGVlcCAoJnRzLCBOVUxM KTsKKworICB0aHJlYWRfYnJlYWtwb2ludCAoKTsKKworICByZXR1cm4gTlVM TDsKK30KKworLyogV2FpdCB1bnRpbCBhbGwgdGhyZWFkcyBhcmUgcnVubmlu Zy4gICovCisKK3ZvaWQKK3dhaXRfYWxsX3RocmVhZHNfcnVubmluZyAodm9p ZCkKK3sKKyAgcHRocmVhZF9tdXRleF9sb2NrICgmdGhyZWFkX2NvdW50X211 dGV4KTsKKyAgcHRocmVhZF9jb25kX3dhaXQgKCZ0aHJlYWRfY291bnRfY29u ZHZhciwgJnRocmVhZF9jb3VudF9tdXRleCk7CisgIGlmICh0aHJlYWRfY291 bnQgPT0gTlJfVEhSRUFEUykKKyAgICB7CisgICAgICBwdGhyZWFkX211dGV4 X3VubG9jayAoJnRocmVhZF9jb3VudF9tdXRleCk7CisgICAgICByZXR1cm47 CisgICAgfQorICBwdGhyZWFkX211dGV4X3VubG9jayAoJnRocmVhZF9jb3Vu dF9tdXRleCk7CisgIHByaW50ZiAoImZhaWxlZCB3YWl0aW5nIGZvciBhbGwg dGhyZWFkcyB0byBzdGFydFxuIik7CisgIGFib3J0ICgpOworfQorCisvKiBD YWxsZWQgd2hlbiBhbGwgdGhyZWFkcyBhcmUgcnVubmluZy4KKyAgIEVhc3kg cGxhY2UgZm9yIGEgYnJlYWtwb2ludC4gICovCisKK3ZvaWQKK2FsbF90aHJl YWRzX3J1bm5pbmcgKHZvaWQpCit7Cit9CisKK2ludAorbWFpbiAodm9pZCkK K3sKKyAgcHRocmVhZF90IGZvcmV2ZXJbTlJfVEhSRUFEU107CisgIGludCBp OworCisgIHB0aHJlYWRfbXV0ZXhfaW5pdCAoJnRocmVhZF9jb3VudF9tdXRl eCwgTlVMTCk7CisgIHB0aHJlYWRfY29uZF9pbml0ICgmdGhyZWFkX2NvdW50 X2NvbmR2YXIsIE5VTEwpOworCisgIGZvciAoaSA9IDA7IGkgPCBOUl9USFJF QURTOyArK2kpCisgICAgcHRocmVhZF9jcmVhdGUgKCZmb3JldmVyW2ldLCBO VUxMLCB0aHJlYWRfZW50cnksIE5VTEwpOworCisgIHdhaXRfYWxsX3RocmVh ZHNfcnVubmluZyAoKTsKKyAgYWxsX3RocmVhZHNfcnVubmluZyAoKTsKKwor ICBmb3IgKGkgPSAwOyBpIDwgTlJfVEhSRUFEUzsgKytpKQorICAgIHB0aHJl YWRfam9pbiAoZm9yZXZlcltpXSwgTlVMTCk7CisKKyAgcmV0dXJuIDA7Cit9 CisKSW5kZXg6IHRlc3RzdWl0ZS9nZGIudGhyZWFkcy9tdWx0aS1icC1pbi10 aHJlYWRzLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiB0 ZXN0c3VpdGUvZ2RiLnRocmVhZHMvbXVsdGktYnAtaW4tdGhyZWFkcy5leHAK ZGlmZiAtTiB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvbXVsdGktYnAtaW4tdGhy ZWFkcy5leHAKLS0tIC9kZXYvbnVsbAkxIEphbiAxOTcwIDAwOjAwOjAwIC0w MDAwCisrKyB0ZXN0c3VpdGUvZ2RiLnRocmVhZHMvbXVsdGktYnAtaW4tdGhy ZWFkcy5leHAJMiBEZWMgMjAwOCAxMDozNjoyMSAtMDAwMApAQCAtMCwwICsx LDkzIEBACisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNywgMjAwOCBGcmVl IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0g aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9m IHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4K KworIyBUZXN0IHJlc3VtaW5nIGFsbCB0aHJlYWRzIGFmdGVyIG11bHRpcGxl IHRocmVhZHMgaGF2ZSBlYWNoIGhpdCBhIGJyZWFrcG9pbnQuCisKKyMgTk9U RTogQWxzbyBkZWZpbmVkIGluIG11bHRpLWJwLWluLXRocmVhZHMuYy4KK3Nl dCBOUl9USFJFQURTIDQKKworaWYgJHRyYWNlbGV2ZWwgdGhlbiB7CisJc3Ry YWNlICR0cmFjZWxldmVsCit9CisKK3NldCB0ZXN0ZmlsZSAibXVsdGktYnAt aW4tdGhyZWFkcyIKK3NldCBzcmNmaWxlICR7dGVzdGZpbGV9LmMKK3NldCBi aW5maWxlICR7b2JqZGlyfS8ke3N1YmRpcn0vJHt0ZXN0ZmlsZX0KKworaWYg e1tnZGJfY29tcGlsZV9wdGhyZWFkcyAiJHtzcmNkaXJ9LyR7c3ViZGlyfS8k e3NyY2ZpbGV9IiAiJHtiaW5maWxlfSIgZXhlY3V0YWJsZSBbbGlzdCBkZWJ1 ZyAiaW5jZGlyPSR7b2JqZGlyfSJdXSAhPSAiIiB9IHsKKyAgICByZXR1cm4g LTEKK30KKworZ2RiX2V4aXQKK2dkYl9zdGFydAorZ2RiX3JlaW5pdGlhbGl6 ZV9kaXIgJHNyY2Rpci8kc3ViZGlyCitnZGJfbG9hZCAke2JpbmZpbGV9CisK K2lmIHsgIVtydW50b19tYWluXSB9IHsKKyAgICBmYWlsICJDYW4ndCBydW4g dG8gbWFpbiIKKyAgICByZXR1cm4gMAorfQorCitnZGJfdGVzdCAiYnJlYWsg YWxsX3RocmVhZHNfcnVubmluZyIgXAorICAgICAgICAgIkJyZWFrcG9pbnQg MiBhdCAuKjogZmlsZSAuKiR7c3JjZmlsZX0sIGxpbmUgLioiIFwKKyAgICAg ICAgICJicmVha3BvaW50IG9uIGFsbF90aHJlYWRzX3J1bm5pbmciCisKK2dk Yl90ZXN0ICJicmVhayB0aHJlYWRfYnJlYWtwb2ludCIgXAorICAgICAgICAg IkJyZWFrcG9pbnQgMyBhdCAuKjogZmlsZSAuKiR7c3JjZmlsZX0sIGxpbmUg LioiIFwKKyAgICAgICAgICJicmVha3BvaW50IG9uIHRocmVhZF9icmVha3Bv aW50IgorCisjIFJ1biB0aGUgcHJvZ3JhbSBhbmQgbWFrZSBzdXJlIEdEQiBy ZXBvcnRzIHRoYXQgd2Ugc3RvcHBlZCBhZnRlcgorIyBoaXR0aW5nIGJyZWFr cG9pbnQgMiBpbiBhbGxfdGhyZWFkc19ydW5uaW5nKCkuCisKK2dkYl90ZXN0 ICJjb250aW51ZSIgXAorICAgICAgICAgIi4qQnJlYWtwb2ludCAyLCBhbGxf dGhyZWFkc19ydW5uaW5nICgpLioiIFwKKyAgICAgICAgICJydW4gdG8gYWxs X3RocmVhZHNfcnVubmluZyIKKworIyBOb3cgcnVuIGVhY2ggdGhyZWFkLCBv bmUgYXQgYSB0aW1lLCB3aXRoIHNjaGVkdWxlci1sb2NraW5nIG9uLAorIyBl YWNoIGhpdHRpbmcgYSBicmVha3BvaW50CisKK2dkYl90ZXN0ICJzZXQgc2No ZWR1bGVyLWxvY2tpbmcgb24iICIiICJlbmFibGUgc2NoZWR1bGVyIGxvY2tp bmciCitnZGJfdGVzdCAic2hvdyBzY2hlZHVsZXItbG9ja2luZyIgIi4qIGxv Y2tpbmcgc2NoZWR1bGVyIC4qIGlzIFwib25cIi4iICJzaG93IHNjaGVkdWxl ciBsb2NraW5nIG9uIgorCitnZGJfdGVzdCAic2V0IGFkdmFuY2VfdGhyZWFk cyA9IDEiICIiCisKK3NldCB0b3RhbF9ucl90aHJlYWRzIFtleHByICROUl9U SFJFQURTICsgMV0KKworZm9yIHsgc2V0IGkgMCB9IHsgJGkgPCAkTlJfVEhS RUFEUyB9IHsgaW5jciBpIH0geworICAgICMgVGhlIG1haW4gdGhyZWFkIGlz IHRocmVhZCAxLCB0aGUgcHRocmVhZF9jcmVhdGUnZCB0aHJlYWRzIGFyZSAy LDMsLi4uCisgICAgc2V0IHRocmVhZF9uciBbZXhwciAkaSArIDJdCisgICAg Z2RiX3Rlc3QgInRocmVhZCAkdGhyZWFkX25yIiAiIiAicHJlcGFyZSB0byBh ZHZhbmNlIHRocmVhZCAkdGhyZWFkX25yIgorICAgIGdkYl90ZXN0ICJjb250 aW51ZSIgIkJyZWFrcG9pbnQgMywgLioiICJhZHZhbmNlIHRocmVhZCAkdGhy ZWFkX25yIgorfQorCisjIEVhY2ggdGhyZWFkIGlzIG5vdyBzdG9wcGVkIGF0 IGEgYnJlYWtwb2ludC4KKyMgTm93IHJlc3VtZSB0aGUgZW50aXJlIHByb2dy YW0sIEdEQiBzaG91bGQgcHJvcGVybHkgc3RlcCBlYWNoIHRocmVhZAorIyBw YXNzZWQgdGhlIGJyZWFrcG9pbnQuCisKKyMgVHVybiBvZmYgc2NoZWR1bGVy IGxvY2tpbmcgc28gYWxsIHRocmVhZHMgcnVuLgorZ2RiX3Rlc3QgInNldCBz Y2hlZHVsZXItbG9ja2luZyBvZmYiICIiICJkaXNhYmxlIHNjaGVkdWxlciBs b2NraW5nIgorZ2RiX3Rlc3QgInNob3cgc2NoZWR1bGVyLWxvY2tpbmciICIu KiBsb2NraW5nIHNjaGVkdWxlciAuKiBpcyBcIm9mZlwiLiIgInNob3cgc2No ZWR1bGVyIGxvY2tpbmcgb2ZmIgorCisjZ2RiX3Rlc3QgInNldCBkZWJ1ZyBp bmZydW4gMSIgIiIgImVuYWJsZSBkZWJ1ZyBpbmZydW4iCisKKyMgQ29udGlu dWUgb25lIGxhc3QgdGltZSwgdGhlIHByb2dyYW0gc2hvdWxkIGV4aXQgbm9y bWFsbHkuCisjIEZJWE1FOiBJdCBjdXJyZW50bHkgZG9lc24ndCBiZWNhdXNl IEdEQiBkb2Vzbid0IGhhbmRsZSBtb3JlIHRoYW4gb25lIHRocmVhZAorIyAo b3RoZXIgdGhhbiB0aGUgY3VycmVudCB0aHJlYWQpIHN0b3BwZWQgYXQgYSBi cmVha3BvaW50LgorCitzZXR1cF94ZmFpbCAiKi0qLSoiCitnZGJfdGVzdCAi Y29udGludWUiICJQcm9ncmFtIGV4aXRlZCBub3JtYWxseS4iIFwKKyAgICAi Y29udGludWUgdG8gcHJvZ3JhbSBleGl0IgorCityZXR1cm4gMAo= --000e0cd146d472077b045d0eca99--