From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) by sourceware.org (Postfix) with ESMTPS id 3B4FE384F497 for ; Sat, 19 Nov 2022 02:40:18 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3B4FE384F497 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=redhat.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1668825617; h=from:from:reply-to:subject:subject: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=dfjd8NA52oniUQfYZL5KT2LxQTeqi+UXk8yaX5D6TNI=; b=bv0WTVyT7otHCV9KtKSxcX4rGo2Lst/YrfXUTO2bkj6u+oYpRM1LRBQYqFo2/cTvPvyCfJ XtnTi8KwQXjj+yKzNw+rpl5zZChR5gPOfYXHNrlUviTnUzY991o2ZdNU0Kls+9c9wsTg06 8Gi6Ky/oAuMdHvFwNoLsWUrtugKrJIU= Received: from mail-qt1-f198.google.com (mail-qt1-f198.google.com [209.85.160.198]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_128_GCM_SHA256) id us-mta-665-zEvmtsdYPFCb5ChzifcLbw-1; Fri, 18 Nov 2022 21:40:16 -0500 X-MC-Unique: zEvmtsdYPFCb5ChzifcLbw-1 Received: by mail-qt1-f198.google.com with SMTP id cm12-20020a05622a250c00b003a521f66e8eso6810310qtb.17 for ; Fri, 18 Nov 2022 18:40:16 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:references:cc:to:content-language:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=WAcAoNcoKOlUrltbnR1C4eNDpFD6fU7rGy4WB3t0ub4=; b=L2yufkNexbdm+G2ze53jV6yFJFyQj+tglXxWjARwmDsmTl7LqQxf5GQeQDwAfxtWfr eq2uC+gnCECK3bIvyyUfuIi1Vq+n+JHwQoUG4nIZNoSG7m3AYHOB7wX853BBgve0ykL1 ijXnbbLn3uhrykvrNrMTMdsaEgzSCuX2LomJHQ8pZEQ3Mo3g9E4741T/y5LWYGm2MFW6 PKHswKHbjG9Go/cem5l1bDD9+1J/uK8IK23JIupKWo/uQNYqVMyTW9aCotWq4gB9raOx 0F7/8j4mP9HFTQ38hCIHrDnZpNz8TgGPepZpobZXluPchmXUxROtuYI5ooWFPVO83VE2 ZoUg== X-Gm-Message-State: ANoB5pmug8ZLyjMm0+QvfQ9FFNTpkgKBOII7NZEJTZRWohN9N49e91Wp 9iGLXTEGPYUXS10QxJ260Ag4Ta0P70xF0ZmkAh60RrvH2HaV+w6otDKbYg5FnmPxHILK1sz/0TC cxnGoFKWoHxPyKYEKSg== X-Received: by 2002:ac8:48c7:0:b0:3a4:fe7e:8c06 with SMTP id l7-20020ac848c7000000b003a4fe7e8c06mr9525033qtr.465.1668825615858; Fri, 18 Nov 2022 18:40:15 -0800 (PST) X-Google-Smtp-Source: AA0mqf7x4XhpEfIQpWFGRLdQ8eLpXYeZoIEnaQxkXkwrhd3Qu+6FT8g1JjXIxmCt2nvkL1HDjjNTdw== X-Received: by 2002:ac8:48c7:0:b0:3a4:fe7e:8c06 with SMTP id l7-20020ac848c7000000b003a4fe7e8c06mr9525008qtr.465.1668825615389; Fri, 18 Nov 2022 18:40:15 -0800 (PST) Received: from [192.168.1.137] (130-44-159-43.s15913.c3-0.arl-cbr1.sbo-arl.ma.cable.rcncustomer.com. [130.44.159.43]) by smtp.gmail.com with ESMTPSA id p22-20020ac84096000000b0035d432f5ba3sm3137537qtl.17.2022.11.18.18.40.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Nov 2022 18:40:14 -0800 (PST) Message-ID: Date: Fri, 18 Nov 2022 21:40:13 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: [PATCH RFA] libstdc++: add experimental Contracts support To: Jonathan Wakely Cc: gcc-patches@gcc.gnu.org, libstdc++@gcc.gnu.org References: <20221103195750.2113734-1-jason@redhat.com> From: Jason Merrill In-Reply-To: X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="------------24db65Qpb2S5oYsNyjYl3ral" Content-Language: en-US X-Spam-Status: No, score=-10.8 required=5.0 tests=BAYES_00,BODY_8BITS,DKIMWL_WL_HIGH,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,NICE_REPLY_A,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H2,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. --------------24db65Qpb2S5oYsNyjYl3ral Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 11/18/22 13:17, Jonathan Wakely wrote: > On 03/11/22 15:57 -0400, Jason Merrill wrote: >> Tested x86_64-pc-linux-gnu.  OK for trunk? >> >> -- >8 -- >> >> This patch adds the library support for the experimental C++ Contracts >> implementation.  This now consists only of a default definition of the >> violation handler, which users can override through defining their own >> version.  To avoid ABI stability problems with libstdc++.so this is >> added to >> a separate -lstdc++exp static library, which the driver knows to add >> when it >> sees -fcontracts. >> >> libstdc++-v3/ChangeLog: >> >>     * acinclude.m4 (glibcxx_SUBDIRS): Add src/experimental. >>     * include/Makefile.am (experimental_headers): Add contract. >>     * include/Makefile.in: Regenerate. >>     * src/Makefile.am (SUBDIRS): Add experimental. >>     * src/Makefile.in: Regenerate. >>     * configure: Regenerate. >>     * src/experimental/contract.cc: New file. >>     * src/experimental/Makefile.am: New file. >>     * src/experimental/Makefile.in: New file. >>     * include/experimental/contract: New file. >> --- >> libstdc++-v3/src/experimental/contract.cc  |  41 ++ >> libstdc++-v3/acinclude.m4                  |   2 +- >> libstdc++-v3/include/Makefile.am           |   1 + >> libstdc++-v3/include/Makefile.in           |   1 + >> libstdc++-v3/src/Makefile.am               |   3 +- >> libstdc++-v3/src/Makefile.in               |   6 +- >> libstdc++-v3/src/experimental/Makefile.am  |  96 +++ >> libstdc++-v3/src/experimental/Makefile.in  | 796 +++++++++++++++++++++ >> libstdc++-v3/include/experimental/contract |  84 +++ >> 9 files changed, 1026 insertions(+), 4 deletions(-) >> create mode 100644 libstdc++-v3/src/experimental/contract.cc >> create mode 100644 libstdc++-v3/src/experimental/Makefile.am >> create mode 100644 libstdc++-v3/src/experimental/Makefile.in >> create mode 100644 libstdc++-v3/include/experimental/contract >> >> >> base-commit: a4cd2389276a30c39034a83d640ce68fa407bac1 >> prerequisite-patch-id: 329bc16a88dc9a3b13cd3fcecb3678826cc592dc >> >> diff --git a/libstdc++-v3/src/experimental/contract.cc >> b/libstdc++-v3/src/experimental/contract.cc >> new file mode 100644 >> index 00000000000..b9b72cd7df0 >> --- /dev/null >> +++ b/libstdc++-v3/src/experimental/contract.cc >> @@ -0,0 +1,41 @@ >> +// -*- C++ -*- std::experimental::contract_violation and friends >> +// Copyright (C) 1994-2022 Free Software Foundation, Inc. > > Copy&paste from an old file? I don't think this uses anything > existing, should be just 2022. > >> +// >> +// This file is part of GCC. >> +// >> +// GCC 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, or (at your option) >> +// any later version. >> +// >> +// GCC 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. >> +// >> +// Under Section 7 of GPL version 3, you are granted additional >> +// permissions described in the GCC Runtime Library Exception, version >> +// 3.1, as published by the Free Software Foundation. >> + >> +// You should have received a copy of the GNU General Public License and >> +// a copy of the GCC Runtime Library Exception along with this program; >> +// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see >> +// . >> + >> +#include >> +#include >> + >> +__attribute__ ((weak)) void >> +handle_contract_violation (const >> std::experimental::contract_violation &violation) >> +{ >> +  std::cerr << "default std::handle_contract_violation called: " << >> std::endl > > No need for flushing with endl here, just \n please. > >> +    << " " << violation.file_name() >> +    << " " << violation.line_number() >> +    << " " << violation.function_name() >> +    << " " << violation.comment() >> +    << " " << violation.assertion_level() >> +    << " " << violation.assertion_role() >> +    << " " << (int)violation.continuation_mode() >> +    << std::endl; > > And this will flush too, which typically isn't needed for stderr > because it's unbuffered. But somebody could have fiddled with cerr, so > doing this final flush seems OK. > >> +} >> + >> diff --git a/libstdc++-v3/acinclude.m4 b/libstdc++-v3/acinclude.m4 >> index 6f672924a73..baf01913a90 100644 >> --- a/libstdc++-v3/acinclude.m4 >> +++ b/libstdc++-v3/acinclude.m4 >> @@ -49,7 +49,7 @@ AC_DEFUN([GLIBCXX_CONFIGURE], [ >>   # Keep these sync'd with the list in Makefile.am.  The first >> provides an >>   # expandable list at autoconf time; the second provides an >> expandable list >>   # (i.e., shell variable) at configure time. >> -  m4_define([glibcxx_SUBDIRS],[include libsupc++ src src/c++98 >> src/c++11 src/c++17 src/c++20 src/filesystem src/libbacktrace doc po >> testsuite python]) >> +  m4_define([glibcxx_SUBDIRS],[include libsupc++ src src/c++98 >> src/c++11 src/c++17 src/c++20 src/filesystem src/libbacktrace >> src/experimental doc po testsuite python]) >>   SUBDIRS='glibcxx_SUBDIRS' >> >>   # These need to be absolute paths, yet at the same time need to >> diff --git a/libstdc++-v3/include/Makefile.am >> b/libstdc++-v3/include/Makefile.am >> index 96137a6621a..a6f9912cb9b 100644 >> --- a/libstdc++-v3/include/Makefile.am >> +++ b/libstdc++-v3/include/Makefile.am >> @@ -769,6 +769,7 @@ experimental_headers = \ >>     ${experimental_srcdir}/array \ >>     ${experimental_srcdir}/buffer \ >>     ${experimental_srcdir}/chrono \ >> +    ${experimental_srcdir}/contract \ >>     ${experimental_srcdir}/deque \ >>     ${experimental_srcdir}/executor \ >>     ${experimental_srcdir}/forward_list \ >> diff --git a/libstdc++-v3/src/Makefile.am b/libstdc++-v3/src/Makefile.am >> index b83c222d51d..6f08068326d 100644 >> --- a/libstdc++-v3/src/Makefile.am >> +++ b/libstdc++-v3/src/Makefile.am >> @@ -37,7 +37,7 @@ backtrace_supported_h = >> endif >> >> ## Keep this list sync'd with acinclude.m4:GLIBCXX_CONFIGURE. >> -SUBDIRS = c++98 c++11 c++17 c++20 $(filesystem_dir) $(backtrace_dir) >> +SUBDIRS = c++98 c++11 c++17 c++20 $(filesystem_dir) $(backtrace_dir) >> experimental >> >> # Cross compiler support. >> if VTV_CYGMIN >> @@ -75,6 +75,7 @@ endif >> if ENABLE_BACKTRACE >> vpath % $(top_srcdir)/src/libbacktrace >> endif >> +vpath % $(top_srcdir)/src/experimental >> >> if GLIBCXX_LDBL_COMPAT >> ldbl_compat_sources = compatibility-ldbl.cc >> diff --git a/libstdc++-v3/src/experimental/Makefile.am >> b/libstdc++-v3/src/experimental/Makefile.am >> new file mode 100644 >> index 00000000000..a1c2f62a518 >> --- /dev/null >> +++ b/libstdc++-v3/src/experimental/Makefile.am >> @@ -0,0 +1,96 @@ >> +## Makefile for experimental additions to the GNU C++ Standard library. >> +## >> +## Copyright (C) 2014-2022 Free Software Foundation, Inc. >> +## >> +## Process this file with automake to produce Makefile.in. >> +## >> +## This file is part of GCC. >> +## >> +## GCC 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, or (at your option) >> +## any later version. >> +## >> +## GCC 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 GCC; see the file COPYING3.  If not see >> +## . >> + >> +include $(top_srcdir)/fragment.am >> + >> +toolexeclib_LTLIBRARIES = libstdc++exp.la >> + >> +headers = >> + >> +sources = \ >> +    contract.cc >> + >> +# vpath % $(top_srcdir)/src/experimental >> + >> +libstdc__exp_la_SOURCES = $(sources) >> + >> +# AM_CXXFLAGS needs to be in each subdirectory so that it can be >> +# modified in a per-library or per-sub-library way.  Need to manually >> +# set this option because CONFIG_CXXFLAGS has to be after >> +# OPTIMIZE_CXXFLAGS on the compile line so that -O2 can be overridden >> +# as the occasion calls for it. >> +AM_CXXFLAGS = \ >> +    -std=gnu++17 -nostdinc++ \ >> +    $(glibcxx_lt_pic_flag) $(glibcxx_compiler_shared_flag) \ >> +    $(XTEMPLATE_FLAGS) $(VTV_CXXFLAGS) \ >> +    $(WARN_CXXFLAGS) $(OPTIMIZE_CXXFLAGS) $(CONFIG_CXXFLAGS) \ >> +    -fimplicit-templates >> + >> +AM_MAKEFLAGS = \ >> +    "gxx_include_dir=$(gxx_include_dir)" >> + >> +# Libtool notes >> + >> +# 1) In general, libtool expects an argument such as `--tag=CXX' when >> +# using the C++ compiler, because that will enable the settings >> +# detected when C++ support was being configured.  However, when no >> +# such flag is given in the command line, libtool attempts to figure >> +# it out by matching the compiler name in each configuration section >> +# against a prefix of the command line.  The problem is that, if the >> +# compiler name and its initial flags stored in the libtool >> +# configuration file don't match those in the command line, libtool >> +# can't decide which configuration to use, and it gives up.  The >> +# correct solution is to add `--tag CXX' to LTCXXCOMPILE and maybe >> +# CXXLINK, just after $(LIBTOOL), so that libtool doesn't have to >> +# attempt to infer which configuration to use. >> +# >> +# The second tag argument, `--tag disable-shared` means that libtool >> +# only compiles each source once, for static objects. In actuality, >> +# glibcxx_lt_pic_flag and glibcxx_compiler_shared_flag are added to >> +# the libtool command that is used create the object, which is >> +# suitable for shared libraries.  The `--tag disable-shared` must be >> +# placed after --tag CXX lest things CXX undo the affect of >> +# disable-shared. >> + >> +# 2) Need to explicitly set LTCXXCOMPILE so that EXTRA_CXX_FLAGS is >> +# last. (That way, things like -O2 passed down from the toplevel can >> +# be overridden by --enable-debug.) >> +LTCXXCOMPILE = \ >> +    $(LIBTOOL) --tag CXX --tag disable-shared \ >> +    $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ >> +    --mode=compile $(CXX) $(TOPLEVEL_INCLUDES) \ >> +    $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) >> $(EXTRA_CXX_FLAGS) >> + >> +LTLDFLAGS = $(shell $(SHELL) $(top_srcdir)/../libtool-ldflags >> $(LDFLAGS)) >> + >> +# 3) We'd have a problem when building the shared libstdc++ object if >> +# the rules automake generates would be used.  We cannot allow g++ to >> +# be used since this would add -lstdc++ to the link line which of >> +# course is problematic at this point.  So, we get the top-level >> +# directory to configure libstdc++-v3 to use gcc as the C++ >> +# compilation driver. >> +CXXLINK = \ >> +    $(LIBTOOL) --tag CXX --tag disable-shared \ >> +    $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \ >> +    --mode=link $(CXX) \ >> +    $(VTV_CXXLINKFLAGS) \ >> +    $(OPT_LDFLAGS) $(SECTION_LDFLAGS) $(AM_CXXFLAGS) $(LTLDFLAGS) -o $@ >> diff --git a/libstdc++-v3/include/experimental/contract >> b/libstdc++-v3/include/experimental/contract >> new file mode 100644 >> index 00000000000..16f3fd5fd5a >> --- /dev/null >> +++ b/libstdc++-v3/include/experimental/contract >> @@ -0,0 +1,82 @@ >> +// Contracts support header for -*- C++ -*- >> + >> +// Copyright (C) 1995-2022 Free Software Foundation, Inc. > > Just 2022 again (or earlier if this is based on Lock3 code contributed > earilier? but not 1995 I think!) > >> +// This file is part of GCC. >> +// >> +// GCC 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, or (at your option) >> +// any later version. >> +// >> +// GCC 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. >> +// >> +// Under Section 7 of GPL version 3, you are granted additional >> +// permissions described in the GCC Runtime Library Exception, version >> +// 3.1, as published by the Free Software Foundation. >> + >> +// You should have received a copy of the GNU General Public License and >> +// a copy of the GCC Runtime Library Exception along with this program; >> +// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see >> +// . >> + >> +/** @file contract >> + *  This is a Standard C++ Library header. >> + */ >> + >> +#ifndef _GLIBCXX_CONTRACT >> +#define _GLIBCXX_CONTRACT 1 >> + >> +#pragma GCC system_header >> + >> +#if __cplusplus >= 201703L >> + >> +#include > > This is included by so not needed here. > > OK for trunk with those tweaks, thanks. Thanks, this is what I'm pushing: --------------24db65Qpb2S5oYsNyjYl3ral Content-Type: text/x-patch; charset=UTF-8; name="0001-libstdc-add-experimental-Contracts-support.patch" Content-Disposition: attachment; filename="0001-libstdc-add-experimental-Contracts-support.patch" Content-Transfer-Encoding: base64 RnJvbSBkYjM0YjRhMDY1ZTI4NzZkNThmZjRlMDA0MGJmY2Y1NTM5NjI3N2E5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIENoYXBtYW4gSUkgPGpjaGFwbWFuQGxvY2szc29mdHdh cmUuY29tPgpEYXRlOiBUaHUsIDMgTm92IDIwMjIgMTU6NDc6MTkgLTA0MDAKU3ViamVjdDogW1BB VENIXSBsaWJzdGRjKys6IGFkZCBleHBlcmltZW50YWwgQ29udHJhY3RzIHN1cHBvcnQKVG86IGdj Yy1wYXRjaGVzQGdjYy5nbnUub3JnCgpUaGlzIHBhdGNoIGFkZHMgdGhlIGxpYnJhcnkgc3VwcG9y dCBmb3IgdGhlIGV4cGVyaW1lbnRhbCBDKysgQ29udHJhY3RzCmltcGxlbWVudGF0aW9uLiAgVGhp cyBub3cgY29uc2lzdHMgb25seSBvZiBhIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiB0aGUKdmlvbGF0 aW9uIGhhbmRsZXIsIHdoaWNoIHVzZXJzIGNhbiBvdmVycmlkZSB0aHJvdWdoIGRlZmluaW5nIHRo ZWlyIG93bgp2ZXJzaW9uLiAgVG8gYXZvaWQgQUJJIHN0YWJpbGl0eSBwcm9ibGVtcyB3aXRoIGxp YnN0ZGMrKy5zbyB0aGlzIGlzIGFkZGVkIHRvCmEgc2VwYXJhdGUgLWxzdGRjKytleHAgc3RhdGlj IGxpYnJhcnksIHdoaWNoIHRoZSBkcml2ZXIga25vd3MgdG8gYWRkIHdoZW4gaXQKc2VlcyAtZmNv bnRyYWN0cy4KCkNvLWF1dGhvcmVkLWJ5OiBBbmRyZXcgTWFybWFkdWtlIDxhbWFybWFkdWtlQGxv Y2szc29mdHdhcmUuY29tPgpDby1hdXRob3JlZC1ieTogSmFzb24gTWVycmlsbCAgPGphc29uQHJl ZGhhdC5jb20+CgpsaWJzdGRjKystdjMvQ2hhbmdlTG9nOgoKCSogYWNpbmNsdWRlLm00IChnbGli Y3h4X1NVQkRJUlMpOiBBZGQgc3JjL2V4cGVyaW1lbnRhbC4KCSogaW5jbHVkZS9NYWtlZmlsZS5h bSAoZXhwZXJpbWVudGFsX2hlYWRlcnMpOiBBZGQgY29udHJhY3QuCgkqIGluY2x1ZGUvTWFrZWZp bGUuaW46IFJlZ2VuZXJhdGUuCgkqIHNyYy9NYWtlZmlsZS5hbSAoU1VCRElSUyk6IEFkZCBleHBl cmltZW50YWwuCgkqIHNyYy9NYWtlZmlsZS5pbjogUmVnZW5lcmF0ZS4KCSogY29uZmlndXJlOiBS ZWdlbmVyYXRlLgoJKiBzcmMvZXhwZXJpbWVudGFsL2NvbnRyYWN0LmNjOiBOZXcgZmlsZS4KCSog c3JjL2V4cGVyaW1lbnRhbC9NYWtlZmlsZS5hbTogTmV3IGZpbGUuCgkqIHNyYy9leHBlcmltZW50 YWwvTWFrZWZpbGUuaW46IE5ldyBmaWxlLgoJKiBpbmNsdWRlL2V4cGVyaW1lbnRhbC9jb250cmFj dDogTmV3IGZpbGUuCi0tLQogbGlic3RkYysrLXYzL3NyYy9leHBlcmltZW50YWwvY29udHJhY3Qu Y2MgIHwgNDEgKysrKysrKysrCiBsaWJzdGRjKystdjMvYWNpbmNsdWRlLm00ICAgICAgICAgICAg ICAgICAgfCAgMiArLQogbGlic3RkYysrLXYzL2luY2x1ZGUvTWFrZWZpbGUuYW0gICAgICAgICAg IHwgIDEgKwogbGlic3RkYysrLXYzL3NyYy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAgIHwgIDMg Ky0KIGxpYnN0ZGMrKy12My9zcmMvZXhwZXJpbWVudGFsL01ha2VmaWxlLmFtICB8IDk2ICsrKysr KysrKysrKysrKysrKysrKysKIGxpYnN0ZGMrKy12My9pbmNsdWRlL2V4cGVyaW1lbnRhbC9jb250 cmFjdCB8IDgxICsrKysrKysrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0 aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJzdGRjKystdjMv c3JjL2V4cGVyaW1lbnRhbC9jb250cmFjdC5jYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYnN0ZGMr Ky12My9zcmMvZXhwZXJpbWVudGFsL01ha2VmaWxlLmFtCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli c3RkYysrLXYzL2luY2x1ZGUvZXhwZXJpbWVudGFsL2NvbnRyYWN0CgpkaWZmIC0tZ2l0IGEvbGli c3RkYysrLXYzL3NyYy9leHBlcmltZW50YWwvY29udHJhY3QuY2MgYi9saWJzdGRjKystdjMvc3Jj L2V4cGVyaW1lbnRhbC9jb250cmFjdC5jYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uYzhkMjY5N2VkZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJzdGRjKystdjMvc3Jj L2V4cGVyaW1lbnRhbC9jb250cmFjdC5jYwpAQCAtMCwwICsxLDQxIEBACisvLyAtKi0gQysrIC0q LSBzdGQ6OmV4cGVyaW1lbnRhbDo6Y29udHJhY3RfdmlvbGF0aW9uIGFuZCBmcmllbmRzCisvLyBD b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKy8v CisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHQ0MuCisvLworLy8gR0NDIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKy8vIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisvLyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAo YXQgeW91ciBvcHRpb24pCisvLyBhbnkgbGF0ZXIgdmVyc2lvbi4KKy8vCisvLyBHQ0MgaXMgZGlz dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisv LyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT ZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor Ly8KKy8vIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVyc2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQg YWRkaXRpb25hbAorLy8gcGVybWlzc2lvbnMgZGVzY3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBM aWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgorLy8gMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy ZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYW5kCisvLyBhIGNvcHkgb2Yg dGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFt OworLy8gc2VlIHRoZSBmaWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3Rp dmVseS4gIElmIG5vdCwgc2VlCisvLyA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisK KyNpbmNsdWRlIDxleHBlcmltZW50YWwvY29udHJhY3Q+CisjaW5jbHVkZSA8aW9zdHJlYW0+CisK K19fYXR0cmlidXRlX18gKCh3ZWFrKSkgdm9pZAoraGFuZGxlX2NvbnRyYWN0X3Zpb2xhdGlvbiAo Y29uc3Qgc3RkOjpleHBlcmltZW50YWw6OmNvbnRyYWN0X3Zpb2xhdGlvbiAmdmlvbGF0aW9uKQor eworICBzdGQ6OmNlcnIgPDwgImRlZmF1bHQgc3RkOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9u IGNhbGxlZDogXG4iCisgICAgPDwgIiAiIDw8IHZpb2xhdGlvbi5maWxlX25hbWUoKQorICAgIDw8 ICIgIiA8PCB2aW9sYXRpb24ubGluZV9udW1iZXIoKQorICAgIDw8ICIgIiA8PCB2aW9sYXRpb24u ZnVuY3Rpb25fbmFtZSgpCisgICAgPDwgIiAiIDw8IHZpb2xhdGlvbi5jb21tZW50KCkKKyAgICA8 PCAiICIgPDwgdmlvbGF0aW9uLmFzc2VydGlvbl9sZXZlbCgpCisgICAgPDwgIiAiIDw8IHZpb2xh dGlvbi5hc3NlcnRpb25fcm9sZSgpCisgICAgPDwgIiAiIDw8IChpbnQpdmlvbGF0aW9uLmNvbnRp bnVhdGlvbl9tb2RlKCkKKyAgICA8PCBzdGQ6OmVuZGw7Cit9CisKZGlmZiAtLWdpdCBhL2xpYnN0 ZGMrKy12My9hY2luY2x1ZGUubTQgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CmluZGV4IDZm NjcyOTI0YTczLi5iYWYwMTkxM2E5MCAxMDA2NDQKLS0tIGEvbGlic3RkYysrLXYzL2FjaW5jbHVk ZS5tNAorKysgYi9saWJzdGRjKystdjMvYWNpbmNsdWRlLm00CkBAIC00OSw3ICs0OSw3IEBAIEFD X0RFRlVOKFtHTElCQ1hYX0NPTkZJR1VSRV0sIFsKICAgIyBLZWVwIHRoZXNlIHN5bmMnZCB3aXRo IHRoZSBsaXN0IGluIE1ha2VmaWxlLmFtLiAgVGhlIGZpcnN0IHByb3ZpZGVzIGFuCiAgICMgZXhw YW5kYWJsZSBsaXN0IGF0IGF1dG9jb25mIHRpbWU7IHRoZSBzZWNvbmQgcHJvdmlkZXMgYW4gZXhw YW5kYWJsZSBsaXN0CiAgICMgKGkuZS4sIHNoZWxsIHZhcmlhYmxlKSBhdCBjb25maWd1cmUgdGlt ZS4KLSAgbTRfZGVmaW5lKFtnbGliY3h4X1NVQkRJUlNdLFtpbmNsdWRlIGxpYnN1cGMrKyBzcmMg c3JjL2MrKzk4IHNyYy9jKysxMSBzcmMvYysrMTcgc3JjL2MrKzIwIHNyYy9maWxlc3lzdGVtIHNy Yy9saWJiYWNrdHJhY2UgZG9jIHBvIHRlc3RzdWl0ZSBweXRob25dKQorICBtNF9kZWZpbmUoW2ds aWJjeHhfU1VCRElSU10sW2luY2x1ZGUgbGlic3VwYysrIHNyYyBzcmMvYysrOTggc3JjL2MrKzEx IHNyYy9jKysxNyBzcmMvYysrMjAgc3JjL2ZpbGVzeXN0ZW0gc3JjL2xpYmJhY2t0cmFjZSBzcmMv ZXhwZXJpbWVudGFsIGRvYyBwbyB0ZXN0c3VpdGUgcHl0aG9uXSkKICAgU1VCRElSUz0nZ2xpYmN4 eF9TVUJESVJTJwogCiAgICMgVGhlc2UgbmVlZCB0byBiZSBhYnNvbHV0ZSBwYXRocywgeWV0IGF0 IHRoZSBzYW1lIHRpbWUgbmVlZCB0bwpkaWZmIC0tZ2l0IGEvbGlic3RkYysrLXYzL2luY2x1ZGUv TWFrZWZpbGUuYW0gYi9saWJzdGRjKystdjMvaW5jbHVkZS9NYWtlZmlsZS5hbQppbmRleCAyN2Rm YTJiZTJmMy4uOTJiNTQ1MGZjMTQgMTAwNjQ0Ci0tLSBhL2xpYnN0ZGMrKy12My9pbmNsdWRlL01h a2VmaWxlLmFtCisrKyBiL2xpYnN0ZGMrKy12My9pbmNsdWRlL01ha2VmaWxlLmFtCkBAIC03NzAs NiArNzcwLDcgQEAgZXhwZXJpbWVudGFsX2hlYWRlcnMgPSBcCiAJJHtleHBlcmltZW50YWxfc3Jj ZGlyfS9hcnJheSBcCiAJJHtleHBlcmltZW50YWxfc3JjZGlyfS9idWZmZXIgXAogCSR7ZXhwZXJp bWVudGFsX3NyY2Rpcn0vY2hyb25vIFwKKwkke2V4cGVyaW1lbnRhbF9zcmNkaXJ9L2NvbnRyYWN0 IFwKIAkke2V4cGVyaW1lbnRhbF9zcmNkaXJ9L2RlcXVlIFwKIAkke2V4cGVyaW1lbnRhbF9zcmNk aXJ9L2V4ZWN1dG9yIFwKIAkke2V4cGVyaW1lbnRhbF9zcmNkaXJ9L2ZvcndhcmRfbGlzdCBcCmRp ZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL01ha2VmaWxlLmFtIGIvbGlic3RkYysrLXYzL3Ny Yy9NYWtlZmlsZS5hbQppbmRleCA1OWQ5OTJhMDkxYy4uMzg5NDNmMzZmYjQgMTAwNjQ0Ci0tLSBh L2xpYnN0ZGMrKy12My9zcmMvTWFrZWZpbGUuYW0KKysrIGIvbGlic3RkYysrLXYzL3NyYy9NYWtl ZmlsZS5hbQpAQCAtMzUsNyArMzUsNyBAQCBiYWNrdHJhY2VfZGlyID0KIGVuZGlmCiAKICMjIEtl ZXAgdGhpcyBsaXN0IHN5bmMnZCB3aXRoIGFjaW5jbHVkZS5tNDpHTElCQ1hYX0NPTkZJR1VSRS4K LVNVQkRJUlMgPSBjKys5OCBjKysxMSBjKysxNyBjKysyMCAkKGZpbGVzeXN0ZW1fZGlyKSAkKGJh Y2t0cmFjZV9kaXIpCitTVUJESVJTID0gYysrOTggYysrMTEgYysrMTcgYysrMjAgJChmaWxlc3lz dGVtX2RpcikgJChiYWNrdHJhY2VfZGlyKSBleHBlcmltZW50YWwKIAogIyBDcm9zcyBjb21waWxl ciBzdXBwb3J0LgogaWYgVlRWX0NZR01JTgpAQCAtNzMsNiArNzMsNyBAQCBlbmRpZgogaWYgRU5B QkxFX0JBQ0tUUkFDRQogdnBhdGggJSAkKHRvcF9zcmNkaXIpL3NyYy9saWJiYWNrdHJhY2UKIGVu ZGlmCit2cGF0aCAlICQodG9wX3NyY2Rpcikvc3JjL2V4cGVyaW1lbnRhbAogCiBpZiBHTElCQ1hY X0xEQkxfQ09NUEFUCiBsZGJsX2NvbXBhdF9zb3VyY2VzID0gY29tcGF0aWJpbGl0eS1sZGJsLmNj CmRpZmYgLS1naXQgYS9saWJzdGRjKystdjMvc3JjL2V4cGVyaW1lbnRhbC9NYWtlZmlsZS5hbSBi L2xpYnN0ZGMrKy12My9zcmMvZXhwZXJpbWVudGFsL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42NmY0NTMyYzcwNwotLS0gL2Rldi9udWxsCisrKyBi L2xpYnN0ZGMrKy12My9zcmMvZXhwZXJpbWVudGFsL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsOTYg QEAKKyMjIE1ha2VmaWxlIGZvciBleHBlcmltZW50YWwgYWRkaXRpb25zIHRvIHRoZSBHTlUgQysr IFN0YW5kYXJkIGxpYnJhcnkuCisjIworIyMgQ29weXJpZ2h0IChDKSAyMDE0LTIwMjIgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIworIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBh dXRvbWFrZSB0byBwcm9kdWNlIE1ha2VmaWxlLmluLgorIyMKKyMjIFRoaXMgZmlsZSBpcyBwYXJ0 IG9mIEdDQy4KKyMjCisjIyBHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1 dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2Vu ZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMjIHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyMjIGFu eSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjIEdDQyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMjIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMjIEdOVSBHZW5lcmFs IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgWW91IHNob3VsZCBoYXZl IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMjIGFs b25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qgc2VlCisjIyA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKK2luY2x1ZGUgJCh0b3Bfc3JjZGlyKS9mcmFn bWVudC5hbQorCit0b29sZXhlY2xpYl9MVExJQlJBUklFUyA9IGxpYnN0ZGMrK2V4cC5sYQorCito ZWFkZXJzID0KKworc291cmNlcyA9IFwKKwljb250cmFjdC5jYworCisjIHZwYXRoICUgJCh0b3Bf c3JjZGlyKS9zcmMvZXhwZXJpbWVudGFsCisKK2xpYnN0ZGNfX2V4cF9sYV9TT1VSQ0VTID0gJChz b3VyY2VzKQorCisjIEFNX0NYWEZMQUdTIG5lZWRzIHRvIGJlIGluIGVhY2ggc3ViZGlyZWN0b3J5 IHNvIHRoYXQgaXQgY2FuIGJlCisjIG1vZGlmaWVkIGluIGEgcGVyLWxpYnJhcnkgb3IgcGVyLXN1 Yi1saWJyYXJ5IHdheS4gIE5lZWQgdG8gbWFudWFsbHkKKyMgc2V0IHRoaXMgb3B0aW9uIGJlY2F1 c2UgQ09ORklHX0NYWEZMQUdTIGhhcyB0byBiZSBhZnRlcgorIyBPUFRJTUlaRV9DWFhGTEFHUyBv biB0aGUgY29tcGlsZSBsaW5lIHNvIHRoYXQgLU8yIGNhbiBiZSBvdmVycmlkZGVuCisjIGFzIHRo ZSBvY2Nhc2lvbiBjYWxscyBmb3IgaXQuCitBTV9DWFhGTEFHUyA9IFwKKwktc3RkPWdudSsrMTcg LW5vc3RkaW5jKysgXAorCSQoZ2xpYmN4eF9sdF9waWNfZmxhZykgJChnbGliY3h4X2NvbXBpbGVy X3NoYXJlZF9mbGFnKSBcCisJJChYVEVNUExBVEVfRkxBR1MpICQoVlRWX0NYWEZMQUdTKSBcCisJ JChXQVJOX0NYWEZMQUdTKSAkKE9QVElNSVpFX0NYWEZMQUdTKSAkKENPTkZJR19DWFhGTEFHUykg XAorCS1maW1wbGljaXQtdGVtcGxhdGVzCisKK0FNX01BS0VGTEFHUyA9IFwKKwkiZ3h4X2luY2x1 ZGVfZGlyPSQoZ3h4X2luY2x1ZGVfZGlyKSIKKworIyBMaWJ0b29sIG5vdGVzCisKKyMgMSkgSW4g Z2VuZXJhbCwgbGlidG9vbCBleHBlY3RzIGFuIGFyZ3VtZW50IHN1Y2ggYXMgYC0tdGFnPUNYWCcg d2hlbgorIyB1c2luZyB0aGUgQysrIGNvbXBpbGVyLCBiZWNhdXNlIHRoYXQgd2lsbCBlbmFibGUg dGhlIHNldHRpbmdzCisjIGRldGVjdGVkIHdoZW4gQysrIHN1cHBvcnQgd2FzIGJlaW5nIGNvbmZp Z3VyZWQuICBIb3dldmVyLCB3aGVuIG5vCisjIHN1Y2ggZmxhZyBpcyBnaXZlbiBpbiB0aGUgY29t bWFuZCBsaW5lLCBsaWJ0b29sIGF0dGVtcHRzIHRvIGZpZ3VyZQorIyBpdCBvdXQgYnkgbWF0Y2hp bmcgdGhlIGNvbXBpbGVyIG5hbWUgaW4gZWFjaCBjb25maWd1cmF0aW9uIHNlY3Rpb24KKyMgYWdh aW5zdCBhIHByZWZpeCBvZiB0aGUgY29tbWFuZCBsaW5lLiAgVGhlIHByb2JsZW0gaXMgdGhhdCwg aWYgdGhlCisjIGNvbXBpbGVyIG5hbWUgYW5kIGl0cyBpbml0aWFsIGZsYWdzIHN0b3JlZCBpbiB0 aGUgbGlidG9vbAorIyBjb25maWd1cmF0aW9uIGZpbGUgZG9uJ3QgbWF0Y2ggdGhvc2UgaW4gdGhl IGNvbW1hbmQgbGluZSwgbGlidG9vbAorIyBjYW4ndCBkZWNpZGUgd2hpY2ggY29uZmlndXJhdGlv biB0byB1c2UsIGFuZCBpdCBnaXZlcyB1cC4gIFRoZQorIyBjb3JyZWN0IHNvbHV0aW9uIGlzIHRv IGFkZCBgLS10YWcgQ1hYJyB0byBMVENYWENPTVBJTEUgYW5kIG1heWJlCisjIENYWExJTkssIGp1 c3QgYWZ0ZXIgJChMSUJUT09MKSwgc28gdGhhdCBsaWJ0b29sIGRvZXNuJ3QgaGF2ZSB0bworIyBh dHRlbXB0IHRvIGluZmVyIHdoaWNoIGNvbmZpZ3VyYXRpb24gdG8gdXNlLgorIworIyBUaGUgc2Vj b25kIHRhZyBhcmd1bWVudCwgYC0tdGFnIGRpc2FibGUtc2hhcmVkYCBtZWFucyB0aGF0IGxpYnRv b2wKKyMgb25seSBjb21waWxlcyBlYWNoIHNvdXJjZSBvbmNlLCBmb3Igc3RhdGljIG9iamVjdHMu IEluIGFjdHVhbGl0eSwKKyMgZ2xpYmN4eF9sdF9waWNfZmxhZyBhbmQgZ2xpYmN4eF9jb21waWxl cl9zaGFyZWRfZmxhZyBhcmUgYWRkZWQgdG8KKyMgdGhlIGxpYnRvb2wgY29tbWFuZCB0aGF0IGlz IHVzZWQgY3JlYXRlIHRoZSBvYmplY3QsIHdoaWNoIGlzCisjIHN1aXRhYmxlIGZvciBzaGFyZWQg bGlicmFyaWVzLiAgVGhlIGAtLXRhZyBkaXNhYmxlLXNoYXJlZGAgbXVzdCBiZQorIyBwbGFjZWQg YWZ0ZXIgLS10YWcgQ1hYIGxlc3QgdGhpbmdzIENYWCB1bmRvIHRoZSBhZmZlY3Qgb2YKKyMgZGlz YWJsZS1zaGFyZWQuCisKKyMgMikgTmVlZCB0byBleHBsaWNpdGx5IHNldCBMVENYWENPTVBJTEUg c28gdGhhdCBFWFRSQV9DWFhfRkxBR1MgaXMKKyMgbGFzdC4gKFRoYXQgd2F5LCB0aGluZ3MgbGlr ZSAtTzIgcGFzc2VkIGRvd24gZnJvbSB0aGUgdG9wbGV2ZWwgY2FuCisjIGJlIG92ZXJyaWRkZW4g YnkgLS1lbmFibGUtZGVidWcuKQorTFRDWFhDT01QSUxFID0gXAorCSQoTElCVE9PTCkgLS10YWcg Q1hYIC0tdGFnIGRpc2FibGUtc2hhcmVkIFwKKwkkKEFNX0xJQlRPT0xGTEFHUykgJChMSUJUT09M RkxBR1MpIFwKKwktLW1vZGU9Y29tcGlsZSAkKENYWCkgJChUT1BMRVZFTF9JTkNMVURFUykgXAor CSQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpICQoQU1fQ1hYRkxBR1MpICQoQ1hYRkxBR1MpICQo RVhUUkFfQ1hYX0ZMQUdTKQorCitMVExERkxBR1MgPSAkKHNoZWxsICQoU0hFTEwpICQodG9wX3Ny Y2RpcikvLi4vbGlidG9vbC1sZGZsYWdzICQoTERGTEFHUykpCisKKyMgMykgV2UnZCBoYXZlIGEg cHJvYmxlbSB3aGVuIGJ1aWxkaW5nIHRoZSBzaGFyZWQgbGlic3RkYysrIG9iamVjdCBpZgorIyB0 aGUgcnVsZXMgYXV0b21ha2UgZ2VuZXJhdGVzIHdvdWxkIGJlIHVzZWQuICBXZSBjYW5ub3QgYWxs b3cgZysrIHRvCisjIGJlIHVzZWQgc2luY2UgdGhpcyB3b3VsZCBhZGQgLWxzdGRjKysgdG8gdGhl IGxpbmsgbGluZSB3aGljaCBvZgorIyBjb3Vyc2UgaXMgcHJvYmxlbWF0aWMgYXQgdGhpcyBwb2lu dC4gIFNvLCB3ZSBnZXQgdGhlIHRvcC1sZXZlbAorIyBkaXJlY3RvcnkgdG8gY29uZmlndXJlIGxp YnN0ZGMrKy12MyB0byB1c2UgZ2NjIGFzIHRoZSBDKysKKyMgY29tcGlsYXRpb24gZHJpdmVyLgor Q1hYTElOSyA9IFwKKwkkKExJQlRPT0wpIC0tdGFnIENYWCAtLXRhZyBkaXNhYmxlLXNoYXJlZCBc CisJJChBTV9MSUJUT09MRkxBR1MpICQoTElCVE9PTEZMQUdTKSBcCisJLS1tb2RlPWxpbmsgJChD WFgpIFwKKwkkKFZUVl9DWFhMSU5LRkxBR1MpIFwKKwkkKE9QVF9MREZMQUdTKSAkKFNFQ1RJT05f TERGTEFHUykgJChBTV9DWFhGTEFHUykgJChMVExERkxBR1MpIC1vICRACmRpZmYgLS1naXQgYS9s aWJzdGRjKystdjMvaW5jbHVkZS9leHBlcmltZW50YWwvY29udHJhY3QgYi9saWJzdGRjKystdjMv aW5jbHVkZS9leHBlcmltZW50YWwvY29udHJhY3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmNmNjU1MDIzZGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGlic3RkYysrLXYz L2luY2x1ZGUvZXhwZXJpbWVudGFsL2NvbnRyYWN0CkBAIC0wLDAgKzEsODEgQEAKKy8vIENvbnRy YWN0cyBzdXBwb3J0IGhlYWRlciBmb3IgLSotIEMrKyAtKi0KKworLy8gQ29weXJpZ2h0IChDKSAy MDE5LTIwMjIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisvLworLy8gVGhpcyBmaWxl IGlzIHBhcnQgb2YgR0NDLgorLy8KKy8vIEdDQyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl ZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisvLyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorLy8gdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9u KQorLy8gYW55IGxhdGVyIHZlcnNpb24uCisvLworLy8gR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisvLyBidXQgV0lUSE9VVCBBTlkgV0FSUkFO VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorLy8gTUVSQ0hBTlRBQklM SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorLy8gR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKy8vCisvLyBVbmRlciBT ZWN0aW9uIDcgb2YgR1BMIHZlcnNpb24gMywgeW91IGFyZSBncmFudGVkIGFkZGl0aW9uYWwKKy8v IHBlcm1pc3Npb25zIGRlc2NyaWJlZCBpbiB0aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRp b24sIHZlcnNpb24KKy8vIDMuMSwgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv dW5kYXRpb24uCisKKy8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO VSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFuZAorLy8gYSBjb3B5IG9mIHRoZSBHQ0MgUnVudGlt ZSBMaWJyYXJ5IEV4Y2VwdGlvbiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsKKy8vIHNlZSB0aGUg ZmlsZXMgQ09QWUlORzMgYW5kIENPUFlJTkcuUlVOVElNRSByZXNwZWN0aXZlbHkuICBJZiBub3Qs IHNlZQorLy8gPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisvKiogQGZpbGUgY29u dHJhY3QKKyAqICBUaGlzIGlzIGEgU3RhbmRhcmQgQysrIExpYnJhcnkgaGVhZGVyLgorICovCisK KyNpZm5kZWYgX0dMSUJDWFhfQ09OVFJBQ1QKKyNkZWZpbmUgX0dMSUJDWFhfQ09OVFJBQ1QgMQor CisjcHJhZ21hIEdDQyBzeXN0ZW1faGVhZGVyCisKKyNpZiBfX2NwbHVzcGx1cyA+PSAyMDE3MDNM CisKKyNpbmNsdWRlIDxzdHJpbmdfdmlldz4KKyNpbmNsdWRlIDxjc3RkaW50PgorCituYW1lc3Bh Y2Ugc3RkIF9HTElCQ1hYX1ZJU0lCSUxJVFkoZGVmYXVsdCkKK3sKK19HTElCQ1hYX0JFR0lOX05B TUVTUEFDRV9WRVJTSU9OCisKK25hbWVzcGFjZSBleHBlcmltZW50YWwKK3sKKyAgLy8gRnJvbSBQ MTMzMgorICBlbnVtIGNsYXNzIGNvbnRyYWN0X3Zpb2xhdGlvbl9jb250aW51YXRpb25fbW9kZSB7 CisgICAgTkVWRVJfQ09OVElOVUUsIE1BWUJFX0NPTlRJTlVFCisgIH07CisKKyAgY2xhc3MgY29u dHJhY3RfdmlvbGF0aW9uIHsKKyAgICBjb25zdCBjaGFyKiBfTV9maWxlOworICAgIGNvbnN0IGNo YXIqIF9NX2Z1bmN0aW9uOworICAgIGNvbnN0IGNoYXIqIF9NX2NvbW1lbnQ7CisgICAgY29uc3Qg Y2hhciogX01fbGV2ZWw7CisgICAgY29uc3QgY2hhciogX01fcm9sZTsKKyAgICB1aW50X2xlYXN0 MzJfdCBfTV9saW5lOworICAgIHNpZ25lZCBjaGFyIF9NX2NvbnRpbnVlOworICBwdWJsaWM6Cisg ICAgLy8gRnJvbSBONDgyMAorICAgIHVpbnRfbGVhc3QzMl90IGxpbmVfbnVtYmVyKCkgY29uc3Qg bm9leGNlcHQgeyByZXR1cm4gX01fbGluZTsgfQorICAgIHN0cmluZ192aWV3IGZpbGVfbmFtZSgp IGNvbnN0IG5vZXhjZXB0IHsgcmV0dXJuIF9NX2ZpbGU7IH0KKyAgICBzdHJpbmdfdmlldyBmdW5j dGlvbl9uYW1lKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fZnVuY3Rpb247IH0KKyAgICBz dHJpbmdfdmlldyBjb21tZW50KCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fY29tbWVudDsg fQorICAgIHN0cmluZ192aWV3IGFzc2VydGlvbl9sZXZlbCgpIGNvbnN0IG5vZXhjZXB0IHsgcmV0 dXJuIF9NX2xldmVsOyB9CisgICAgLy8gRnJvbSBQMTMzMgorICAgIHN0cmluZ192aWV3IGFzc2Vy dGlvbl9yb2xlKCkgY29uc3Qgbm9leGNlcHQgeyByZXR1cm4gX01fcm9sZTsgfQorICAgIGNvbnRy YWN0X3Zpb2xhdGlvbl9jb250aW51YXRpb25fbW9kZSBjb250aW51YXRpb25fbW9kZSgpIGNvbnN0 IG5vZXhjZXB0CisgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y29udHJhY3RfdmlvbGF0aW9uX2Nv bnRpbnVhdGlvbl9tb2RlPihfTV9jb250aW51ZSk7IH0KKyAgfTsKKworfSAvLyBuYW1lc3BhY2Ug ZXhwZXJpbWVudGFsCisKK19HTElCQ1hYX0VORF9OQU1FU1BBQ0VfVkVSU0lPTgorfSAvLyBuYW1l c3BhY2Ugc3RkCisKKy8vIFRvIG92ZXJyaWRlIHRoZSBjb250cmFjdCB2aW9sYXRpb24gaGFuZGxl ciwgZGVmaW5lCisvL3ZvaWQgOjpoYW5kbGVfY29udHJhY3RfdmlvbGF0aW9uIChjb25zdCBzdGQ6 OmV4cGVyaW1lbnRhbDo6Y29udHJhY3RfdmlvbGF0aW9uICYpOworCisjZW5kaWYgLy8gQysrMTcK KyNlbmRpZiAvLyBfR0xJQkNYWF9DT05UUkFDVAotLSAKMi4zMS4xCgo= --------------24db65Qpb2S5oYsNyjYl3ral--