From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pl1-x636.google.com (mail-pl1-x636.google.com [IPv6:2607:f8b0:4864:20::636]) by sourceware.org (Postfix) with ESMTPS id 1BC5C3847718 for ; Wed, 3 Apr 2024 11:51:01 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1BC5C3847718 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=pllab.cs.nthu.edu.tw Authentication-Results: sourceware.org; spf=none smtp.mailfrom=pllab.cs.nthu.edu.tw ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 1BC5C3847718 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::636 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712145067; cv=none; b=J+O3SCz8j/2TESMMLqkZQVbA2aASi/nPqK7TxHY5uNxmZBXKIaecEBBlLOaEs4UokPv7WSBXVpkLflOqv1fOn9hZxM0iixfDpkTfev/Php5V3vVlyUwy2Im9CF0BN2iTRm0JeEM1ZD/LwSZqpL8k8dfp8RxrPHRl/MzrPRbqEW0= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1712145067; c=relaxed/simple; bh=iekR8QSagBi4ipJczamQuJvyu9Oi9Lvmuj8ozBxiZo0=; h=DKIM-Signature:Message-ID:Date:MIME-Version:From:Subject:To; b=bhj+LHTPebcOEwRri++NcfWHMK867+QzgA4fF33pTSjTKxWd3zbDqVqkKVYhO+J1j79P0RcM8j7niaTjj10FhHQNTh3ZevvBdO+lyOTivsVZYTqtKB2XdVn4WdTerVtTcFANaS5QhJ0nLgr32fAfNVC+wXaCYWRpDtoXxn0G3rI= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pl1-x636.google.com with SMTP id d9443c01a7336-1e2178b2cf2so48161335ad.0 for ; Wed, 03 Apr 2024 04:51:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pllab-cs-nthu-edu-tw.20230601.gappssmtp.com; s=20230601; t=1712145059; x=1712749859; darn=gcc.gnu.org; h=in-reply-to:cc:to:content-language:references:subject:from :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=30qCPXbOSZAYlLMn6fMJjKRmf+yUcw6VPbxrR2FWpR0=; b=rojqmh6VnLADjyNd6O6jGj7NTmMOlCnJ6Z8/uTaHqUrSl0G991yTSI5VEeYr4gzqgR rtmxGf4iPbVZu37y7WZSl6s4TUBWJ3a+k9Rpu8REURWqnVwvd4hGhQm4EPQyyGBE4Att PwYuYSUvaIHLgOuqkNArbT+WXhniKosa84/RxUVCf15nZ/tXvVC2kdplF+7zWBqhHgbF CwY3OFclIpuvXOpGehMBnDaU+VHHIwVjEBXk1RGU4ZtDezFmJ0WaDBqQ8UomMyrS2QWW fpePWCkNaHFw9Ab3k1yeBbD6oOwTL9XI9cgQej8j8EdcaO5AOiEe7zAU9S6+eVjHKoh4 ppEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712145059; x=1712749859; h=in-reply-to:cc:to:content-language:references:subject:from :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=30qCPXbOSZAYlLMn6fMJjKRmf+yUcw6VPbxrR2FWpR0=; b=UxSNJShp20PF+KmtWVdtHjN/gRHjOKW/Z+enJdfT5CSuK0PUVrAK7qUnyh79tw7KdT 6iOCsiUWM/evTLwF3T+6m1V67yqM4YkinpKiAahkXmc72aT1X3FsOH9WYO6u6BzWSluG A5W3eGQ/uLitGgwLxLrAcpCpW5dkvjp+d4E0EqySSW1lMOEEz3wIoGlfz6xHdqZV1AXH dFZfm9vQtO6Twel0q9S6SIXvkUILnOl14BA49Jlu+49XPfypH/ERQY3jRsKLyx5x6rSa gPxdX5xjb8u5IvxV99HfUWDdrFgWYPZ8xg+WeXvxinhnUXoX91P6noFn/mkD35zOoZWA NEOw== X-Gm-Message-State: AOJu0Yyq5iAUyOST5C6Itot/3jYmXMmG+qDIwwnnUxuibr+uQP4mkaXR VZcl+e/Vm4kiDuS8MpLpdzQj171WR3ahUsvRr1yNvzqoaG8M8w5frnt2iLK7cpqAjDCMRE2O+ZS z X-Google-Smtp-Source: AGHT+IHrDiTVoCsx7zFpKWFlDCR5YhXT1wVHB5nEwNhAGkwD/eKCPcYUrvwHgz0MMxGTk0tDR8iVIw== X-Received: by 2002:a17:903:191:b0:1e0:59f4:a776 with SMTP id z17-20020a170903019100b001e059f4a776mr18332151plg.13.1712145059179; Wed, 03 Apr 2024 04:50:59 -0700 (PDT) Received: from ?IPV6:2401:e180:8c60:3f9e:556e:7bfb:f88:3cb1? ([2401:e180:8c60:3f9e:556e:7bfb:f88:3cb1]) by smtp.gmail.com with ESMTPSA id h10-20020a170902f54a00b001dde403a060sm13111455plf.44.2024.04.03.04.50.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 03 Apr 2024 04:50:58 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------00AyMZq0CZz6piV6Xkf8V7dw" Message-ID: <4abdfb2f-30e8-44eb-82a4-250a3641d9e9@pllab.cs.nthu.edu.tw> Date: Wed, 3 Apr 2024 19:50:55 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird From: Chung-Lin Tang Subject: Re: [PATCH, OpenACC 2.7] Connect readonly modifier to points-to analysis References: <5196826c-e81a-ab5c-63e9-bd8509232da0@siemens.com> <87msw4uolq.fsf@euler.schwinge.homeip.net> Content-Language: en-US To: gcc-patches@gcc.gnu.org, Richard Biener , Thomas Schwinge Cc: Chung-Lin Tang In-Reply-To: X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,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: This is a multi-part message in MIME format. --------------00AyMZq0CZz6piV6Xkf8V7dw Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Richard, Thomas, On 2023/10/30 8:46 PM, Richard Biener wrote: >> >> What Chung-Lin's first patch does is mark the OMP clause for 'x' (not the >> 'x' decl itself!) as 'readonly', via a new 'OMP_CLAUSE_MAP_READONLY' >> flag. >> >> The actual optimization then is done in this second patch. Chung-Lin >> found that he could use 'SSA_NAME_POINTS_TO_READONLY_MEMORY' for that. >> I don't have much experience with most of the following generic code, so >> would appreciate a helping hand, whether that conceptually makes sense as >> well as from the implementation point of view: First of all, I have removed all of the gimplify-stage scanning and setting of DECL_POINTS_TO_READONLY and SSA_NAME_POINTS_TO_READONLY_MEMORY (so no changes to gimplify.cc now) I remember this code was an artifact of earlier attempts to allow struct-member pointer mappings to also work (e.g. map(readonly:rec.ptr[:N])), but failed anyways. I think the omp_data_* member accesses when building child function side receiver_refs is blocking points-to analysis from working (didn't try digging deeper) Also during gimplify, VAR_DECLs appeared to be reused (at least in some cases) for map clause decl reference building, so hoping that the variables "happen to be" single-use and DECL_POINTS_TO_READONLY relaying into SSA_NAME_POINTS_TO_READONLY_MEMORY does appear to be a little risky. However, for firstprivate pointers processed during omp-low, it appears to be somewhat different. (see below description) > No, I don't think you can use that flag on non-default-defs, nor > preserve it on copying. So > it also doesn't nicely extend to DECLs as done by the patch. We > currently _only_ use it > for incoming parameters. When used on arbitrary code you can get to for example > > ptr1(points-to-readony-memory) = &p->x; > ... access via ptr1 ... > ptr2 = &p->x; > ... access via ptr2 ... > > where both are your OMP regions differently constrained (the constrain is on the > code in the region, _not_ on the actual protections of the pointed to > data, much like > for the fortran case). But now CSE comes along and happily replaces all ptr2 > with ptr2 in the second region and ... oops! Richard, I assume what you meant was "happily replaces all ptr2 with ptr1 in the second region"? That doesn't happen, because during omp-lower/expand, OMP target regions (which is all that this applies currently) is separated into different individual child functions. (Currently, the only "effective" use of DECL_POINTS_TO_READONLY is during omp-lower, when for firstprivate pointers (i.e. 'a' here) we set this bit when constructing the first load of this pointer) #pragma acc parallel copyin(readonly: a[:32]) copyout(r) { foo (a, a[8]); r = a[8]; } #pragma acc parallel copyin(readonly: a[:32]) copyout(r) { foo (a, a[12]); r = a[12]; } After omp-expand (before SSA): __attribute__((oacc parallel, omp target entrypoint, noclone)) void main._omp_fn.1 (const struct .omp_data_t.3 & restrict .omp_data_i) { ... : D.2962 = .omp_data_i->D.2947; a.8 = D.2962; r.1 = (*a.8)[12]; foo (a.8, r.1); r.1 = (*a.8)[12]; D.2965 = .omp_data_i->r; *D.2965 = r.1; return; } __attribute__((oacc parallel, omp target entrypoint, noclone)) void main._omp_fn.0 (const struct .omp_data_t.2 & restrict .omp_data_i) { ... : D.2968 = .omp_data_i->D.2939; a.4 = D.2968; r.0 = (*a.4)[8]; foo (a.4, r.0); r.0 = (*a.4)[8]; D.2971 = .omp_data_i->r; *D.2971 = r.0; return; } So actually, the creating of DECL_POINTS_TO_READONLY and its relaying to SSA_NAME_POINTS_TO_READONLY_MEMORY here, is actually quite similar to a default-def for an PARM_DECL, at least conceptually. (If offloading was structured significantly differently, say if child functions were separated much earlier before omp-lowering, than this readonly-modifier might possibly be a direct application of 'r' in the "fn spec" attribute) Other changes since first version of patch include: 1) update of C/C++ FE changes to new style in c-family/c-omp.cc 2) merging of two if cases in fortran/trans-openmp.cc like Thomas suggested 3) Update of readonly-2.c testcase to scan before/after "fre1" pass, to verify removal of a MEM load, also as Thomas suggested. I have re-tested this patch using mainline, with no regressions. Is this okay for mainline? Thanks, Chung-Lin 2024-04-03 Chung-Lin Tang gcc/c-family/ChangeLog: * c-omp.cc (c_omp_address_inspector::expand_array_base): Set OMP_CLAUSE_MAP_POINTS_TO_READONLY on pointer clause. (c_omp_address_inspector::expand_component_selector): Likewise. gcc/fortran/ChangeLog: * trans-openmp.cc (gfc_trans_omp_array_section): Set OMP_CLAUSE_MAP_POINTS_TO_READONLY on pointer clause. gcc/ChangeLog: * gimple-expr.cc (copy_var_decl): Copy DECL_POINTS_TO_READONLY for VAR_DECLs. * omp-low.cc (lower_omp_target): Set DECL_POINTS_TO_READONLY for variables of receiver refs. * tree-pretty-print.cc (dump_omp_clause): Print OMP_CLAUSE_MAP_POINTS_TO_READONLY. (dump_generic_node): Print SSA_NAME_POINTS_TO_READONLY_MEMORY. * tree-ssanames.cc (make_ssa_name_fn): Set SSA_NAME_POINTS_TO_READONLY_MEMORY if DECL_POINTS_TO_READONLY is set. * tree.h (DECL_POINTS_TO_READONLY): New macro. (OMP_CLAUSE_MAP_POINTS_TO_READONLY): New macro. gcc/testsuite/ChangeLog: * c-c++-common/goacc/readonly-1.c: Adjust testcase. * c-c++-common/goacc/readonly-2.c: New testcase. * gfortran.dg/goacc/readonly-1.f90: Adjust testcase. --------------00AyMZq0CZz6piV6Xkf8V7dw Content-Type: text/plain; charset=UTF-8; name="readonly-pt-v2.patch" Content-Disposition: attachment; filename="readonly-pt-v2.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jLWZhbWlseS9jLW9tcC5jYyBiL2djYy9jLWZhbWlseS9jLW9t cC5jYwppbmRleCBjMGUwMmFhNDIyZi4uNDU4ZGYxNDM0ZWQgMTAwNjQ0Ci0tLSBhL2djYy9j LWZhbWlseS9jLW9tcC5jYworKysgYi9nY2MvYy1mYW1pbHkvYy1vbXAuY2MKQEAgLTM5MDcs NiArMzkwNyw4IEBAIGNfb21wX2FkZHJlc3NfaW5zcGVjdG9yOjpleHBhbmRfYXJyYXlfYmFz ZSAodHJlZSBjLAogICAgIH0KICAgZWxzZSBpZiAoYzIpCiAgICAgeworICAgICAgaWYgKE9N UF9DTEFVU0VfTUFQX1JFQURPTkxZIChjKSkKKwlPTVBfQ0xBVVNFX01BUF9QT0lOVFNfVE9f UkVBRE9OTFkgKGMyKSA9IDE7CiAgICAgICBPTVBfQ0xBVVNFX0NIQUlOIChjMikgPSBPTVBf Q0xBVVNFX0NIQUlOIChjKTsKICAgICAgIE9NUF9DTEFVU0VfQ0hBSU4gKGMpID0gYzI7CiAg ICAgICBpZiAoaW1wbGljaXRfcCkKQEAgLTQwNTEsNiArNDA1Myw4IEBAIGNfb21wX2FkZHJl c3NfaW5zcGVjdG9yOjpleHBhbmRfY29tcG9uZW50X3NlbGVjdG9yICh0cmVlIGMsCiAgICAg fQogICBlbHNlIGlmIChjMikKICAgICB7CisgICAgICBpZiAoT01QX0NMQVVTRV9NQVBfUkVB RE9OTFkgKGMpKQorCU9NUF9DTEFVU0VfTUFQX1BPSU5UU19UT19SRUFET05MWSAoYzIpID0g MTsKICAgICAgIE9NUF9DTEFVU0VfQ0hBSU4gKGMyKSA9IE9NUF9DTEFVU0VfQ0hBSU4gKGMp OwogICAgICAgT01QX0NMQVVTRV9DSEFJTiAoYykgPSBjMjsKICAgICAgIGMgPSBjMjsKZGlm ZiAtLWdpdCBhL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYyBiL2djYy9mb3J0cmFuL3Ry YW5zLW9wZW5tcC5jYwppbmRleCBmODY3ZTIyNDBiZi4uMWI0YmRiOTBjYjYgMTAwNjQ0Ci0t LSBhL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYworKysgYi9nY2MvZm9ydHJhbi90cmFu cy1vcGVubXAuY2MKQEAgLTI1NjEsNiArMjU2MSw4IEBAIGdmY190cmFuc19vbXBfYXJyYXlf c2VjdGlvbiAoc3RtdGJsb2NrX3QgKmJsb2NrLCBnZmNfZXhlY19vcCBvcCwKICAgcHRyMiA9 IGZvbGRfY29udmVydCAocHRyZGlmZl90eXBlX25vZGUsIHB0cjIpOwogICBPTVBfQ0xBVVNF X1NJWkUgKG5vZGUzKSA9IGZvbGRfYnVpbGQyIChNSU5VU19FWFBSLCBwdHJkaWZmX3R5cGVf bm9kZSwKIAkJCQkJIHB0ciwgcHRyMik7CisgIGlmIChuLT51Lm1hcC5yZWFkb25seSkKKyAg ICBPTVBfQ0xBVVNFX01BUF9QT0lOVFNfVE9fUkVBRE9OTFkgKG5vZGUzKSA9IDE7CiB9CiAK IHN0YXRpYyB0cmVlCmRpZmYgLS1naXQgYS9nY2MvZ2ltcGxlLWV4cHIuY2MgYi9nY2MvZ2lt cGxlLWV4cHIuY2MKaW5kZXggZjhkNzE4NTUzMGMuLjM1YWNhOWRjOTc5IDEwMDY0NAotLS0g YS9nY2MvZ2ltcGxlLWV4cHIuY2MKKysrIGIvZ2NjL2dpbXBsZS1leHByLmNjCkBAIC0zODUs NiArMzg1LDggQEAgY29weV92YXJfZGVjbCAodHJlZSB2YXIsIHRyZWUgbmFtZSwgdHJlZSB0 eXBlKQogICBERUNMX0NPTlRFWFQgKGNvcHkpID0gREVDTF9DT05URVhUICh2YXIpOwogICBU UkVFX1VTRUQgKGNvcHkpID0gMTsKICAgREVDTF9TRUVOX0lOX0JJTkRfRVhQUl9QIChjb3B5 KSA9IDE7CisgIGlmIChWQVJfUCAodmFyKSkKKyAgICBERUNMX1BPSU5UU19UT19SRUFET05M WSAoY29weSkgPSBERUNMX1BPSU5UU19UT19SRUFET05MWSAodmFyKTsKICAgREVDTF9BVFRS SUJVVEVTIChjb3B5KSA9IERFQ0xfQVRUUklCVVRFUyAodmFyKTsKICAgaWYgKERFQ0xfVVNF Ul9BTElHTiAodmFyKSkKICAgICB7CmRpZmYgLS1naXQgYS9nY2Mvb21wLWxvdy5jYyBiL2dj Yy9vbXAtbG93LmNjCmluZGV4IDRkMDAzZjQyMDk4Li4zYzEwMjRkNTYzYSAxMDA2NDQKLS0t IGEvZ2NjL29tcC1sb3cuY2MKKysrIGIvZ2NjL29tcC1sb3cuY2MKQEAgLTE0MDAzLDYgKzE0 MDAzLDggQEAgbG93ZXJfb21wX3RhcmdldCAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaV9w LCBvbXBfY29udGV4dCAqY3R4KQogCQlpZiAocmVmX3RvX2FycmF5KQogCQkgIHggPSBmb2xk X2NvbnZlcnRfbG9jIChjbGF1c2VfbG9jLCBUUkVFX1RZUEUgKG5ld192YXIpLCB4KTsKIAkJ Z2ltcGxpZnlfZXhwciAoJngsICZuZXdfYm9keSwgTlVMTCwgaXNfZ2ltcGxlX3ZhbCwgZmJf cnZhbHVlKTsKKwkJaWYgKE9NUF9DTEFVU0VfTUFQX1BPSU5UU19UT19SRUFET05MWSAoYykg JiYgVkFSX1AgKHgpKQorCQkgIERFQ0xfUE9JTlRTX1RPX1JFQURPTkxZICh4KSA9IDE7CiAJ CWlmICgoaXNfcmVmICYmICFyZWZfdG9fYXJyYXkpCiAJCSAgICB8fCByZWZfdG9fcHRyKQog CQkgIHsKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3Jl YWRvbmx5LTEuYyBiL2djYy90ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3JlYWRvbmx5 LTEuYwppbmRleCAzMDA0NjRjOTJlMy4uODhiNmJiOWVmY2YgMTAwNjQ0Ci0tLSBhL2djYy90 ZXN0c3VpdGUvYy1jKystY29tbW9uL2dvYWNjL3JlYWRvbmx5LTEuYworKysgYi9nY2MvdGVz dHN1aXRlL2MtYysrLWNvbW1vbi9nb2FjYy9yZWFkb25seS0xLmMKQEAgLTQ4LDE3ICs0OCwx NyBAQCBpbnQgbWFpbiAodm9pZCkKIAogLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1w LXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZGVjbGFyZSBtYXBcXCh0bzp5XFwpIG1hcFxcKHJl YWRvbmx5LHRvOnNcXCkgbWFwXFwocmVhZG9ubHksdG86eFxcKSIgMSAib3JpZ2luYWwiIH0g fSAqLwogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBwYXJhbGxlbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAtOVxd K1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAt OVxdK1xcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMgfSB9IH0gfSAqLwotLyog eyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mga2Vy bmVscyBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBt YXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisg bWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCki IDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMgfSB9IH0gfSAqLwotLyogeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mgc2VyaWFsIG1hcFxcKHRv OnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5 LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25s eSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwi IHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxc W2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFts ZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxc XFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0g fSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBlbnRlciBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlc XStcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05 XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBwYXJh bGxlbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBt YXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFw XFwocHRfcmVhZG9ubHksYXR0YWNoX2RldGFjaDpzLnB0ciBcXFxbYmlhczogMFxcXF1cXCkg bWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkg bWFwXFwocHRfcmVhZG9ubHksZmlyc3Rwcml2YXRlOnggXFxcW3BvaW50ZXIgYXNzaWduLCBi aWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBr ZXJuZWxzIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4r IG1hcFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSBt YXBcXChwdF9yZWFkb25seSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFtiaWFzOiAwXFxcXVxc KSBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxc KSBtYXBcXChwdF9yZWFkb25seSxmaXJzdHByaXZhdGU6eCBcXFxbcG9pbnRlciBhc3NpZ24s IGJpYXM6IDBcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjIH0gfSB9IH0gKi8K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNj IHNlcmlhbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAu KyBtYXBcXChyZWFkb25seSx0bzpcXCpzLnB0ciBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkg bWFwXFwocHRfcmVhZG9ubHksYXR0YWNoX2RldGFjaDpzLnB0ciBcXFxbYmlhczogMFxcXF1c XCkgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1c XCkgbWFwXFwocHRfcmVhZG9ubHksZmlyc3Rwcml2YXRlOnggXFxcW3BvaW50ZXIgYXNzaWdu LCBiaWFzOiAwXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFj YyBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1h cFxcKHJlYWRvbmx5LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSBtYXBc XChwdF9yZWFkb25seSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFtiaWFzOiAwXFxcXVxcKSBt YXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIg MSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBlbnRlciBkYXRhIG1hcFxc KHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHJlYWRvbmx5 LHRvOlxcKnMucHRyIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSBtYXBcXChwdF9yZWFkb25s eSxhdHRhY2hfZGV0YWNoOnMucHRyIFxcXFtiaWFzOiAwXFxcXVxcKSBtYXBcXChyZWFkb25s eSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwi IHsgdGFyZ2V0IHsgYyB9IH0gfSB9ICovCiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHBhcmFsbGVsIG1hcFxcKHRvOnlcXFxbMFxc XF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOlxcKk5P Tl9MVkFMVUVfRVhQUiA8cy5wdHI+IFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSAuKyBtYXBc XChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAi b3JpZ2luYWwiIHsgdGFyZ2V0IHsgYysrIH0gfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGtlcm5lbHMgbWFwXFwodG86 eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHks dG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjogXFswLTlcXStcXFxdXFwp IC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxd XFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9IH0gfSAqLwotLyogeyBkZy1m aW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mgc2VyaWFsIG1h cFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIC4rIG1hcFxcKHJl YWRvbmx5LHRvOlxcKk5PTl9MVkFMVUVfRVhQUiA8cy5wdHI+IFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzp4XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05 XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFyZ2V0IHsgYysrIH0gfSB9IH0gKi8KLS8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGRh dGEgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwo cmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjogXFswLTlc XStcXFxdXFwpIC4rIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFsw LTlcXStcXFxdXFwpIiAxICJvcmlnaW5hbCIgeyB0YXJnZXQgeyBjKysgfSB9IH0gfSAqLwot LyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mg ZW50ZXIgZGF0YSBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxc KSBtYXBcXChyZWFkb25seSx0bzpcXCpOT05fTFZBTFVFX0VYUFIgPHMucHRyPiBcXFxbbGVu OiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86eFxcXFswXFxcXSBcXFxb bGVuOiBcWzAtOVxdK1xcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMrKyB9IH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBwYXJhbGxlbCBtYXBcXCh0bzp5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0r XFxcXVxcKSAuKyBtYXBcXChyZWFkb25seSx0bzpcXCpOT05fTFZBTFVFX0VYUFIgPHMucHRy PiBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwocHRfcmVhZG9ubHksYXR0YWNoX2Rl dGFjaDpzLnB0ciBcXFxbYmlhczogMFxcXF1cXCkgbWFwXFwocmVhZG9ubHksdG86eFxcXFsw XFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwocHRfcmVhZG9ubHksZmlyc3Rw cml2YXRlOnggXFxcW3BvaW50ZXIgYXNzaWduLCBiaWFzOiAwXFxcXVxcKSIgMSAib3JpZ2lu YWwiIHsgdGFyZ2V0IHsgYysrIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRy ZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGtlcm5lbHMgbWFwXFwodG86eVxcXFsw XFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisgbWFwXFwocmVhZG9ubHksdG86XFwq Tk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxc KHB0X3JlYWRvbmx5LGF0dGFjaF9kZXRhY2g6cy5wdHIgXFxcW2JpYXM6IDBcXFxdXFwpIG1h cFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1h cFxcKHB0X3JlYWRvbmx5LGZpcnN0cHJpdmF0ZTp4IFxcXFtwb2ludGVyIGFzc2lnbiwgYmlh czogMFxcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdldCB7IGMrKyB9IH0gfSB9ICovCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBz ZXJpYWwgbWFwXFwodG86eVxcXFswXFxcXSBcXFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgLisg bWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxVRV9FWFBSIDxzLnB0cj4gXFxcW2xlbjog XFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRvbmx5LGF0dGFjaF9kZXRhY2g6cy5wdHIg XFxcW2JpYXM6IDBcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xl bjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRvbmx5LGZpcnN0cHJpdmF0ZTp4IFxc XFtwb2ludGVyIGFzc2lnbiwgYmlhczogMFxcXF1cXCkiIDEgIm9yaWdpbmFsIiB7IHRhcmdl dCB7IGMrKyB9IH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHRvOnlcXFxbMFxcXF0gXFxcW2xlbjog XFswLTlcXStcXFxdXFwpIG1hcFxcKHJlYWRvbmx5LHRvOlxcKk5PTl9MVkFMVUVfRVhQUiA8 cy5wdHI+IFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSBtYXBcXChwdF9yZWFkb25seSxhdHRh Y2hfZGV0YWNoOnMucHRyIFxcXFtiaWFzOiAwXFxcXVxcKSBtYXBcXChyZWFkb25seSx0bzp4 XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKSIgMSAib3JpZ2luYWwiIHsgdGFy Z2V0IHsgYysrIH0gfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10 aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGVudGVyIGRhdGEgbWFwXFwodG86eVxcXFswXFxcXSBc XFxbbGVuOiBcWzAtOVxdK1xcXF1cXCkgbWFwXFwocmVhZG9ubHksdG86XFwqTk9OX0xWQUxV RV9FWFBSIDxzLnB0cj4gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIG1hcFxcKHB0X3JlYWRv bmx5LGF0dGFjaF9kZXRhY2g6cy5wdHIgXFxcW2JpYXM6IDBcXFxdXFwpIG1hcFxcKHJlYWRv bmx5LHRvOnhcXFxbMFxcXF0gXFxcW2xlbjogXFswLTlcXStcXFxdXFwpIiAxICJvcmlnaW5h bCIgeyB0YXJnZXQgeyBjKysgfSB9IH0gfSAqLwogCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10 cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBjYWNoZSBcXChyZWFkb25seTp4XFxc WzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKTskIiA0ICJvcmlnaW5hbCIgfSB9ICov CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFj YyBjYWNoZSBcXCh5XFxcWzBcXFxdIFxcXFtsZW46IFxbMC05XF0rXFxcXVxcKTskIiA0ICJv cmlnaW5hbCIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1v bi9nb2FjYy9yZWFkb25seS0yLmMgYi9nY2MvdGVzdHN1aXRlL2MtYysrLWNvbW1vbi9nb2Fj Yy9yZWFkb25seS0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAu LjNmNTJhOWY2YWZiCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9jLWMrKy1j b21tb24vZ29hY2MvcmVhZG9ubHktMi5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsgZGctYWRk aXRpb25hbC1vcHRpb25zICItTyAtZmR1bXAtdHJlZS1waGlwcm9wIC1mZHVtcC10cmVlLWZy ZSIgfSAqLworCisjcHJhZ21hIGFjYyByb3V0aW5lCitleHRlcm4gdm9pZCBmb28gKGludCAq cHRyLCBpbnQgdmFsKTsKKworaW50IG1haW4gKHZvaWQpCit7CisgIGludCByLCBhWzMyXTsK KyAgI3ByYWdtYSBhY2MgcGFyYWxsZWwgY29weWluKHJlYWRvbmx5OiBhWzozMl0pIGNvcHlv dXQocikKKyAgeworICAgIGZvbyAoYSwgYVs4XSk7CisgICAgciA9IGFbOF07CisgIH0KK30K Ky8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiclwuXFtfMC05XF0rID0g TUVNXFxcW1xbXl9cXStfXFswLTlcXStcXChwdHJvXFwpXFxcXVxcXFs4XFxcXTsiIDIgInBo aXByb3AxIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi clwuXFtfMC05XF0rID0gTUVNXFxcW1xbXl9cXStfXFswLTlcXStcXChwdHJvXFwpXFxcXVxc XFs4XFxcXTsiIDEgImZyZTEiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9n Zm9ydHJhbi5kZy9nb2FjYy9yZWFkb25seS0xLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvZ29hY2MvcmVhZG9ubHktMS5mOTAKaW5kZXggZmMxZTI3MTllNjcuLmNhZDQ0OWU2 ZDQwIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvYWNjL3JlYWRv bmx5LTEuZjkwCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29hY2MvcmVhZG9u bHktMS5mOTAKQEAgLTgwLDE2ICs4MCwxNiBAQCBlbmQgcHJvZ3JhbSBtYWluCiAhIFRoZSBm cm9udCBlbmQgdHVybnMgT3BlbkFDQyAnZGVjbGFyZScgaW50byBPcGVuQUNDICdkYXRhJy4K ICEgICB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFj YyBkYXRhIG1hcFxcKHJlYWRvbmx5LHRvOlxcKmJcXCkgbWFwXFwoYWxsb2M6Yi4rIG1hcFxc KHRvOlxcKmNcXCkgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9CiAhICAgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZGF0YSBt YXBcXChyZWFkb25seSx0bzpnXFwpIG1hcFxcKHRvOmhcXCkiIDEgIm9yaWdpbmFsIiB9IH0K LSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mg cGFyYWxsZWwgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6YS4rIG1hcFxc KHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0bzpcXCouKyBtYXBc XChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgcGFyYWxsZWwgbWFwXFwocmVhZG9ubHks dG86YS4rIG1hcFxcKGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpiLisgbWFwXFwoYWxs b2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0K LSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mg a2VybmVscyBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChhbGxvYzphLisgbWFwXFwo cmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxc KGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVl LWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBrZXJuZWxzIG1hcFxcKHJlYWRvbmx5LHRv OmEuKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86Yi4rIG1hcFxcKGFsbG9j OmIuKyBtYXBcXCh0bzpjLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9Ci0h IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHNl cmlhbCBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVh ZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFs bG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1 bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBzZXJpYWwgbWFwXFwocmVhZG9ubHksdG86YS4r IG1hcFxcKGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpiLisgbWFwXFwoYWxsb2M6Yi4r IG1hcFxcKHRvOmMuKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBk Zy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgZGF0YSBt YXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChhbGxvYzphLisgbWFwXFwocmVhZG9ubHks dG86XFwqLisgbWFwXFwoYWxsb2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMu KyIgMSAib3JpZ2luYWwiIH0gfQotISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHJlYWRvbmx5LHRvOmEuKyBtYXBcXChh bGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86Yi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0 bzpjLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9Ci0hIHsgZGctZmluYWwg eyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGVudGVyIGRhdGEgbWFw XFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRv OlxcKi4rIG1hcFxcKGFsbG9jOmIuKyBtYXBcXCh0bzpcXCouKyBtYXBcXChhbGxvYzpjLisi IDEgIm9yaWdpbmFsIiB9IH0KLSEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVz ICIoP24pI3ByYWdtYSBhY2MgZW50ZXIgZGF0YSBtYXBcXChyZWFkb25seSx0bzphLisgbWFw XFwoYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOmIuKyBtYXBcXChhbGxvYzpiLisgbWFw XFwodG86Yy4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBt YXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzphLisgbWFw XFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwocHRfcmVhZG9ubHksYWxsb2M6Yi4rIG1hcFxc KHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZp bmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBwYXJhbGxlbCBt YXBcXChyZWFkb25seSx0bzphLisgbWFwXFwocHRfcmVhZG9ubHksYWxsb2M6YS4rIG1hcFxc KHJlYWRvbmx5LHRvOmIuKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86 Yy4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsg c2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJhZ21hIGFjYyBrZXJuZWxzIG1hcFxcKHJl YWRvbmx5LHRvOlxcKi4rIG1hcFxcKHB0X3JlYWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFk b25seSx0bzpcXCouKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86XFwq LisgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBz Y2FuLXRyZWUtZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIGtlcm5lbHMgbWFwXFwocmVh ZG9ubHksdG86YS4rIG1hcFxcKHB0X3JlYWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFkb25s eSx0bzpiLisgbWFwXFwocHRfcmVhZG9ubHksYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBc XChhbGxvYzpjLisiIDEgIm9yaWdpbmFsIiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2Mgc2VyaWFsIG1hcFxcKHJlYWRvbmx5LHRv OlxcKi4rIG1hcFxcKHB0X3JlYWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpc XCouKyBtYXBcXChwdF9yZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86XFwqLisgbWFwXFwo YWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUt ZHVtcC10aW1lcyAiKD9uKSNwcmFnbWEgYWNjIHNlcmlhbCBtYXBcXChyZWFkb25seSx0bzph LisgbWFwXFwocHRfcmVhZG9ubHksYWxsb2M6YS4rIG1hcFxcKHJlYWRvbmx5LHRvOmIuKyBt YXBcXChwdF9yZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86Yy4rIG1hcFxcKGFsbG9jOmMu KyIgMSAib3JpZ2luYWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGlt ZXMgIig/bikjcHJhZ21hIGFjYyBkYXRhIG1hcFxcKHJlYWRvbmx5LHRvOlxcKi4rIG1hcFxc KHB0X3JlYWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChw dF9yZWFkb25seSxhbGxvYzpiLisgbWFwXFwodG86XFwqLisgbWFwXFwoYWxsb2M6Yy4rIiAx ICJvcmlnaW5hbCIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi KD9uKSNwcmFnbWEgYWNjIGRhdGEgbWFwXFwocmVhZG9ubHksdG86YS4rIG1hcFxcKHB0X3Jl YWRvbmx5LGFsbG9jOmEuKyBtYXBcXChyZWFkb25seSx0bzpiLisgbWFwXFwocHRfcmVhZG9u bHksYWxsb2M6Yi4rIG1hcFxcKHRvOmMuKyBtYXBcXChhbGxvYzpjLisiIDEgIm9yaWdpbmFs IiB9IH0KKyEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdt YSBhY2MgZW50ZXIgZGF0YSBtYXBcXChyZWFkb25seSx0bzpcXCouKyBtYXBcXChwdF9yZWFk b25seSxhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86XFwqLisgbWFwXFwocHRfcmVhZG9u bHksYWxsb2M6Yi4rIG1hcFxcKHRvOlxcKi4rIG1hcFxcKGFsbG9jOmMuKyIgMSAib3JpZ2lu YWwiIH0gfQorISB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIig/bikjcHJh Z21hIGFjYyBlbnRlciBkYXRhIG1hcFxcKHJlYWRvbmx5LHRvOmEuKyBtYXBcXChwdF9yZWFk b25seSxhbGxvYzphLisgbWFwXFwocmVhZG9ubHksdG86Yi4rIG1hcFxcKHB0X3JlYWRvbmx5 LGFsbG9jOmIuKyBtYXBcXCh0bzpjLisgbWFwXFwoYWxsb2M6Yy4rIiAxICJvcmlnaW5hbCIg fSB9CiAKICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdt YSBhY2MgY2FjaGUgXFwocmVhZG9ubHk6XFwqXFwoaW50ZWdlclxcKGtpbmQ9NFxcKVxcXFsw OlxcXF0gXFwqXFwpIHBhcm0uKmRhdGEgXFxcW2xlbjogLitcXFxdXFwpIFxcKHJlYWRvbmx5 OlxcKlxcKGludGVnZXJcXChraW5kPTRcXClcXFxbMDpcXFxdIFxcKlxcKSBwYXJtLipkYXRh IFxcXFtsZW46IC4rXFxcXVxcKTsiIDggIm9yaWdpbmFsIiB9IH0KICEgeyBkZy1maW5hbCB7 IHNjYW4tdHJlZS1kdW1wLXRpbWVzICIoP24pI3ByYWdtYSBhY2MgY2FjaGUgXFwoXFwqXFwo aW50ZWdlclxcKGtpbmQ9NFxcKVxcXFswOlxcXF0gXFwqXFwpIHBhcm0uKmRhdGEgXFxcW2xl bjogLitcXFxdXFwpOyIgOCAib3JpZ2luYWwiIH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nZm9ydHJhbi5kZy9wcjY3MTcwLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvcHI2NzE3MC5mOTAKaW5kZXggODAyMzY0NzBmNDIuLmQ3YzMzYTRjM2RiIDEwMDY0NAot LS0gYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL3ByNjcxNzAuZjkwCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvcHI2NzE3MC5mOTAKQEAgLTI4LDQgKzI4LDQgQEAgZW5k IHN1YnJvdXRpbmUgZm9vCiBlbmQgbW9kdWxlIHRlc3RfbW9kdWxlCiBlbmQgcHJvZ3JhbQog Ci0hIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiPSBcXCphcmdfXFswLTlc XStcXChEXFwpOyIgMSAiZnJlMSIgfSB9CishIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVt cC10aW1lcyAiPSBcXCphcmdfXFswLTlcXStcXChEXFwpXFwocHRyb1xcKTsiIDEgImZyZTEi IH0gfQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjIGIvZ2NjL3RyZWUt cHJldHR5LXByaW50LmNjCmluZGV4IDkyNmY3ZTAwNmE3Li42MjQxMWE5N2FiOSAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtcHJldHR5LXByaW50LmNjCisrKyBiL2djYy90cmVlLXByZXR0eS1w cmludC5jYwpAQCAtOTE1LDYgKzkxNSw4IEBAIGR1bXBfb21wX2NsYXVzZSAocHJldHR5X3By aW50ZXIgKnBwLCB0cmVlIGNsYXVzZSwgaW50IHNwYywgZHVtcF9mbGFnc190IGZsYWdzKQog ICAgICAgcHBfc3RyaW5nIChwcCwgIm1hcCgiKTsKICAgICAgIGlmIChPTVBfQ0xBVVNFX01B UF9SRUFET05MWSAoY2xhdXNlKSkKIAlwcF9zdHJpbmcgKHBwLCAicmVhZG9ubHksIik7Cisg ICAgICBpZiAoT01QX0NMQVVTRV9NQVBfUE9JTlRTX1RPX1JFQURPTkxZIChjbGF1c2UpKQor CXBwX3N0cmluZyAocHAsICJwdF9yZWFkb25seSwiKTsKICAgICAgIHN3aXRjaCAoT01QX0NM QVVTRV9NQVBfS0lORCAoY2xhdXNlKSkKIAl7CiAJY2FzZSBHT01QX01BUF9BTExPQzoKQEAg LTM2MjAsNiArMzYyMiw4IEBAIGR1bXBfZ2VuZXJpY19ub2RlIChwcmV0dHlfcHJpbnRlciAq cHAsIHRyZWUgbm9kZSwgaW50IHNwYywgZHVtcF9mbGFnc190IGZsYWdzLAogCXBwX3N0cmlu ZyAocHAsICIoRCkiKTsKICAgICAgIGlmIChTU0FfTkFNRV9PQ0NVUlNfSU5fQUJOT1JNQUxf UEhJIChub2RlKSkKIAlwcF9zdHJpbmcgKHBwLCAiKGFiKSIpOworICAgICAgaWYgKFNTQV9O QU1FX1BPSU5UU19UT19SRUFET05MWV9NRU1PUlkgKG5vZGUpKQorCXBwX3N0cmluZyAocHAs ICIocHRybykiKTsKICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBXSVRIX1NJWkVfRVhQUjoK ZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYW5hbWVzLmNjIGIvZ2NjL3RyZWUtc3NhbmFtZXMu Y2MKaW5kZXggMTc1M2E0MjFhMGIuLmNiZGY0YjExNzY5IDEwMDY0NAotLS0gYS9nY2MvdHJl ZS1zc2FuYW1lcy5jYworKysgYi9nY2MvdHJlZS1zc2FuYW1lcy5jYwpAQCAtNDAyLDYgKzQw Miw5IEBAIG1ha2Vfc3NhX25hbWVfZm4gKHN0cnVjdCBmdW5jdGlvbiAqZm4sIHRyZWUgdmFy LCBnaW1wbGUgKnN0bXQsCiAgIGVsc2UKICAgICBTU0FfTkFNRV9SQU5HRV9JTkZPICh0KSA9 IE5VTEw7CiAKKyAgaWYgKFZBUl9QICh2YXIpICYmIERFQ0xfUE9JTlRTX1RPX1JFQURPTkxZ ICh2YXIpKQorICAgIFNTQV9OQU1FX1BPSU5UU19UT19SRUFET05MWV9NRU1PUlkgKHQpID0g MTsKKwogICBTU0FfTkFNRV9JTl9GUkVFX0xJU1QgKHQpID0gMDsKICAgU1NBX05BTUVfSVNf REVGQVVMVF9ERUYgKHQpID0gMDsKICAgaW5pdF9zc2FfbmFtZV9pbW1fdXNlICh0KTsKZGlm ZiAtLWdpdCBhL2djYy90cmVlLmggYi9nY2MvdHJlZS5oCmluZGV4IGI2N2EzN2Q2NTIyLi4x YzViODgzYmM4MiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUuaAorKysgYi9nY2MvdHJlZS5oCkBA IC0xMDM2LDYgKzEwMzYsMTMgQEAgZXh0ZXJuIHZvaWQgb21wX2NsYXVzZV9yYW5nZV9jaGVj a19mYWlsZWQgKGNvbnN0X3RyZWUsIGNvbnN0IGNoYXIgKiwgaW50LAogI2RlZmluZSBERUNM X0hJRERFTl9TVFJJTkdfTEVOR1RIKE5PREUpIFwKICAgKFRSRUVfQ0hFQ0sgKE5PREUsIFBB Uk1fREVDTCktPmRlY2xfY29tbW9uLmRlY2xfbm9uc2hhcmVhYmxlX2ZsYWcpCiAKKy8qIElu IGEgVkFSX0RFQ0wsIHNldCBmb3IgdmFyaWFibGVzIHJlZ2FyZGVkIGFzIHBvaW50aW5nIHRv IG1lbW9yeSBub3Qgd3JpdHRlbgorICAgdG8uIFNTQV9OQU1FX1BPSU5UU19UT19SRUFET05M WV9NRU1PUlkgZ2V0cyBzZXQgZm9yIFNTQV9OQU1FcyBjcmVhdGVkIGZyb20KKyAgIHN1Y2gg VkFSX0RFQ0xzLiBDdXJyZW50bHkgdXNlZCBieSBPcGVuQUNDICdyZWFkb25seScgbW9kaWZp ZXIgaW4gY29weWluCisgICBjbGF1c2VzLiAgKi8KKyNkZWZpbmUgREVDTF9QT0lOVFNfVE9f UkVBRE9OTFkoTk9ERSkgXAorICAoVFJFRV9DSEVDSyAoTk9ERSwgVkFSX0RFQ0wpLT5kZWNs X2NvbW1vbi5kZWNsX25vdF9mbGV4YXJyYXkpCisKIC8qIEluIGEgQ0FMTF9FWFBSLCBtZWFu cyB0aGF0IHRoZSBjYWxsIGlzIHRoZSBqdW1wIGZyb20gYSB0aHVuayB0byB0aGUKICAgIHRo dW5rZWQtdG8gZnVuY3Rpb24uICBCZSBjYXJlZnVsIHRvIGF2b2lkIHVzaW5nIHRoaXMgbWFj cm8gd2hlbiBvbmUgb2YgdGhlCiAgICBuZXh0IHR3byBhcHBsaWVzIGluc3RlYWQuICAqLwpA QCAtMTg0NSw2ICsxODUyLDEwIEBAIGNsYXNzIGF1dG9fc3VwcHJlc3NfbG9jYXRpb25fd3Jh cHBlcnMKICNkZWZpbmUgT01QX0NMQVVTRV9NQVBfUkVBRE9OTFkoTk9ERSkgXAogICBUUkVF X1JFQURPTkxZIChPTVBfQ0xBVVNFX1NVQkNPREVfQ0hFQ0sgKE5PREUsIE9NUF9DTEFVU0Vf TUFQKSkKIAorLyogU2V0IGlmICdPTVBfQ0xBVVNFX0RFQ0wgKE5PREUpJyBwb2ludHMgdG8g cmVhZC1vbmx5IG1lbW9yeS4gICovCisjZGVmaW5lIE9NUF9DTEFVU0VfTUFQX1BPSU5UU19U T19SRUFET05MWShOT0RFKSBcCisgIFRSRUVfQ09OU1RBTlQgKE9NUF9DTEFVU0VfU1VCQ09E RV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9NQVApKQorCiAvKiBTYW1lIGFzIGFib3ZlLCBm b3IgdXNlIGluIE9wZW5BQ0MgY2FjaGUgZGlyZWN0aXZlcy4gICovCiAjZGVmaW5lIE9NUF9D TEFVU0VfX0NBQ0hFX19SRUFET05MWShOT0RFKSBcCiAgIFRSRUVfUkVBRE9OTFkgKE9NUF9D TEFVU0VfU1VCQ09ERV9DSEVDSyAoTk9ERSwgT01QX0NMQVVTRV9fQ0FDSEVfKSkK --------------00AyMZq0CZz6piV6Xkf8V7dw--