From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2040.outbound.protection.outlook.com [40.107.220.40]) by sourceware.org (Postfix) with ESMTPS id 23B8A385840F for ; Tue, 7 Feb 2023 15:31:48 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 23B8A385840F Authentication-Results: sourceware.org; dmarc=fail (p=quarantine dis=none) header.from=amd.com Authentication-Results: sourceware.org; spf=fail smtp.mailfrom=amd.com ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=AprtD9yQ0ILSsQvURRdqyGPu/8jm9QSY6nBeeMydxPu/dfVg7/MLwdlExwDzU/szY+2TKDEo/wL6wGZjpfx5khREq4NJDr0OZfDbH6r+31kILrYfD+6SXFWsOHfAjyFDrcbIsMpFqu2RHFL0GQIUYSZbjogNoHHJHWSihMmczUhzu9N0C5hASoEAtRY9FLOItkmvheptMfQORg4prb6hlPRTCwksNotIfUIgyCFWzvE7qbMqwLC5kaRfUx6FfCyZrIxcOy4w7ZUgSZrXH/t763pqIUelEgfy84LhMI26pcwOl+9ll3//fBBfgSVAUIKCIBKjhcQfoj3gwIBgpq8Q0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=MhPT3OVKfIpZLOE6/keBFFEAZ2Tvrz06YH+nD8EGdig=; b=Dir5b1+zjTvltRH19vXfJIDKLIqkNP41toMlBl6RI3TdAX6F9aA80+Ygr73l0BJ4vLOYXCAGJHyHz/YjzN+aAz7R9MAYM+5v7WCQQPwVBoxeB7mIwm4gK23VqZQ+OtzlEfWSZmEIJ/TEgv+DVE8QVHB1SNTbFgeSjwdnD1l598v2jQA5nTWh7VCBpxzGrrqZH0h9OmS7ICi5ANa8XvqA1PTGozMBjnVRdJIX3uDFnvr9THOJi6lEwwR9i8+3aKKP49TQt39gexg+nhAzeuepWrR1cxo+fwipQES8nlP4uOXJRKmnHYrhxsRXJJb0y2zjaq6IJJBBqo7xv4+lCs44Xw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=MhPT3OVKfIpZLOE6/keBFFEAZ2Tvrz06YH+nD8EGdig=; b=1KbnSFWs86usjsKRw6ZNCAxX0SDdtYGcL6AiOf2eBEXOMgfN4C6Qr6AkiNfw04xnw525P39FJtVcKCbdMf1vDyMYL5HQIX8S+sZYeQ1VJ1a0xb6b04fhku3yMrdluLDTPG+AP4PqGh33NAaDOahhVs0mD3DPjOBuj4o1hHOC9f8= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; Received: from DM4PR12MB5745.namprd12.prod.outlook.com (2603:10b6:8:5c::7) by BY1PR12MB8446.namprd12.prod.outlook.com (2603:10b6:a03:52d::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6064.36; Tue, 7 Feb 2023 15:31:45 +0000 Received: from DM4PR12MB5745.namprd12.prod.outlook.com ([fe80::cc16:a119:c3cf:5236]) by DM4PR12MB5745.namprd12.prod.outlook.com ([fe80::cc16:a119:c3cf:5236%5]) with mapi id 15.20.6064.034; Tue, 7 Feb 2023 15:31:45 +0000 Content-Type: multipart/mixed; boundary="------------4aZeoGNBodp3HNij9xGxaEB2" Message-ID: Date: Tue, 7 Feb 2023 15:31:39 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Subject: Re: [PATCH 4/4] gdb/testsuite: allow_hipcc_tests tests the hipcc compiler Content-Language: en-US To: Simon Marchi , gdb-patches@sourceware.org Cc: lsix@lancelotsix.com References: <20230207132802.223510-1-lancelot.six@amd.com> <20230207132802.223510-5-lancelot.six@amd.com> <026f2c76-47fe-9115-b1f2-ec4e0de6eefd@simark.ca> From: Lancelot SIX In-Reply-To: <026f2c76-47fe-9115-b1f2-ec4e0de6eefd@simark.ca> X-ClientProxiedBy: FR2P281CA0172.DEUP281.PROD.OUTLOOK.COM (2603:10a6:d10:9f::6) To DM4PR12MB5745.namprd12.prod.outlook.com (2603:10b6:8:5c::7) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DM4PR12MB5745:EE_|BY1PR12MB8446:EE_ X-MS-Office365-Filtering-Correlation-Id: e171ea77-3f86-473c-a648-08db09206b73 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: m+u4lYXFWj/i/Fovhhl8Bpwxtd0AdfsSHEES5B+8zr5u4r5i3gl7UM774K1gTy6IHgRq+iev5YVwMfK/h+n1mirBJsN/h5aO2GHsw22HZuMYE9oscSC3zGcpGjrUYKOFhnqB+xpm8a3sKwZGQ2zwdHJZn5UO5qJ1Eexshs6HcN/jrKcloG2SC/kJ4Bv+itlN7VQqGWblF6P5IcEMXgSKKXWZ4zdsOkNKlkhlhgopXCU0hgpz3iTgPMzGLPV8pXYIwqtUEqec+ztPkt69gAbD+cvmyHMk2SGUHWblPi+biZ+0oDWY8ASUrJmbAAFG9VSXpNKm7PTJKwWN5OuRdvNbPcjH8jNj6IuoikVgRScDMRTggRluC/0/7K8wA6bKoFwsxLLTGx9rbh7Wa9jueR3lmE9A5OxBCsXEkqj3NR/Impx//WC3ks+0ojSe8ywhBvB6R0AZcnoJVBUWrtf8XxP7uXoodQt96JBNwKpA1MQOTIPMaN/UZbT59qUZerPLYLn8GeJIHT4QTsvxak2uzzm6hxo2ePQ40iyHfeCI8fmd1ksStAiKH3krbVrquqAp3a4tTbzKrSaN+XqTP98HXahSCjWsiDKWHA47ZaQYh3AS5V3cWUvD9EDzlju8ptVDuMsb06tM86tpM81/ymXT0xhiEQhHzTHDUbGQ09QyMiQpd51U3N2ICgscsfH39824MX9RsI87ETJYanCJomuICHQJbwhv4X3VQ7deIwO2ZaxqDZc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR12MB5745.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230025)(4636009)(39860400002)(366004)(136003)(346002)(396003)(376002)(451199018)(31686004)(6666004)(83380400001)(2906002)(36756003)(38100700002)(478600001)(2616005)(66556008)(26005)(66946007)(66476007)(6512007)(186003)(6506007)(53546011)(33964004)(6486002)(316002)(8936002)(41300700001)(31696002)(4326008)(8676002)(86362001)(235185007)(5660300002)(45980500001)(43740500002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UU1BbGJqWXloWlZRMGtObTEvRUlmSEpqRG5kMzN6dm5uREZvM2xBVEl6cWRj?= =?utf-8?B?QUF1dGhEc1Job0EzeGZsbFRETURqeWQ1TkMvY3pYZEYrZkZIS3hjSzA4NGZ0?= =?utf-8?B?LzVZQklxQWNyT29jK0Y1TGM4cHVqaFQyY0xQNFBDQ0RpWjBhWXhuREZ3N092?= =?utf-8?B?aGtpT2M3bnljSXRKeTUwVjAvaWVyQU1QR2Z3TGUyVHNzS29qMk9VeTJBaVZJ?= =?utf-8?B?elVRbTUvMHQvUFZscjNSNTQxYXl3TXpFSmo4UWZHNUQxdElYZ3k5bnV1SENh?= =?utf-8?B?cmZXcDBqZ3U2Tm1MemVUNmtrcndvbUVNQUx6Uk54bXl0WDVtMG1ieGVubGZ6?= =?utf-8?B?ZmlTVFNZNDJKWDBZY2p5Umh2OUhsNVB2TkNWTmk4RWpDcmNjNnJpSHZzdlVu?= =?utf-8?B?bjJNZSs1eGI1MzNiSERBcmpsWUpFTDg1WUtqT0twZHdHZGZVNmpYcjU5SGVE?= =?utf-8?B?b0NFNFkwVjdqTTUyd2RDd2dSQWZuZ1RkTndIcStvTG5RM1JQVWJBSWIxeTQz?= =?utf-8?B?c1lXWEtjY25ZaTNsVjhTeUNSUDFEWmN5NXJhdE5VZXZvc0ZTbFNYN2VXZFpN?= =?utf-8?B?WlpqcFJvT0k4eEJCWWY0MXdGU3VzQUUySUZpOEg5VnpRYWE1aG15M0dyTTZY?= =?utf-8?B?V3lqdE5JTkhIZUVRQ3Z6dytScnZJRnB4TXdrOThhTzBUNVd2SUxBWG1pWW5W?= =?utf-8?B?Tm52TmtuOUsvRGVHcDJhODhtV2lmQUZXTmFpdEVMZ205ZEl3dTdKWlRpd08z?= =?utf-8?B?L0hTazRkOWs3UHAwZmUvQmpVN1NsbjdDa3NuelVzRmtOVVdqbU03QkdHZ1Vl?= =?utf-8?B?cGhMaUM3dmkrMzFaYVkrN3dSdUxncm9lSUp4UytHMExDWUYvc0QzcTIrMWFB?= =?utf-8?B?R2FkQ1k1eWlpWTgrSmhzU1VOMDB3OWRUQkZ6RUJxMXRtZnd1K3ZCK3JKVGpX?= =?utf-8?B?RVlsNkRzMUE2NUs3RDVGL0x2VXJvaklQaDUyb2ZTOVV5Z1JXVVFtMHRuOUlK?= =?utf-8?B?UHMwRUJsZm94UmFhdWZ0NXpJU2p3ODE4TmJ6Uk0raS82cjlPK2tNMFBTN2h3?= =?utf-8?B?Nkh2bFNvdXFiaWVDZzlQMk93VVZaNkdoelFwaWRNektvTnlINEx2QlZBV2k5?= =?utf-8?B?bkgxL3MzQ3ZyL1dhc1ROMklKT09JdzNUV1ZPY3pQZktXbVJRTVBUTW5QUXRt?= =?utf-8?B?alNzR1FXL3h4Y1psYUNvS3ZRcUNhcG9Jb0VCOU1MNTlMTmR1OE0yTjRSdG5w?= =?utf-8?B?cEVjQVkzUzBJbGwxYzVBenBHclp6aGlHdGE2MWE0aENhNWhkeHV2Ujlxb3Yw?= =?utf-8?B?YlFhU2RoZUd3Qi81L0t3eU8xU3czeC9IQWtvcTh5WHNwNVZmek0zcHBEb2cr?= =?utf-8?B?aXEzNkk2NGFCZ0xjUkRYRy8va0w4SFBBZFEvY0x1VTIreitiNHdIRnZQL3RI?= =?utf-8?B?Wm9xdlJhbDBYU2kxR0lmZGd4ZytoQW5xclI3VGQvVEEvNW5xMERmdVBLY2ZO?= =?utf-8?B?Y3lMdjliWWE3S1lGQitwNUZMMXNMRVVEd3dVbTdoY2J5K00zaS9SL1hqdmhW?= =?utf-8?B?TjNLenRSMVZhMVdocS9YSFJwVFptc21QNDRWVUEvUGFPeWxkaHYzeU5oLy9v?= =?utf-8?B?alZtWXowTzB4bTR4cXJFQXhQVXJyRlJ4aDZvUytRcTlpMUhCVkpXZUh3V3JM?= =?utf-8?B?Zi8yZWM1U1phWmRJeCtMN0VSL0hxMDBYb2FZdzMraGVrdEFlMG5nc3kxQXpy?= =?utf-8?B?SXNTaFc0OVFpcFVQWHc3aTROOVc1SEZBNHhsaDlFcXFVbzBDc1Y5SlRuZFBi?= =?utf-8?B?UUV6RE9PdjRWbGtHblZsSkprVmN5TXJ6NmRWclhpR2hOR1k1dk8reG1jRHd4?= =?utf-8?B?S0gxSzJvWXV5NVozNU9FK0pJUjR0SmhvanFGZHdIZUZmcmYzem1zbjZwS1JZ?= =?utf-8?B?R0JGSE02NG1WbDZsVDhGUGt4SjlUK1N0UFFTU29BTzltSFQ1QWlObkk1T1pD?= =?utf-8?B?Sm0rWllnc0NlTjZmWHJLTCtJa0l2U3JVWGs3TEhsNldGRVNlbzdrZWJmeExV?= =?utf-8?B?ZkZCMEZ3RzBFRzhLbHVmWkg1TXBEQXFTVGVJVzlZZ2VNVmtsR0dVeVpSQXFy?= =?utf-8?Q?N89jWVq0jC060sB7oy7N26/d/?= X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-Network-Message-Id: e171ea77-3f86-473c-a648-08db09206b73 X-MS-Exchange-CrossTenant-AuthSource: DM4PR12MB5745.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Feb 2023 15:31:45.1589 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: yUA9fQV8Q2J+kBycrhysNkJQofmRBfvajQ6A4+jWaXVkOeiPu9zsTEHoWZPV46L//KHqgzSzMkcUrQPggm6exQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BY1PR12MB8446 X-Spam-Status: No, score=-11.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FORGED_SPF_HELO,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_NONE,TXREP 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: --------------4aZeoGNBodp3HNij9xGxaEB2 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 07/02/2023 14:12, Simon Marchi wrote: > Caution: This message originated from an External Source. Use proper caution when opening attachments, clicking links, or responding. > > > On 2/7/23 08:28, Lancelot SIX via Gdb-patches wrote: >> Update allow_hipcc_tests so all gdb.rocm tests are skipped if we do not >> have a working hipcc compiler available. >> >> To achieve this, adjust gdb_simple_compile to ensure that the hip >> program is saved in a ".cpp" file before calling hipcc otherwise >> compilation will fail. >> >> One thing to note is that it is possible to have a hipcc installed with >> a CUDA backend. Compiling with this back-end will successfully result >> in an application, but GDB cannot debug it (at least for the offload >> part). In the context of the gdb.rocm tests, we want to detect such >> situation where gdb_simple_compile would give a false positive. >> >> To achieve this, this patch checks that there is at least one AMDGPU >> device available and that hipcc can compile for this or those targets. >> Detecting the device is done using the rocm_agent_enumerator tool which >> is installed with the all ROCm installations (it is used by hipcc to >> detect identify targets if this is not specified on the comand line). >> >> This patch also makes the allow_hipcc_tests proc a cached proc. >> --- >> gdb/testsuite/lib/gdb.exp | 4 +++ >> gdb/testsuite/lib/rocm.exp | 69 +++++++++++++++++++++++++++++++++++++- >> 2 files changed, 72 insertions(+), 1 deletion(-) >> >> diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp >> index faa0ac05a9a..6333728f71e 100644 >> --- a/gdb/testsuite/lib/gdb.exp >> +++ b/gdb/testsuite/lib/gdb.exp >> @@ -4581,6 +4581,10 @@ proc gdb_simple_compile {name code {type object} {compile_flags {}} {object obj} >> set ext "go" >> break >> } >> + if { "$flag" eq "hip" } { >> + set ext "cpp" >> + break >> + } >> } >> set src [standard_temp_file $name-[pid].$ext] >> set obj [standard_temp_file $name-[pid].$postfix] >> diff --git a/gdb/testsuite/lib/rocm.exp b/gdb/testsuite/lib/rocm.exp >> index b5b59748c27..06d5b3988b8 100644 >> --- a/gdb/testsuite/lib/rocm.exp >> +++ b/gdb/testsuite/lib/rocm.exp >> @@ -15,7 +15,51 @@ >> # >> # Support library for testing ROCm (AMD GPU) GDB features. >> >> -proc allow_hipcc_tests { } { >> +# Get the list of gpu targets to compile for. >> +# >> +# If HCC_AMDGPU_TARGET is set in the environment, use it. Otherwise, >> +# try reading it from the system using the rocm_agent_enumerator >> +# utility. >> + >> +proc hcc_amdgpu_targets {} { >> + # Look for HCC_AMDGPU_TARGET (same env var hipcc uses). If >> + # that fails, try using rocm_agent_enumerator (again, same as >> + # hipcc does). >> + if {[info exists ::env(HCC_AMDGPU_TARGET)]} { >> + return [split $::env(HCC_AMDGPU_TARGET) ","] >> + } >> + >> + set rocm_agent_enumerator "rocm_agent_enumerator" >> + >> + # If available, use ROCM_PATH to locate rocm_agent_enumerator. >> + if { [info exists ::env(ROCM_PATH)] } { >> + set rocm_agent_enumerator \ >> + "$::env(ROCM_PATH)/bin/rocm_agent_enumerator" >> + } >> + >> + # If we fail to locate the rocm_agent_enumerator, just return an empty >> + # list of targets and let the caller decide if this should be an error. >> + if { [which $rocm_agent_enumerator] == 0 } { >> + return [list] >> + } >> + >> + set result [remote_exec host $rocm_agent_enumerator] >> + if { [lindex $result 0] != 0 } { >> + error "rocm_agent_enumerator failed" >> + } >> + >> + set targets [list] >> + foreach target [lindex $result 1] { >> + # Ignore gfx000 which is the host CPU. >> + if { $target ne "gfx000" } { >> + lappend targets $target >> + } >> + } >> + >> + return $targets > > I typically don't have ROCM_PATH set, and I don't add /opt/rocm/bin to > my PATH, so rocm_agent_enumerator will not be found by default here. > However, gdb_find_hipcc does fall back on /opt/rocm/bin, so it does find > my hipcc. I think we should use similar strategies for both cases. I > don't mind having to set ROCM_PATH or adding /opt/rocm/bin to my PATH if > needed, as long as we're consistent about it. > When installing the pre-built packages, at least on Ubuntu, there should be symlinks from /usr/bin to /etc/alternavites to /opt/rocm-$VERSION/bin. I expect that when those tools start to be packaged by the various distributions, they will be available in PATH. As I am not a big fan of the hard-coded /opt/rocm prefix, especially in the context of upstream, I would prefer to update gdb_find_hipcc. Would something like this be OK? It search for hipcc in dejagnu's tool_root_dir, $::env(ROCM_PATH) (if set) and fallbacks to "hipcc" if none of the above worked to search in PATH. From b8638cafabd36bc9316591da3c8326e10277372a Mon Sep 17 00:00:00 2001 From: Lancelot SIX Date: Tue, 7 Feb 2023 15:13:47 +0000 Subject: [PATCH] gdb/testsuite: look for hipcc in env(ROCM_PATH) If the hipcc compiler cannot be found in dejagnu's tool_root_dir, look for it in $::env(ROCM_PATH) (if set). If hipcc is still not found, fallback to "hipcc" so the compiler will be searched in the PATH. This removes the fallback to the hard-coded "/opt/rocm/bin" prefix. This change is done so ROCM tools are searched in a uniform manner. --- gdb/testsuite/lib/future.exp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/gdb/testsuite/lib/future.exp b/gdb/testsuite/lib/future.exp index 5720d3837d5..2e8315bbfe1 100644 --- a/gdb/testsuite/lib/future.exp +++ b/gdb/testsuite/lib/future.exp @@ -125,8 +125,11 @@ proc gdb_find_hipcc {} { global tool_root_dir if {![is_remote host]} { set hipcc [lookfor_file $tool_root_dir hipcc] + if {$hipcc == "" && [info exists ::env(ROCM_PATH)]} { + set hipcc [lookfor_file $::env(ROCM_PATH)/bin hipcc] + } if {$hipcc == ""} { - set hipcc [lookfor_file /opt/rocm/bin hipcc] + set hipcc hipcc } } else { set hipcc "" -- 2.34.1 >> +} >> + >> +gdb_caching_proc allow_hipcc_tests { >> # Only the native target supports ROCm debugging. E.g., when >> # testing against GDBserver, there's no point in running the ROCm >> # tests. >> @@ -29,6 +73,29 @@ proc allow_hipcc_tests { } { >> return 0 >> } >> >> + # Check we have a working hipcc compiler available. >> + set targets [hcc_amdgpu_targets] >> + if { [llength $targets] == 0} { >> + return 0 >> + } >> + >> + set flags [list hip additional_flags=--offload-arch=[join $targets ","]] >> + if {![gdb_simple_compile hipprobe { >> + #include >> + __global__ void >> + kern () {} >> + >> + int >> + main () >> + { >> + kern<<<1, 1>>> (); >> + hipDeviceSynchronize (); >> + return 0; >> + } >> + } executable $flags]} { >> + return 0 >> + } > > So, this last part ensures we don't have a "CUDA hipcc false > positive"? It would be good to put a comment above it to indicate the > precise intent. Yes, if -offload-arch=gfxXX is passed, I expect the cuda backend to complain at this is not a valid NVIDIA architecture. I'll add a comment to explain this. Thanks for the review. Lancelot. > > Simon --------------4aZeoGNBodp3HNij9xGxaEB2 Content-Type: text/x-patch; charset=UTF-8; name="0001-gdb-testsuite-look-for-hipcc-in-env-ROCM_PATH.patch" Content-Disposition: attachment; filename="0001-gdb-testsuite-look-for-hipcc-in-env-ROCM_PATH.patch" Content-Transfer-Encoding: base64 RnJvbSBiODYzOGNhZmFiZDM2YmM5MzE2NTkxZGEzYzgzMjZlMTAyNzczNzJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMYW5jZWxvdCBTSVggPGxhbmNlbG90LnNpeEBhbWQuY29tPgpE YXRlOiBUdWUsIDcgRmViIDIwMjMgMTU6MTM6NDcgKzAwMDAKU3ViamVjdDogW1BBVENIXSBnZGIv dGVzdHN1aXRlOiBsb29rIGZvciBoaXBjYyBpbiBlbnYoUk9DTV9QQVRIKQoKSWYgdGhlIGhpcGNj IGNvbXBpbGVyIGNhbm5vdCBiZSBmb3VuZCBpbiBkZWphZ251J3MgdG9vbF9yb290X2RpciwgbG9v awpmb3IgaXQgaW4gJDo6ZW52KFJPQ01fUEFUSCkgKGlmIHNldCkuICBJZiBoaXBjYyBpcyBzdGls bCBub3QgZm91bmQsCmZhbGxiYWNrIHRvICJoaXBjYyIgc28gdGhlIGNvbXBpbGVyIHdpbGwgYmUg c2VhcmNoZWQgaW4gdGhlIFBBVEguICBUaGlzCnJlbW92ZXMgdGhlIGZhbGxiYWNrIHRvIHRoZSBo YXJkLWNvZGVkICIvb3B0L3JvY20vYmluIiBwcmVmaXguCgpUaGlzIGNoYW5nZSBpcyBkb25lIHNv IFJPQ00gdG9vbHMgYXJlIHNlYXJjaGVkIGluIGEgdW5pZm9ybSBtYW5uZXIuCi0tLQogZ2RiL3Rl c3RzdWl0ZS9saWIvZnV0dXJlLmV4cCB8IDUgKysrKy0KIDEgZmlsZSBjaGFuZ2VkLCA0IGluc2Vy dGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRpZmYgLS1naXQgYS9nZGIvdGVzdHN1aXRlL2xpYi9m dXR1cmUuZXhwIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZnV0dXJlLmV4cAppbmRleCA1NzIwZDM4Mzdk NS4uMmU4MzE1YmJmZTEgMTAwNjQ0Ci0tLSBhL2dkYi90ZXN0c3VpdGUvbGliL2Z1dHVyZS5leHAK KysrIGIvZ2RiL3Rlc3RzdWl0ZS9saWIvZnV0dXJlLmV4cApAQCAtMTI1LDggKzEyNSwxMSBAQCBw cm9jIGdkYl9maW5kX2hpcGNjIHt9IHsKICAgICBnbG9iYWwgdG9vbF9yb290X2RpcgogICAgIGlm IHshW2lzX3JlbW90ZSBob3N0XX0gewogCXNldCBoaXBjYyBbbG9va2Zvcl9maWxlICR0b29sX3Jv b3RfZGlyIGhpcGNjXQorCWlmIHskaGlwY2MgPT0gIiIgJiYgW2luZm8gZXhpc3RzIDo6ZW52KFJP Q01fUEFUSCldfSB7CisJICAgIHNldCBoaXBjYyBbbG9va2Zvcl9maWxlICQ6OmVudihST0NNX1BB VEgpL2JpbiBoaXBjY10KKwl9CiAJaWYgeyRoaXBjYyA9PSAiIn0gewotCSAgICBzZXQgaGlwY2Mg W2xvb2tmb3JfZmlsZSAvb3B0L3JvY20vYmluIGhpcGNjXQorCSAgICBzZXQgaGlwY2MgaGlwY2MK IAl9CiAgICAgfSBlbHNlIHsKIAlzZXQgaGlwY2MgIiIKLS0gCjIuMzQuMQoK --------------4aZeoGNBodp3HNij9xGxaEB2--