From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out1.suse.de (smtp-out1.suse.de [195.135.220.28]) by sourceware.org (Postfix) with ESMTPS id D2878385842C for ; Thu, 20 Apr 2023 11:43:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org D2878385842C Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=suse.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.de Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out1.suse.de (Postfix) with ESMTPS id 16753219E7; Thu, 20 Apr 2023 11:43:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_rsa; t=1681990981; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3ubAEFBLSrJSzwCwvmQ6Ceb1NqWeTmIyiuZfNphziXc=; b=jwkx67lnHc0CU6EgOUnZPueyXtp4f3dot17/AC7KZrwyLZ1iejaR0efW6iUh+iS+bEub+p F1Wd/ssDVWq89xR+3ARAhRrDCYcwGEcY6QMZY5tZF1McAZnVJQkUzIMsADOfuSk/Wbxbbb qPtOfrhkZaDm3XeFZ1jXLYWwssrq7LE= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.de; s=susede2_ed25519; t=1681990981; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=3ubAEFBLSrJSzwCwvmQ6Ceb1NqWeTmIyiuZfNphziXc=; b=s2L1eaMcq6Y4OAK/hd7j7Rf8j14hhRSBoIktdT6WSv6vFjKUFm9cGdN2CyeoNzuO17dpSV IHrlU/yyQPdskQCQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id E958113584; Thu, 20 Apr 2023 11:43:00 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id KbGjN0QlQWT7XQAAMHmgww (envelope-from ); Thu, 20 Apr 2023 11:43:00 +0000 Content-Type: multipart/mixed; boundary="------------mR0KYeEsQo81VbEsu7RnblXv" Message-ID: <999c220d-dd64-d6fb-b5ef-912150a4cfd6@suse.de> Date: Thu, 20 Apr 2023 13:43:07 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.9.1 Subject: Re: [PATCH 1/1] [gdb/contrib] Add make-check-all.sh To: Simon Marchi , gdb-patches@sourceware.org Cc: Andrew Burgess References: <20230403150957.28921-1-tdevries@suse.de> <20230403150957.28921-2-tdevries@suse.de> <87wn2rc22u.fsf@redhat.com> <97c65614-e1a5-a9cb-b5a3-36020e8ed259@suse.de> <2eef24aa-bbe4-478a-c965-82783d3dea9f@simark.ca> Content-Language: en-US From: Tom de Vries In-Reply-To: <2eef24aa-bbe4-478a-c965-82783d3dea9f@simark.ca> X-Spam-Status: No, score=-13.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: This is a multi-part message in MIME format. --------------mR0KYeEsQo81VbEsu7RnblXv Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 4/19/23 16:04, Simon Marchi wrote: > On 4/18/23 08:43, Tom de Vries wrote: >> On 4/5/23 11:01, Tom de Vries via Gdb-patches wrote: >>> On 4/4/23 13:35, Andrew Burgess wrote: >>>> Tom de Vries via Gdb-patches writes: >>>> >>>>> Add script gdb/contrib/make-check-all.sh, that's intended to function as a >>>>> drop-in replacement of make check, but excercising all host/target boards in >>>>> gdb/testsuite/boards. >>>>> >>>>> Shell-checked and tested on x86_64-linux. >>>> >>>> Hi Tom, >>>> >>>> Thanks for putting this together, I think this could be really useful. >>>> >>> >>> That's great to hear :) >>> >>>> I'm not a fan of the way you've split the patch description into email >>>> 0/1 and not included it with this commit. I think there's lots of >>>> useful information in there, and I'd much rather have the whole >>>> description included in the commit message -- it's much easier to find >>>> then rather than having to hunt on the mailing list in the future. >>>> >>> >>> Ack, I've reworked this into a patch rather than patch series. >>> >>>>> --- >>>>> gdb/contrib/make-check-all.sh | 255 ++++++++++++++++++++++++++++++++++ >>>>> 1 file changed, 255 insertions(+) >>>>> create mode 100755 gdb/contrib/make-check-all.sh >>>>> >>>>> diff --git a/gdb/contrib/make-check-all.sh b/gdb/contrib/make-check-all.sh >>>>> new file mode 100755 >>>>> index 00000000000..1befe418b81 >>>>> --- /dev/null >>>>> +++ b/gdb/contrib/make-check-all.sh >>>>> @@ -0,0 +1,255 @@ >>>>> +#!/bin/bash >>>>> + >>>>> +# Copyright (C) 2023 Free Software Foundation, Inc. >>>>> +# This program is free software; you can redistribute it and/or modify >>>>> +# it under the terms of the GNU General Public License as published by >>>>> +# the Free Software Foundation; either version 3 of the License, or >>>>> +# (at your option) any later version. >>>>> +# >>>>> +# This program is distributed in the hope that it will be useful, >>>>> +# but WITHOUT ANY WARRANTY; without even the implied warranty of >>>>> +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >>>>> +# GNU General Public License for more details. >>>>> +# >>>>> +# You should have received a copy of the GNU General Public License >>>>> +# along with this program. If not, see . >>>>> + >>>>> +# Run make check with all boards from gdb/testsuite/boards. >>>> >>>> I think you need some kind of usage test here too. Imagine a new >>>> developer finds this file and looks inside. Ideally, I think they >>>> should know how to use it, and what it will do for them without having >>>> to read any of the actual script content. >>>> >>> >>> Added. >>> >>>> On implementation, I wonder if it would be useful to provide a mechanism >>>> by which the gdb.sum and gdb.log files for each test run could be >>>> preserved? >>>> >>> >>> Done, I've renamed --keep to --keep-tmp, and added this new functionality under --keep. > > Maybe call it "keep-results"? Otherwise it's not clear what --keep keeps. > Done. >>> >>> I've also added "set -e" to make sure ^C aborts the script rather than just one make check invocation, and moved the tmpdir removal to a cleanup function that's executed on exit, to make sure ^C doesn't leave tmpdirs behind. >>> >> >> I'd like to commit this at the end of the week, if there are no further review comments. >> >> Simon, I remember discussing something similar with you a few years ago ( https://sourceware.org/pipermail/gdb-patches/2020-May/169003.html ), so I wondered if you have any comments on this approach. > > I don't recall this discussion at all :). But I like the idea of your > script, it lets people run tests on all target boards without having to > specifically know about each board. I never really test on boards other > than unix, native-gdbserver and native-extended-gdbserver, but I might > now with your script (probably not whole testsuite runs, but at least > when working on a test). > > When applying: > > Applying: Add make-check-all.sh > .git/rebase-apply/patch:232: trailing whitespace. > else > warning: 1 line adds whitespace errors. Ack, fixed. TIL: I can reproduce this using git show --check. > Would it make more sense to have this file under gdb/testsuite? Fine by me. [ FWIW, I usually look for scripts in a contrib dir, so my idea for the most logical place for it would be gdb/testsuite/contrib. If we'd add such a dir, we'd probably move the gdb/testsuite/*.py scripts there. Also, some from gdb/contrib, but I suppose it would leave gdb/contrib rather empty, that is only words.sh, ari/ and gdb-add-index.sh left AFAICT. ] Moved to gdb/testsuite. > I don't understand the comment about using --host-user and > --target-user. Are you suggesting that I create new users on my machine > (e.g. gdb-test-host and gdb-test-target), so that running with the > remote host and remote target boards pollute those users' home > directories instead of mine? To demonstrate the problem of polluting the home dir, after running gdb.base/advance.exp without --host-user and --target-user, I have these additional files in the home dir: ... advance0.o advance.c ccopts.c compiler.c ... And if I just use --target-user but not the --host-user one, we get the advance executable in addition. Yes, I do suggest creating new users. There are several reasons: - it prevents polluting your home dir, as some boards do, which on the flip side makes it easier to clean up if something was left, and make it easier to identify what was left. It also makes it easier to clean up inbetween boards, to prevent files copied by one board being used by the next board. - it prevents clashes in your home dir (I had a dir ~/dwz, which clashes with the exec from the gdb.dwarf2/dwz.exp test-case) - it's a good simulation of an actual remote host/target setup: - files from build can be made inaccessible from target/host and vice versa - pids from one user cannot be killed by other users, so errors like getting a pid on build and killing it on target/host will show up So, running the script with --host-user and --target-user gives you better checking, but for unsuspecting first-time users, the polluting home dir part will be the biggest thing I imagine, hence the comment. You say you don't understand the comment, but to me it seems you do so I'm not sure I understand what your concern is. Should the comment be improved, or do you want a change in functionality? FWIW, I've also written a script to add such test users, which I might submit after this gets committed, with the idea to both facilitate creation and standardize the result. > I also don't understand those `if true` conditions in main. Yeah, it was in preparation for an eventual ./make-check-all.sh --remote-target etc, but currently there's no need. Removed. > Finally, I'd appreciate a few comments here and there in the script, to > make further modifications easier. But other than that, it looks good > to me, it can't hurt to have that in the tree. I've tried adding a bit more comments, updated version attached. Thanks, - Tom --------------mR0KYeEsQo81VbEsu7RnblXv Content-Type: text/x-patch; charset=UTF-8; name="0001-gdb-testsuite-Add-make-check-all.sh.patch" Content-Disposition: attachment; filename="0001-gdb-testsuite-Add-make-check-all.sh.patch" Content-Transfer-Encoding: base64 RnJvbSA2ZjFlMjZhYTU2MGZlZjFjYzFiOTc5MzlmZWU4M2ZlYWJiZjBkM2FhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb20gZGUgVnJpZXMgPHRkZXZyaWVzQHN1c2UuZGU+ CkRhdGU6IE1vbiwgMyBBcHIgMjAyMyAwMzo0Nzo0NiArMDIwMApTdWJqZWN0OiBbUEFUQ0hd IFtnZGIvdGVzdHN1aXRlXSBBZGQgbWFrZS1jaGVjay1hbGwuc2gKCkRpcmVjdG9yeSBnZGIv dGVzdHN1aXRlL2JvYXJkcyBjb250YWlucyBhIG51bWJlciBvZiBob3N0L3RhcmdldCBib2Fy ZHMsIHdoaWNoCnJ1biBhIHRlc3QtY2FzZSAob3IgdGVzdC1jYXNlcykgaW4gYSBkaWZmZXJl bnQgd2F5LgoKVGhlIGJlbmVmaXRzIG9mIHVzaW5nIHRoZXNlIGJvYXJkcyBhcmU6Ci0gaW1w cm92aW5nIHRlc3QgY292ZXJhZ2Ugb2YgZ2RiLAotIG1ha2luZyB0aGUgdGVzdHN1aXRlIG1v cmUgcm9idXN0LCBhbmQKLSBtYWtpbmcgc3VyZSB0aGUgdGVzdC1jYXNlcyB3b3JrIGZvciBu b24tbmF0aXZlIGFuZCByZW1vdGUgc2V0dXBzLCBpZgogIHBvc3NpYmxlLgoKRWFjaCBib2Fy ZCBpcyBzbGlnaHRseSBkaWZmZXJlbnQsIGFuZCBkZXZlbG9wZXJzIG5lZWQgdG8gbGVhcm4g aG93IHRvIHVzZSBlYWNoCm9uZSwgd2hhdCBwYXJhbWV0ZXJzIHRvIHBhc3MgYW5kIGhvdywg YW5kIHdoaWNoIG9uZXMgY2FuIGJlIHVzZWQgaW4KY29tYmluYXRpb24gd2l0aCBlYWNoIG90 aGVyLiAgVGhpcyBpcyBhIHRocmVzaG9sZCB0byBzdGFydCB1c2luZyB0aGVtLgoKQW5kIHRo ZW4gdGhlcmUgcXVpdGUgYSBmZXcsIHNvIEkgc3VwcG9zZSB0eXBpY2FsbHkgb25seSBhIGZl dyB3aWxsIGJlIHVzZWQgYnkKZWFjaCBkZXZlbG9wZXIuCgpBZGQgc2NyaXB0IGdkYi90ZXN0 c3VpdGUvbWFrZS1jaGVjay1hbGwuc2gsIHRoYXQncyBpbnRlbmRlZCB0byBmdW5jdGlvbiBh cyBhCmRyb3AtaW4gcmVwbGFjZW1lbnQgb2YgbWFrZSBjaGVjaywgd2hpbGUgZXhjZXJjaXNp bmcgYWxsIGhvc3QvdGFyZ2V0IGJvYXJkcyBpbgpnZGIvdGVzdHN1aXRlL2JvYXJkcy4KCkFu IGV4YW1wbGUgb2YgbWFrZS1jaGVjay1hbGwuc2ggZm9yIG9uZSB0ZXN0LWNhc2UgaXM6Ci4u LgogJCAgfi9nZGIvc3JjL2dkYi90ZXN0c3VpdGUvbWFrZS1jaGVjay1hbGwuc2ggZ2RiLmJh c2UvYWR2YW5jZS5leHAKIExPQ0FMOgogIyBvZiBleHBlY3RlZCBwYXNzZXMgICAgICAgICAg ICA4CiBUQVJHRVQgQk9BUkQ6IGNjLXdpdGgtZ2RiLWluZGV4CiAjIG9mIGV4cGVjdGVkIHBh c3NlcyAgICAgICAgICAgIDgKICAgLi4uCiBIT1NUIEJPQVJEOiBsb2NhbC1yZW1vdGUtaG9z dC1ub3R0eSwgVEFSR0VUIEJPQVJEOiByZW1vdGUtc3RkaW8tZ2Ric2VydmVyCiAjIG9mIGV4 cGVjdGVkIHBhc3NlcyAgICAgICAgICAgIDgKIEhPU1QvVEFSR0VUIEJPQVJEOiBsb2NhbC1y ZW1vdGUtaG9zdC1uYXRpdmUKICMgb2YgZXhwZWN0ZWQgcGFzc2VzICAgICAgICAgICAgOAou Li4KClNoZWxsLWNoZWNrZWQgYW5kIHRlc3RlZCBvbiB4ODZfNjQtbGludXguCi0tLQogZ2Ri L3Rlc3RzdWl0ZS9tYWtlLWNoZWNrLWFsbC5zaCB8IDMyMyArKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogMSBmaWxlIGNoYW5nZWQsIDMyMyBpbnNlcnRpb25zKCspCiBjcmVh dGUgbW9kZSAxMDA3NTUgZ2RiL3Rlc3RzdWl0ZS9tYWtlLWNoZWNrLWFsbC5zaAoKZGlmZiAt LWdpdCBhL2dkYi90ZXN0c3VpdGUvbWFrZS1jaGVjay1hbGwuc2ggYi9nZGIvdGVzdHN1aXRl L21ha2UtY2hlY2stYWxsLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAw MDAwLi5kNTRmOWFhYWUyYwotLS0gL2Rldi9udWxsCisrKyBiL2dkYi90ZXN0c3VpdGUvbWFr ZS1jaGVjay1hbGwuc2gKQEAgLTAsMCArMSwzMjMgQEAKKyMhL2Jpbi9iYXNoCisKKyMgQ29w eXJpZ2h0IChDKSAyMDIzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlz IHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k L29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91 ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJ VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg b2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ T1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk ZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4g IElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBSdW4g bWFrZSBjaGVjayB3aXRoIGFsbCBib2FyZHMgZnJvbSBnZGIvdGVzdHN1aXRlL2JvYXJkcy4K KworIyBOb3RlIHRoYXQgcnVubmluZyB3aXRoIHRoZSAtLWhvc3QtdXNlciBhbmQgLS10YXJn ZXQtdXNlciBvcHRpb25zIGlzCisjIHJlY29tbWVuZGVkLCBiZWNhdXNlOgorIyAtIHJlbW90 ZSBob3N0L3RhcmdldCBib2FyZHMgd2lsbCB1c2UgJEhPTUUgYW5kIGxlYXZlIChwb3RlbnRp YWxseSBsb3RzIG9mKQorIyAgIGZpbGVzIGJlaGluZCwgYW5kCisjIC0gaXQgZW5hYmxlcyBt b3JlIHN0cmljdCBjaGVja2luZyBvZiBidWlsZC9ob3N0L3RhcmdldCBmaWxlIG1hbmlwdWxh dGlvbnMuCisjCisjIFJlY29tbWVuZGVkIHVzYWdlIGV4YW1wbGU6CisjCisjIGJhc2gkIGNk ICRvYmpkaXIvZ2RiL3Rlc3RzdWl0ZQorIyBiYXNoJCAkc3JjZGlyL3Rlc3RzdWl0ZS9nZGIv bWFrZS1jaGVjay1hbGwuc2ggXAorIyAgICAgICAgICAgLS1ob3N0LXVzZXIgcmVtb3RlLWhv c3QgXAorIyAgICAgICAgICAgLS10YXJnZXQtdXNlciByZW1vdGUtdGFyZ2V0IFwKKyMgICAg ICAgICAgIGdkYi5iYXNlL2FkdmFuY2UuZXhwCisKK3NldCAtZQorCisjIEJvYXJkcyB0aGF0 IHJ1biB0aGUgaG9zdCB0b29scyAoY29tcGlsZXIsIGdkYikgb24gYSByZW1vdGUgaG9zdC4K K3JlbW90ZV9ob3N0X2JvYXJkcz0oCisgICAgbG9jYWwtcmVtb3RlLWhvc3QKKyAgICBsb2Nh bC1yZW1vdGUtaG9zdC1ub3R0eQorKQorCisjIEJvYXJkcyB0aGF0IHVzZSBnZGJzZXJ2ZXIg dG8gbGF1bmNoIHRhcmdldCBleGVjdXRhYmxlcyBvbiBsb2NhbCB0YXJnZXQuCitnZGJzZXJ2 ZXJfYm9hcmRzPSgKKyAgICBuYXRpdmUtZXh0ZW5kZWQtZ2Ric2VydmVyCisgICAgbmF0aXZl LWdkYnNlcnZlcgorICAgIG5hdGl2ZS1zdGRpby1nZGJzZXJ2ZXIKKykKKworIyBCb2FyZHMg dGhhdCB1c2UgZ2Ric2VydmVyIHRvIGxhdW5jaCB0YXJnZXQgZXhlY3V0YWJsZXMgb24gYSBy ZW1vdGUgdGFyZ2V0LgorcmVtb3RlX2dkYnNlcnZlcl9ib2FyZHM9KAorICAgIHJlbW90ZS1n ZGJzZXJ2ZXItb24tbG9jYWxob3N0CisgICAgcmVtb3RlLXN0ZGlvLWdkYnNlcnZlcgorKQor CisjIEJvYXJkcyB0aGF0IHJ1biBjb21waWxlciwgZ2RiIGFuZCB0YXJnZXQgZXhlY3V0YWJs ZXMgb24gYSByZW1vdGUgbWFjaGluZQorIyB0aGF0IHNlcnZlcyBib3RoIGFzIGhvc3QgYW5k IHRhcmdldC4KK2hvc3RfdGFyZ2V0X2JvYXJkcz0oCisgICAgbG9jYWwtcmVtb3RlLWhvc3Qt bmF0aXZlCispCisKKyMgQm9hcmRzIHRoYXQgcnVuIGV2ZXJ5dGhpbmcgb24gbG9jYWwgdGFy Z2V0IGFuZCBsb2NhbCBob3N0LgordGFyZ2V0X2JvYXJkcz0oCisgICAgY2Mtd2l0aC1nZGIt aW5kZXgKKyAgICBjYy13aXRoLWRlYnVnLW5hbWVzCisgICAgY2Mtd2l0aC1kd3oKKyAgICBj Yy13aXRoLWR3ei1tCisgICAgY2Mtd2l0aC1nbnUtZGVidWdsaW5rCisgICAgZGVidWctdHlw ZXMKKyAgICBkd2FyZjQtZ2RiLWluZGV4CisgICAgZHdhcmY2NAorICAgIGZpc3Npb24KKyAg ICBmaXNzaW9uLWR3cAorICAgIGdvbGQKKyAgICBnb2xkLWdkYi1pbmRleAorICAgIHJlYWRu b3cKKyAgICBzdGFicworKQorCisjIEdldCBSVU5URVNURkxBR1MgbmVlZGVkIGZvciBzcGVj aWZpYyBib2FyZHMuCitydGZfZm9yX2JvYXJkICgpCit7CisgICAgbG9jYWwgYgorICAgIGI9 IiQxIgorCisgICAgY2FzZSAkYiBpbgorCWxvY2FsLXJlbW90ZS1ob3N0LW5hdGl2ZSkKKwkg ICAgbWtkaXIgLXAgIiR0bXBkaXIvJGIiCisJICAgIHJ0Zj0oCisJCSIke3J0ZltAXX0iCisJ CSJIT1NUX0RJUj0kdG1wZGlyLyRiIgorCSAgICApCisJICAgIDs7CisJcmVtb3RlLXN0ZGlv LWdkYnNlcnZlcikKKwkgICAgcnRmPSgKKwkJIiR7cnRmW0BdfSIKKwkJIlJFTU9URV9IT1NU TkFNRT1sb2NhbGhvc3QiCisJICAgICkKKwkgICAgaWYgWyAiJHRhcmdldF91c2VyIiAhPSAi IiBdOyB0aGVuCisJCXJ0Zj0oCisJCSAgICAiJHtydGZbQF19IgorCQkgICAgIlJFTU9URV9V U0VSTkFNRT0kdGFyZ2V0X3VzZXIiCisJCSkKKwkgICAgZWxzZQorCQlydGY9KAorCQkgICAg IiR7cnRmW0BdfSIKKwkJICAgICJSRU1PVEVfVVNFUk5BTUU9JFVTRVIiCisJCSkKKwkgICAg ZmkKKwkgICAgOzsKKwlyZW1vdGUtZ2Ric2VydmVyLW9uLWxvY2FsaG9zdCkKKwkgICAgaWYg WyAiJHRhcmdldF91c2VyIiAhPSAiIiBdOyB0aGVuCisJCXJ0Zj0oCisJCSAgICAiJHtydGZb QF19IgorCQkgICAgIlJFTU9URV9UQVJHRVRfVVNFUk5BTUU9JHRhcmdldF91c2VyIgorCQkp CisJICAgIGZpCisJICAgIDs7CisJbG9jYWwtcmVtb3RlLWhvc3R8bG9jYWwtcmVtb3RlLWhv c3Qtbm90dHkpCisJICAgIGlmIFsgIiRob3N0X3VzZXIiICE9ICIiIF07IHRoZW4KKwkJcnRm PSgKKwkJICAgICIke3J0ZltAXX0iCisJCSAgICAiUkVNT1RFX0hPU1RfVVNFUk5BTUU9JGhv c3RfdXNlciIKKwkJKQorCSAgICBlbHNlCisJCXJ0Zj0oCisJCSAgICAiJHtydGZbQF19Igor CQkgICAgIlJFTU9URV9IT1NUX1VTRVJOQU1FPSRVU0VSIgorCQkpCisJICAgIGZpCisJICAg IDs7CisJKikKKwkgICAgOzsKKyAgICBlc2FjCit9CisKKyMgU3VtbWFyaXplIG1ha2UgY2hl Y2sgb3V0cHV0Lgorc3VtbWFyeSAoKQoreworICAgIGlmICR2ZXJib3NlOyB0aGVuCisJY2F0 CisgICAgZWxzZQorCSMgV2UgbmVlZCB0aGUgc29ydCAtdSwgYmVjYXVzZSBzb21lIGl0ZW1z LCBmb3IgaW5zdGFuY2UgIiMgb2YgZXhwZWN0ZWQKKwkjIHBhc3NlcyIgYXJlIG91dHB1dCB0 d2ljZS4KKwlncmVwIC1FICJeKCN8RkFJTDp8RVJST1I6fFdBUk5JTkc6KSIgXAorCSAgICB8 IHNvcnQgLXUKKyAgICBmaQorfQorCisjIFJ1biBtYWtlIGNoZWNrLCBhbmQgcG9zc2libHkg c2F2ZSB0ZXN0IHJlc3VsdHMuCitkb190ZXN0cyAoKQoreworICAgIGlmICRkZWJ1ZzsgdGhl bgorCWVjaG8gIlJURjogJHtydGZbKl19IgorICAgIGZpCisKKyAgICBpZiAkZHJ5X3J1bjsg dGhlbgorCXJldHVybgorICAgIGZpCisKKyAgICAjIFJ1biBtYWtlIGNoZWNrLgorICAgIG1h a2UgY2hlY2sgXAorCSBSVU5URVNURkxBR1M9IiR7cnRmWypdfSAke3Rlc3RzWypdfSIgXAor CSAyPiYxIFwKKwl8IHN1bW1hcnkKKworICAgICMgU2F2ZSB0ZXN0IHJlc3VsdHMuCisgICAg aWYgJGtlZXBfcmVzdWx0czsgdGhlbgorCSMgU2V0IGNmZyB0byBpZGVudGlmaWVyIHVuaXF1 ZSB0byBob3N0L3RhcmdldCBib2FyZCBjb21iaW5hdGlvbi4KKwlpZiBbICIkaCIgPSAiIiBd OyB0aGVuCisJICAgIGlmIFsgIiRiIiA9ICIiIF07IHRoZW4KKwkJY2ZnPWxvY2FsCisJICAg IGVsc2UKKwkJY2ZnPSRiCisJICAgIGZpCisJZWxzZQorCSAgICBjZmc9JGgtJGIKKwlmaQor CisJbG9jYWwgZGlyCisJZGlyPSJjaGVjay1hbGwvJGNmZyIKKworCW1rZGlyIC1wICIkZGly IgorCWNwIGdkYi5zdW0gZ2RiLmxvZyAiJGRpciIKKyAgICBmaQorfQorCisjIFNldCBkZWZh dWx0IHZhbHVlcyBmb3IgZ2xvYmFsIHZhcnMgYW5kIG1vZGlmeSBhY2NvcmRpbmcgdG8gY29t bWFuZCBsaW5lCisjIGFyZ3VtZW50cy4KK3BhcnNlX2FyZ3MgKCkKK3sKKyAgICAjIERlZmF1 bHQgdmFsdWVzLgorICAgIGRlYnVnPWZhbHNlCisgICAga2VlcF9yZXN1bHRzPWZhbHNlCisg ICAga2VlcF90bXA9ZmFsc2UKKyAgICB2ZXJib3NlPWZhbHNlCisgICAgZHJ5X3J1bj1mYWxz ZQorCisgICAgaG9zdF91c2VyPSIiCisgICAgdGFyZ2V0X3VzZXI9IiIKKworICAgICMgUGFy c2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICB3aGlsZSBbICQjIC1ndCAwIF07IGRv CisJY2FzZSAiJDEiIGluCisJICAgIC0tZGVidWcpCisJCWRlYnVnPXRydWUKKwkJOzsKKwkg ICAgLS1rZWVwLXJlc3VsdHMpCisJCWtlZXBfcmVzdWx0cz10cnVlCisJCTs7CisJICAgIC0t a2VlcC10bXApCisJCWtlZXBfdG1wPXRydWUKKwkJOzsKKwkgICAgLS12ZXJib3NlKQorCQl2 ZXJib3NlPXRydWUKKwkJOzsKKwkgICAgLS1kcnktcnVuKQorCQlkcnlfcnVuPXRydWUKKwkJ OzsKKwkgICAgLS1ob3N0LXVzZXIpCisJCXNoaWZ0CisJCWhvc3RfdXNlcj0iJDEiCisJCTs7 CisJICAgIC0tdGFyZ2V0LXVzZXIpCisJCXNoaWZ0CisJCXRhcmdldF91c2VyPSIkMSIKKwkJ OzsKKwkgICAgKikKKwkJYnJlYWsKKwkJOzsKKwllc2FjCisJc2hpZnQKKyAgICBkb25lCisK KyAgICB0ZXN0cz0oIiRAIikKK30KKworIyBDbGVhbnVwIGZ1bmN0aW9uLCBzY2hlZHVsZWQg dG8gcnVuIG9uIGV4aXQuCitjbGVhbnVwICgpCit7CisgICAgaWYgWyAiJHRtcGRpciIgIT0g IiIgXTsgdGhlbgorCWlmICRrZWVwX3RtcDsgdGhlbgorCSAgICBlY2hvICJrZWVwaW5nIHRt cCBkaXIgJHRtcGRpciIKKwllbHNlCisJICAgIHJtIC1SZiAiJHRtcGRpciIKKwlmaQorICAg IGZpCit9CisKKyMgVG9wLWxldmVsIGZ1bmN0aW9uLCBjYWxsZWQgd2l0aCBjb21tYW5kIGxp bmUgYXJndW1lbnRzIG9mIHRoZSBzY3JpcHQuCittYWluICgpCit7CisgICAgIyBQYXJzZSBj b21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgIHBhcnNlX2FyZ3MgIiRAIgorCisgICAgIyBD cmVhdGUgdG1wZGlyIGFuZCBzY2hlZHVsZSBjbGVhbnVwLgorICAgIHRtcGRpcj0iIgorICAg IHRyYXAgY2xlYW51cCBFWElUCisgICAgdG1wZGlyPSQobWt0ZW1wIC1kKQorCisgICAgaWYg JGRlYnVnOyB0aGVuCisJZWNobyAiVEVTVFM6ICR7dGVzdHNbKl19IgorICAgIGZpCisKKyAg ICAjIFZhcmlhYmxlcyB0aGF0IHBvaW50IHRvIGN1cnJlbnQgaG9zdCAoaCkgYW5kIHRhcmdl dCBib2FyZCAoYikgd2hlbgorICAgICMgZXhlY3V0aW5nIGRvX3Rlc3RzLgorICAgIGg9IiIK KyAgICBiPSIiCisKKyAgICAjIEZvciByZWZlcmVuY2UsIHJ1biB0aGUgdGVzdHMgd2l0aG91 dCBhbnkgZXhwbGljaXQgaG9zdCBvciB0YXJnZXQgYm9hcmQuCisgICAgZWNobyAiTE9DQUw6 IgorICAgIHJ0Zj0oKQorICAgIGRvX3Rlc3RzCisKKyAgICAjIFJ1biB0aGUgYm9hcmRzIGZv ciBsb2NhbCBob3N0IGFuZCBsb2NhbCB0YXJnZXQuCisgICAgZm9yIGIgaW4gIiR7dGFyZ2V0 X2JvYXJkc1tAXX0iOyBkbworCWVjaG8gIlRBUkdFVCBCT0FSRDogJGIiCisJcnRmPSgKKwkg ICAgLS10YXJnZXRfYm9hcmQ9IiRiIgorCSkKKwlydGZfZm9yX2JvYXJkICIkYiIKKwlkb190 ZXN0cworICAgIGRvbmUKKworICAgICMgUnVuIHRoZSBib2FyZHMgdGhhdCB1c2UgZ2Ric2Vy dmVyLCBmb3IgbG9jYWwgaG9zdCwgYW5kIGZvciBib3RoIGxvY2FsIGFuZAorICAgICMgcmVt b3RlIHRhcmdldC4KKyAgICBmb3IgYiBpbiAiJHtnZGJzZXJ2ZXJfYm9hcmRzW0BdfSIgIiR7 cmVtb3RlX2dkYnNlcnZlcl9ib2FyZHNbQF19IjsgZG8KKwllY2hvICJUQVJHRVQgQk9BUkQ6 ICRiIgorCXJ0Zj0oCisJICAgIC0tdGFyZ2V0X2JvYXJkPSIkYiIKKwkpCisJcnRmX2Zvcl9i b2FyZCAiJGIiCisJZG9fdGVzdHMKKyAgICBkb25lCisKKyAgICAjIFJ1biB0aGUgYm9hcmRz IHRoYXQgdXNlIHJlbW90ZSBob3N0LCBpbiBjb21iaW5hdGlvbiB3aXRoIGJvYXJkcyB0aGF0 IHVzZQorICAgICMgZ2Ric2VydmVyIG9uIHJlbW90ZSB0YXJnZXQuCisgICAgZm9yIGggaW4g IiR7cmVtb3RlX2hvc3RfYm9hcmRzW0BdfSI7IGRvCisJZm9yIGIgaW4gIiR7cmVtb3RlX2dk YnNlcnZlcl9ib2FyZHNbQF19IjsgZG8KKwkgICAgZWNobyAiSE9TVCBCT0FSRDogJGgsIFRB UkdFVCBCT0FSRDogJGIiCisJICAgIHJ0Zj0oCisJCS0taG9zdF9ib2FyZD0iJGgiCisJCS0t dGFyZ2V0X2JvYXJkPSIkYiIKKwkgICAgKQorCSAgICBydGZfZm9yX2JvYXJkICIkaCIKKwkg ICAgcnRmX2Zvcl9ib2FyZCAiJGIiCisJICAgIGRvX3Rlc3RzCisJZG9uZQorICAgIGRvbmUK KyAgICBoPSIiCisKKyAgICAjIFJ1biB0aGUgYm9hcmRzIHRoYXQgZnVuY3Rpb24gYXMgYm90 aCByZW1vdGUgaG9zdCBhbmQgcmVtb3RlIHRhcmdldC4KKyAgICBmb3IgYiBpbiAiJHtob3N0 X3RhcmdldF9ib2FyZHNbQF19IjsgZG8KKwllY2hvICJIT1NUL1RBUkdFVCBCT0FSRDogJGIi CisJcnRmPSgKKwkgICAgLS1ob3N0X2JvYXJkPSIkYiIKKwkgICAgLS10YXJnZXRfYm9hcmQ9 IiRiIgorCSkKKwlydGZfZm9yX2JvYXJkICIkYiIKKwlkb190ZXN0cworICAgIGRvbmUKK30K KworIyBDYWxsIHRvcC1sZXZlbCBmdW5jdGlvbiB3aXRoIGNvbW1hbmQgbGluZSBhcmd1bWVu dHMuCittYWluICIkQCIKCmJhc2UtY29tbWl0OiA5OWVjYTMwYjJjMTQ4OThiMjU5NmJkNWQ4 NGVjMjIyOGY2YTM4YWQyCi0tIAoyLjM1LjMKCg== --------------mR0KYeEsQo81VbEsu7RnblXv--